@@ -18,6 +18,7 @@ package cores
18
18
import (
19
19
"testing"
20
20
21
+ "github.com/arduino/arduino-cli/arduino/resources"
21
22
"github.com/stretchr/testify/require"
22
23
)
23
24
@@ -26,71 +27,147 @@ func TestFlavorCompatibility(t *testing.T) {
26
27
Os string
27
28
Arch string
28
29
}
29
- windowsi386 := &os{"windows", "386"}
30
- windowsx8664 := &os{"windows", "amd64"}
31
- linuxi386 := &os{"linux", "386"}
32
- linuxamd64 := &os{"linux", "amd64"}
33
- linuxarm := &os{"linux", "arm"}
34
- linuxarmbe := &os{"linux", "armbe"}
35
- linuxarm64 := &os{"linux", "arm64"}
36
- darwini386 := &os{"darwin", "386"}
37
- darwinamd64 := &os{"darwin", "amd64"}
38
- freebsdi386 := &os{"freebsd", "386"}
39
- freebsdamd64 := &os{"freebsd", "amd64"}
30
+ windows32 := &os{"windows", "386"}
31
+ windows64 := &os{"windows", "amd64"}
32
+ linux32 := &os{"linux", "386"}
33
+ linux64 := &os{"linux", "amd64"}
34
+ linuxArm := &os{"linux", "arm"}
35
+ linuxArmbe := &os{"linux", "armbe"}
36
+ linuxArm64 := &os{"linux", "arm64"}
37
+ darwin32 := &os{"darwin", "386"}
38
+ darwin64 := &os{"darwin", "amd64"}
39
+ darwinArm64 := &os{"darwin", "arm64"}
40
+ freebsd32 := &os{"freebsd", "386"}
41
+ freebsd64 := &os{"freebsd", "amd64"}
40
42
oses := []*os{
41
- windowsi386,
42
- windowsx8664,
43
- linuxi386,
44
- linuxamd64,
45
- linuxarm,
46
- linuxarmbe,
47
- linuxarm64,
48
- darwini386,
49
- darwinamd64,
50
- freebsdi386,
51
- freebsdamd64,
43
+ windows32,
44
+ windows64,
45
+ linux32,
46
+ linux64,
47
+ linuxArm,
48
+ linuxArmbe,
49
+ linuxArm64,
50
+ darwin32,
51
+ darwin64,
52
+ darwinArm64,
53
+ freebsd32,
54
+ freebsd64,
52
55
}
53
56
54
57
type test struct {
55
- Flavour *Flavor
56
- Positives []*os
58
+ Flavour *Flavor
59
+ Compatibles []*os
60
+ ExactMatch []*os
57
61
}
58
62
tests := []*test{
59
- {&Flavor{OS: "i686-mingw32"}, []*os{windowsi386, windowsx8664}},
60
- {&Flavor{OS: "i386-apple-darwin11"}, []*os{darwini386, darwinamd64}},
61
- {&Flavor{OS: "x86_64-apple-darwin"}, []*os{darwinamd64}},
63
+ {&Flavor{OS: "i686-mingw32"}, []*os{windows32, windows64}, []*os{windows32}},
64
+ {&Flavor{OS: "x86_64-mingw32"}, []*os{windows64}, []*os{windows64}},
65
+ {&Flavor{OS: "i386-apple-darwin11"}, []*os{darwin32, darwin64, darwinArm64}, []*os{darwin32}},
66
+ {&Flavor{OS: "x86_64-apple-darwin"}, []*os{darwin64, darwinArm64}, []*os{darwin64}},
67
+ {&Flavor{OS: "arm64-apple-darwin"}, []*os{darwinArm64}, []*os{darwinArm64}},
62
68
63
69
// Raspberry PI, BBB or other ARM based host
64
70
// PI: "arm-linux-gnueabihf"
65
71
// Raspbian on PI2: "arm-linux-gnueabihf"
66
72
// Ubuntu Mate on PI2: "arm-linux-gnueabihf"
67
73
// Debian 7.9 on BBB: "arm-linux-gnueabihf"
68
74
// Raspbian on PI Zero: "arm-linux-gnueabihf"
69
- {&Flavor{OS: "arm-linux-gnueabihf"}, []*os{linuxarm, linuxarmbe }},
75
+ {&Flavor{OS: "arm-linux-gnueabihf"}, []*os{linuxArm, linuxArmbe}, []*os{linuxArm, linuxArmbe }},
70
76
// Arch-linux on PI2: "armv7l-unknown-linux-gnueabihf"
71
- {&Flavor{OS: "armv7l-unknown-linux-gnueabihf"}, []*os{linuxarm, linuxarmbe }},
77
+ {&Flavor{OS: "armv7l-unknown-linux-gnueabihf"}, []*os{linuxArm, linuxArmbe}, []*os{linuxArm, linuxArmbe }},
72
78
73
- {&Flavor{OS: "i686-linux-gnu"}, []*os{linuxi386 }},
74
- {&Flavor{OS: "i686-pc-linux-gnu"}, []*os{linuxi386 }},
75
- {&Flavor{OS: "x86_64-linux-gnu"}, []*os{linuxamd64 }},
76
- {&Flavor{OS: "x86_64-pc-linux-gnu"}, []*os{linuxamd64 }},
77
- {&Flavor{OS: "aarch64-linux-gnu"}, []*os{linuxarm64 }},
78
- {&Flavor{OS: "arm64-linux-gnu"}, []*os{linuxarm64 }},
79
+ {&Flavor{OS: "i686-linux-gnu"}, []*os{linux32}, []*os{linux32 }},
80
+ {&Flavor{OS: "i686-pc-linux-gnu"}, []*os{linux32}, []*os{linux32 }},
81
+ {&Flavor{OS: "x86_64-linux-gnu"}, []*os{linux64}, []*os{linux64 }},
82
+ {&Flavor{OS: "x86_64-pc-linux-gnu"}, []*os{linux64}, []*os{linux64 }},
83
+ {&Flavor{OS: "aarch64-linux-gnu"}, []*os{linuxArm64}, []*os{linuxArm64 }},
84
+ {&Flavor{OS: "arm64-linux-gnu"}, []*os{linuxArm64}, []*os{linuxArm64 }},
79
85
}
80
86
81
- check := func(test *test, os *os) {
82
- for _, positiveOs := range test.Positives {
87
+ checkCompatible := func(test *test, os *os) {
88
+ // if the os is in the "positive" set iCompatibleWith must return true...
89
+ res, _ := test.Flavour.isCompatibleWith(os.Os, os.Arch)
90
+ for _, compatibleOs := range test.Compatibles {
91
+ if compatibleOs == os {
92
+ require.True(t, res, "'%s' tag compatible with '%s,%s' pair", test.Flavour.OS, os.Os, os.Arch)
93
+ return
94
+ }
95
+ }
96
+ // ...otherwise false
97
+ require.False(t, res, "'%s' tag compatible with '%s,%s' pair", test.Flavour.OS, os.Os, os.Arch)
98
+ }
99
+ checkExactMatch := func(test *test, os *os) {
100
+ // if the os is in the "positive" set iExactMatchWith must return true...
101
+ for _, positiveOs := range test.ExactMatch {
83
102
if positiveOs == os {
84
- require.True(t, test.Flavour.isCompatibleWith (os.Os, os.Arch), "'%s' tag compatible with '%s,%s' pair", test.Flavour.OS, os.Os, os.Arch)
103
+ require.True(t, test.Flavour.isExactMatchWith (os.Os, os.Arch), "'%s' tag exact match with '%s,%s' pair", test.Flavour.OS, os.Os, os.Arch)
85
104
return
86
105
}
87
106
}
88
- require.False(t, test.Flavour.isCompatibleWith(os.Os, os.Arch), "'%s' tag compatible with '%s,%s' pair", test.Flavour.OS, os.Os, os.Arch)
107
+ // ...otherwise false
108
+ require.False(t, test.Flavour.isExactMatchWith(os.Os, os.Arch), "'%s' tag exact match with '%s,%s' pair", test.Flavour.OS, os.Os, os.Arch)
89
109
}
90
110
91
111
for _, test := range tests {
92
112
for _, os := range oses {
93
- check(test, os)
113
+ checkCompatible(test, os)
114
+ checkExactMatch(test, os)
94
115
}
95
116
}
96
117
}
118
+
119
+ func TestFlavorPrioritySelection(t *testing.T) {
120
+ res := (&ToolRelease{
121
+ Flavors: []*Flavor{
122
+ {OS: "i386-apple-darwin11", Resource: &resources.DownloadResource{ArchiveFileName: "1"}},
123
+ {OS: "x86_64-apple-darwin", Resource: &resources.DownloadResource{ArchiveFileName: "2"}},
124
+ {OS: "arm64-apple-darwin", Resource: &resources.DownloadResource{ArchiveFileName: "3"}},
125
+ },
126
+ }).GetFlavourCompatibleWith("darwin", "arm64")
127
+ require.NotNil(t, res)
128
+ require.Equal(t, "3", res.ArchiveFileName)
129
+
130
+ res = (&ToolRelease{
131
+ Flavors: []*Flavor{
132
+ {OS: "i386-apple-darwin11", Resource: &resources.DownloadResource{ArchiveFileName: "1"}},
133
+ {OS: "x86_64-apple-darwin", Resource: &resources.DownloadResource{ArchiveFileName: "2"}},
134
+ },
135
+ }).GetFlavourCompatibleWith("darwin", "arm64")
136
+ require.NotNil(t, res)
137
+ require.Equal(t, "2", res.ArchiveFileName)
138
+
139
+ res = (&ToolRelease{
140
+ Flavors: []*Flavor{
141
+ {OS: "x86_64-apple-darwin", Resource: &resources.DownloadResource{ArchiveFileName: "2"}},
142
+ {OS: "i386-apple-darwin11", Resource: &resources.DownloadResource{ArchiveFileName: "1"}},
143
+ },
144
+ }).GetFlavourCompatibleWith("darwin", "arm64")
145
+ require.NotNil(t, res)
146
+ require.Equal(t, "2", res.ArchiveFileName)
147
+
148
+ res = (&ToolRelease{
149
+ Flavors: []*Flavor{
150
+ {OS: "i386-apple-darwin11", Resource: &resources.DownloadResource{ArchiveFileName: "1"}},
151
+ },
152
+ }).GetFlavourCompatibleWith("darwin", "arm64")
153
+ require.NotNil(t, res)
154
+ require.Equal(t, "1", res.ArchiveFileName)
155
+
156
+ res = (&ToolRelease{
157
+ Flavors: []*Flavor{
158
+ {OS: "i686-mingw32", Resource: &resources.DownloadResource{ArchiveFileName: "1"}},
159
+ {OS: "x86_64-mingw32", Resource: &resources.DownloadResource{ArchiveFileName: "2"}},
160
+ },
161
+ }).GetFlavourCompatibleWith("windows", "amd64")
162
+ require.NotNil(t, res)
163
+ require.Equal(t, "2", res.ArchiveFileName)
164
+
165
+ res = (&ToolRelease{
166
+ Flavors: []*Flavor{
167
+ {OS: "x86_64-mingw32", Resource: &resources.DownloadResource{ArchiveFileName: "2"}},
168
+ {OS: "i686-mingw32", Resource: &resources.DownloadResource{ArchiveFileName: "1"}},
169
+ },
170
+ }).GetFlavourCompatibleWith("windows", "amd64")
171
+ require.NotNil(t, res)
172
+ require.Equal(t, "2", res.ArchiveFileName)
173
+ }
0 commit comments