@@ -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