Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 9ba7599

Browse files
committed
Allow selection of build.core and build.variant with variables substitution
1 parent c3edbd3 commit 9ba7599

File tree

3 files changed

+145
-2
lines changed

3 files changed

+145
-2
lines changed

‎arduino/cores/packagemanager/package_manager.go‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -380,13 +380,13 @@ func (pme *Explorer) ResolveFQBN(fqbn *cores.FQBN) (
380380
}
381381

382382
func (pme *Explorer) determineReferencedPlatformRelease(boardBuildProperties *properties.Map, boardPlatformRelease *cores.PlatformRelease, fqbn *cores.FQBN) (string, *cores.PlatformRelease, string, *cores.PlatformRelease, error) {
383-
core := boardBuildProperties.Get("build.core")
383+
core := boardBuildProperties.ExpandPropsInString(boardBuildProperties.Get("build.core"))
384384
referredCore := ""
385385
if split := strings.Split(core, ":"); len(split) > 1 {
386386
referredCore, core = split[0], split[1]
387387
}
388388

389-
variant := boardBuildProperties.Get("build.variant")
389+
variant := boardBuildProperties.ExpandPropsInString(boardBuildProperties.Get("build.variant"))
390390
referredVariant := ""
391391
if split := strings.Split(variant, ":"); len(split) > 1 {
392392
referredVariant, variant = split[0], split[1]

‎arduino/cores/packagemanager/package_manager_test.go‎

Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -807,6 +807,102 @@ func TestLegacyPackageConversionToPluggableDiscovery(t *testing.T) {
807807
}
808808
}
809809

810+
func TestVariantAndCoreSelection(t *testing.T) {
811+
// Pass nil, since these paths are only used for installing
812+
pmb := NewBuilder(nil, nil, nil, nil, "test")
813+
// Hardware from main packages directory
814+
pmb.LoadHardwareFromDirectory(dataDir1.Join("packages"))
815+
pm := pmb.Build()
816+
pme, release := pm.NewExplorer()
817+
defer release()
818+
819+
requireSameFile := func(f1, f2 *paths.Path) {
820+
require.True(t, f1.EquivalentTo(f2), "%s must be equivalent to %s", f1, f2)
821+
}
822+
823+
// build.core test suite
824+
t.Run("CoreWithoutSubstitutions", func(t *testing.T) {
825+
fqbn, err := cores.ParseFQBN("test2:avr:test")
826+
require.NoError(t, err)
827+
require.NotNil(t, fqbn)
828+
_, _, _, buildProps, _, err := pme.ResolveFQBN(fqbn)
829+
require.NoError(t, err)
830+
require.Equal(t, "arduino", buildProps.Get("build.core"))
831+
requireSameFile(buildProps.GetPath("build.core.path"), dataDir1.Join("packages", "test2", "hardware", "avr", "1.0.0", "cores", "arduino"))
832+
})
833+
t.Run("CoreWithSubstitutions", func(t *testing.T) {
834+
fqbn, err := cores.ParseFQBN("test2:avr:test2")
835+
require.NoError(t, err)
836+
require.NotNil(t, fqbn)
837+
_, _, _, buildProps, _, err := pme.ResolveFQBN(fqbn)
838+
require.NoError(t, err)
839+
require.Equal(t, "{my_core}", buildProps.Get("build.core"))
840+
require.Equal(t, "arduino", buildProps.Get("my_core"))
841+
requireSameFile(buildProps.GetPath("build.core.path"), dataDir1.Join("packages", "test2", "hardware", "avr", "1.0.0", "cores", "arduino"))
842+
})
843+
t.Run("CoreWithSubstitutionsAndDefaultOption", func(t *testing.T) {
844+
fqbn, err := cores.ParseFQBN("test2:avr:test3")
845+
require.NoError(t, err)
846+
require.NotNil(t, fqbn)
847+
_, _, _, buildProps, _, err := pme.ResolveFQBN(fqbn)
848+
require.NoError(t, err)
849+
require.Equal(t, "{my_core}", buildProps.Get("build.core"))
850+
require.Equal(t, "arduino", buildProps.Get("my_core"))
851+
requireSameFile(buildProps.GetPath("build.core.path"), dataDir1.Join("packages", "test2", "hardware", "avr", "1.0.0", "cores", "arduino"))
852+
})
853+
t.Run("CoreWithSubstitutionsAndNonDefaultOption", func(t *testing.T) {
854+
fqbn, err := cores.ParseFQBN("test2:avr:test3:core=referenced")
855+
require.NoError(t, err)
856+
require.NotNil(t, fqbn)
857+
_, _, _, buildProps, _, err := pme.ResolveFQBN(fqbn)
858+
require.NoError(t, err)
859+
require.Equal(t, "{my_core}", buildProps.Get("build.core"))
860+
require.Equal(t, "arduino:arduino", buildProps.Get("my_core"))
861+
requireSameFile(buildProps.GetPath("build.core.path"), dataDir1.Join("packages", "arduino", "hardware", "avr", "1.8.3", "cores", "arduino"))
862+
})
863+
864+
// build.variant test suite
865+
t.Run("VariantWithoutSubstitutions", func(t *testing.T) {
866+
fqbn, err := cores.ParseFQBN("test2:avr:test4")
867+
require.NoError(t, err)
868+
require.NotNil(t, fqbn)
869+
_, _, _, buildProps, _, err := pme.ResolveFQBN(fqbn)
870+
require.NoError(t, err)
871+
require.Equal(t, "standard", buildProps.Get("build.variant"))
872+
requireSameFile(buildProps.GetPath("build.variant.path"), dataDir1.Join("packages", "test2", "hardware", "avr", "1.0.0", "variants", "standard"))
873+
})
874+
t.Run("VariantWithSubstitutions", func(t *testing.T) {
875+
fqbn, err := cores.ParseFQBN("test2:avr:test5")
876+
require.NoError(t, err)
877+
require.NotNil(t, fqbn)
878+
_, _, _, buildProps, _, err := pme.ResolveFQBN(fqbn)
879+
require.NoError(t, err)
880+
require.Equal(t, "{my_variant}", buildProps.Get("build.variant"))
881+
require.Equal(t, "standard", buildProps.Get("my_variant"))
882+
requireSameFile(buildProps.GetPath("build.variant.path"), dataDir1.Join("packages", "test2", "hardware", "avr", "1.0.0", "variants", "standard"))
883+
})
884+
t.Run("VariantWithSubstitutionsAndDefaultOption", func(t *testing.T) {
885+
fqbn, err := cores.ParseFQBN("test2:avr:test6")
886+
require.NoError(t, err)
887+
require.NotNil(t, fqbn)
888+
_, _, _, buildProps, _, err := pme.ResolveFQBN(fqbn)
889+
require.NoError(t, err)
890+
require.Equal(t, "{my_variant}", buildProps.Get("build.variant"))
891+
require.Equal(t, "standard", buildProps.Get("my_variant"))
892+
requireSameFile(buildProps.GetPath("build.variant.path"), dataDir1.Join("packages", "test2", "hardware", "avr", "1.0.0", "variants", "standard"))
893+
})
894+
t.Run("VariantWithSubstitutionsAndNonDefaultOption", func(t *testing.T) {
895+
fqbn, err := cores.ParseFQBN("test2:avr:test6:variant=referenced")
896+
require.NoError(t, err)
897+
require.NotNil(t, fqbn)
898+
_, _, _, buildProps, _, err := pme.ResolveFQBN(fqbn)
899+
require.NoError(t, err)
900+
require.Equal(t, "{my_variant}", buildProps.Get("build.variant"))
901+
require.Equal(t, "arduino:standard", buildProps.Get("my_variant"))
902+
requireSameFile(buildProps.GetPath("build.variant.path"), dataDir1.Join("packages", "arduino", "hardware", "avr", "1.8.3", "variants", "standard"))
903+
})
904+
}
905+
810906
func TestRunPostInstall(t *testing.T) {
811907
pmb := NewBuilder(nil, nil, nil, nil, "test")
812908
pm := pmb.Build()
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
menu.core=Core
2+
menu.variant=Variant
3+
4+
## Test cases for core selection
5+
6+
test.name=Test Board
7+
test.build.board=AVR_TEST
8+
test.build.core=arduino
9+
test.build.variant=standard
10+
11+
test2.name=Test Board 2
12+
test2.build.board=AVR_TEST_2
13+
test2.build.core={my_core}
14+
test2.my_core=arduino
15+
test2.build.variant=standard
16+
17+
test3.name=Test Board 2
18+
test3.build.board=AVR_TEST_2
19+
test3.build.core={my_core}
20+
test3.my_core=arduino
21+
test3.build.variant=standard
22+
test3.menu.core.default=Default
23+
test3.menu.core.referenced=Referenced
24+
test3.menu.core.referenced.my_core=arduino:arduino
25+
26+
## Test cases for variant selection
27+
28+
test4.name=Test Board
29+
test4.build.board=AVR_TEST
30+
test4.build.core=arduino
31+
test4.build.variant=standard
32+
33+
test5.name=Test Board 2
34+
test5.build.board=AVR_TEST_2
35+
test5.build.core=arduino
36+
test5.my_variant=standard
37+
test5.build.variant={my_variant}
38+
39+
test6.name=Test Board 2
40+
test6.build.board=AVR_TEST_2
41+
test5.build.core=arduino
42+
test6.my_variant=standard
43+
test6.build.variant={my_variant}
44+
test6.menu.variant.default=Default
45+
test6.menu.variant.referenced=Referenced
46+
test6.menu.variant.referenced.my_variant=arduino:standard
47+

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /