Skip to content

Commit 276774e

Browse files
committed
Provide object-level packages[].platforms[].boards[] package index data to rules
Data checking rules for package indexes need to iterate over its object-level components. To facilitate this, slices of such objects accompanied by the necessary metadata are generated as package index project data. This was already done for packages, platforms, and tools, but not for boards. Although board objects are trivial, this seems like it will provide for cleaner rule functions that apply to to these objects than the alternative of generating the data on a per-rule basis.
1 parent 5ef2649 commit 276774e

File tree

4 files changed

+205
-0
lines changed

4 files changed

+205
-0
lines changed

Diff for: internal/project/projectdata/packageindex.go

+12
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ func InitializeForPackageIndex() {
4141

4242
packageIndexPackages = nil
4343
packageIndexPlatforms = nil
44+
packageIndexBoards = nil
4445
packageIndexTools = nil
4546
packageIndexSystems = nil
4647
packageIndexSchemaValidationResult = nil
@@ -51,6 +52,10 @@ func InitializeForPackageIndex() {
5152
packageIndexPlatforms = append(packageIndexPlatforms, getPackageIndexData(packageData.Object, packageData.JSONPointer, "platforms", packageData.ID+":", "architecture", "version")...)
5253
}
5354

55+
for _, platformData := range PackageIndexPlatforms() {
56+
packageIndexBoards = append(packageIndexBoards, getPackageIndexData(platformData.Object, platformData.JSONPointer, "boards", platformData.ID+" - ", "name", "")...)
57+
}
58+
5459
for _, packageData := range PackageIndexPackages() {
5560
packageIndexTools = append(packageIndexTools, getPackageIndexData(packageData.Object, packageData.JSONPointer, "tools", packageData.ID+":", "name", "version")...)
5661
}
@@ -98,6 +103,13 @@ func PackageIndexPlatforms() []PackageIndexData {
98103
return packageIndexPlatforms
99104
}
100105

106+
var packageIndexBoards []PackageIndexData
107+
108+
// PackageIndexBoards returns the slice of board data for the package index.
109+
func PackageIndexBoards() []PackageIndexData {
110+
return packageIndexBoards
111+
}
112+
101113
var packageIndexTools []PackageIndexData
102114

103115
// PackageIndexTools returns the slice of tool data for the package index.

Diff for: internal/project/projectdata/packageindex_test.go

+141
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,8 @@ func TestInitializeForPackageIndex(t *testing.T) {
4545
packageIndexPackagesDataAssertion []PackageIndexData
4646
packageIndexPlatformsAssertion assert.ValueAssertionFunc
4747
packageIndexPlatformsDataAssertion []PackageIndexData
48+
packageIndexBoardsAssertion assert.ValueAssertionFunc
49+
packageIndexBoardsDataAssertion []PackageIndexData
4850
packageIndexToolsAssertion assert.ValueAssertionFunc
4951
packageIndexToolsDataAssertion []PackageIndexData
5052
packageIndexSystemsAssertion assert.ValueAssertionFunc
@@ -87,6 +89,41 @@ func TestInitializeForPackageIndex(t *testing.T) {
8789
JSONPointer: "/packages/1/platforms/1",
8890
},
8991
},
92+
packageIndexBoardsAssertion: assert.NotNil,
93+
packageIndexBoardsDataAssertion: []PackageIndexData{
94+
{
95+
ID: "foopackager1:[email protected] - My Board",
96+
JSONPointer: "/packages/0/platforms/0/boards/0",
97+
},
98+
{
99+
ID: "foopackager1:[email protected] - My Board Pro",
100+
JSONPointer: "/packages/0/platforms/0/boards/1",
101+
},
102+
{
103+
ID: "foopackager1:[email protected] - My Board",
104+
JSONPointer: "/packages/0/platforms/1/boards/0",
105+
},
106+
{
107+
ID: "foopackager1:[email protected] - My Board Pro",
108+
JSONPointer: "/packages/0/platforms/1/boards/1",
109+
},
110+
{
111+
ID: "foopackager2:[email protected] - My Board",
112+
JSONPointer: "/packages/1/platforms/0/boards/0",
113+
},
114+
{
115+
ID: "foopackager2:[email protected] - My Board Pro",
116+
JSONPointer: "/packages/1/platforms/0/boards/1",
117+
},
118+
{
119+
ID: "foopackager2:[email protected] - My Board",
120+
JSONPointer: "/packages/1/platforms/1/boards/0",
121+
},
122+
{
123+
ID: "foopackager2:[email protected] - My Board Pro",
124+
JSONPointer: "/packages/1/platforms/1/boards/1",
125+
},
126+
},
90127
packageIndexToolsAssertion: assert.NotNil,
91128
packageIndexToolsDataAssertion: []PackageIndexData{
92129
{
@@ -154,6 +191,53 @@ func TestInitializeForPackageIndex(t *testing.T) {
154191
ID: "/packages/1/platforms/1",
155192
JSONPointer: "/packages/1/platforms/1",
156193
},
194+
{
195+
ID: "foopackager2:[email protected]",
196+
JSONPointer: "/packages/1/platforms/2",
197+
},
198+
},
199+
packageIndexBoardsAssertion: assert.NotNil,
200+
packageIndexBoardsDataAssertion: []PackageIndexData{
201+
{
202+
ID: "/packages/0/platforms/0/boards/0",
203+
JSONPointer: "/packages/0/platforms/0/boards/0",
204+
},
205+
{
206+
ID: "/packages/0/platforms/0/boards/1",
207+
JSONPointer: "/packages/0/platforms/0/boards/1",
208+
},
209+
{
210+
ID: "/packages/0/platforms/1/boards/0",
211+
JSONPointer: "/packages/0/platforms/1/boards/0",
212+
},
213+
{
214+
ID: "/packages/0/platforms/1/boards/1",
215+
JSONPointer: "/packages/0/platforms/1/boards/1",
216+
},
217+
{
218+
ID: "/packages/1/platforms/0/boards/0",
219+
JSONPointer: "/packages/1/platforms/0/boards/0",
220+
},
221+
{
222+
ID: "/packages/1/platforms/0/boards/1",
223+
JSONPointer: "/packages/1/platforms/0/boards/1",
224+
},
225+
{
226+
ID: "/packages/1/platforms/1/boards/0",
227+
JSONPointer: "/packages/1/platforms/1/boards/0",
228+
},
229+
{
230+
ID: "/packages/1/platforms/1/boards/1",
231+
JSONPointer: "/packages/1/platforms/1/boards/1",
232+
},
233+
{
234+
ID: "/packages/1/platforms/2/boards/0",
235+
JSONPointer: "/packages/1/platforms/2/boards/0",
236+
},
237+
{
238+
ID: "foopackager2:[email protected] - My Board Pro",
239+
JSONPointer: "/packages/1/platforms/2/boards/1",
240+
},
157241
},
158242
packageIndexToolsAssertion: assert.NotNil,
159243
packageIndexToolsDataAssertion: []PackageIndexData{
@@ -230,6 +314,53 @@ func TestInitializeForPackageIndex(t *testing.T) {
230314
ID: "/packages/1/platforms/1",
231315
JSONPointer: "/packages/1/platforms/1",
232316
},
317+
{
318+
ID: "foopackager2:[email protected]",
319+
JSONPointer: "/packages/1/platforms/2",
320+
},
321+
},
322+
packageIndexBoardsAssertion: assert.NotNil,
323+
packageIndexBoardsDataAssertion: []PackageIndexData{
324+
{
325+
ID: "/packages/0/platforms/0/boards/0",
326+
JSONPointer: "/packages/0/platforms/0/boards/0",
327+
},
328+
{
329+
ID: "/packages/0/platforms/0/boards/1",
330+
JSONPointer: "/packages/0/platforms/0/boards/1",
331+
},
332+
{
333+
ID: "/packages/0/platforms/1/boards/0",
334+
JSONPointer: "/packages/0/platforms/1/boards/0",
335+
},
336+
{
337+
ID: "/packages/0/platforms/1/boards/1",
338+
JSONPointer: "/packages/0/platforms/1/boards/1",
339+
},
340+
{
341+
ID: "/packages/1/platforms/0/boards/0",
342+
JSONPointer: "/packages/1/platforms/0/boards/0",
343+
},
344+
{
345+
ID: "/packages/1/platforms/0/boards/1",
346+
JSONPointer: "/packages/1/platforms/0/boards/1",
347+
},
348+
{
349+
ID: "/packages/1/platforms/1/boards/0",
350+
JSONPointer: "/packages/1/platforms/1/boards/0",
351+
},
352+
{
353+
ID: "/packages/1/platforms/1/boards/1",
354+
JSONPointer: "/packages/1/platforms/1/boards/1",
355+
},
356+
{
357+
ID: "/packages/1/platforms/2/boards/0",
358+
JSONPointer: "/packages/1/platforms/2/boards/0",
359+
},
360+
{
361+
ID: "foopackager2:[email protected] - My Board Pro",
362+
JSONPointer: "/packages/1/platforms/2/boards/1",
363+
},
233364
},
234365
packageIndexToolsAssertion: assert.NotNil,
235366
packageIndexToolsDataAssertion: []PackageIndexData{
@@ -279,6 +410,7 @@ func TestInitializeForPackageIndex(t *testing.T) {
279410
packageIndexCLILoadErrorAssertion: assert.NotNil,
280411
packageIndexPackagesAssertion: assert.Nil,
281412
packageIndexPlatformsAssertion: assert.Nil,
413+
packageIndexBoardsAssertion: assert.Nil,
282414
packageIndexToolsAssertion: assert.Nil,
283415
packageIndexSystemsAssertion: assert.Nil,
284416
packageIndexSchemaValidationResultAssertion: assert.Nil,
@@ -291,6 +423,7 @@ func TestInitializeForPackageIndex(t *testing.T) {
291423
packageIndexCLILoadErrorAssertion: assert.NotNil,
292424
packageIndexPackagesAssertion: assert.Nil,
293425
packageIndexPlatformsAssertion: assert.Nil,
426+
packageIndexBoardsAssertion: assert.Nil,
294427
packageIndexToolsAssertion: assert.Nil,
295428
packageIndexSystemsAssertion: assert.Nil,
296429
packageIndexSchemaValidationResultAssertion: assert.Nil,
@@ -328,6 +461,14 @@ func TestInitializeForPackageIndex(t *testing.T) {
328461
}
329462
}
330463

464+
testTable.packageIndexBoardsAssertion(t, PackageIndexBoards(), testTable.testName)
465+
if PackageIndexBoards() != nil {
466+
for index, packageIndexBoard := range PackageIndexBoards() {
467+
assert.Equal(t, testTable.packageIndexBoardsDataAssertion[index].ID, packageIndexBoard.ID, testTable.testName)
468+
assert.Equal(t, testTable.packageIndexBoardsDataAssertion[index].JSONPointer, packageIndexBoard.JSONPointer, testTable.testName)
469+
}
470+
}
471+
331472
testTable.packageIndexToolsAssertion(t, PackageIndexTools(), testTable.testName)
332473
if PackageIndexTools() != nil {
333474
for index, packageIndexTool := range PackageIndexTools() {

Diff for: internal/project/projectdata/testdata/packageindexes/empty-ids/package_foo_index.json

+26
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,32 @@
124124
"version": "6.0.1-arduino5"
125125
}
126126
]
127+
},
128+
{
129+
"name": "My Board",
130+
"architecture": "megaavr",
131+
"version": "1.0.0",
132+
"category": "Contributed",
133+
"help": {
134+
"online": "http://example.com/forum/myboard"
135+
},
136+
"url": "https://janedeveloper.github.io/myboard/myboard-1.0.1.zip",
137+
"archiveFileName": "myboard-1.0.1.zip",
138+
"checksum": "SHA-256:9c86ee28a7ce9fe33e8b07ec643316131e0031b0d22e63bb398902a5fdadbca9",
139+
"size": "15125",
140+
"boards": [{ "name": "" }, { "name": "My Board Pro" }],
141+
"toolsDependencies": [
142+
{
143+
"packager": "arduino",
144+
"name": "avr-gcc",
145+
"version": "4.8.1-arduino5"
146+
},
147+
{
148+
"packager": "arduino",
149+
"name": "avrdude",
150+
"version": "6.0.1-arduino5"
151+
}
152+
]
127153
}
128154
],
129155
"tools": [

Diff for: internal/project/projectdata/testdata/packageindexes/missing-ids/package_foo_index.json

+26
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,32 @@
121121
"version": "6.0.1-arduino5"
122122
}
123123
]
124+
},
125+
{
126+
"name": "My Board",
127+
"architecture": "megaavr",
128+
"version": "1.0.0",
129+
"category": "Contributed",
130+
"help": {
131+
"online": "http://example.com/forum/myboard"
132+
},
133+
"url": "https://janedeveloper.github.io/myboard/myboard-1.0.1.zip",
134+
"archiveFileName": "myboard-1.0.1.zip",
135+
"checksum": "SHA-256:9c86ee28a7ce9fe33e8b07ec643316131e0031b0d22e63bb398902a5fdadbca9",
136+
"size": "15125",
137+
"boards": [{ "foo": "My Board" }, { "name": "My Board Pro" }],
138+
"toolsDependencies": [
139+
{
140+
"packager": "arduino",
141+
"name": "avr-gcc",
142+
"version": "4.8.1-arduino5"
143+
},
144+
{
145+
"packager": "arduino",
146+
"name": "avrdude",
147+
"version": "6.0.1-arduino5"
148+
}
149+
]
124150
}
125151
],
126152
"tools": [

0 commit comments

Comments
 (0)