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 54fd7a18..62b8c416 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 1cfe9277..3cbdafbf 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 0840b9a6..66f2cf98 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 516f758f..e9da8f28 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": [