Skip to content

Commit 9301f9b

Browse files
authored
Merge pull request #63 from arduino/per1234/valid-library-check
Add check for valid library
2 parents 5f24a05 + 40777e3 commit 9301f9b

File tree

6 files changed

+54
-0
lines changed

6 files changed

+54
-0
lines changed

Diff for: check/checkconfigurations/checkconfigurations.go

+15
Original file line numberDiff line numberDiff line change
@@ -791,6 +791,21 @@ var configurations = []Type{
791791
ErrorModes: nil,
792792
CheckFunction: checkfunctions.LibraryPropertiesMisspelledOptionalField,
793793
},
794+
{
795+
ProjectType: projecttype.Library,
796+
Category: "structure",
797+
Subcategory: "",
798+
ID: "",
799+
Brief: "invalid",
800+
Description: "",
801+
MessageTemplate: "Path does not contain a valid Arduino library. See: https://arduino.github.io/arduino-cli/latest/library-specification",
802+
DisableModes: nil,
803+
EnableModes: []checkmode.Type{checkmode.All},
804+
InfoModes: nil,
805+
WarningModes: nil,
806+
ErrorModes: []checkmode.Type{checkmode.All},
807+
CheckFunction: checkfunctions.LibraryInvalid,
808+
},
794809
{
795810
ProjectType: projecttype.Library,
796811
Category: "structure",

Diff for: check/checkfunctions/library.go

+18
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ import (
2828
"github.com/arduino/arduino-check/check/checkdata/schema/compliancelevel"
2929
"github.com/arduino/arduino-check/check/checkresult"
3030
"github.com/arduino/arduino-check/configuration"
31+
"github.com/arduino/arduino-check/project/library"
3132
"github.com/arduino/arduino-cli/arduino/libraries"
3233
"github.com/arduino/arduino-cli/arduino/utils"
3334
"github.com/arduino/go-properties-orderedmap"
@@ -850,6 +851,23 @@ func LibraryPropertiesMisspelledOptionalField() (result checkresult.Type, output
850851
return checkresult.Pass, ""
851852
}
852853

854+
// LibraryInvalid checks whether the provided path is a valid library.
855+
func LibraryInvalid() (result checkresult.Type, output string) {
856+
directoryListing, err := checkdata.LoadedLibrary().SourceDir.ReadDir()
857+
if err != nil {
858+
panic(err)
859+
}
860+
861+
directoryListing.FilterOutDirs()
862+
for _, potentialHeaderFile := range directoryListing {
863+
if library.HasHeaderFileValidExtension(potentialHeaderFile) {
864+
return checkresult.Pass, ""
865+
}
866+
}
867+
868+
return checkresult.Fail, ""
869+
}
870+
853871
// LibraryHasSubmodule checks whether the library contains a Git submodule.
854872
func LibraryHasSubmodule() (result checkresult.Type, output string) {
855873
dotGitmodulesPath := checkdata.ProjectPath().Join(".gitmodules")

Diff for: check/checkfunctions/library_test.go

+12
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import (
2525
"github.com/arduino/arduino-check/project"
2626
"github.com/arduino/arduino-check/project/projecttype"
2727
"github.com/arduino/go-paths-helper"
28+
"github.com/sirupsen/logrus"
2829
"github.com/stretchr/testify/assert"
2930
"github.com/stretchr/testify/require"
3031
)
@@ -193,6 +194,17 @@ func TestLibraryPropertiesPrecompiledFieldEnabledWithFlatLayout(t *testing.T) {
193194
checkLibraryCheckFunction(LibraryPropertiesPrecompiledFieldEnabledWithFlatLayout, testTables, t)
194195
}
195196

197+
func TestLibraryInvalid(t *testing.T) {
198+
testTables := []libraryCheckFunctionTestTable{
199+
{"Invalid flat layout", "FlatWithoutHeader", checkresult.Fail, ""},
200+
{"Invalid recursive layout", "RecursiveWithoutLibraryProperties", checkresult.Fail, ""},
201+
{"Valid library", "Recursive", checkresult.Pass, ""},
202+
}
203+
204+
logrus.SetLevel(logrus.ErrorLevel)
205+
checkLibraryCheckFunction(LibraryInvalid, testTables, t)
206+
}
207+
196208
func TestLibraryHasSubmodule(t *testing.T) {
197209
testTables := []libraryCheckFunctionTestTable{
198210
{"Has submodule", "Submodule", checkresult.Fail, ""},

Diff for: check/checkfunctions/testdata/libraries/FlatWithoutHeader/FlatWithoutHeader.cpp

Whitespace-only changes.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
name=FlatWithoutHeader
2+
version=1.0.0
3+
author=Cristian Maglie <[email protected]>, Pippo Pluto <[email protected]>
4+
maintainer=Cristian Maglie <[email protected]>
5+
sentence=A library that makes coding a web server a breeze.
6+
paragraph=Supports HTTP1.1 and you can do GET and POST.
7+
category=Communication
8+
url=http://example.com/
9+
architectures=avr

Diff for: check/checkfunctions/testdata/libraries/RecursiveWithoutLibraryProperties/src/RecursiveWithoutLibraryProperties.h

Whitespace-only changes.

0 commit comments

Comments
 (0)