From 33caa408a100b0ca2e58003887c6560b8545ffba Mon Sep 17 00:00:00 2001 From: Faizan Ahmad Date: Tue, 25 Oct 2016 20:10:18 +0530 Subject: [PATCH] 1) Added support to run test from test3 verb for the project targeting multiple TFM 2) Added test to address above change 3) Crossgen were creating problem for full CLR built assemblies. Removed All those assembly from Crossgen list. 4) Removed the line of code which were deleting Extensions folder under sdk folder as this folder contain trx logger dlls --- .../VSTestDesktopAndNetCoreApp/Tests.cs | 40 ++++++++++ .../VSTestDesktopAndNetCoreApp.csproj | 45 ++++++++++++ .../VSTestDotNetCoreProject.csproj | 6 +- build/Microsoft.DotNet.Cli.Compile.targets | 7 +- ...rosoft.TestPlatform.CrossTargeting.targets | 73 +++++++++++++++++++ src/redist/project.json | 4 +- ...ildsAndRunsTestFromCsprojForMultipleTFM.cs | 48 ++++++++++++ ...nDotnetTest3BuildsAndRunsTestfromCsproj.cs | 29 +++++++- 8 files changed, 243 insertions(+), 9 deletions(-) create mode 100644 TestAssets/TestProjects/VSTestDesktopAndNetCoreApp/Tests.cs create mode 100644 TestAssets/TestProjects/VSTestDesktopAndNetCoreApp/VSTestDesktopAndNetCoreApp.csproj create mode 100644 resources/MSBuildImports/15.0/Microsoft.Common.CrossTargeting.targets/ImportAfter/Microsoft.TestPlatform.CrossTargeting.targets create mode 100644 test/dotnet-test3.Tests/GivenDotnetTest3BuildsAndRunsTestFromCsprojForMultipleTFM.cs diff --git a/TestAssets/TestProjects/VSTestDesktopAndNetCoreApp/Tests.cs b/TestAssets/TestProjects/VSTestDesktopAndNetCoreApp/Tests.cs new file mode 100644 index 000000000..f242df270 --- /dev/null +++ b/TestAssets/TestProjects/VSTestDesktopAndNetCoreApp/Tests.cs @@ -0,0 +1,40 @@ +using Microsoft.VisualStudio.TestTools.UnitTesting; + +namespace TestNamespace +{ + public class Program + { + public static void Main(string[] args) + { + + } + } + + [TestClass] + public class VSTestTests + { + [TestMethod] + public void VSTestPassTest() + { + } + + [TestMethod] + public void VSTestFailTest() + { + Assert.Fail(); + } + + #if DESKTOP + [TestMethod] + public void VSTestPassTestDesktop() + { + } + #else + [TestMethod] + public void VSTestFailTestNetCoreApp() + { + Assert.Fail(); + } + #endif + } +} \ No newline at end of file diff --git a/TestAssets/TestProjects/VSTestDesktopAndNetCoreApp/VSTestDesktopAndNetCoreApp.csproj b/TestAssets/TestProjects/VSTestDesktopAndNetCoreApp/VSTestDesktopAndNetCoreApp.csproj new file mode 100644 index 000000000..af9f62c1a --- /dev/null +++ b/TestAssets/TestProjects/VSTestDesktopAndNetCoreApp/VSTestDesktopAndNetCoreApp.csproj @@ -0,0 +1,45 @@ + + + + + + Exe + net46;netcoreapp1.0 + bin\$(Configuration) + + + + NETCOREAPP;$(DefineConstants) + + + + DESKTOP;$(DefineConstants) + + + + + + + + + 1.0.1 + + + + + + 1.0.0-alpha-20161019-1 + All + + + 1.0.5-preview + + + 1.1.4-preview + + + 15.0.0-preview-20161025-02 + + + + \ No newline at end of file diff --git a/TestAssets/TestProjects/VSTestDotNetCoreProject/VSTestDotNetCoreProject.csproj b/TestAssets/TestProjects/VSTestDotNetCoreProject/VSTestDotNetCoreProject.csproj index 51f15125b..904ce7fa3 100644 --- a/TestAssets/TestProjects/VSTestDotNetCoreProject/VSTestDotNetCoreProject.csproj +++ b/TestAssets/TestProjects/VSTestDotNetCoreProject/VSTestDotNetCoreProject.csproj @@ -21,13 +21,13 @@ All - 1.0.4-preview + 1.0.5-preview - 1.1.3-preview + 1.1.4-preview - 15.0.0-preview-20161005-01 + 15.0.0-preview-20161025-02 diff --git a/build/Microsoft.DotNet.Cli.Compile.targets b/build/Microsoft.DotNet.Cli.Compile.targets index 037253813..c700efd73 100644 --- a/build/Microsoft.DotNet.Cli.Compile.targets +++ b/build/Microsoft.DotNet.Cli.Compile.targets @@ -171,7 +171,10 @@ - + + + + @@ -216,8 +219,6 @@ - - diff --git a/resources/MSBuildImports/15.0/Microsoft.Common.CrossTargeting.targets/ImportAfter/Microsoft.TestPlatform.CrossTargeting.targets b/resources/MSBuildImports/15.0/Microsoft.Common.CrossTargeting.targets/ImportAfter/Microsoft.TestPlatform.CrossTargeting.targets new file mode 100644 index 000000000..89a55d128 --- /dev/null +++ b/resources/MSBuildImports/15.0/Microsoft.Common.CrossTargeting.targets/ImportAfter/Microsoft.TestPlatform.CrossTargeting.targets @@ -0,0 +1,73 @@ + + + + + + + + <_TargetFramework Include="$(TargetFrameworks)" /> + + + + + + + + + + + + + + + + VSTest + + + diff --git a/src/redist/project.json b/src/redist/project.json index 5d219b920..4ebcd14a3 100644 --- a/src/redist/project.json +++ b/src/redist/project.json @@ -23,8 +23,8 @@ "Microsoft.CodeAnalysis.Build.Tasks": "2.0.0-beta6-60922-08", "System.Runtime.Serialization.Xml": "4.1.1", "NuGet.Build.Tasks": "3.6.0-rc-1984", - "Microsoft.TestPlatform.CLI": "15.0.0-preview-20161005-01", - "Microsoft.TestPlatform.Build": "15.0.0-preview-20161005-01" + "Microsoft.TestPlatform.CLI": "15.0.0-preview-20161025-02", + "Microsoft.TestPlatform.Build": "15.0.0-preview-20161025-02" }, "frameworks": { "netcoreapp1.0": { diff --git a/test/dotnet-test3.Tests/GivenDotnetTest3BuildsAndRunsTestFromCsprojForMultipleTFM.cs b/test/dotnet-test3.Tests/GivenDotnetTest3BuildsAndRunsTestFromCsprojForMultipleTFM.cs new file mode 100644 index 000000000..52263b551 --- /dev/null +++ b/test/dotnet-test3.Tests/GivenDotnetTest3BuildsAndRunsTestFromCsprojForMultipleTFM.cs @@ -0,0 +1,48 @@ +// Copyright (c) .NET Foundation and contributors. All rights reserved. +// Licensed under the MIT license. See LICENSE file in the project root for full license information. + +using Microsoft.DotNet.Tools.Test.Utilities; +using Xunit; +using FluentAssertions; +using Microsoft.DotNet.TestFramework; +using Microsoft.DotNet.Cli.Utils; +using System.Runtime.InteropServices; + +namespace Microsoft.DotNet.Cli.Test3.Tests +{ + public class GivenDotnetTest3BuildsAndRunsTestFromCsprojForMultipleTFM : TestBase + { + [Fact] + public void TestsFromAGivenProjectShouldRunWithExpectedOutputForMultiTFM() + { + // project targeting net46 will not run in non windows machine. + if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) + { + // Copy DotNetCoreTestProject project in output directory of project dotnet-vstest.Tests + string testAppName = "VSTestDesktopAndNetCoreApp"; + TestInstance testInstance = TestAssetsManager.CreateTestInstance(testAppName); + + string testProjectDirectory = testInstance.TestRoot; + + // Restore project VSTestDotNetCoreProject + new Restore3Command() + .WithWorkingDirectory(testProjectDirectory) + .Execute() + .Should() + .Pass(); + + // Call test3 + CommandResult result = new Test3Command().WithWorkingDirectory(testProjectDirectory).ExecuteWithCapturedOutput(""); + + // Verify + // for target framework net46 + result.StdOut.Should().Contain("Total tests: 3. Passed: 2. Failed: 1. Skipped: 0."); + result.StdOut.Should().Contain("Passed TestNamespace.VSTestTests.VSTestPassTestDesktop"); + + // for target framework netcoreapp1.0 + result.StdOut.Should().Contain("Total tests: 3. Passed: 1. Failed: 2. Skipped: 0."); + result.StdOut.Should().Contain("Failed TestNamespace.VSTestTests.VSTestFailTestNetCoreApp"); + } + } + } +} diff --git a/test/dotnet-test3.Tests/GivenDotnetTest3BuildsAndRunsTestfromCsproj.cs b/test/dotnet-test3.Tests/GivenDotnetTest3BuildsAndRunsTestfromCsproj.cs index f737027d2..98d8229dd 100644 --- a/test/dotnet-test3.Tests/GivenDotnetTest3BuildsAndRunsTestfromCsproj.cs +++ b/test/dotnet-test3.Tests/GivenDotnetTest3BuildsAndRunsTestfromCsproj.cs @@ -6,6 +6,7 @@ using Xunit; using FluentAssertions; using Microsoft.DotNet.TestFramework; using Microsoft.DotNet.Cli.Utils; +using System.IO; namespace Microsoft.DotNet.Cli.Test3.Tests { @@ -28,12 +29,38 @@ namespace Microsoft.DotNet.Cli.Test3.Tests .Pass(); // Call test3 - CommandResult result = new Test3Command().WithWorkingDirectory(testProjectDirectory).ExecuteWithCapturedOutput("/p:TargetFramework=netcoreapp1.0"); + CommandResult result = new Test3Command().WithWorkingDirectory(testProjectDirectory).ExecuteWithCapturedOutput("--framework netcoreapp1.0"); // Verify result.StdOut.Should().Contain("Total tests: 2. Passed: 1. Failed: 1. Skipped: 0."); result.StdOut.Should().Contain("Passed TestNamespace.VSTestTests.VSTestPassTest"); result.StdOut.Should().Contain("Failed TestNamespace.VSTestTests.VSTestFailTest"); } + + [Fact] + public void TestWillNotBuildTheProjectIfNoBuildArgsIsGiven() + { + // Copy DotNetCoreTestProject project in output directory of project dotnet-vstest.Tests + string testAppName = "VSTestDotNetCoreProject"; + TestInstance testInstance = TestAssetsManager.CreateTestInstance(testAppName); + + string testProjectDirectory = testInstance.TestRoot; + + // Restore project VSTestDotNetCoreProject + new Restore3Command() + .WithWorkingDirectory(testProjectDirectory) + .Execute() + .Should() + .Pass(); + + string expectedError = Path.Combine(testProjectDirectory, @"bin\Debug\netcoreapp1.0\VSTestDotNetCoreProject.dll"); + expectedError = "The test source file " + "\""+ expectedError + "\"" + " provided was not found."; + + // Call test3 + CommandResult result = new Test3Command().WithWorkingDirectory(testProjectDirectory).ExecuteWithCapturedOutput("--noBuild"); + + // Verify + result.StdOut.Should().Contain(expectedError); + } } } \ No newline at end of file