1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
|
package inference
import (
"reflect"
"testing"
"github.com/vercel/turbo/cli/internal/fs"
)
func getFrameworkBySlug(slug string) *Framework {
for _, framework := range _frameworks {
if framework.Slug == slug {
return &framework
}
}
panic("that framework doesn't exist")
}
func TestInferFramework(t *testing.T) {
tests := []struct {
name string
pkg *fs.PackageJSON
want *Framework
}{
{
name: "Hello world",
pkg: nil,
want: nil,
},
{
name: "Empty dependencies",
pkg: &fs.PackageJSON{UnresolvedExternalDeps: map[string]string{}},
want: nil,
},
{
name: "Finds Blitz",
pkg: &fs.PackageJSON{UnresolvedExternalDeps: map[string]string{
"blitz": "*",
}},
want: getFrameworkBySlug("blitzjs"),
},
{
name: "Order is preserved (returns blitz, not next)",
pkg: &fs.PackageJSON{UnresolvedExternalDeps: map[string]string{
"blitz": "*",
"next": "*",
}},
want: getFrameworkBySlug("blitzjs"),
},
{
name: "Finds next without blitz",
pkg: &fs.PackageJSON{UnresolvedExternalDeps: map[string]string{
"next": "*",
}},
want: getFrameworkBySlug("nextjs"),
},
{
name: "match strategy of all works (solid)",
pkg: &fs.PackageJSON{UnresolvedExternalDeps: map[string]string{
"solid-js": "*",
"solid-start": "*",
}},
want: getFrameworkBySlug("solidstart"),
},
{
name: "match strategy of some works (nuxt)",
pkg: &fs.PackageJSON{UnresolvedExternalDeps: map[string]string{
"nuxt3": "*",
}},
want: getFrameworkBySlug("nuxtjs"),
},
{
name: "match strategy of some works (c-r-a)",
pkg: &fs.PackageJSON{UnresolvedExternalDeps: map[string]string{
"react-scripts": "*",
}},
want: getFrameworkBySlug("create-react-app"),
},
{
name: "Finds next in non monorepo",
pkg: &fs.PackageJSON{
Dependencies: map[string]string{
"next": "*",
},
Workspaces: []string{},
},
want: getFrameworkBySlug("nextjs"),
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
if got := InferFramework(tt.pkg); !reflect.DeepEqual(got, tt.want) {
t.Errorf("InferFramework() = %v, want %v", got, tt.want)
}
})
}
}
|