diff --git a/internal/project/packageindex/packageindex.go b/internal/project/packageindex/packageindex.go index 1d0560df..a96d0bdc 100644 --- a/internal/project/packageindex/packageindex.go +++ b/internal/project/packageindex/packageindex.go @@ -32,9 +32,12 @@ import ( // Properties parses the package index from the given path and returns the data. func Properties(packageIndexPath *paths.Path) (map[string]interface{}, error) { + if packageIndexPath == nil { + return nil, fmt.Errorf("Package index path is nil") + } rawIndex, err := packageIndexPath.ReadFile() if err != nil { - panic(err) + return nil, err } var indexData map[string]interface{} err = json.Unmarshal(rawIndex, &indexData) diff --git a/internal/project/packageindex/packageindex_test.go b/internal/project/packageindex/packageindex_test.go index 8d8375e1..5fdadd28 100644 --- a/internal/project/packageindex/packageindex_test.go +++ b/internal/project/packageindex/packageindex_test.go @@ -35,10 +35,14 @@ func init() { } func TestProperties(t *testing.T) { - packageIndex, err := Properties(testDataPath.Join("package_valid_index.json")) - require.Nil(t, err) + assert.NotPanics(t, func() { Properties(nil) }, "Don't panic when package index was not found") + packageIndex, err := Properties(nil) + assert.Error(t, err, "Error when package index was not found") - assert.NotNil(t, packageIndex) + packageIndex, err = Properties(testDataPath.Join("package_valid_index.json")) + require.Nil(t, err, "No error on valid package index") + + assert.NotNil(t, packageIndex, "Package index data present") } func TestHasValidExtension(t *testing.T) { diff --git a/internal/project/projectdata/packageindex.go b/internal/project/projectdata/packageindex.go index a0f8f679..4cd65bb0 100644 --- a/internal/project/projectdata/packageindex.go +++ b/internal/project/projectdata/packageindex.go @@ -16,26 +16,35 @@ package projectdata import ( - "github.com/arduino/arduino-cli/arduino/cores/packageindex" + clipackageindex "github.com/arduino/arduino-cli/arduino/cores/packageindex" + "github.com/arduino/arduino-lint/internal/project/packageindex" ) // InitializeForPackageIndex gathers the package index rule data for the specified project. func InitializeForPackageIndex() { + packageIndex, packageIndexLoadError = packageindex.Properties(ProjectPath()) if ProjectPath() != nil { - packageIndex, packageIndexLoadError = packageindex.LoadIndex(ProjectPath()) + _, packageIndexCLILoadError = clipackageindex.LoadIndex(ProjectPath()) } } -var packageIndex *packageindex.Index +var packageIndex map[string]interface{} -// PackageIndex returns the packageindex.Index object generated by Arduino CLI. -func PackageIndex() *packageindex.Index { +// PackageIndex returns the package index data. +func PackageIndex() map[string]interface{} { return packageIndex } var packageIndexLoadError error -// PackageIndexLoadError returns the error return of packageindex.LoadIndex(). +// PackageIndexLoadError returns the error from loading the package index. func PackageIndexLoadError() error { return packageIndexLoadError } + +var packageIndexCLILoadError error + +// PackageIndexCLILoadError returns the error return of Arduino CLI's packageindex.LoadIndex(). +func PackageIndexCLILoadError() error { + return packageIndexCLILoadError +} diff --git a/internal/project/projectdata/packageindex_test.go b/internal/project/projectdata/packageindex_test.go index 800b01e0..372381c0 100644 --- a/internal/project/projectdata/packageindex_test.go +++ b/internal/project/projectdata/packageindex_test.go @@ -36,14 +36,15 @@ func init() { func TestInitializeForPackageIndex(t *testing.T) { testTables := []struct { - testName string - path *paths.Path - packageIndexAssertion assert.ValueAssertionFunc - packageIndexLoadErrorAssertion assert.ValueAssertionFunc + testName string + path *paths.Path + packageIndexAssertion assert.ValueAssertionFunc + packageIndexLoadErrorAssertion assert.ValueAssertionFunc + packageIndexCLILoadErrorAssertion assert.ValueAssertionFunc }{ - {"Valid", packageIndexTestDataPath.Join("valid-package-index", "package_foo_index.json"), assert.NotNil, assert.Nil}, - {"Invalid package index", packageIndexTestDataPath.Join("invalid-package-index", "package_foo_index.json"), assert.Nil, assert.NotNil}, - {"Invalid JSON", packageIndexTestDataPath.Join("invalid-JSON", "package_foo_index.json"), assert.Nil, assert.NotNil}, + {"Valid", packageIndexTestDataPath.Join("valid-package-index", "package_foo_index.json"), assert.NotNil, assert.Nil, assert.Nil}, + {"Invalid package index", packageIndexTestDataPath.Join("invalid-package-index", "package_foo_index.json"), assert.Nil, assert.NotNil, assert.NotNil}, + {"Invalid JSON", packageIndexTestDataPath.Join("invalid-JSON", "package_foo_index.json"), assert.Nil, assert.NotNil, assert.NotNil}, } for _, testTable := range testTables { @@ -56,6 +57,7 @@ func TestInitializeForPackageIndex(t *testing.T) { Initialize(testProject) testTable.packageIndexLoadErrorAssertion(t, PackageIndexLoadError(), testTable.testName) + testTable.packageIndexCLILoadErrorAssertion(t, PackageIndexCLILoadError(), testTable.testName) if PackageIndexLoadError() == nil { testTable.packageIndexAssertion(t, PackageIndex(), testTable.testName) } diff --git a/internal/rule/rulefunction/packageindex.go b/internal/rule/rulefunction/packageindex.go index a112c012..7a82eb74 100644 --- a/internal/rule/rulefunction/packageindex.go +++ b/internal/rule/rulefunction/packageindex.go @@ -77,8 +77,8 @@ func PackageIndexFormat() (result ruleresult.Type, output string) { return ruleresult.NotRun, "Package index not found" } - if projectdata.PackageIndexLoadError() != nil { - return ruleresult.Fail, projectdata.PackageIndexLoadError().Error() + if projectdata.PackageIndexCLILoadError() != nil { + return ruleresult.Fail, projectdata.PackageIndexCLILoadError().Error() } return ruleresult.Pass, ""