From 276774e48d01ad53ac00c3e025e7f9ef34bfbf1c Mon Sep 17 00:00:00 2001 From: per1234 Date: Mon, 21 Jun 2021 23:41:44 -0700 Subject: [PATCH] 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. --- internal/project/projectdata/packageindex.go | 12 ++ .../project/projectdata/packageindex_test.go | 141 ++++++++++++++++++ .../empty-ids/package_foo_index.json | 26 ++++ .../missing-ids/package_foo_index.json | 26 ++++ 4 files changed, 205 insertions(+) diff --git a/internal/project/projectdata/packageindex.go b/internal/project/projectdata/packageindex.go index 54fd7a18f..62b8c4165 100644 --- a/internal/project/projectdata/packageindex.go +++ b/internal/project/projectdata/packageindex.go @@ -41,6 +41,7 @@ func InitializeForPackageIndex() { packageIndexPackages = nil packageIndexPlatforms = nil + packageIndexBoards = nil packageIndexTools = nil packageIndexSystems = nil packageIndexSchemaValidationResult = nil @@ -51,6 +52,10 @@ func InitializeForPackageIndex() { packageIndexPlatforms = append(packageIndexPlatforms, getPackageIndexData(packageData.Object, packageData.JSONPointer, "platforms", packageData.ID+":", "architecture", "version")...) } + for _, platformData := range PackageIndexPlatforms() { + packageIndexBoards = append(packageIndexBoards, getPackageIndexData(platformData.Object, platformData.JSONPointer, "boards", platformData.ID+" - ", "name", "")...) + } + for _, packageData := range PackageIndexPackages() { packageIndexTools = append(packageIndexTools, getPackageIndexData(packageData.Object, packageData.JSONPointer, "tools", packageData.ID+":", "name", "version")...) } @@ -98,6 +103,13 @@ func PackageIndexPlatforms() []PackageIndexData { return packageIndexPlatforms } +var packageIndexBoards []PackageIndexData + +// PackageIndexBoards returns the slice of board data for the package index. +func PackageIndexBoards() []PackageIndexData { + return packageIndexBoards +} + var packageIndexTools []PackageIndexData // PackageIndexTools returns the slice of tool data for the package index. diff --git a/internal/project/projectdata/packageindex_test.go b/internal/project/projectdata/packageindex_test.go index 1cfe92770..3cbdafbf3 100644 --- a/internal/project/projectdata/packageindex_test.go +++ b/internal/project/projectdata/packageindex_test.go @@ -45,6 +45,8 @@ func TestInitializeForPackageIndex(t *testing.T) { packageIndexPackagesDataAssertion []PackageIndexData packageIndexPlatformsAssertion assert.ValueAssertionFunc packageIndexPlatformsDataAssertion []PackageIndexData + packageIndexBoardsAssertion assert.ValueAssertionFunc + packageIndexBoardsDataAssertion []PackageIndexData packageIndexToolsAssertion assert.ValueAssertionFunc packageIndexToolsDataAssertion []PackageIndexData packageIndexSystemsAssertion assert.ValueAssertionFunc @@ -87,6 +89,41 @@ func TestInitializeForPackageIndex(t *testing.T) { JSONPointer: "/packages/1/platforms/1", }, }, + packageIndexBoardsAssertion: assert.NotNil, + packageIndexBoardsDataAssertion: []PackageIndexData{ + { + ID: "foopackager1:avr@1.0.0 - My Board", + JSONPointer: "/packages/0/platforms/0/boards/0", + }, + { + ID: "foopackager1:avr@1.0.0 - My Board Pro", + JSONPointer: "/packages/0/platforms/0/boards/1", + }, + { + ID: "foopackager1:avr@1.0.1 - My Board", + JSONPointer: "/packages/0/platforms/1/boards/0", + }, + { + ID: "foopackager1:avr@1.0.1 - My Board Pro", + JSONPointer: "/packages/0/platforms/1/boards/1", + }, + { + ID: "foopackager2:samd@2.0.0 - My Board", + JSONPointer: "/packages/1/platforms/0/boards/0", + }, + { + ID: "foopackager2:samd@2.0.0 - My Board Pro", + JSONPointer: "/packages/1/platforms/0/boards/1", + }, + { + ID: "foopackager2:mbed@1.1.1 - My Board", + JSONPointer: "/packages/1/platforms/1/boards/0", + }, + { + ID: "foopackager2:mbed@1.1.1 - My Board Pro", + JSONPointer: "/packages/1/platforms/1/boards/1", + }, + }, packageIndexToolsAssertion: assert.NotNil, packageIndexToolsDataAssertion: []PackageIndexData{ { @@ -154,6 +191,53 @@ func TestInitializeForPackageIndex(t *testing.T) { ID: "/packages/1/platforms/1", JSONPointer: "/packages/1/platforms/1", }, + { + ID: "foopackager2:megaavr@1.0.0", + JSONPointer: "/packages/1/platforms/2", + }, + }, + packageIndexBoardsAssertion: assert.NotNil, + packageIndexBoardsDataAssertion: []PackageIndexData{ + { + ID: "/packages/0/platforms/0/boards/0", + JSONPointer: "/packages/0/platforms/0/boards/0", + }, + { + ID: "/packages/0/platforms/0/boards/1", + JSONPointer: "/packages/0/platforms/0/boards/1", + }, + { + ID: "/packages/0/platforms/1/boards/0", + JSONPointer: "/packages/0/platforms/1/boards/0", + }, + { + ID: "/packages/0/platforms/1/boards/1", + JSONPointer: "/packages/0/platforms/1/boards/1", + }, + { + ID: "/packages/1/platforms/0/boards/0", + JSONPointer: "/packages/1/platforms/0/boards/0", + }, + { + ID: "/packages/1/platforms/0/boards/1", + JSONPointer: "/packages/1/platforms/0/boards/1", + }, + { + ID: "/packages/1/platforms/1/boards/0", + JSONPointer: "/packages/1/platforms/1/boards/0", + }, + { + ID: "/packages/1/platforms/1/boards/1", + JSONPointer: "/packages/1/platforms/1/boards/1", + }, + { + ID: "/packages/1/platforms/2/boards/0", + JSONPointer: "/packages/1/platforms/2/boards/0", + }, + { + ID: "foopackager2:megaavr@1.0.0 - My Board Pro", + JSONPointer: "/packages/1/platforms/2/boards/1", + }, }, packageIndexToolsAssertion: assert.NotNil, packageIndexToolsDataAssertion: []PackageIndexData{ @@ -230,6 +314,53 @@ func TestInitializeForPackageIndex(t *testing.T) { ID: "/packages/1/platforms/1", JSONPointer: "/packages/1/platforms/1", }, + { + ID: "foopackager2:megaavr@1.0.0", + JSONPointer: "/packages/1/platforms/2", + }, + }, + packageIndexBoardsAssertion: assert.NotNil, + packageIndexBoardsDataAssertion: []PackageIndexData{ + { + ID: "/packages/0/platforms/0/boards/0", + JSONPointer: "/packages/0/platforms/0/boards/0", + }, + { + ID: "/packages/0/platforms/0/boards/1", + JSONPointer: "/packages/0/platforms/0/boards/1", + }, + { + ID: "/packages/0/platforms/1/boards/0", + JSONPointer: "/packages/0/platforms/1/boards/0", + }, + { + ID: "/packages/0/platforms/1/boards/1", + JSONPointer: "/packages/0/platforms/1/boards/1", + }, + { + ID: "/packages/1/platforms/0/boards/0", + JSONPointer: "/packages/1/platforms/0/boards/0", + }, + { + ID: "/packages/1/platforms/0/boards/1", + JSONPointer: "/packages/1/platforms/0/boards/1", + }, + { + ID: "/packages/1/platforms/1/boards/0", + JSONPointer: "/packages/1/platforms/1/boards/0", + }, + { + ID: "/packages/1/platforms/1/boards/1", + JSONPointer: "/packages/1/platforms/1/boards/1", + }, + { + ID: "/packages/1/platforms/2/boards/0", + JSONPointer: "/packages/1/platforms/2/boards/0", + }, + { + ID: "foopackager2:megaavr@1.0.0 - My Board Pro", + JSONPointer: "/packages/1/platforms/2/boards/1", + }, }, packageIndexToolsAssertion: assert.NotNil, packageIndexToolsDataAssertion: []PackageIndexData{ @@ -279,6 +410,7 @@ func TestInitializeForPackageIndex(t *testing.T) { packageIndexCLILoadErrorAssertion: assert.NotNil, packageIndexPackagesAssertion: assert.Nil, packageIndexPlatformsAssertion: assert.Nil, + packageIndexBoardsAssertion: assert.Nil, packageIndexToolsAssertion: assert.Nil, packageIndexSystemsAssertion: assert.Nil, packageIndexSchemaValidationResultAssertion: assert.Nil, @@ -291,6 +423,7 @@ func TestInitializeForPackageIndex(t *testing.T) { packageIndexCLILoadErrorAssertion: assert.NotNil, packageIndexPackagesAssertion: assert.Nil, packageIndexPlatformsAssertion: assert.Nil, + packageIndexBoardsAssertion: assert.Nil, packageIndexToolsAssertion: assert.Nil, packageIndexSystemsAssertion: assert.Nil, packageIndexSchemaValidationResultAssertion: assert.Nil, @@ -328,6 +461,14 @@ func TestInitializeForPackageIndex(t *testing.T) { } } + testTable.packageIndexBoardsAssertion(t, PackageIndexBoards(), testTable.testName) + if PackageIndexBoards() != nil { + for index, packageIndexBoard := range PackageIndexBoards() { + assert.Equal(t, testTable.packageIndexBoardsDataAssertion[index].ID, packageIndexBoard.ID, testTable.testName) + assert.Equal(t, testTable.packageIndexBoardsDataAssertion[index].JSONPointer, packageIndexBoard.JSONPointer, testTable.testName) + } + } + testTable.packageIndexToolsAssertion(t, PackageIndexTools(), testTable.testName) if PackageIndexTools() != nil { for index, packageIndexTool := range PackageIndexTools() { diff --git a/internal/project/projectdata/testdata/packageindexes/empty-ids/package_foo_index.json b/internal/project/projectdata/testdata/packageindexes/empty-ids/package_foo_index.json index 0840b9a68..66f2cf980 100644 --- a/internal/project/projectdata/testdata/packageindexes/empty-ids/package_foo_index.json +++ b/internal/project/projectdata/testdata/packageindexes/empty-ids/package_foo_index.json @@ -124,6 +124,32 @@ "version": "6.0.1-arduino5" } ] + }, + { + "name": "My Board", + "architecture": "megaavr", + "version": "1.0.0", + "category": "Contributed", + "help": { + "online": "http://example.com/forum/myboard" + }, + "url": "https://janedeveloper.github.io/myboard/myboard-1.0.1.zip", + "archiveFileName": "myboard-1.0.1.zip", + "checksum": "SHA-256:9c86ee28a7ce9fe33e8b07ec643316131e0031b0d22e63bb398902a5fdadbca9", + "size": "15125", + "boards": [{ "name": "" }, { "name": "My Board Pro" }], + "toolsDependencies": [ + { + "packager": "arduino", + "name": "avr-gcc", + "version": "4.8.1-arduino5" + }, + { + "packager": "arduino", + "name": "avrdude", + "version": "6.0.1-arduino5" + } + ] } ], "tools": [ diff --git a/internal/project/projectdata/testdata/packageindexes/missing-ids/package_foo_index.json b/internal/project/projectdata/testdata/packageindexes/missing-ids/package_foo_index.json index 516f758f9..e9da8f28b 100644 --- a/internal/project/projectdata/testdata/packageindexes/missing-ids/package_foo_index.json +++ b/internal/project/projectdata/testdata/packageindexes/missing-ids/package_foo_index.json @@ -121,6 +121,32 @@ "version": "6.0.1-arduino5" } ] + }, + { + "name": "My Board", + "architecture": "megaavr", + "version": "1.0.0", + "category": "Contributed", + "help": { + "online": "http://example.com/forum/myboard" + }, + "url": "https://janedeveloper.github.io/myboard/myboard-1.0.1.zip", + "archiveFileName": "myboard-1.0.1.zip", + "checksum": "SHA-256:9c86ee28a7ce9fe33e8b07ec643316131e0031b0d22e63bb398902a5fdadbca9", + "size": "15125", + "boards": [{ "foo": "My Board" }, { "name": "My Board Pro" }], + "toolsDependencies": [ + { + "packager": "arduino", + "name": "avr-gcc", + "version": "4.8.1-arduino5" + }, + { + "packager": "arduino", + "name": "avrdude", + "version": "6.0.1-arduino5" + } + ] } ], "tools": [