@@ -33,7 +33,8 @@ private static IPackageService CreateService(
3333 Mock < ISecurityPolicyService > securityPolicyService = null ,
3434 Action < Mock < PackageService > > setup = null ,
3535 Mock < IEntitiesContext > context = null ,
36- Mock < IContentObjectService > contentObjectService = null )
36+ Mock < IContentObjectService > contentObjectService = null ,
37+ Mock < IFeatureFlagService > featureFlagService = null )
3738 {
3839 packageRegistrationRepository = packageRegistrationRepository ?? new Mock < IEntityRepository < PackageRegistration > > ( ) ;
3940 packageRepository = packageRepository ?? new Mock < IEntityRepository < Package > > ( ) ;
@@ -49,6 +50,12 @@ private static IPackageService CreateService(
4950 contentObjectService . Setup ( x => x . QueryHintConfiguration ) . Returns ( Mock . Of < IQueryHintConfiguration > ( ) ) ;
5051 }
5152
53+ if ( featureFlagService == null )
54+ {
55+ featureFlagService = new Mock < IFeatureFlagService > ( ) ;
56+ featureFlagService . Setup ( x => x . ArePatternSetTfmHeuristicsEnabled ( ) ) . Returns ( true ) ;
57+ }
58+
5259 var packageService = new Mock < PackageService > (
5360 packageRegistrationRepository . Object ,
5461 packageRepository . Object ,
@@ -57,7 +64,8 @@ private static IPackageService CreateService(
5764 telemetryService . Object ,
5865 securityPolicyService . Object ,
5966 context . Object ,
60- contentObjectService . Object ) ;
67+ contentObjectService . Object ,
68+ featureFlagService . Object ) ;
6169
6270 packageService . CallBase = true ;
6371
@@ -970,6 +978,41 @@ private async Task WillNotSaveAnySupportedFrameworksWhenThereIsAnAnyTargetFramew
970978 Assert . Empty ( package . SupportedFrameworks ) ;
971979 }
972980
981+ [ Theory ]
982+ [ InlineData ( false , new [ ] { "net40" , "net5.0" , "netcore21" } ) ]
983+ [ InlineData ( true , new [ ] { "net5.0" , "netcore21" } ) ]
984+ private void UsesTfmHeuristicsBasedOnFeatureFlag ( bool useNewTfmHeuristics , IEnumerable < string > expectedSupportedTfms )
985+ {
986+ // arrange
987+ // - create a package that responds differently to each set of heuristics
988+ var nuspec =
989+ $@ "<?xml version=""1.0""?>
990+ <package xmlns = ""http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd"">
991+ <metadata>
992+ <id>Foo</id>
993+ <frameworkAssemblies>
994+ <frameworkAssembly assemblyName=""System"" targetFramework="".NETFramework4.0"" />
995+ </frameworkAssemblies>
996+ </metadata>
997+ </package>" ;
998+ var nuspecReader = new NuspecReader ( XDocument . Parse ( nuspec ) ) ;
999+ var files = new List < string > { "lib/netcore2.1/_._" , "lib/net5.0/_._" } ;
1000+ var package = new MockPackageArchiveReader ( nuspecReader , files ) ;
1001+
1002+ // - create feature flag services and package services for both scenarios
1003+ var featureFlagService = new Mock < IFeatureFlagService > ( ) ;
1004+ featureFlagService . Setup ( x => x . ArePatternSetTfmHeuristicsEnabled ( ) ) . Returns ( useNewTfmHeuristics ) ;
1005+
1006+ // act
1007+ var supportedFrameworks = CreateService ( featureFlagService : featureFlagService ) . GetSupportedFrameworks ( package )
1008+ . Select ( f => f . GetShortFolderName ( ) )
1009+ . OrderBy ( f => f )
1010+ . ToList ( ) ;
1011+
1012+ // assert
1013+ Assert . Equal < string > ( expectedSupportedTfms , supportedFrameworks ) ;
1014+ }
1015+
9731016 [ Theory ]
9741017 [ MemberData ( nameof ( TargetFrameworkCases ) ) ]
9751018 private void DeterminesCorrectSupportedFrameworksFromFileList ( bool isTools , List < string > files , List < string > expectedSupportedFrameworks )
@@ -991,9 +1034,7 @@ private void DeterminesCorrectSupportedFrameworksFromFileList(bool isTools, List
9911034 <id>Foo</id>
9921035 </metadata>
9931036 </package>" ;
994- var xml = XDocument . Parse ( nuspec ) ;
995-
996- var nuspecReader = new NuspecReader ( xml ) ;
1037+ var nuspecReader = new NuspecReader ( XDocument . Parse ( nuspec ) ) ;
9971038
9981039 // act
9991040 var supportedFrameworks = CreateService ( ) . GetSupportedFrameworks ( nuspecReader , files )
0 commit comments