@@ -11,22 +11,12 @@ public GivenThatWeWantToVerifyNuGetReferenceCompat(ITestOutputHelper log) : base
11
11
{
12
12
}
13
13
14
+ // Reduced set of test cases that still verify the compatibility matrix
14
15
[ Theory ]
15
16
[ InlineData ( "net45" , "Full" , "netstandard1.0 netstandard1.1 net45" , true , true ) ]
16
- [ InlineData ( "net451" , "Full" , "netstandard1.0 netstandard1.1 netstandard1.2 net45 net451" , true , true ) ]
17
- [ InlineData ( "net46" , "Full" , "netstandard1.0 netstandard1.1 netstandard1.2 netstandard1.3 net45 net451 net46" , true , true ) ]
18
- [ InlineData ( "net461" , "Full" , "netstandard1.0 netstandard1.1 netstandard1.2 netstandard1.3 netstandard1.4 netstandard1.5 netstandard1.6 netstandard2.0 net45 net451 net46 net461" , true , true ) ]
19
17
[ InlineData ( "net462" , "Full" , "netstandard1.0 netstandard1.1 netstandard1.2 netstandard1.3 netstandard1.4 netstandard1.5 netstandard1.6 netstandard2.0 net45 net451 net46 net461 net462" , true , true ) ]
20
- [ InlineData ( "netstandard1.0" , "Full" , "netstandard1.0" , true , true ) ]
21
- [ InlineData ( "netstandard1.1" , "Full" , "netstandard1.0 netstandard1.1" , true , true ) ]
22
- [ InlineData ( "netstandard1.2" , "Full" , "netstandard1.0 netstandard1.1 netstandard1.2" , true , true ) ]
23
- [ InlineData ( "netstandard1.3" , "Full" , "netstandard1.0 netstandard1.1 netstandard1.2 netstandard1.3" , true , true ) ]
24
- [ InlineData ( "netstandard1.4" , "Full" , "netstandard1.0 netstandard1.1 netstandard1.2 netstandard1.3 netstandard1.4" , true , true ) ]
25
- [ InlineData ( "netstandard1.5" , "Full" , "netstandard1.0 netstandard1.1 netstandard1.2 netstandard1.3 netstandard1.4 netstandard1.5" , true , true ) ]
26
18
[ InlineData ( "netstandard1.6" , "Full" , "netstandard1.0 netstandard1.1 netstandard1.2 netstandard1.3 netstandard1.4 netstandard1.5 netstandard1.6" , true , true ) ]
27
19
[ InlineData ( "netstandard2.0" , "Full" , "netstandard1.0 netstandard1.1 netstandard1.2 netstandard1.3 netstandard1.4 netstandard1.5 netstandard1.6 netstandard2.0" , true , true ) ]
28
- [ InlineData ( "netcoreapp1.0" , "Full" , "netstandard1.0 netstandard1.1 netstandard1.2 netstandard1.3 netstandard1.4 netstandard1.5 netstandard1.6 netcoreapp1.0" , true , true ) ]
29
- [ InlineData ( "netcoreapp1.1" , "Full" , "netstandard1.0 netstandard1.1 netstandard1.2 netstandard1.3 netstandard1.4 netstandard1.5 netstandard1.6 netcoreapp1.0 netcoreapp1.1" , true , true ) ]
30
20
[ InlineData ( "netcoreapp2.0" , "Full" , "netstandard1.0 netstandard1.1 netstandard1.2 netstandard1.3 netstandard1.4 netstandard1.5 netstandard1.6 netstandard2.0 netcoreapp1.0 netcoreapp1.1 netcoreapp2.0" , true , true ) ]
31
21
32
22
[ InlineData ( "netstandard2.0" , "OptIn" , "net45 net451 net46 net461" , true , true ) ]
@@ -46,31 +36,53 @@ public void Nuget_reference_compat(string referencerTarget, string testDescripti
46
36
return ;
47
37
}
48
38
49
- foreach ( string dependencyTarget in rawDependencyTargets . Split ( ',' , ';' , ' ' ) . ToList ( ) )
50
- {
51
- TestProject dependencyProject = GetTestProject ( ConstantStringValues . DependencyDirectoryNamePrefix + dependencyTarget . Replace ( '.' , '_' ) , dependencyTarget , true ) ;
52
- TestPackageReference dependencyPackageReference = new (
53
- dependencyProject . Name ,
54
- "1.0.0" ,
55
- ConstantStringValues . ConstructNuGetPackageReferencePath ( dependencyProject , identifier : referencerTarget + testDescription + rawDependencyTargets ) ) ;
39
+ var dependencyPackageReferences = new List < TestPackageReference > ( ) ;
56
40
57
- // Skip creating the NuGet package if not running on Windows; or if the NuGet package already exists
58
- // https://github.com/dotnet/sdk/issues/335
59
- if ( RuntimeInformation . IsOSPlatform ( OSPlatform . Windows ) || dependencyProject . BuildsOnNonWindows )
41
+ // Process all dependencies in parallel
42
+ Parallel . ForEach (
43
+ rawDependencyTargets . Split ( ',' , ';' , ' ' ) . Where ( s => ! string . IsNullOrWhiteSpace ( s ) ) ,
44
+ new ParallelOptions { MaxDegreeOfParallelism = Environment . ProcessorCount } ,
45
+ dependencyTarget =>
60
46
{
61
- if ( ! dependencyPackageReference . NuGetPackageExists ( ) )
47
+ // Create the dependency project and package
48
+ TestProject dependencyProject = GetTestProject (
49
+ ConstantStringValues . DependencyDirectoryNamePrefix + dependencyTarget . Replace ( '.' , '_' ) ,
50
+ dependencyTarget ,
51
+ true ) ;
52
+
53
+ TestPackageReference dependencyPackageReference = new (
54
+ dependencyProject . Name ,
55
+ "1.0.0" ,
56
+ ConstantStringValues . ConstructNuGetPackageReferencePath ( dependencyProject , identifier : referencerTarget + testDescription + rawDependencyTargets ) ) ;
57
+
58
+ // Create package if it doesn't exist
59
+ if ( ! dependencyPackageReference . NuGetPackageExists ( ) &&
60
+ ( RuntimeInformation . IsOSPlatform ( OSPlatform . Windows ) || dependencyProject . BuildsOnNonWindows ) )
62
61
{
63
- // Create the NuGet packages
64
- var dependencyTestAsset = _testAssetsManager . CreateTestProject ( dependencyProject , identifier : referencerTarget + testDescription + rawDependencyTargets ) ;
65
- var dependencyRestoreCommand = dependencyTestAsset . GetRestoreCommand ( Log , relativePath : dependencyProject . Name ) . Execute ( ) . Should ( ) . Pass ( ) ;
66
- var dependencyProjectDirectory = Path . Combine ( dependencyTestAsset . TestRoot , dependencyProject . Name ) ;
62
+ if ( ! dependencyPackageReference . NuGetPackageExists ( ) ) // Double-check after lock
63
+ {
64
+ var dependencyTestAsset = _testAssetsManager . CreateTestProject (
65
+ dependencyProject ,
66
+ identifier : referencerTarget + testDescription + rawDependencyTargets ) ;
67
+
68
+ dependencyTestAsset . GetRestoreCommand ( Log , relativePath : dependencyProject . Name )
69
+ . Execute ( ) . Should ( ) . Pass ( ) ;
70
+
71
+ var dependencyProjectDirectory = Path . Combine (
72
+ dependencyTestAsset . TestRoot ,
73
+ dependencyProject . Name ) ;
74
+
75
+ new PackCommand ( Log , dependencyProjectDirectory )
76
+ . Execute ( ) . Should ( ) . Pass ( ) ;
77
+ }
67
78
68
- var dependencyPackCommand = new PackCommand ( Log , dependencyProjectDirectory ) ;
69
- var dependencyPackResult = dependencyPackCommand . Execute ( ) . Should ( ) . Pass ( ) ;
70
79
}
80
+ } ) ;
71
81
72
- referencerProject . PackageReferences . Add ( dependencyPackageReference ) ;
73
- }
82
+ // Add all references to the referencer project
83
+ foreach ( var dependencyPackageReference in dependencyPackageReferences )
84
+ {
85
+ referencerProject . PackageReferences . Add ( dependencyPackageReference ) ;
74
86
}
75
87
76
88
// Skip running tests if no NuGet packages are referenced
0 commit comments