From 4ea37c91a8d208b4fc1ecce51a6a76747136cd40 Mon Sep 17 00:00:00 2001 From: Justin Goshi Date: Mon, 31 Oct 2016 13:59:47 -0700 Subject: [PATCH 1/3] Migrate: add package dependencies to test projects --- .../PackageConstants.cs | 6 +++++ .../ProjectExtensions.cs | 4 +++ .../ProjectType.cs | 3 ++- .../MigratePackageDependenciesAndToolsRule.cs | 25 +++++++++++++++++++ ...enThatIWantToMigratePackageDependencies.cs | 22 ++++++++++++++++ 5 files changed, 59 insertions(+), 1 deletion(-) diff --git a/src/Microsoft.DotNet.ProjectJsonMigration/PackageConstants.cs b/src/Microsoft.DotNet.ProjectJsonMigration/PackageConstants.cs index 8df052a58..f342151b9 100644 --- a/src/Microsoft.DotNet.ProjectJsonMigration/PackageConstants.cs +++ b/src/Microsoft.DotNet.ProjectJsonMigration/PackageConstants.cs @@ -7,5 +7,11 @@ namespace Microsoft.DotNet.ProjectJsonMigration { public const string SdkPackageName = "Microsoft.NET.Sdk"; public const string WebSdkPackageName = "Microsoft.NET.Sdk.Web"; + public const string TestSdkPackageName = "Microsoft.NET.Test.Sdk"; + public const string TestSdkPackageVersion = "15.0.0-preview-20161024-02"; + public const string XUnitPackageName = "xunit"; + public const string XUnitPackageVersion = "2.2.0-beta3-build3402"; + public const string XUnitRunnerPackageName = "xunit.runner.visualstudio"; + public const string XUnitRunnerPackageVersion = "2.2.0-beta4-build1188"; } } \ No newline at end of file diff --git a/src/Microsoft.DotNet.ProjectJsonMigration/ProjectExtensions.cs b/src/Microsoft.DotNet.ProjectJsonMigration/ProjectExtensions.cs index d08310122..a2e754d26 100644 --- a/src/Microsoft.DotNet.ProjectJsonMigration/ProjectExtensions.cs +++ b/src/Microsoft.DotNet.ProjectJsonMigration/ProjectExtensions.cs @@ -18,6 +18,10 @@ namespace Microsoft.DotNet.ProjectJsonMigration { projectType = ProjectType.Web; } + else if (project.IsTestProject) + { + projectType = ProjectType.Test; + } return projectType; } diff --git a/src/Microsoft.DotNet.ProjectJsonMigration/ProjectType.cs b/src/Microsoft.DotNet.ProjectJsonMigration/ProjectType.cs index 97001ace2..659ee6d5d 100644 --- a/src/Microsoft.DotNet.ProjectJsonMigration/ProjectType.cs +++ b/src/Microsoft.DotNet.ProjectJsonMigration/ProjectType.cs @@ -3,6 +3,7 @@ namespace Microsoft.DotNet.ProjectJsonMigration internal enum ProjectType { Console, - Web + Web, + Test } } \ No newline at end of file diff --git a/src/Microsoft.DotNet.ProjectJsonMigration/Rules/MigratePackageDependenciesAndToolsRule.cs b/src/Microsoft.DotNet.ProjectJsonMigration/Rules/MigratePackageDependenciesAndToolsRule.cs index 1e1ec3351..a9d9ef6ac 100644 --- a/src/Microsoft.DotNet.ProjectJsonMigration/Rules/MigratePackageDependenciesAndToolsRule.cs +++ b/src/Microsoft.DotNet.ProjectJsonMigration/Rules/MigratePackageDependenciesAndToolsRule.cs @@ -99,6 +99,31 @@ namespace Microsoft.DotNet.ProjectJsonMigration.Rules PrivateAssets = "All" }), noFrameworkPackageReferenceItemGroup, mergeExisting: false); break; + case ProjectType.Test: + _transformApplicator.Execute( + PackageDependencyInfoTransform.Transform( + new PackageDependencyInfo + { + Name = PackageConstants.TestSdkPackageName, + Version = PackageConstants.TestSdkPackageVersion + }), noFrameworkPackageReferenceItemGroup, mergeExisting: false); + + _transformApplicator.Execute( + PackageDependencyInfoTransform.Transform( + new PackageDependencyInfo + { + Name = PackageConstants.XUnitPackageName, + Version = PackageConstants.XUnitPackageVersion + }), noFrameworkPackageReferenceItemGroup, mergeExisting: false); + + _transformApplicator.Execute( + PackageDependencyInfoTransform.Transform( + new PackageDependencyInfo + { + Name = PackageConstants.XUnitRunnerPackageName, + Version = PackageConstants.XUnitRunnerPackageVersion + }), noFrameworkPackageReferenceItemGroup, mergeExisting: false); + break; default: break; } diff --git a/test/Microsoft.DotNet.ProjectJsonMigration.Tests/Rules/GivenThatIWantToMigratePackageDependencies.cs b/test/Microsoft.DotNet.ProjectJsonMigration.Tests/Rules/GivenThatIWantToMigratePackageDependencies.cs index 071b69dca..bb415e986 100644 --- a/test/Microsoft.DotNet.ProjectJsonMigration.Tests/Rules/GivenThatIWantToMigratePackageDependencies.cs +++ b/test/Microsoft.DotNet.ProjectJsonMigration.Tests/Rules/GivenThatIWantToMigratePackageDependencies.cs @@ -258,6 +258,28 @@ namespace Microsoft.DotNet.ProjectJsonMigration.Tests items[0].Include.Should().Be("System"); } + [Fact] + public void It_migrates_test_projects_to_have_test_sdk_and_xunit_packagedependencies() + { + var mockProj = RunPackageDependenciesRuleOnPj(@" + { + ""buildOptions"": { + ""emitEntryPoint"": true + }, + ""frameworks"": { + ""netcoreapp1.0"": {} + }, + ""testRunner"": ""xunit"" + }"); + + var items = mockProj.Items + .Where(i => (i.Include == "Microsoft.NET.Test.Sdk" && i.ItemType == "PackageReference") || + (i.Include == "xunit" && i.ItemType == "PackageReference") || + (i.Include == "xunit.runner.visualstudio" && i.ItemType == "PackageReference")); + + items.Should().HaveCount(3); + } + private void EmitsPackageReferences(ProjectRootElement mockProj, params Tuple[] packageSpecs) { foreach (var packageSpec in packageSpecs) From 4cd74bff889271d8a2b070c371999ca4dac635ae Mon Sep 17 00:00:00 2001 From: Justin Goshi Date: Mon, 31 Oct 2016 15:55:22 -0700 Subject: [PATCH 2/3] Only add the xunit references if the test running is xunit --- .../MigratePackageDependenciesAndToolsRule.cs | 34 +++++++++++-------- ...enThatIWantToMigratePackageDependencies.cs | 22 ++++++++++++ 2 files changed, 41 insertions(+), 15 deletions(-) diff --git a/src/Microsoft.DotNet.ProjectJsonMigration/Rules/MigratePackageDependenciesAndToolsRule.cs b/src/Microsoft.DotNet.ProjectJsonMigration/Rules/MigratePackageDependenciesAndToolsRule.cs index a9d9ef6ac..f6afb51b1 100644 --- a/src/Microsoft.DotNet.ProjectJsonMigration/Rules/MigratePackageDependenciesAndToolsRule.cs +++ b/src/Microsoft.DotNet.ProjectJsonMigration/Rules/MigratePackageDependenciesAndToolsRule.cs @@ -86,7 +86,8 @@ namespace Microsoft.DotNet.ProjectJsonMigration.Rules MigrationSettings migrationSettings, ProjectItemGroupElement noFrameworkPackageReferenceItemGroup) { - var type = migrationRuleInputs.DefaultProjectContext.ProjectFile.GetProjectType(); + var project = migrationRuleInputs.DefaultProjectContext.ProjectFile; + var type = project.GetProjectType(); switch (type) { case ProjectType.Web: @@ -108,21 +109,24 @@ namespace Microsoft.DotNet.ProjectJsonMigration.Rules Version = PackageConstants.TestSdkPackageVersion }), noFrameworkPackageReferenceItemGroup, mergeExisting: false); - _transformApplicator.Execute( - PackageDependencyInfoTransform.Transform( - new PackageDependencyInfo - { - Name = PackageConstants.XUnitPackageName, - Version = PackageConstants.XUnitPackageVersion - }), noFrameworkPackageReferenceItemGroup, mergeExisting: false); + if (project.TestRunner.Equals("xunit", StringComparison.OrdinalIgnoreCase)) + { + _transformApplicator.Execute( + PackageDependencyInfoTransform.Transform( + new PackageDependencyInfo + { + Name = PackageConstants.XUnitPackageName, + Version = PackageConstants.XUnitPackageVersion + }), noFrameworkPackageReferenceItemGroup, mergeExisting: false); - _transformApplicator.Execute( - PackageDependencyInfoTransform.Transform( - new PackageDependencyInfo - { - Name = PackageConstants.XUnitRunnerPackageName, - Version = PackageConstants.XUnitRunnerPackageVersion - }), noFrameworkPackageReferenceItemGroup, mergeExisting: false); + _transformApplicator.Execute( + PackageDependencyInfoTransform.Transform( + new PackageDependencyInfo + { + Name = PackageConstants.XUnitRunnerPackageName, + Version = PackageConstants.XUnitRunnerPackageVersion + }), noFrameworkPackageReferenceItemGroup, mergeExisting: false); + } break; default: break; diff --git a/test/Microsoft.DotNet.ProjectJsonMigration.Tests/Rules/GivenThatIWantToMigratePackageDependencies.cs b/test/Microsoft.DotNet.ProjectJsonMigration.Tests/Rules/GivenThatIWantToMigratePackageDependencies.cs index bb415e986..6684736e9 100644 --- a/test/Microsoft.DotNet.ProjectJsonMigration.Tests/Rules/GivenThatIWantToMigratePackageDependencies.cs +++ b/test/Microsoft.DotNet.ProjectJsonMigration.Tests/Rules/GivenThatIWantToMigratePackageDependencies.cs @@ -258,6 +258,28 @@ namespace Microsoft.DotNet.ProjectJsonMigration.Tests items[0].Include.Should().Be("System"); } + [Fact] + public void It_migrates_test_projects_to_have_test_sdk() + { + var mockProj = RunPackageDependenciesRuleOnPj(@" + { + ""buildOptions"": { + ""emitEntryPoint"": true + }, + ""frameworks"": { + ""netcoreapp1.0"": {} + }, + ""testRunner"": ""mstest"" + }"); + + var items = mockProj.Items + .Where(i => (i.Include == "Microsoft.NET.Test.Sdk" && i.ItemType == "PackageReference") || + (i.Include == "xunit" && i.ItemType == "PackageReference") || + (i.Include == "xunit.runner.visualstudio" && i.ItemType == "PackageReference")); + + items.Should().HaveCount(1); + } + [Fact] public void It_migrates_test_projects_to_have_test_sdk_and_xunit_packagedependencies() { From f9493545dced3860f60a7901509adc70d3f3aada Mon Sep 17 00:00:00 2001 From: Justin Goshi Date: Mon, 31 Oct 2016 20:50:52 -0700 Subject: [PATCH 3/3] Address PR comments to improve test readability and reliability --- .../MigratePackageDependenciesAndToolsRule.cs | 18 +++++++++----- ...enThatIWantToMigratePackageDependencies.cs | 24 +++++++++++-------- 2 files changed, 26 insertions(+), 16 deletions(-) diff --git a/src/Microsoft.DotNet.ProjectJsonMigration/Rules/MigratePackageDependenciesAndToolsRule.cs b/src/Microsoft.DotNet.ProjectJsonMigration/Rules/MigratePackageDependenciesAndToolsRule.cs index 139e3634b..ab203101d 100644 --- a/src/Microsoft.DotNet.ProjectJsonMigration/Rules/MigratePackageDependenciesAndToolsRule.cs +++ b/src/Microsoft.DotNet.ProjectJsonMigration/Rules/MigratePackageDependenciesAndToolsRule.cs @@ -104,30 +104,36 @@ namespace Microsoft.DotNet.ProjectJsonMigration.Rules break; case ProjectType.Test: _transformApplicator.Execute( - PackageDependencyInfoTransform.Transform( + PackageDependencyInfoTransform().Transform( new PackageDependencyInfo { Name = PackageConstants.TestSdkPackageName, Version = PackageConstants.TestSdkPackageVersion - }), noFrameworkPackageReferenceItemGroup, mergeExisting: false); + }), + noFrameworkPackageReferenceItemGroup, + mergeExisting: false); if (project.TestRunner.Equals("xunit", StringComparison.OrdinalIgnoreCase)) { _transformApplicator.Execute( - PackageDependencyInfoTransform.Transform( + PackageDependencyInfoTransform().Transform( new PackageDependencyInfo { Name = PackageConstants.XUnitPackageName, Version = PackageConstants.XUnitPackageVersion - }), noFrameworkPackageReferenceItemGroup, mergeExisting: false); + }), + noFrameworkPackageReferenceItemGroup, + mergeExisting: false); _transformApplicator.Execute( - PackageDependencyInfoTransform.Transform( + PackageDependencyInfoTransform().Transform( new PackageDependencyInfo { Name = PackageConstants.XUnitRunnerPackageName, Version = PackageConstants.XUnitRunnerPackageVersion - }), noFrameworkPackageReferenceItemGroup, mergeExisting: false); + }), + noFrameworkPackageReferenceItemGroup, + mergeExisting: false); } break; default: diff --git a/test/Microsoft.DotNet.ProjectJsonMigration.Tests/Rules/GivenThatIWantToMigratePackageDependencies.cs b/test/Microsoft.DotNet.ProjectJsonMigration.Tests/Rules/GivenThatIWantToMigratePackageDependencies.cs index 03e0784a0..50066736f 100644 --- a/test/Microsoft.DotNet.ProjectJsonMigration.Tests/Rules/GivenThatIWantToMigratePackageDependencies.cs +++ b/test/Microsoft.DotNet.ProjectJsonMigration.Tests/Rules/GivenThatIWantToMigratePackageDependencies.cs @@ -272,12 +272,14 @@ namespace Microsoft.DotNet.ProjectJsonMigration.Tests ""testRunner"": ""mstest"" }"); - var items = mockProj.Items - .Where(i => (i.Include == "Microsoft.NET.Test.Sdk" && i.ItemType == "PackageReference") || - (i.Include == "xunit" && i.ItemType == "PackageReference") || - (i.Include == "xunit.runner.visualstudio" && i.ItemType == "PackageReference")); + mockProj.Items.Should().ContainSingle( + i => (i.Include == "Microsoft.NET.Test.Sdk" && i.ItemType == "PackageReference")); - items.Should().HaveCount(1); + mockProj.Items.Should().NotContain( + i => (i.Include == "xunit" && i.ItemType == "PackageReference")); + + mockProj.Items.Should().NotContain( + i => (i.Include == "xunit.runner.visualstudio" && i.ItemType == "PackageReference")); } [Fact] @@ -294,12 +296,14 @@ namespace Microsoft.DotNet.ProjectJsonMigration.Tests ""testRunner"": ""xunit"" }"); - var items = mockProj.Items - .Where(i => (i.Include == "Microsoft.NET.Test.Sdk" && i.ItemType == "PackageReference") || - (i.Include == "xunit" && i.ItemType == "PackageReference") || - (i.Include == "xunit.runner.visualstudio" && i.ItemType == "PackageReference")); + mockProj.Items.Should().ContainSingle( + i => (i.Include == "Microsoft.NET.Test.Sdk" && i.ItemType == "PackageReference")); - items.Should().HaveCount(3); + mockProj.Items.Should().ContainSingle( + i => (i.Include == "xunit" && i.ItemType == "PackageReference")); + + mockProj.Items.Should().ContainSingle( + i => (i.Include == "xunit.runner.visualstudio" && i.ItemType == "PackageReference")); } private void EmitsPackageReferences(ProjectRootElement mockProj, params Tuple[] packageSpecs)