@@ -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+
810906func TestRunPostInstall (t * testing.T ) {
811907 pmb := NewBuilder (nil , nil , nil , nil , "test" )
812908 pm := pmb .Build ()
0 commit comments