From 3c54c1c0bbb24b4b785be9ba1ec747a60a6610a2 Mon Sep 17 00:00:00 2001 From: per1234 Date: Mon, 11 Jan 2021 15:28:13 -0800 Subject: [PATCH] Adjust platform.txt required properties according to core reference When a platform uses a core reference, it inherits the properties from the platform.txt of the referenced platform. This means that the required properties may be provided by the referenced platform and so are no longer required. --- internal/rule/rulefunction/platform.go | 191 ++++++++++++++++++ internal/rule/rulefunction/platform_test.go | 42 ++++ .../platforms/core-reference/boards.txt | 23 +++ .../platforms/core-reference/platform.txt | 2 + .../platforms/missing-boards.txt/platform.txt | 52 +++++ 5 files changed, 310 insertions(+) create mode 100644 internal/rule/rulefunction/testdata/platforms/core-reference/boards.txt create mode 100644 internal/rule/rulefunction/testdata/platforms/core-reference/platform.txt create mode 100644 internal/rule/rulefunction/testdata/platforms/missing-boards.txt/platform.txt 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