Skip to content

Commit 7a49563

Browse files
committed
Provide schema validation results in package index project data
This allows the package index to be validated against its JSON schemas only once per project, with those results shared between all the schema-based rules.
1 parent d7f669b commit 7a49563

File tree

2 files changed

+49
-31
lines changed

2 files changed

+49
-31
lines changed

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

+12
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ import (
2121

2222
clipackageindex "github.com/arduino/arduino-cli/arduino/cores/packageindex"
2323
"github.com/arduino/arduino-lint/internal/project/packageindex"
24+
"github.com/arduino/arduino-lint/internal/rule/schema"
25+
"github.com/arduino/arduino-lint/internal/rule/schema/compliancelevel"
2426
)
2527

2628
// PackageIndexData is the type for package index data.
@@ -41,6 +43,7 @@ func InitializeForPackageIndex() {
4143
packageIndexPlatforms = nil
4244
packageIndexTools = nil
4345
packageIndexSystems = nil
46+
packageIndexSchemaValidationResult = nil
4447
if packageIndexLoadError == nil {
4548
packageIndexPackages = getPackageIndexData(PackageIndex(), "", "packages", "", "name", "")
4649

@@ -55,6 +58,8 @@ func InitializeForPackageIndex() {
5558
for _, toolData := range PackageIndexTools() {
5659
packageIndexSystems = append(packageIndexSystems, getPackageIndexData(toolData.Object, toolData.JSONPointer, "systems", toolData.ID+" - ", "host", "")...)
5760
}
61+
62+
packageIndexSchemaValidationResult = packageindex.Validate(PackageIndex())
5863
}
5964
}
6065

@@ -107,6 +112,13 @@ func PackageIndexSystems() []PackageIndexData {
107112
return packageIndexSystems
108113
}
109114

115+
var packageIndexSchemaValidationResult map[compliancelevel.Type]schema.ValidationResult
116+
117+
// PackageIndexSchemaValidationResult returns the result of validating the package index against the JSON schema.
118+
func PackageIndexSchemaValidationResult() map[compliancelevel.Type]schema.ValidationResult {
119+
return packageIndexSchemaValidationResult
120+
}
121+
110122
func getPackageIndexData(interfaceObject map[string]interface{}, pointerPrefix string, dataKey string, iDPrefix string, iDKey string, versionKey string) []PackageIndexData {
111123
var data []PackageIndexData
112124

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

+37-31
Original file line numberDiff line numberDiff line change
@@ -36,19 +36,20 @@ func init() {
3636

3737
func TestInitializeForPackageIndex(t *testing.T) {
3838
testTables := []struct {
39-
testName string
40-
path *paths.Path
41-
packageIndexAssertion assert.ValueAssertionFunc
42-
packageIndexLoadErrorAssertion assert.ValueAssertionFunc
43-
packageIndexCLILoadErrorAssertion assert.ValueAssertionFunc
44-
packageIndexPackagesAssertion assert.ValueAssertionFunc
45-
packageIndexPackagesDataAssertion []PackageIndexData
46-
packageIndexPlatformsAssertion assert.ValueAssertionFunc
47-
packageIndexPlatformsDataAssertion []PackageIndexData
48-
packageIndexToolsAssertion assert.ValueAssertionFunc
49-
packageIndexToolsDataAssertion []PackageIndexData
50-
packageIndexSystemsAssertion assert.ValueAssertionFunc
51-
packageIndexSystemsDataAssertion []PackageIndexData
39+
testName string
40+
path *paths.Path
41+
packageIndexAssertion assert.ValueAssertionFunc
42+
packageIndexLoadErrorAssertion assert.ValueAssertionFunc
43+
packageIndexCLILoadErrorAssertion assert.ValueAssertionFunc
44+
packageIndexPackagesAssertion assert.ValueAssertionFunc
45+
packageIndexPackagesDataAssertion []PackageIndexData
46+
packageIndexPlatformsAssertion assert.ValueAssertionFunc
47+
packageIndexPlatformsDataAssertion []PackageIndexData
48+
packageIndexToolsAssertion assert.ValueAssertionFunc
49+
packageIndexToolsDataAssertion []PackageIndexData
50+
packageIndexSystemsAssertion assert.ValueAssertionFunc
51+
packageIndexSystemsDataAssertion []PackageIndexData
52+
packageIndexSchemaValidationResultAssertion assert.ValueAssertionFunc
5253
}{
5354
{
5455
testName: "Valid",
@@ -116,6 +117,7 @@ func TestInitializeForPackageIndex(t *testing.T) {
116117
JSONPointer: "/packages/1/tools/1/systems/1",
117118
},
118119
},
120+
packageIndexSchemaValidationResultAssertion: assert.NotNil,
119121
},
120122
{
121123
testName: "Missing IDs",
@@ -191,6 +193,7 @@ func TestInitializeForPackageIndex(t *testing.T) {
191193
JSONPointer: "/packages/1/tools/2/systems/0",
192194
},
193195
},
196+
packageIndexSchemaValidationResultAssertion: assert.NotNil,
194197
},
195198
{
196199
testName: "Empty IDs",
@@ -266,28 +269,31 @@ func TestInitializeForPackageIndex(t *testing.T) {
266269
JSONPointer: "/packages/1/tools/2/systems/0",
267270
},
268271
},
272+
packageIndexSchemaValidationResultAssertion: assert.NotNil,
269273
},
270274
{
271-
testName: "Invalid package index",
272-
path: packageIndexTestDataPath.Join("invalid-package-index", "package_foo_index.json"),
273-
packageIndexAssertion: assert.Nil,
274-
packageIndexLoadErrorAssertion: assert.NotNil,
275-
packageIndexCLILoadErrorAssertion: assert.NotNil,
276-
packageIndexPackagesAssertion: assert.Nil,
277-
packageIndexPlatformsAssertion: assert.Nil,
278-
packageIndexToolsAssertion: assert.Nil,
279-
packageIndexSystemsAssertion: assert.Nil,
275+
testName: "Invalid package index",
276+
path: packageIndexTestDataPath.Join("invalid-package-index", "package_foo_index.json"),
277+
packageIndexAssertion: assert.Nil,
278+
packageIndexLoadErrorAssertion: assert.NotNil,
279+
packageIndexCLILoadErrorAssertion: assert.NotNil,
280+
packageIndexPackagesAssertion: assert.Nil,
281+
packageIndexPlatformsAssertion: assert.Nil,
282+
packageIndexToolsAssertion: assert.Nil,
283+
packageIndexSystemsAssertion: assert.Nil,
284+
packageIndexSchemaValidationResultAssertion: assert.Nil,
280285
},
281286
{
282-
testName: "Invalid JSON",
283-
path: packageIndexTestDataPath.Join("invalid-JSON", "package_foo_index.json"),
284-
packageIndexAssertion: assert.Nil,
285-
packageIndexLoadErrorAssertion: assert.NotNil,
286-
packageIndexCLILoadErrorAssertion: assert.NotNil,
287-
packageIndexPackagesAssertion: assert.Nil,
288-
packageIndexPlatformsAssertion: assert.Nil,
289-
packageIndexToolsAssertion: assert.Nil,
290-
packageIndexSystemsAssertion: assert.Nil,
287+
testName: "Invalid JSON",
288+
path: packageIndexTestDataPath.Join("invalid-JSON", "package_foo_index.json"),
289+
packageIndexAssertion: assert.Nil,
290+
packageIndexLoadErrorAssertion: assert.NotNil,
291+
packageIndexCLILoadErrorAssertion: assert.NotNil,
292+
packageIndexPackagesAssertion: assert.Nil,
293+
packageIndexPlatformsAssertion: assert.Nil,
294+
packageIndexToolsAssertion: assert.Nil,
295+
packageIndexSystemsAssertion: assert.Nil,
296+
packageIndexSchemaValidationResultAssertion: assert.Nil,
291297
},
292298
}
293299

0 commit comments

Comments
 (0)