diff --git a/internal/rule/rulefunction/platform.go b/internal/rule/rulefunction/platform.go index c3d4d2bb..e8e32ed4 100644 --- a/internal/rule/rulefunction/platform.go +++ b/internal/rule/rulefunction/platform.go @@ -691,6 +691,14 @@ func PlatformTxtCompilerWarningFlagsNoneMissing() (result ruleresult.Type, outpu return ruleresult.NotRun, "Couldn't load platform.txt" } + if projectdata.BoardsTxtLoadError() != nil { + return ruleresult.NotRun, "Couldn't load boards.txt" + } + + if platformReferencesCore() { + return ruleresult.Skip, "Core reference used" + } + if schema.RequiredPropertyMissing("compiler\\.warning_flags\\.none", projectdata.PlatformTxtSchemaValidationResult()[compliancelevel.Specification]) { return ruleresult.Fail, "" } @@ -708,6 +716,14 @@ func PlatformTxtCompilerWarningFlagsDefaultMissing() (result ruleresult.Type, ou return ruleresult.NotRun, "Couldn't load platform.txt" } + if projectdata.BoardsTxtLoadError() != nil { + return ruleresult.NotRun, "Couldn't load boards.txt" + } + + if platformReferencesCore() { + return ruleresult.Skip, "Core reference used" + } + if schema.RequiredPropertyMissing("compiler\\.warning_flags\\.default", projectdata.PlatformTxtSchemaValidationResult()[compliancelevel.Specification]) { return ruleresult.Fail, "" } @@ -725,6 +741,14 @@ func PlatformTxtCompilerWarningFlagsMoreMissing() (result ruleresult.Type, outpu return ruleresult.NotRun, "Couldn't load platform.txt" } + if projectdata.BoardsTxtLoadError() != nil { + return ruleresult.NotRun, "Couldn't load boards.txt" + } + + if platformReferencesCore() { + return ruleresult.Skip, "Core reference used" + } + if schema.RequiredPropertyMissing("compiler\\.warning_flags\\.more", projectdata.PlatformTxtSchemaValidationResult()[compliancelevel.Specification]) { return ruleresult.Fail, "" } @@ -742,6 +766,14 @@ func PlatformTxtCompilerWarningFlagsAllMissing() (result ruleresult.Type, output return ruleresult.NotRun, "Couldn't load platform.txt" } + if projectdata.BoardsTxtLoadError() != nil { + return ruleresult.NotRun, "Couldn't load boards.txt" + } + + if platformReferencesCore() { + return ruleresult.Skip, "Core reference used" + } + if schema.RequiredPropertyMissing("compiler\\.warning_flags\\.all", projectdata.PlatformTxtSchemaValidationResult()[compliancelevel.Specification]) { return ruleresult.Fail, "" } @@ -759,6 +791,14 @@ func PlatformTxtCompilerOptimizationFlagsDebugMissing() (result ruleresult.Type, return ruleresult.NotRun, "Couldn't load platform.txt" } + if projectdata.BoardsTxtLoadError() != nil { + return ruleresult.NotRun, "Couldn't load boards.txt" + } + + if platformReferencesCore() { + return ruleresult.Skip, "Core reference used" + } + if !projectdata.PlatformTxt().ContainsKey("compiler.optimization_flags.release") { return ruleresult.Skip, "Dependent property not present" } @@ -780,6 +820,14 @@ func PlatformTxtCompilerOptimizationFlagsReleaseMissing() (result ruleresult.Typ return ruleresult.NotRun, "Couldn't load platform.txt" } + if projectdata.BoardsTxtLoadError() != nil { + return ruleresult.NotRun, "Couldn't load boards.txt" + } + + if platformReferencesCore() { + return ruleresult.Skip, "Core reference used" + } + if !projectdata.PlatformTxt().ContainsKey("compiler.optimization_flags.debug") { return ruleresult.Skip, "Dependent property not present" } @@ -801,6 +849,14 @@ func PlatformTxtCompilerCExtraFlagsMissing() (result ruleresult.Type, output str return ruleresult.NotRun, "Couldn't load platform.txt" } + if projectdata.BoardsTxtLoadError() != nil { + return ruleresult.NotRun, "Couldn't load boards.txt" + } + + if platformReferencesCore() { + return ruleresult.Skip, "Core reference used" + } + if schema.RequiredPropertyMissing("compiler\\.c\\.extra_flags", projectdata.PlatformTxtSchemaValidationResult()[compliancelevel.Strict]) { return ruleresult.Fail, "" } @@ -839,6 +895,14 @@ func PlatformTxtCompilerCppExtraFlagsMissing() (result ruleresult.Type, output s return ruleresult.NotRun, "Couldn't load platform.txt" } + if projectdata.BoardsTxtLoadError() != nil { + return ruleresult.NotRun, "Couldn't load boards.txt" + } + + if platformReferencesCore() { + return ruleresult.Skip, "Core reference used" + } + if schema.RequiredPropertyMissing("compiler\\.cpp\\.extra_flags", projectdata.PlatformTxtSchemaValidationResult()[compliancelevel.Strict]) { return ruleresult.Fail, "" } @@ -877,6 +941,14 @@ func PlatformTxtCompilerSExtraFlagsMissing() (result ruleresult.Type, output str return ruleresult.NotRun, "Couldn't load platform.txt" } + if projectdata.BoardsTxtLoadError() != nil { + return ruleresult.NotRun, "Couldn't load boards.txt" + } + + if platformReferencesCore() { + return ruleresult.Skip, "Core reference used" + } + if schema.RequiredPropertyMissing("compiler\\.S\\.extra_flags", projectdata.PlatformTxtSchemaValidationResult()[compliancelevel.Strict]) { return ruleresult.Fail, "" } @@ -915,6 +987,14 @@ func PlatformTxtCompilerArExtraFlagsMissing() (result ruleresult.Type, output st return ruleresult.NotRun, "Couldn't load platform.txt" } + if projectdata.BoardsTxtLoadError() != nil { + return ruleresult.NotRun, "Couldn't load boards.txt" + } + + if platformReferencesCore() { + return ruleresult.Skip, "Core reference used" + } + if schema.RequiredPropertyMissing("compiler\\.ar\\.extra_flags", projectdata.PlatformTxtSchemaValidationResult()[compliancelevel.Strict]) { return ruleresult.Fail, "" } @@ -953,6 +1033,14 @@ func PlatformTxtCompilerCElfExtraFlagsMissing() (result ruleresult.Type, output return ruleresult.NotRun, "Couldn't load platform.txt" } + if projectdata.BoardsTxtLoadError() != nil { + return ruleresult.NotRun, "Couldn't load boards.txt" + } + + if platformReferencesCore() { + return ruleresult.Skip, "Core reference used" + } + if schema.RequiredPropertyMissing("compiler\\.c\\.elf\\.extra_flags", projectdata.PlatformTxtSchemaValidationResult()[compliancelevel.Strict]) { return ruleresult.Fail, "" } @@ -1033,6 +1121,14 @@ func PlatformTxtRecipeCOPatternMissing() (result ruleresult.Type, output string) return ruleresult.NotRun, "Couldn't load platform.txt" } + if projectdata.BoardsTxtLoadError() != nil { + return ruleresult.NotRun, "Couldn't load boards.txt" + } + + if platformReferencesCore() { + return ruleresult.Skip, "Core reference used" + } + if schema.RequiredPropertyMissing("recipe\\.c\\.o\\.pattern", projectdata.PlatformTxtSchemaValidationResult()[compliancelevel.Specification]) { return ruleresult.Fail, "" } @@ -1092,6 +1188,14 @@ func PlatformTxtRecipeCppOPatternMissing() (result ruleresult.Type, output strin return ruleresult.NotRun, "Couldn't load platform.txt" } + if projectdata.BoardsTxtLoadError() != nil { + return ruleresult.NotRun, "Couldn't load boards.txt" + } + + if platformReferencesCore() { + return ruleresult.Skip, "Core reference used" + } + if schema.RequiredPropertyMissing("recipe\\.cpp\\.o\\.pattern", projectdata.PlatformTxtSchemaValidationResult()[compliancelevel.Specification]) { return ruleresult.Fail, "" } @@ -1151,6 +1255,14 @@ func PlatformTxtRecipeSOPatternMissing() (result ruleresult.Type, output string) return ruleresult.NotRun, "Couldn't load platform.txt" } + if projectdata.BoardsTxtLoadError() != nil { + return ruleresult.NotRun, "Couldn't load boards.txt" + } + + if platformReferencesCore() { + return ruleresult.Skip, "Core reference used" + } + if schema.RequiredPropertyMissing("recipe\\.S\\.o\\.pattern", projectdata.PlatformTxtSchemaValidationResult()[compliancelevel.Specification]) { return ruleresult.Fail, "" } @@ -1210,6 +1322,14 @@ func PlatformTxtRecipeArPatternMissing() (result ruleresult.Type, output string) return ruleresult.NotRun, "Couldn't load platform.txt" } + if projectdata.BoardsTxtLoadError() != nil { + return ruleresult.NotRun, "Couldn't load boards.txt" + } + + if platformReferencesCore() { + return ruleresult.Skip, "Core reference used" + } + if schema.RequiredPropertyMissing("recipe\\.ar\\.pattern", projectdata.PlatformTxtSchemaValidationResult()[compliancelevel.Specification]) { return ruleresult.Fail, "" } @@ -1269,6 +1389,14 @@ func PlatformTxtRecipeCCombinePatternMissing() (result ruleresult.Type, output s return ruleresult.NotRun, "Couldn't load platform.txt" } + if projectdata.BoardsTxtLoadError() != nil { + return ruleresult.NotRun, "Couldn't load boards.txt" + } + + if platformReferencesCore() { + return ruleresult.Skip, "Core reference used" + } + if schema.RequiredPropertyMissing("recipe\\.c\\.combine\\.pattern", projectdata.PlatformTxtSchemaValidationResult()[compliancelevel.Specification]) { return ruleresult.Fail, "" } @@ -1328,6 +1456,14 @@ func PlatformTxtRecipeOutputTmpFileMissing() (result ruleresult.Type, output str return ruleresult.NotRun, "Couldn't load platform.txt" } + if projectdata.BoardsTxtLoadError() != nil { + return ruleresult.NotRun, "Couldn't load boards.txt" + } + + if platformReferencesCore() { + return ruleresult.Skip, "Core reference used" + } + if schema.RequiredPropertyMissing("recipe\\.output\\.tmp_file", projectdata.PlatformTxtSchemaValidationResult()[compliancelevel.Specification]) { return ruleresult.Fail, "" } @@ -1366,6 +1502,14 @@ func PlatformTxtRecipeOutputSaveFileMissing() (result ruleresult.Type, output st return ruleresult.NotRun, "Couldn't load platform.txt" } + if projectdata.BoardsTxtLoadError() != nil { + return ruleresult.NotRun, "Couldn't load boards.txt" + } + + if platformReferencesCore() { + return ruleresult.Skip, "Core reference used" + } + if schema.RequiredPropertyMissing("recipe\\.output\\.save_file", projectdata.PlatformTxtSchemaValidationResult()[compliancelevel.Specification]) { return ruleresult.Fail, "" } @@ -1404,6 +1548,14 @@ func PlatformTxtRecipeSizePatternMissing() (result ruleresult.Type, output strin return ruleresult.NotRun, "Couldn't load platform.txt" } + if projectdata.BoardsTxtLoadError() != nil { + return ruleresult.NotRun, "Couldn't load boards.txt" + } + + if platformReferencesCore() { + return ruleresult.Skip, "Core reference used" + } + if schema.RequiredPropertyMissing("recipe\\.size\\.pattern", projectdata.PlatformTxtSchemaValidationResult()[compliancelevel.Strict]) { return ruleresult.Fail, "" } @@ -1442,6 +1594,14 @@ func PlatformTxtRecipeSizeRegexMissing() (result ruleresult.Type, output string) return ruleresult.NotRun, "Couldn't load platform.txt" } + if projectdata.BoardsTxtLoadError() != nil { + return ruleresult.NotRun, "Couldn't load boards.txt" + } + + if platformReferencesCore() { + return ruleresult.Skip, "Core reference used" + } + if schema.RequiredPropertyMissing("recipe\\.size\\.regex", projectdata.PlatformTxtSchemaValidationResult()[compliancelevel.Strict]) { return ruleresult.Fail, "" } @@ -1459,6 +1619,14 @@ func PlatformTxtRecipeSizeRegexDataMissing() (result ruleresult.Type, output str return ruleresult.NotRun, "Couldn't load platform.txt" } + if projectdata.BoardsTxtLoadError() != nil { + return ruleresult.NotRun, "Couldn't load boards.txt" + } + + if platformReferencesCore() { + return ruleresult.Skip, "Core reference used" + } + if schema.RequiredPropertyMissing("recipe\\.size\\.regex\\.data", projectdata.PlatformTxtSchemaValidationResult()[compliancelevel.Strict]) { return ruleresult.Fail, "" } @@ -1892,3 +2060,26 @@ func iDValuePatternMismatch(iDs []string, propertyNameQuery string, validationRe return nonCompliantIDs } + +// platformReferencesCore checks whether all boards of the platform use core references. +// See: https://arduino.github.io/arduino-cli/dev/platform-specification/#core-reference +func platformReferencesCore() bool { + referencesCore := false // Default return value. + for _, boardID := range projectdata.BoardsTxt().FirstLevelKeys() { + if boardID != "menu" { + // It is a board ID. + boardProperties := projectdata.BoardsTxt().SubTree(boardID) + for _, key := range boardProperties.Keys() { + if key == "build.core" || strings.HasSuffix(key, ".build.core") { + if !strings.Contains(boardProperties.ExpandPropsInString(boardProperties.Get(key)), ":") { + // This board does not use a core reference. + return false + } + referencesCore = true + } + } + } + } + + return referencesCore +} diff --git a/internal/rule/rulefunction/platform_test.go b/internal/rule/rulefunction/platform_test.go index 0679f715..f326487b 100644 --- a/internal/rule/rulefunction/platform_test.go +++ b/internal/rule/rulefunction/platform_test.go @@ -454,6 +454,8 @@ func TestPlatformTxtCompilerWarningFlagsNoneMissing(t *testing.T) { testTables := []platformRuleFunctionTestTable{ {"Missing", "missing-platform.txt", ruleresult.Skip, ""}, {"Invalid", "invalid-platform.txt", ruleresult.NotRun, ""}, + {"Missing boards.txt", "missing-boards.txt", ruleresult.NotRun, "boards.txt"}, + {"Core reference", "core-reference", ruleresult.Skip, "[cC]ore reference"}, {"Property missing", "compiler-warning_flags-none-missing-platform.txt", ruleresult.Fail, ""}, {"Valid", "valid-platform.txt", ruleresult.Pass, ""}, } @@ -465,6 +467,8 @@ func TestPlatformTxtCompilerWarningFlagsDefaultMissing(t *testing.T) { testTables := []platformRuleFunctionTestTable{ {"Missing", "missing-platform.txt", ruleresult.Skip, ""}, {"Invalid", "invalid-platform.txt", ruleresult.NotRun, ""}, + {"Missing boards.txt", "missing-boards.txt", ruleresult.NotRun, "boards.txt"}, + {"Core reference", "core-reference", ruleresult.Skip, "[cC]ore reference"}, {"Property missing", "compiler-warning_flags-default-missing-platform.txt", ruleresult.Fail, ""}, {"Valid", "valid-platform.txt", ruleresult.Pass, ""}, } @@ -476,6 +480,8 @@ func TestPlatformTxtCompilerWarningFlagsMoreMissing(t *testing.T) { testTables := []platformRuleFunctionTestTable{ {"Missing", "missing-platform.txt", ruleresult.Skip, ""}, {"Invalid", "invalid-platform.txt", ruleresult.NotRun, ""}, + {"Missing boards.txt", "missing-boards.txt", ruleresult.NotRun, "boards.txt"}, + {"Core reference", "core-reference", ruleresult.Skip, "[cC]ore reference"}, {"Property missing", "compiler-warning_flags-more-missing-platform.txt", ruleresult.Fail, ""}, {"Valid", "valid-platform.txt", ruleresult.Pass, ""}, } @@ -487,6 +493,8 @@ func TestPlatformTxtCompilerWarningFlagsAllMissing(t *testing.T) { testTables := []platformRuleFunctionTestTable{ {"Missing", "missing-platform.txt", ruleresult.Skip, ""}, {"Invalid", "invalid-platform.txt", ruleresult.NotRun, ""}, + {"Missing boards.txt", "missing-boards.txt", ruleresult.NotRun, "boards.txt"}, + {"Core reference", "core-reference", ruleresult.Skip, "[cC]ore reference"}, {"Property missing", "compiler-warning_flags-all-missing-platform.txt", ruleresult.Fail, ""}, {"Valid", "valid-platform.txt", ruleresult.Pass, ""}, } @@ -498,6 +506,8 @@ func TestPlatformTxtCompilerOptimizationFlagsDebugMissing(t *testing.T) { testTables := []platformRuleFunctionTestTable{ {"Missing", "missing-platform.txt", ruleresult.Skip, ""}, {"Invalid", "invalid-platform.txt", ruleresult.NotRun, ""}, + {"Missing boards.txt", "missing-boards.txt", ruleresult.NotRun, "boards.txt"}, + {"Core reference", "core-reference", ruleresult.Skip, "[cC]ore reference"}, {"Dependent property not present", "properties-missing-platform.txt", ruleresult.Skip, ""}, {"Property missing", "compiler-optimization_flags-debug-missing-platform.txt", ruleresult.Fail, ""}, {"Valid", "valid-platform.txt", ruleresult.Pass, ""}, @@ -510,6 +520,8 @@ func TestPlatformTxtCompilerOptimizationFlagsReleaseMissing(t *testing.T) { testTables := []platformRuleFunctionTestTable{ {"Missing", "missing-platform.txt", ruleresult.Skip, ""}, {"Invalid", "invalid-platform.txt", ruleresult.NotRun, ""}, + {"Missing boards.txt", "missing-boards.txt", ruleresult.NotRun, "boards.txt"}, + {"Core reference", "core-reference", ruleresult.Skip, "[cC]ore reference"}, {"Dependent property not present", "properties-missing-platform.txt", ruleresult.Skip, ""}, {"Property missing", "compiler-optimization_flags-release-missing-platform.txt", ruleresult.Fail, ""}, {"Valid", "valid-platform.txt", ruleresult.Pass, ""}, @@ -522,6 +534,8 @@ func TestPlatformTxtCompilerCExtraFlagsMissing(t *testing.T) { testTables := []platformRuleFunctionTestTable{ {"Missing", "missing-platform.txt", ruleresult.Skip, ""}, {"Invalid", "invalid-platform.txt", ruleresult.NotRun, ""}, + {"Missing boards.txt", "missing-boards.txt", ruleresult.NotRun, "boards.txt"}, + {"Core reference", "core-reference", ruleresult.Skip, "[cC]ore reference"}, {"Property missing", "compiler-c-extra_flags-missing-platform.txt", ruleresult.Fail, ""}, {"Valid", "valid-platform.txt", ruleresult.Pass, ""}, } @@ -545,6 +559,8 @@ func TestPlatformTxtCompilerCppExtraFlagsMissing(t *testing.T) { testTables := []platformRuleFunctionTestTable{ {"Missing", "missing-platform.txt", ruleresult.Skip, ""}, {"Invalid", "invalid-platform.txt", ruleresult.NotRun, ""}, + {"Missing boards.txt", "missing-boards.txt", ruleresult.NotRun, "boards.txt"}, + {"Core reference", "core-reference", ruleresult.Skip, "[cC]ore reference"}, {"Property missing", "compiler-cpp-extra_flags-missing-platform.txt", ruleresult.Fail, ""}, {"Valid", "valid-platform.txt", ruleresult.Pass, ""}, } @@ -568,6 +584,8 @@ func TestPlatformTxtCompilerSExtraFlagsMissing(t *testing.T) { testTables := []platformRuleFunctionTestTable{ {"Missing", "missing-platform.txt", ruleresult.Skip, ""}, {"Invalid", "invalid-platform.txt", ruleresult.NotRun, ""}, + {"Missing boards.txt", "missing-boards.txt", ruleresult.NotRun, "boards.txt"}, + {"Core reference", "core-reference", ruleresult.Skip, "[cC]ore reference"}, {"Property missing", "compiler-S-extra_flags-missing-platform.txt", ruleresult.Fail, ""}, {"Valid", "valid-platform.txt", ruleresult.Pass, ""}, } @@ -591,6 +609,8 @@ func TestPlatformTxtCompilerArExtraFlagsMissing(t *testing.T) { testTables := []platformRuleFunctionTestTable{ {"Missing", "missing-platform.txt", ruleresult.Skip, ""}, {"Invalid", "invalid-platform.txt", ruleresult.NotRun, ""}, + {"Missing boards.txt", "missing-boards.txt", ruleresult.NotRun, "boards.txt"}, + {"Core reference", "core-reference", ruleresult.Skip, "[cC]ore reference"}, {"Property missing", "compiler-ar-extra_flags-missing-platform.txt", ruleresult.Fail, ""}, {"Valid", "valid-platform.txt", ruleresult.Pass, ""}, } @@ -614,6 +634,8 @@ func TestPlatformTxtCompilerCElfExtraFlagsMissing(t *testing.T) { testTables := []platformRuleFunctionTestTable{ {"Missing", "missing-platform.txt", ruleresult.Skip, ""}, {"Invalid", "invalid-platform.txt", ruleresult.NotRun, ""}, + {"Missing boards.txt", "missing-boards.txt", ruleresult.NotRun, "boards.txt"}, + {"Core reference", "core-reference", ruleresult.Skip, "[cC]ore reference"}, {"Property missing", "compiler-c-elf-extra_flags-missing-platform.txt", ruleresult.Fail, ""}, {"Valid", "valid-platform.txt", ruleresult.Pass, ""}, } @@ -661,6 +683,8 @@ func TestPlatformTxtRecipeCOPatternMissing(t *testing.T) { testTables := []platformRuleFunctionTestTable{ {"Missing", "missing-platform.txt", ruleresult.Skip, ""}, {"Invalid", "invalid-platform.txt", ruleresult.NotRun, ""}, + {"Missing boards.txt", "missing-boards.txt", ruleresult.NotRun, "boards.txt"}, + {"Core reference", "core-reference", ruleresult.Skip, "[cC]ore reference"}, {"Property missing", "recipe-c-o-pattern-missing-platform.txt", ruleresult.Fail, ""}, {"Valid", "valid-platform.txt", ruleresult.Pass, ""}, } @@ -696,6 +720,8 @@ func TestPlatformTxtRecipeCppOPatternMissing(t *testing.T) { testTables := []platformRuleFunctionTestTable{ {"Missing", "missing-platform.txt", ruleresult.Skip, ""}, {"Invalid", "invalid-platform.txt", ruleresult.NotRun, ""}, + {"Missing boards.txt", "missing-boards.txt", ruleresult.NotRun, "boards.txt"}, + {"Core reference", "core-reference", ruleresult.Skip, "[cC]ore reference"}, {"Property missing", "recipe-cpp-o-pattern-missing-platform.txt", ruleresult.Fail, ""}, {"Valid", "valid-platform.txt", ruleresult.Pass, ""}, } @@ -731,6 +757,8 @@ func TestPlatformTxtRecipeSOPatternMissing(t *testing.T) { testTables := []platformRuleFunctionTestTable{ {"Missing", "missing-platform.txt", ruleresult.Skip, ""}, {"Invalid", "invalid-platform.txt", ruleresult.NotRun, ""}, + {"Missing boards.txt", "missing-boards.txt", ruleresult.NotRun, "boards.txt"}, + {"Core reference", "core-reference", ruleresult.Skip, "[cC]ore reference"}, {"Property missing", "recipe-S-o-pattern-missing-platform.txt", ruleresult.Fail, ""}, {"Valid", "valid-platform.txt", ruleresult.Pass, ""}, } @@ -766,6 +794,8 @@ func TestPlatformTxtRecipeArPatternMissing(t *testing.T) { testTables := []platformRuleFunctionTestTable{ {"Missing", "missing-platform.txt", ruleresult.Skip, ""}, {"Invalid", "invalid-platform.txt", ruleresult.NotRun, ""}, + {"Missing boards.txt", "missing-boards.txt", ruleresult.NotRun, "boards.txt"}, + {"Core reference", "core-reference", ruleresult.Skip, "[cC]ore reference"}, {"Property missing", "recipe-ar-pattern-missing-platform.txt", ruleresult.Fail, ""}, {"Valid", "valid-platform.txt", ruleresult.Pass, ""}, } @@ -801,6 +831,8 @@ func TestPlatformTxtRecipeCCombinePatternMissing(t *testing.T) { testTables := []platformRuleFunctionTestTable{ {"Missing", "missing-platform.txt", ruleresult.Skip, ""}, {"Invalid", "invalid-platform.txt", ruleresult.NotRun, ""}, + {"Missing boards.txt", "missing-boards.txt", ruleresult.NotRun, "boards.txt"}, + {"Core reference", "core-reference", ruleresult.Skip, "[cC]ore reference"}, {"Property missing", "recipe-c-combine-pattern-missing-platform.txt", ruleresult.Fail, ""}, {"Valid", "valid-platform.txt", ruleresult.Pass, ""}, } @@ -836,6 +868,8 @@ func TestPlatformTxtRecipeOutputTmpFileMissing(t *testing.T) { testTables := []platformRuleFunctionTestTable{ {"Missing", "missing-platform.txt", ruleresult.Skip, ""}, {"Invalid", "invalid-platform.txt", ruleresult.NotRun, ""}, + {"Missing boards.txt", "missing-boards.txt", ruleresult.NotRun, "boards.txt"}, + {"Core reference", "core-reference", ruleresult.Skip, "[cC]ore reference"}, {"Property missing", "recipe-output-tmp_file-missing-platform.txt", ruleresult.Fail, ""}, {"Valid", "valid-platform.txt", ruleresult.Pass, ""}, } @@ -859,6 +893,8 @@ func TestPlatformTxtRecipeOutputSaveFileMissing(t *testing.T) { testTables := []platformRuleFunctionTestTable{ {"Missing", "missing-platform.txt", ruleresult.Skip, ""}, {"Invalid", "invalid-platform.txt", ruleresult.NotRun, ""}, + {"Missing boards.txt", "missing-boards.txt", ruleresult.NotRun, "boards.txt"}, + {"Core reference", "core-reference", ruleresult.Skip, "[cC]ore reference"}, {"Property missing", "recipe-output-save_file-missing-platform.txt", ruleresult.Fail, ""}, {"Valid", "valid-platform.txt", ruleresult.Pass, ""}, } @@ -882,6 +918,8 @@ func TestPlatformTxtRecipeSizePatternMissing(t *testing.T) { testTables := []platformRuleFunctionTestTable{ {"Missing", "missing-platform.txt", ruleresult.Skip, ""}, {"Invalid", "invalid-platform.txt", ruleresult.NotRun, ""}, + {"Missing boards.txt", "missing-boards.txt", ruleresult.NotRun, "boards.txt"}, + {"Core reference", "core-reference", ruleresult.Skip, "[cC]ore reference"}, {"Property missing", "recipe-size-pattern-missing-platform.txt", ruleresult.Fail, ""}, {"Valid", "valid-platform.txt", ruleresult.Pass, ""}, } @@ -905,6 +943,8 @@ func TestPlatformTxtRecipeSizeRegexMissing(t *testing.T) { testTables := []platformRuleFunctionTestTable{ {"Missing", "missing-platform.txt", ruleresult.Skip, ""}, {"Invalid", "invalid-platform.txt", ruleresult.NotRun, ""}, + {"Missing boards.txt", "missing-boards.txt", ruleresult.NotRun, "boards.txt"}, + {"Core reference", "core-reference", ruleresult.Skip, "[cC]ore reference"}, {"Property missing", "recipe-size-regex-missing-platform.txt", ruleresult.Fail, ""}, {"Valid", "valid-platform.txt", ruleresult.Pass, ""}, } @@ -916,6 +956,8 @@ func TestPlatformTxtRecipeSizeRegexDataMissing(t *testing.T) { testTables := []platformRuleFunctionTestTable{ {"Missing", "missing-platform.txt", ruleresult.Skip, ""}, {"Invalid", "invalid-platform.txt", ruleresult.NotRun, ""}, + {"Missing boards.txt", "missing-boards.txt", ruleresult.NotRun, "boards.txt"}, + {"Core reference", "core-reference", ruleresult.Skip, "[cC]ore reference"}, {"Property missing", "recipe-size-regex-data-missing-platform.txt", ruleresult.Fail, ""}, {"Valid", "valid-platform.txt", ruleresult.Pass, ""}, } diff --git a/internal/rule/rulefunction/testdata/platforms/core-reference/boards.txt b/internal/rule/rulefunction/testdata/platforms/core-reference/boards.txt new file mode 100644 index 00000000..15d736c1 --- /dev/null +++ b/internal/rule/rulefunction/testdata/platforms/core-reference/boards.txt @@ -0,0 +1,23 @@ +buno.name=Buno +buno.build.board=BUNO +buno.build.core=arduino:arduino +buno.build.variant=standard +buno.upload.tool=avrdude +buno.upload.maximum_size=32256 +buno.upload.maximum_data_size=2048 + +uno.name=Arduino Uno +uno.build.board=UNO +uno.build.core=arduino:arduino +uno.build.variant=standard +uno.upload.tool=avrdude +uno.upload.maximum_size=32256 +uno.upload.maximum_data_size=2048 + +funo.name=Funo +funo.build.board=FUNO +funo.build.core=arduino:arduino +funo.build.variant=standard +funo.upload.tool=avrdude +funo.upload.maximum_size=32256 +funo.upload.maximum_data_size=2048 diff --git a/internal/rule/rulefunction/testdata/platforms/core-reference/platform.txt b/internal/rule/rulefunction/testdata/platforms/core-reference/platform.txt new file mode 100644 index 00000000..2788eb6d --- /dev/null +++ b/internal/rule/rulefunction/testdata/platforms/core-reference/platform.txt @@ -0,0 +1,2 @@ +name=Arduino AVR Boards +version=1.8.3 diff --git a/internal/rule/rulefunction/testdata/platforms/missing-boards.txt/platform.txt b/internal/rule/rulefunction/testdata/platforms/missing-boards.txt/platform.txt new file mode 100644 index 00000000..dec708ad --- /dev/null +++ b/internal/rule/rulefunction/testdata/platforms/missing-boards.txt/platform.txt @@ -0,0 +1,52 @@ +name=Arduino AVR Boards +version=1.8.3 +compiler.warning_flags.none=asdf +compiler.warning_flags.default=asdf +compiler.warning_flags.more=asdf +compiler.warning_flags.all=asdf +compiler.optimization_flags.debug= +compiler.optimization_flags.release= +compiler.c.extra_flags= +compiler.c.elf.extra_flags= +compiler.S.extra_flags= +compiler.cpp.extra_flags= +compiler.ar.extra_flags= +compiler.objcopy.eep.extra_flags= +compiler.elf2hex.extra_flags= +recipe.c.o.pattern=asdf {compiler.c.extra_flags} +recipe.cpp.o.pattern=asdf {compiler.cpp.extra_flags} +recipe.S.o.pattern=asdf {compiler.S.extra_flags} +recipe.ar.pattern=asdf {compiler.ar.extra_flags} +recipe.c.combine.pattern=asdf {compiler.c.elf.extra_flags} +recipe.preproc.macros=asdf {compiler.cpp.extra_flags} +recipe.objcopy.eep.pattern=asdf +recipe.objcopy.hex.pattern=asdf +recipe.output.tmp_file=asdf +recipe.output.save_file=asdf +recipe.size.pattern=asdf +recipe.size.regex=asdf +recipe.size.regex.data=asdf +tools.avrdude.upload.params.verbose=-v +tools.avrdude.upload.params.quiet=-q -q +tools.avrdude.upload.pattern=asdf +tools.bossac.upload.params.verbose=-v +tools.bossac.upload.params.quiet=-q -q +tools.bossac.upload.pattern=asdf +tools.avrdude.program.params.verbose=-v +tools.avrdude.program.params.quiet=-q -q +tools.avrdude.program.pattern=asdf +tools.bossac.program.params.verbose=-v +tools.bossac.program.params.quiet=-q -q +tools.bossac.program.pattern=asdf +tools.avrdude.erase.params.verbose=-v +tools.avrdude.erase.params.quiet=-q -q +tools.avrdude.erase.pattern=asdf +tools.bossac.erase.params.verbose=-v +tools.bossac.erase.params.quiet=-q -q +tools.bossac.erase.pattern=asdf +tools.avrdude.bootloader.params.verbose=-v +tools.avrdude.bootloader.params.quiet=-q -q +tools.avrdude.bootloader.pattern=asdf +tools.bossac.bootloader.params.verbose=-v +tools.bossac.bootloader.params.quiet=-q -q +tools.bossac.bootloader.pattern=asdf