Remove dotnet-build.tests
This capability is being replaced by MSBuild, and the project.json tests are very long running.
This commit is contained in:
parent
ec2cd254f1
commit
a7d594049b
19 changed files with 1 additions and 1753 deletions
|
@ -53,7 +53,7 @@ For E2E and functional tests, they all depend on the binaries located under `art
|
||||||
1. `cd src\dotnet\`
|
1. `cd src\dotnet\`
|
||||||
2. `dotnet build`
|
2. `dotnet build`
|
||||||
3. `cp bin\debug\netstandardapp1.5\dotnet.dll artifacts\rid\stage2`
|
3. `cp bin\debug\netstandardapp1.5\dotnet.dll artifacts\rid\stage2`
|
||||||
4. `cd ..\..\test\dotnet-build.Tests`
|
4. `cd ..\..\test\dotnet.Tests`
|
||||||
5. `dotnet test`
|
5. `dotnet test`
|
||||||
|
|
||||||
##Adding a Command
|
##Adding a Command
|
||||||
|
|
|
@ -32,8 +32,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "TestProjects", "TestProject
|
||||||
EndProject
|
EndProject
|
||||||
Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "dotnet", "src\dotnet\dotnet.xproj", "{60CF7E6C-D6C8-439D-B7B7-D8A27E29BE2C}"
|
Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "dotnet", "src\dotnet\dotnet.xproj", "{60CF7E6C-D6C8-439D-B7B7-D8A27E29BE2C}"
|
||||||
EndProject
|
EndProject
|
||||||
Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "dotnet-build.Tests", "test\dotnet-build.Tests\dotnet-build.Tests.xproj", "{833FFEE1-7EED-4F51-8DFD-946D48833333}"
|
|
||||||
EndProject
|
|
||||||
Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "dotnet-compile.Tests", "test\dotnet-compile.Tests\dotnet-compile.Tests.xproj", "{833FFEE1-7EED-4F51-8DFD-946D48893D6E}"
|
Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "dotnet-compile.Tests", "test\dotnet-compile.Tests\dotnet-compile.Tests.xproj", "{833FFEE1-7EED-4F51-8DFD-946D48893D6E}"
|
||||||
EndProject
|
EndProject
|
||||||
Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "dotnet-publish.Tests", "test\dotnet-publish.Tests\dotnet-publish.Tests.xproj", "{386D412C-003C-47B1-8258-0E35865CB7C4}"
|
Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "dotnet-publish.Tests", "test\dotnet-publish.Tests\dotnet-publish.Tests.xproj", "{386D412C-003C-47B1-8258-0E35865CB7C4}"
|
||||||
|
@ -302,22 +300,6 @@ Global
|
||||||
{60CF7E6C-D6C8-439D-B7B7-D8A27E29BE2C}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU
|
{60CF7E6C-D6C8-439D-B7B7-D8A27E29BE2C}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU
|
||||||
{60CF7E6C-D6C8-439D-B7B7-D8A27E29BE2C}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU
|
{60CF7E6C-D6C8-439D-B7B7-D8A27E29BE2C}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU
|
||||||
{60CF7E6C-D6C8-439D-B7B7-D8A27E29BE2C}.RelWithDebInfo|x64.Build.0 = Release|Any CPU
|
{60CF7E6C-D6C8-439D-B7B7-D8A27E29BE2C}.RelWithDebInfo|x64.Build.0 = Release|Any CPU
|
||||||
{833FFEE1-7EED-4F51-8DFD-946D48833333}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
|
||||||
{833FFEE1-7EED-4F51-8DFD-946D48833333}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
|
||||||
{833FFEE1-7EED-4F51-8DFD-946D48833333}.Debug|x64.ActiveCfg = Debug|Any CPU
|
|
||||||
{833FFEE1-7EED-4F51-8DFD-946D48833333}.Debug|x64.Build.0 = Debug|Any CPU
|
|
||||||
{833FFEE1-7EED-4F51-8DFD-946D48833333}.MinSizeRel|Any CPU.ActiveCfg = Debug|Any CPU
|
|
||||||
{833FFEE1-7EED-4F51-8DFD-946D48833333}.MinSizeRel|Any CPU.Build.0 = Debug|Any CPU
|
|
||||||
{833FFEE1-7EED-4F51-8DFD-946D48833333}.MinSizeRel|x64.ActiveCfg = Debug|Any CPU
|
|
||||||
{833FFEE1-7EED-4F51-8DFD-946D48833333}.MinSizeRel|x64.Build.0 = Debug|Any CPU
|
|
||||||
{833FFEE1-7EED-4F51-8DFD-946D48833333}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
|
||||||
{833FFEE1-7EED-4F51-8DFD-946D48833333}.Release|Any CPU.Build.0 = Release|Any CPU
|
|
||||||
{833FFEE1-7EED-4F51-8DFD-946D48833333}.Release|x64.ActiveCfg = Release|Any CPU
|
|
||||||
{833FFEE1-7EED-4F51-8DFD-946D48833333}.Release|x64.Build.0 = Release|Any CPU
|
|
||||||
{833FFEE1-7EED-4F51-8DFD-946D48833333}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU
|
|
||||||
{833FFEE1-7EED-4F51-8DFD-946D48833333}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU
|
|
||||||
{833FFEE1-7EED-4F51-8DFD-946D48833333}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU
|
|
||||||
{833FFEE1-7EED-4F51-8DFD-946D48833333}.RelWithDebInfo|x64.Build.0 = Release|Any CPU
|
|
||||||
{833FFEE1-7EED-4F51-8DFD-946D48893D6E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
{833FFEE1-7EED-4F51-8DFD-946D48893D6E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
{833FFEE1-7EED-4F51-8DFD-946D48893D6E}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
{833FFEE1-7EED-4F51-8DFD-946D48893D6E}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
{833FFEE1-7EED-4F51-8DFD-946D48893D6E}.Debug|x64.ActiveCfg = Debug|Any CPU
|
{833FFEE1-7EED-4F51-8DFD-946D48893D6E}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||||
|
@ -956,7 +938,6 @@ Global
|
||||||
{65741CB1-8AEE-4C66-8198-10A7EA0E4258} = {17735A9D-BFD9-4585-A7CB-3208CA6EA8A7}
|
{65741CB1-8AEE-4C66-8198-10A7EA0E4258} = {17735A9D-BFD9-4585-A7CB-3208CA6EA8A7}
|
||||||
{713CBFBB-5392-438D-B766-A9A585EF1BB8} = {17735A9D-BFD9-4585-A7CB-3208CA6EA8A7}
|
{713CBFBB-5392-438D-B766-A9A585EF1BB8} = {17735A9D-BFD9-4585-A7CB-3208CA6EA8A7}
|
||||||
{60CF7E6C-D6C8-439D-B7B7-D8A27E29BE2C} = {ED2FE3E2-F7E7-4389-8231-B65123F2076F}
|
{60CF7E6C-D6C8-439D-B7B7-D8A27E29BE2C} = {ED2FE3E2-F7E7-4389-8231-B65123F2076F}
|
||||||
{833FFEE1-7EED-4F51-8DFD-946D48833333} = {17735A9D-BFD9-4585-A7CB-3208CA6EA8A7}
|
|
||||||
{833FFEE1-7EED-4F51-8DFD-946D48893D6E} = {17735A9D-BFD9-4585-A7CB-3208CA6EA8A7}
|
{833FFEE1-7EED-4F51-8DFD-946D48893D6E} = {17735A9D-BFD9-4585-A7CB-3208CA6EA8A7}
|
||||||
{386D412C-003C-47B1-8258-0E35865CB7C4} = {17735A9D-BFD9-4585-A7CB-3208CA6EA8A7}
|
{386D412C-003C-47B1-8258-0E35865CB7C4} = {17735A9D-BFD9-4585-A7CB-3208CA6EA8A7}
|
||||||
{D521DD9F-0614-4929-93B4-D8FA5682C174} = {ED2FE3E2-F7E7-4389-8231-B65123F2076F}
|
{D521DD9F-0614-4929-93B4-D8FA5682C174} = {ED2FE3E2-F7E7-4389-8231-B65123F2076F}
|
||||||
|
|
|
@ -1,55 +0,0 @@
|
||||||
using System.IO;
|
|
||||||
using Microsoft.DotNet.Tools.Test.Utilities;
|
|
||||||
using Xunit;
|
|
||||||
|
|
||||||
namespace Microsoft.DotNet.Tools.Builder.Tests
|
|
||||||
{
|
|
||||||
public class BuildInvalidArgumentsTests : TestBase
|
|
||||||
{
|
|
||||||
[Fact]
|
|
||||||
public void ErrorOccursWhenBuildingPortableProjectToSpecificOutputPathWithoutSpecifyingFramework()
|
|
||||||
{
|
|
||||||
var testInstance = TestAssetsManager.CreateTestInstance("PortableTests")
|
|
||||||
.WithLockFiles();
|
|
||||||
|
|
||||||
var result = new BuildCommand(
|
|
||||||
projectPath: Path.Combine(testInstance.TestRoot, "PortableApp"),
|
|
||||||
output: Path.Combine(testInstance.TestRoot, "out"))
|
|
||||||
.ExecuteWithCapturedOutput();
|
|
||||||
|
|
||||||
result.Should().Fail();
|
|
||||||
result.Should().HaveStdErrContaining("When the '--output' option is provided, the '--framework' option must also be provided.");
|
|
||||||
}
|
|
||||||
|
|
||||||
[Fact]
|
|
||||||
public void ErrorOccursWhenBuildingPortableProjectAndSpecifyingFrameworkThatProjectDoesNotSupport()
|
|
||||||
{
|
|
||||||
var testInstance = TestAssetsManager.CreateTestInstance("PortableTests")
|
|
||||||
.WithLockFiles();
|
|
||||||
|
|
||||||
var result = new BuildCommand(
|
|
||||||
projectPath: Path.Combine(testInstance.TestRoot, "PortableApp"),
|
|
||||||
output: Path.Combine(testInstance.TestRoot, "out"),
|
|
||||||
framework: "sl40")
|
|
||||||
.ExecuteWithCapturedOutput();
|
|
||||||
|
|
||||||
result.Should().Fail();
|
|
||||||
result.Should().HaveStdErrMatching("Project '.*?' does not support framework: Silverlight,Version=v4\\.0\\.");
|
|
||||||
}
|
|
||||||
|
|
||||||
[Fact]
|
|
||||||
public void ErrorOccursWhenBuildingStandaloneProjectToSpecificOutputPathWithoutSpecifyingFramework()
|
|
||||||
{
|
|
||||||
var testInstance = TestAssetsManager.CreateTestInstance("PortableTests")
|
|
||||||
.WithLockFiles();
|
|
||||||
|
|
||||||
var result = new BuildCommand(
|
|
||||||
projectPath: Path.Combine(testInstance.TestRoot, "StandaloneApp"),
|
|
||||||
output: Path.Combine(testInstance.TestRoot, "out"))
|
|
||||||
.ExecuteWithCapturedOutput();
|
|
||||||
|
|
||||||
result.Should().Fail();
|
|
||||||
result.Should().HaveStdErrContaining("When the '--output' option is provided, the '--framework' option must also be provided.");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,387 +0,0 @@
|
||||||
// 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 System;
|
|
||||||
using System.IO;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Runtime.InteropServices;
|
|
||||||
using FluentAssertions;
|
|
||||||
using Microsoft.DotNet.InternalAbstractions;
|
|
||||||
using Microsoft.DotNet.ProjectModel;
|
|
||||||
using Microsoft.DotNet.Tools.Test.Utilities;
|
|
||||||
using Newtonsoft.Json.Linq;
|
|
||||||
using NuGet.Frameworks;
|
|
||||||
using Xunit;
|
|
||||||
|
|
||||||
namespace Microsoft.DotNet.Tools.Builder.Tests
|
|
||||||
{
|
|
||||||
public class BuildOutputTests : TestBase
|
|
||||||
{
|
|
||||||
private string _testProjectsRoot;
|
|
||||||
private string _runtime;
|
|
||||||
private DirectoryInfo _rootDirInfo;
|
|
||||||
private DirectoryInfo _testAppDirDirInfo;
|
|
||||||
private DirectoryInfo _testLibDirInfo;
|
|
||||||
|
|
||||||
private readonly string[] _runtimeFiles =
|
|
||||||
{
|
|
||||||
"TestApp" + FileNameSuffixes.DotNet.DynamicLib,
|
|
||||||
"TestApp" + FileNameSuffixes.DotNet.ProgramDatabase,
|
|
||||||
"TestApp" + FileNameSuffixes.CurrentPlatform.Exe,
|
|
||||||
"TestApp" + FileNameSuffixes.DepsJson,
|
|
||||||
"TestApp" + FileNameSuffixes.RuntimeConfigJson,
|
|
||||||
"TestLibrary" + FileNameSuffixes.DotNet.DynamicLib,
|
|
||||||
"TestLibrary" + FileNameSuffixes.DotNet.ProgramDatabase
|
|
||||||
};
|
|
||||||
|
|
||||||
private readonly string[] _runtimeExcludeFiles =
|
|
||||||
{
|
|
||||||
"TestLibrary" + FileNameSuffixes.RuntimeConfigJson,
|
|
||||||
"TestLibrary" + FileNameSuffixes.RuntimeConfigDevJson
|
|
||||||
};
|
|
||||||
|
|
||||||
private readonly string[] _appCompileFiles =
|
|
||||||
{
|
|
||||||
"TestApp" + FileNameSuffixes.DotNet.DynamicLib,
|
|
||||||
"TestApp" + FileNameSuffixes.DotNet.ProgramDatabase
|
|
||||||
};
|
|
||||||
|
|
||||||
private readonly string[] _libCompileFiles =
|
|
||||||
{
|
|
||||||
"TestLibrary" + FileNameSuffixes.DotNet.DynamicLib,
|
|
||||||
"TestLibrary" + FileNameSuffixes.DotNet.ProgramDatabase
|
|
||||||
};
|
|
||||||
|
|
||||||
private readonly string[] _libCompileExcludeFiles =
|
|
||||||
{
|
|
||||||
"TestLibrary" + FileNameSuffixes.RuntimeConfigJson,
|
|
||||||
"TestLibrary" + FileNameSuffixes.RuntimeConfigDevJson
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
private void GetProjectInfo(string testRoot)
|
|
||||||
{
|
|
||||||
_testProjectsRoot = testRoot;
|
|
||||||
_rootDirInfo = new DirectoryInfo(_testProjectsRoot);
|
|
||||||
_testAppDirDirInfo = new DirectoryInfo(Path.Combine(_testProjectsRoot, "TestApp"));
|
|
||||||
_testLibDirInfo = new DirectoryInfo(Path.Combine(_testProjectsRoot, "TestLibrary"));
|
|
||||||
|
|
||||||
var contexts = ProjectContext.CreateContextForEachFramework(
|
|
||||||
_testAppDirDirInfo.FullName,
|
|
||||||
null,
|
|
||||||
RuntimeEnvironmentRidExtensions.GetAllCandidateRuntimeIdentifiers());
|
|
||||||
_runtime = contexts.FirstOrDefault(c => !string.IsNullOrEmpty(c.RuntimeIdentifier))?.RuntimeIdentifier;
|
|
||||||
}
|
|
||||||
|
|
||||||
private string FormatPath(string input, string framework, string runtime)
|
|
||||||
{
|
|
||||||
return input.Replace("{fw}", framework).Replace("{rid}", runtime);
|
|
||||||
}
|
|
||||||
|
|
||||||
[Theory]
|
|
||||||
// global.json exists
|
|
||||||
[InlineData("1", true, null, null, "TestLibrary/bin/Debug/{fw}", "TestApp/bin/Debug/{fw}", "TestApp/bin/Debug/{fw}/{rid}")]
|
|
||||||
[InlineData("2", true, "out", null, "TestLibrary/bin/Debug/{fw}", "TestApp/bin/Debug/{fw}", "out")]
|
|
||||||
[InlineData("3", true, null, "build", "build/TestLibrary/bin/Debug/{fw}", "build/TestApp/bin/Debug/{fw}", "build/TestApp/bin/Debug/{fw}/{rid}")]
|
|
||||||
[InlineData("4", true, "out", "build", "build/TestLibrary/bin/Debug/{fw}", "build/TestApp/bin/Debug/{fw}", "out")]
|
|
||||||
//no global.json
|
|
||||||
//[InlineData(false, null, null, "TestLibrary/bin/debug/{fw}", "TestApp/bin/debug/{fw}", "TestApp/bin/debug/{fw}/{rid}")]
|
|
||||||
//[InlineData(false, "out", null, "TestLibrary/bin/debug/{fw}", "TestApp/bin/debug/{fw}", "out")]
|
|
||||||
//[InlineData(false, null, "build", "build/TestLibrary/bin/debug/{fw}", "build/TestApp/bin/debug/{fw}", "build/TestApp/bin/debug/{fw}/{rid}")]
|
|
||||||
//[InlineData(false, "out", "build", "build/TestLibrary/bin/debug/{fw}", "build/TestApp/bin/debug/{fw}", "out")]
|
|
||||||
public void AppDefaultPaths(string testIdentifer, bool global, string outputValue, string baseValue, string expectedLibCompile, string expectedAppCompile, string expectedAppRuntime)
|
|
||||||
{
|
|
||||||
var testInstance = TestAssetsManager.CreateTestInstance("TestAppWithLibrary", identifier: testIdentifer)
|
|
||||||
.WithLockFiles();
|
|
||||||
GetProjectInfo(testInstance.TestRoot);
|
|
||||||
|
|
||||||
new BuildCommand(GetProjectPath(_testAppDirDirInfo),
|
|
||||||
output: outputValue != null ? Path.Combine(_testProjectsRoot, outputValue) : string.Empty,
|
|
||||||
buildBasePath: baseValue != null ? Path.Combine(_testProjectsRoot, baseValue) : string.Empty,
|
|
||||||
framework: DefaultFramework)
|
|
||||||
.ExecuteWithCapturedOutput().Should().Pass();
|
|
||||||
|
|
||||||
var libdebug = _rootDirInfo.Sub(FormatPath(expectedLibCompile, DefaultLibraryFramework, _runtime));
|
|
||||||
var appdebug = _rootDirInfo.Sub(FormatPath(expectedAppCompile, DefaultFramework, _runtime));
|
|
||||||
var appruntime = _rootDirInfo.Sub(FormatPath(expectedAppRuntime, DefaultFramework, _runtime));
|
|
||||||
|
|
||||||
libdebug.Should().Exist()
|
|
||||||
.And.HaveFiles(_libCompileFiles)
|
|
||||||
.And.NotHaveFiles(_libCompileExcludeFiles);
|
|
||||||
appdebug.Should().Exist().And.HaveFiles(_appCompileFiles);
|
|
||||||
appruntime.Should().Exist()
|
|
||||||
.And.HaveFiles(_runtimeFiles)
|
|
||||||
.And.NotHaveFiles(_runtimeExcludeFiles);
|
|
||||||
}
|
|
||||||
|
|
||||||
[Theory]
|
|
||||||
[InlineData("1", true, null, null, "TestLibrary/bin/Debug/{fw}", "TestLibrary/bin/Debug/{fw}/{rid}")]
|
|
||||||
[InlineData("2", true, "out", null, "TestLibrary/bin/Debug/{fw}", "out")]
|
|
||||||
[InlineData("3", true, null, "build", "build/TestLibrary/bin/Debug/{fw}", "build/TestLibrary/bin/Debug/{fw}/{rid}")]
|
|
||||||
[InlineData("4", true, "out", "build", "build/TestLibrary/bin/Debug/{fw}", "out")]
|
|
||||||
public void LibDefaultPaths(string testIdentifer, bool global, string outputValue, string baseValue, string expectedLibCompile, string expectedLibOutput)
|
|
||||||
{
|
|
||||||
var testInstance = TestAssetsManager.CreateTestInstance("TestAppWithLibrary", identifier: testIdentifer)
|
|
||||||
.WithLockFiles();
|
|
||||||
GetProjectInfo(testInstance.TestRoot);
|
|
||||||
|
|
||||||
new BuildCommand(GetProjectPath(_testLibDirInfo),
|
|
||||||
output: outputValue != null ? Path.Combine(_testProjectsRoot, outputValue) : string.Empty,
|
|
||||||
buildBasePath: baseValue != null ? Path.Combine(_testProjectsRoot, baseValue) : string.Empty,
|
|
||||||
framework: DefaultLibraryFramework)
|
|
||||||
.ExecuteWithCapturedOutput().Should().Pass();
|
|
||||||
|
|
||||||
var libdebug = _rootDirInfo.Sub(FormatPath(expectedLibCompile, DefaultLibraryFramework, _runtime));
|
|
||||||
|
|
||||||
libdebug.Should().Exist()
|
|
||||||
.And.HaveFiles(_libCompileFiles)
|
|
||||||
.And.NotHaveFiles(_libCompileExcludeFiles);
|
|
||||||
}
|
|
||||||
|
|
||||||
[Fact]
|
|
||||||
public void SettingVersionInEnvironment_ShouldStampAssemblyInfoInOutputAssembly()
|
|
||||||
{
|
|
||||||
var testInstance = TestAssetsManager.CreateTestInstance("TestLibraryWithConfiguration")
|
|
||||||
.WithLockFiles();
|
|
||||||
|
|
||||||
var cmd = new BuildCommand(Path.Combine(testInstance.TestRoot, Project.FileName), framework: DefaultLibraryFramework);
|
|
||||||
cmd.Environment["DOTNET_BUILD_VERSION"] = "85";
|
|
||||||
cmd.Environment["DOTNET_ASSEMBLY_FILE_VERSION"] = "345";
|
|
||||||
cmd.ExecuteWithCapturedOutput().Should().Pass();
|
|
||||||
|
|
||||||
var output = Path.Combine(testInstance.TestRoot, "bin", "Debug", DefaultLibraryFramework, "TestLibraryWithConfiguration.dll");
|
|
||||||
var informationalVersion = PeReaderUtils.GetAssemblyAttributeValue(output, "AssemblyInformationalVersionAttribute");
|
|
||||||
var fileVersion = PeReaderUtils.GetAssemblyAttributeValue(output, "AssemblyFileVersionAttribute");
|
|
||||||
|
|
||||||
informationalVersion.Should().NotBeNull();
|
|
||||||
informationalVersion.Should().BeEquivalentTo("1.0.0-85");
|
|
||||||
|
|
||||||
fileVersion.Should().NotBeNull();
|
|
||||||
fileVersion.Should().BeEquivalentTo("1.0.0.345");
|
|
||||||
}
|
|
||||||
|
|
||||||
[Fact]
|
|
||||||
public void SettingVersionSuffixFlag_ShouldStampAssemblyInfoInOutputAssembly()
|
|
||||||
{
|
|
||||||
var testInstance = TestAssetsManager.CreateTestInstance("TestLibraryWithConfiguration")
|
|
||||||
.WithLockFiles();
|
|
||||||
|
|
||||||
var cmd = new BuildCommand(Path.Combine(testInstance.TestRoot, Project.FileName), framework: DefaultLibraryFramework, versionSuffix: "85");
|
|
||||||
cmd.ExecuteWithCapturedOutput().Should().Pass();
|
|
||||||
|
|
||||||
var output = Path.Combine(testInstance.TestRoot, "bin", "Debug", DefaultLibraryFramework, "TestLibraryWithConfiguration.dll");
|
|
||||||
var informationalVersion = PeReaderUtils.GetAssemblyAttributeValue(output, "AssemblyInformationalVersionAttribute");
|
|
||||||
|
|
||||||
informationalVersion.Should().NotBeNull();
|
|
||||||
informationalVersion.Should().BeEquivalentTo("1.0.0-85");
|
|
||||||
}
|
|
||||||
|
|
||||||
[Fact]
|
|
||||||
public void BuildGlobbingMakesAllRunnable()
|
|
||||||
{
|
|
||||||
var testInstance = TestAssetsManager.CreateTestInstance("AppWithAppDependency")
|
|
||||||
.WithLockFiles();
|
|
||||||
|
|
||||||
var cmd = new BuildCommand(string.Format("*{0}project.json", Path.DirectorySeparatorChar), skipLoadProject: true)
|
|
||||||
.WithWorkingDirectory(testInstance.TestRoot)
|
|
||||||
.Execute()
|
|
||||||
.Should()
|
|
||||||
.Pass();
|
|
||||||
|
|
||||||
foreach (var project in new [] { "TestApp1", "TestApp2" })
|
|
||||||
{
|
|
||||||
new DirectoryInfo(Path.Combine(testInstance.TestRoot, project, "bin", "Debug", DefaultFramework))
|
|
||||||
.Should().HaveFile($"{project}.deps.json");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
[Theory]
|
|
||||||
// [InlineData("net20", false, true)]
|
|
||||||
// [InlineData("net40", true, true)]
|
|
||||||
// [InlineData("net461", true, true)]
|
|
||||||
[InlineData("netstandard1.5", true, false)]
|
|
||||||
public void MultipleFrameworks_ShouldHaveValidTargetFrameworkAttribute(string frameworkName, bool shouldHaveTargetFrameworkAttribute, bool windowsOnly)
|
|
||||||
{
|
|
||||||
var framework = NuGetFramework.Parse(frameworkName);
|
|
||||||
|
|
||||||
var testInstance = TestAssetsManager.CreateTestInstance("TestLibraryWithMultipleFrameworks")
|
|
||||||
.WithLockFiles();
|
|
||||||
|
|
||||||
var cmd = new BuildCommand(Path.Combine(testInstance.TestRoot, Project.FileName), framework: framework.GetShortFolderName());
|
|
||||||
|
|
||||||
if (windowsOnly && !RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
|
|
||||||
{
|
|
||||||
// on non-windows platforms, desktop frameworks will not build
|
|
||||||
cmd.ExecuteWithCapturedOutput().Should().Fail();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
cmd.ExecuteWithCapturedOutput().Should().Pass();
|
|
||||||
|
|
||||||
var output = Path.Combine(testInstance.TestRoot, "bin", "Debug", framework.GetShortFolderName(), "TestLibraryWithMultipleFrameworks.dll");
|
|
||||||
var targetFramework = PeReaderUtils.GetAssemblyAttributeValue(output, "TargetFrameworkAttribute");
|
|
||||||
|
|
||||||
if (shouldHaveTargetFrameworkAttribute)
|
|
||||||
{
|
|
||||||
targetFramework.Should().NotBeNull();
|
|
||||||
targetFramework.Should().BeEquivalentTo(framework.DotNetFrameworkName);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
targetFramework.Should().BeNull();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
[Fact]
|
|
||||||
public void UnresolvedReferenceCausesBuildToFailAndNotProduceOutput()
|
|
||||||
{
|
|
||||||
var testAssetsManager = GetTestGroupTestAssetsManager("NonRestoredTestProjects");
|
|
||||||
var testInstance = testAssetsManager.CreateTestInstance("TestProjectWithUnresolvedDependency")
|
|
||||||
.WithLockFiles();
|
|
||||||
|
|
||||||
var restoreResult = new RestoreCommand() { WorkingDirectory = testInstance.TestRoot }
|
|
||||||
.ExecuteWithCapturedOutput()
|
|
||||||
.Should().Fail();
|
|
||||||
|
|
||||||
new DirectoryInfo(testInstance.TestRoot)
|
|
||||||
.Should().HaveFile("project.lock.json");
|
|
||||||
|
|
||||||
var buildCmd = new BuildCommand(testInstance.TestRoot);
|
|
||||||
var buildResult = buildCmd.ExecuteWithCapturedOutput();
|
|
||||||
buildResult.Should().Fail();
|
|
||||||
|
|
||||||
buildResult.StdErr.Should().Contain("The dependency ThisIsNotARealDependencyAndIfSomeoneGoesAndAddsAProjectWithThisNameIWillFindThemAndPunishThem could not be resolved.");
|
|
||||||
|
|
||||||
var outputDir = new DirectoryInfo(Path.Combine(testInstance.TestRoot, "bin", "Debug", "netcoreapp1.0"));
|
|
||||||
outputDir.GetFiles().Length.Should().Be(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
[Fact]
|
|
||||||
public void PackageReferenceWithResourcesTest()
|
|
||||||
{
|
|
||||||
var testInstance = TestAssetsManager.CreateTestInstance("ResourcesTests")
|
|
||||||
.WithLockFiles();
|
|
||||||
|
|
||||||
var projectRoot = Path.Combine(testInstance.TestRoot, "TestApp");
|
|
||||||
|
|
||||||
var cmd = new BuildCommand(projectRoot);
|
|
||||||
var result = cmd.Execute();
|
|
||||||
result.Should().Pass();
|
|
||||||
|
|
||||||
var outputDir = new DirectoryInfo(Path.Combine(projectRoot, "bin", "Debug", "netcoreapp1.0"));
|
|
||||||
|
|
||||||
outputDir.Should().HaveFile("TestLibraryWithResources.dll");
|
|
||||||
outputDir.Sub("fr").Should().HaveFile("TestLibraryWithResources.resources.dll");
|
|
||||||
|
|
||||||
var depsJson = JObject.Parse(File.ReadAllText(Path.Combine(outputDir.FullName, $"{Path.GetFileNameWithoutExtension(cmd.GetOutputExecutableName())}.deps.json")));
|
|
||||||
|
|
||||||
foreach (var library in new[] { Tuple.Create("Microsoft.Data.OData", "5.6.4"), Tuple.Create("TestLibraryWithResources", "1.0.0") })
|
|
||||||
{
|
|
||||||
var resources = depsJson
|
|
||||||
["targets"]
|
|
||||||
[".NETCoreApp,Version=v1.0"]
|
|
||||||
[library.Item1.ToLowerInvariant() + "/" + library.Item2.ToLowerInvariant()]
|
|
||||||
["resources"];
|
|
||||||
|
|
||||||
resources.Should().NotBeNull();
|
|
||||||
|
|
||||||
foreach (var item in resources.Children<JProperty>())
|
|
||||||
{
|
|
||||||
var locale = item.Value["locale"];
|
|
||||||
locale.Should().NotBeNull();
|
|
||||||
|
|
||||||
item.Name.Should().EndWith($"{locale}/{library.Item1}.resources.dll");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
[Fact]
|
|
||||||
public void ResourceTest()
|
|
||||||
{
|
|
||||||
var testInstance = TestAssetsManager.CreateTestInstance("TestAppWithLibrary")
|
|
||||||
.WithLockFiles();
|
|
||||||
GetProjectInfo(testInstance.TestRoot);
|
|
||||||
|
|
||||||
var names = new[]
|
|
||||||
{
|
|
||||||
"uk-UA",
|
|
||||||
"en",
|
|
||||||
"en-US"
|
|
||||||
};
|
|
||||||
foreach (var folder in new[] { _testAppDirDirInfo, _testLibDirInfo })
|
|
||||||
{
|
|
||||||
foreach (var name in names)
|
|
||||||
{
|
|
||||||
var resourceFile = Path.Combine(folder.FullName, $"Resource.{name}.resx");
|
|
||||||
File.WriteAllText(resourceFile, "<root></root>");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
new BuildCommand(GetProjectPath(_testAppDirDirInfo), framework: DefaultFramework)
|
|
||||||
.ExecuteWithCapturedOutput().Should().Pass();
|
|
||||||
|
|
||||||
var libdebug = _testLibDirInfo.Sub("bin/Debug").Sub(DefaultLibraryFramework);
|
|
||||||
var appdebug = _testAppDirDirInfo.Sub("bin/Debug").Sub(DefaultFramework);
|
|
||||||
var appruntime = appdebug.Sub(_runtime);
|
|
||||||
|
|
||||||
foreach (var name in names)
|
|
||||||
{
|
|
||||||
libdebug.Sub(name).Should().Exist().And.HaveFile("TestLibrary.resources.dll");
|
|
||||||
appdebug.Sub(name).Should().Exist().And.HaveFile("TestApp.resources.dll");
|
|
||||||
appruntime.Sub(name).Should().Exist().And.HaveFiles(new[] { "TestLibrary.resources.dll", "TestApp.resources.dll" });
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
[Fact]
|
|
||||||
private void StandaloneApp_WithoutCoreClrDll_Fails()
|
|
||||||
{
|
|
||||||
// Convert a Portable App to Standalone to simulate the customer scenario
|
|
||||||
var testInstance = TestAssetsManager.CreateTestInstance("DependencyChangeTest")
|
|
||||||
.WithLockFiles();
|
|
||||||
|
|
||||||
// Convert the portable test project to standalone by removing "type": "platform" and adding rids
|
|
||||||
var originalTestProject = Path.Combine(testInstance.TestRoot, "PortableApp_Standalone", "project.json");
|
|
||||||
var modifiedTestProject = Path.Combine(testInstance.TestRoot, "PortableApp_Standalone", "project.json.modified");
|
|
||||||
|
|
||||||
// Simulate a user editting the project.json
|
|
||||||
File.Delete(originalTestProject);
|
|
||||||
File.Copy(modifiedTestProject, originalTestProject);
|
|
||||||
|
|
||||||
var buildResult = new BuildCommand(originalTestProject, framework: DefaultFramework)
|
|
||||||
.ExecuteWithCapturedOutput();
|
|
||||||
|
|
||||||
buildResult.Should().Fail();
|
|
||||||
|
|
||||||
buildResult.StdErr.Should().Contain("Can not find runtime target for framework '.NETCoreApp,Version=v1.0' compatible with one of the target runtimes");
|
|
||||||
buildResult.StdErr.Should().Contain("The project has not been restored or restore failed - run `dotnet restore`");
|
|
||||||
}
|
|
||||||
|
|
||||||
[Fact]
|
|
||||||
private void App_WithSelfReferencingDependency_FailsBuild()
|
|
||||||
{
|
|
||||||
var testAssetsManager = GetTestGroupTestAssetsManager("NonRestoredTestProjects");
|
|
||||||
var testInstance = testAssetsManager.CreateTestInstance("TestProjectWithSelfReferencingDependency")
|
|
||||||
.WithLockFiles();
|
|
||||||
|
|
||||||
var restoreResult = new RestoreCommand() { WorkingDirectory = testInstance.TestRoot }.ExecuteWithCapturedOutput();
|
|
||||||
restoreResult.Should().Fail();
|
|
||||||
restoreResult.StdOut.Should().Contain("error: Cycle detected");
|
|
||||||
}
|
|
||||||
|
|
||||||
private void CopyProjectToTempDir(string projectDir, TempDirectory tempDir)
|
|
||||||
{
|
|
||||||
// copy all the files to temp dir
|
|
||||||
foreach (var file in Directory.EnumerateFiles(projectDir))
|
|
||||||
{
|
|
||||||
tempDir.CopyFile(file);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private string GetProjectPath(DirectoryInfo projectDir)
|
|
||||||
{
|
|
||||||
return Path.Combine(projectDir.FullName, "project.json");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,99 +0,0 @@
|
||||||
using System.IO;
|
|
||||||
using Microsoft.DotNet.Tools.Test.Utilities;
|
|
||||||
using Xunit;
|
|
||||||
using Microsoft.DotNet.TestFramework;
|
|
||||||
using Newtonsoft.Json.Linq;
|
|
||||||
using FluentAssertions;
|
|
||||||
|
|
||||||
namespace Microsoft.DotNet.Tools.Builder.Tests
|
|
||||||
{
|
|
||||||
public class BuildPortableTests : TestBase
|
|
||||||
{
|
|
||||||
[Fact]
|
|
||||||
public void BuildingAPortableProjectProducesDepsJsonFile()
|
|
||||||
{
|
|
||||||
var testInstance = TestAssetsManager.CreateTestInstance("PortableTests").WithLockFiles();
|
|
||||||
|
|
||||||
var netcoreAppOutput = Build(testInstance);
|
|
||||||
|
|
||||||
netcoreAppOutput.Should().Exist().And.HaveFile("PortableApp.deps.json");
|
|
||||||
}
|
|
||||||
|
|
||||||
[Fact]
|
|
||||||
public void BuildingAPortableProjectProducesADllFile()
|
|
||||||
{
|
|
||||||
var testInstance = TestAssetsManager.CreateTestInstance("PortableTests").WithLockFiles();
|
|
||||||
|
|
||||||
var netcoreAppOutput = Build(testInstance);
|
|
||||||
|
|
||||||
netcoreAppOutput.Should().Exist().And.HaveFile("PortableApp.dll");
|
|
||||||
}
|
|
||||||
|
|
||||||
[Fact]
|
|
||||||
public void BuildingAPortableProjectProducesAPdbFile()
|
|
||||||
{
|
|
||||||
var testInstance = TestAssetsManager.CreateTestInstance("PortableTests").WithLockFiles();
|
|
||||||
|
|
||||||
var netcoreAppOutput = Build(testInstance);
|
|
||||||
|
|
||||||
netcoreAppOutput.Should().Exist().And.HaveFile("PortableApp.pdb");
|
|
||||||
}
|
|
||||||
|
|
||||||
[Fact]
|
|
||||||
public void BuildingAPortableProjectProducesARuntimeConfigJsonFile()
|
|
||||||
{
|
|
||||||
var testInstance = TestAssetsManager.CreateTestInstance("PortableTests").WithLockFiles();
|
|
||||||
|
|
||||||
var netcoreAppOutput = Build(testInstance);
|
|
||||||
|
|
||||||
netcoreAppOutput.Should().Exist().And.HaveFile("PortableApp.runtimeconfig.json");
|
|
||||||
}
|
|
||||||
|
|
||||||
[Fact]
|
|
||||||
public void RuntimeOptionsGetsCopiedToRuntimeConfigJsonForAPortableApp()
|
|
||||||
{
|
|
||||||
var testInstance = TestAssetsManager.CreateTestInstance("PortableTests")
|
|
||||||
.WithLockFiles();
|
|
||||||
|
|
||||||
var netcoreAppOutput = Build(testInstance);
|
|
||||||
|
|
||||||
var runtimeConfigJsonPath = Path.Combine(netcoreAppOutput.FullName, "PortableApp.runtimeconfig.json");
|
|
||||||
|
|
||||||
using (var stream = new FileStream(runtimeConfigJsonPath, FileMode.Open, FileAccess.Read, FileShare.Read))
|
|
||||||
{
|
|
||||||
var reader = new StreamReader(stream);
|
|
||||||
|
|
||||||
var rawProject = JObject.Parse(reader.ReadToEnd());
|
|
||||||
var runtimeOptions = rawProject["runtimeOptions"];
|
|
||||||
|
|
||||||
runtimeOptions["somethingString"].Value<string>().Should().Be("anything");
|
|
||||||
runtimeOptions["somethingBoolean"].Value<bool>().Should().BeTrue();
|
|
||||||
runtimeOptions["someArray"].ToObject<string[]>().Should().Contain("one", "two");
|
|
||||||
runtimeOptions["someObject"].Value<JObject>()["someProperty"].Value<string>().Should().Be("someValue");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
[Fact]
|
|
||||||
public void BuildingAPortableProjectProducesARuntimeConfigDevJsonFile()
|
|
||||||
{
|
|
||||||
var testInstance = TestAssetsManager.CreateTestInstance("PortableTests").WithLockFiles();
|
|
||||||
|
|
||||||
var netcoreAppOutput = Build(testInstance);
|
|
||||||
|
|
||||||
netcoreAppOutput.Should().Exist().And.HaveFile("PortableApp.runtimeconfig.dev.json");
|
|
||||||
}
|
|
||||||
|
|
||||||
private DirectoryInfo Build(TestInstance testInstance)
|
|
||||||
{
|
|
||||||
var result = new BuildCommand(
|
|
||||||
projectPath: Path.Combine(testInstance.TestRoot, "PortableApp"))
|
|
||||||
.ExecuteWithCapturedOutput();
|
|
||||||
|
|
||||||
result.Should().Pass();
|
|
||||||
|
|
||||||
var outputBase = new DirectoryInfo(Path.Combine(testInstance.TestRoot, "PortableApp", "bin", "Debug"));
|
|
||||||
|
|
||||||
return outputBase.Sub("netcoreapp1.0");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,187 +0,0 @@
|
||||||
// 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 System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.IO;
|
|
||||||
using System.Linq;
|
|
||||||
using FluentAssertions;
|
|
||||||
using Microsoft.DotNet.Cli.Utils;
|
|
||||||
using Microsoft.DotNet.Tools.Test.Utilities;
|
|
||||||
using Xunit;
|
|
||||||
using System.Runtime.InteropServices;
|
|
||||||
|
|
||||||
namespace Microsoft.DotNet.Tools.Builder.Tests
|
|
||||||
{
|
|
||||||
public class ProjectToProjectDependenciesIncrementalTest : IncrementalTestBase
|
|
||||||
{
|
|
||||||
private readonly string[] _projects = new[] { "L0", "L11", "L12", "L21", "L22" };
|
|
||||||
private readonly string _appProject = "L0";
|
|
||||||
|
|
||||||
|
|
||||||
private string MainProjectExe
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return MainProject + (RuntimeInformation.IsOSPlatform(OSPlatform.Windows) ? ".exe" : "");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public ProjectToProjectDependenciesIncrementalTest()
|
|
||||||
{
|
|
||||||
MainProject = "L0";
|
|
||||||
ExpectedOutput = "L0 L11 L12 L22 L21 L12 L22 " + Environment.NewLine;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
[Theory]
|
|
||||||
[InlineData("1", "L0", new[] { "L0" })]
|
|
||||||
[InlineData("2", "L11", new[] { "L0", "L11" })]
|
|
||||||
[InlineData("3", "L12", new[] { "L0", "L11", "L12" })]
|
|
||||||
[InlineData("4", "L22", new[] { "L0", "L11", "L12", "L22" })]
|
|
||||||
[InlineData("5", "L21", new[] { "L0", "L11", "L21" })]
|
|
||||||
public void TestIncrementalBuildOfDependencyGraph(string testIdentifer, string projectToTouch, string[] expectedRebuiltProjects)
|
|
||||||
{
|
|
||||||
var testInstance = TestAssetsManager.CreateTestInstance("TestProjectToProjectDependencies", identifier: testIdentifer)
|
|
||||||
.WithLockFiles()
|
|
||||||
.WithBuildArtifacts();
|
|
||||||
|
|
||||||
TestProjectRoot = testInstance.TestRoot;
|
|
||||||
|
|
||||||
// second build; nothing changed; no project required compilation
|
|
||||||
var result2 = BuildProject();
|
|
||||||
AssertRebuilt(result2, Array.Empty<string>());
|
|
||||||
|
|
||||||
//modify the source code of a project
|
|
||||||
TouchSourcesOfProject(projectToTouch);
|
|
||||||
|
|
||||||
// third build; all projects on the paths from touched project to root project need to be rebuilt
|
|
||||||
var result3 = BuildProject();
|
|
||||||
AssertRebuilt(result3, expectedRebuiltProjects);
|
|
||||||
}
|
|
||||||
|
|
||||||
[Fact]
|
|
||||||
public void TestNoDependencyFlag()
|
|
||||||
{
|
|
||||||
var testInstance = TestAssetsManager.CreateTestInstance("TestProjectToProjectDependencies")
|
|
||||||
.WithLockFiles()
|
|
||||||
.WithBuildArtifacts();
|
|
||||||
|
|
||||||
TestProjectRoot = testInstance.TestRoot;
|
|
||||||
|
|
||||||
var dependencies = new[] { "L11", "L12", "L21", "L22" };
|
|
||||||
|
|
||||||
// modify the source code of a leaf dependency
|
|
||||||
TouchSourcesOfProject("L22");
|
|
||||||
|
|
||||||
// second build with no dependencies and no incremental; only the root rebuilds
|
|
||||||
var result2 = BuildProject(noDependencies: true, noIncremental: true);
|
|
||||||
result2.Should().HaveStdOutMatching("Compiling.*L0.*");
|
|
||||||
|
|
||||||
AssertResultDoesNotContainStrings(result2, dependencies);
|
|
||||||
|
|
||||||
// third build with no dependencies but incremental; nothing rebuilds
|
|
||||||
var result3 = BuildProject(noDependencies: true);
|
|
||||||
result3.Should().HaveSkippedProjectCompilation("L0", _appFrameworkFullName);
|
|
||||||
AssertResultDoesNotContainStrings(result3, dependencies);
|
|
||||||
}
|
|
||||||
|
|
||||||
[Fact]
|
|
||||||
public void TestNoDependenciesDependencyRebuild()
|
|
||||||
{
|
|
||||||
var testInstance = TestAssetsManager.CreateTestInstance("TestProjectToProjectDependencies")
|
|
||||||
.WithLockFiles()
|
|
||||||
.WithBuildArtifacts();
|
|
||||||
|
|
||||||
TestProjectRoot = testInstance.TestRoot;
|
|
||||||
|
|
||||||
// modify the source code of a leaf dependency
|
|
||||||
TouchSourcesOfProject("L11");
|
|
||||||
|
|
||||||
// second build with no dependencies, rebuilding leaf
|
|
||||||
var result2 = new BuildCommand(GetProjectDirectory("L11"), noDependencies: true, framework: DefaultLibraryFramework).ExecuteWithCapturedOutput();
|
|
||||||
result2.Should().HaveStdOutMatching("Compiling.*L11.*");
|
|
||||||
|
|
||||||
// third build with no dependencies but incremental; root project should rebuild
|
|
||||||
var result3 = BuildProject(noDependencies: true);
|
|
||||||
result3.Should().HaveCompiledProject("L0", _appFrameworkFullName);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void AssertResultDoesNotContainStrings(CommandResult commandResult, string[] strings)
|
|
||||||
{
|
|
||||||
foreach (var s in strings)
|
|
||||||
{
|
|
||||||
commandResult.StdOut.Should().NotContain(s);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// compute A - B
|
|
||||||
private T[] SetDifference<T>(T[] A, T[] B)
|
|
||||||
{
|
|
||||||
var setA = new HashSet<T>(A);
|
|
||||||
setA.ExceptWith(B);
|
|
||||||
return setA.ToArray();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void AssertRebuilt(CommandResult buildResult, string[] expectedRebuilt)
|
|
||||||
{
|
|
||||||
foreach (var rebuiltProject in expectedRebuilt)
|
|
||||||
{
|
|
||||||
string frameworkFullName = null;
|
|
||||||
|
|
||||||
if (TestProjectIsApp(rebuiltProject))
|
|
||||||
{
|
|
||||||
buildResult
|
|
||||||
.Should()
|
|
||||||
.HaveCompiledProject(rebuiltProject, frameworkFullName: _appFrameworkFullName);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
buildResult
|
|
||||||
.Should()
|
|
||||||
.HaveCompiledProject(rebuiltProject, _libraryFrameworkFullName);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach (var skippedProject in SetDifference(_projects, expectedRebuilt))
|
|
||||||
{
|
|
||||||
if (TestProjectIsApp(skippedProject))
|
|
||||||
{
|
|
||||||
buildResult.Should().HaveSkippedProjectCompilation(skippedProject, _appFrameworkFullName);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
buildResult.Should().HaveSkippedProjectCompilation(skippedProject, _libraryFrameworkFullName);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private bool TestProjectIsApp(string testproject)
|
|
||||||
{
|
|
||||||
return testproject.Equals(_appProject, StringComparison.OrdinalIgnoreCase);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override string GetProjectDirectory(string projectName)
|
|
||||||
{
|
|
||||||
return Path.Combine(TestProjectRoot, "src", projectName);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override string GetOutputDir()
|
|
||||||
{
|
|
||||||
return "";
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override string GetOutputExePath()
|
|
||||||
{
|
|
||||||
var outputExe = Directory.GetFiles(TestProjectRoot, MainProjectExe, SearchOption.AllDirectories)
|
|
||||||
.FirstOrDefault();
|
|
||||||
|
|
||||||
if (string.IsNullOrEmpty(outputExe))
|
|
||||||
{
|
|
||||||
throw new FileNotFoundException($"Unable to find {outputExe} in {TestProjectRoot} or its subdirectories");
|
|
||||||
}
|
|
||||||
|
|
||||||
return Path.GetDirectoryName(outputExe);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,87 +0,0 @@
|
||||||
// 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 System.IO;
|
|
||||||
using System.Linq;
|
|
||||||
using FluentAssertions;
|
|
||||||
using Microsoft.DotNet.InternalAbstractions;
|
|
||||||
using Microsoft.DotNet.ProjectModel;
|
|
||||||
using Microsoft.DotNet.TestFramework;
|
|
||||||
using Microsoft.DotNet.Tools.Test.Utilities;
|
|
||||||
using Newtonsoft.Json.Linq;
|
|
||||||
using Xunit;
|
|
||||||
|
|
||||||
namespace Microsoft.DotNet.Tools.Builder.Tests
|
|
||||||
{
|
|
||||||
public class BuildStandAloneTests : TestBase
|
|
||||||
{
|
|
||||||
[Fact]
|
|
||||||
public void BuildingAStandAloneProjectProducesARuntimeConfigDevJsonFile()
|
|
||||||
{
|
|
||||||
var testInstance = TestAssetsManager.CreateTestInstance("PortableTests")
|
|
||||||
.WithLockFiles();
|
|
||||||
|
|
||||||
var netstandardappOutput = Build(testInstance);
|
|
||||||
|
|
||||||
netstandardappOutput.Should().Exist().And.HaveFile("StandaloneApp.runtimeconfig.dev.json");
|
|
||||||
}
|
|
||||||
|
|
||||||
[Fact]
|
|
||||||
public void BuildingAStandAloneProjectProducesARuntimeConfigJsonFile()
|
|
||||||
{
|
|
||||||
var testInstance = TestAssetsManager.CreateTestInstance("PortableTests")
|
|
||||||
.WithLockFiles();
|
|
||||||
|
|
||||||
var netstandardappOutput = Build(testInstance);
|
|
||||||
|
|
||||||
netstandardappOutput.Should().Exist().And.HaveFile("StandaloneApp.runtimeconfig.json");
|
|
||||||
}
|
|
||||||
|
|
||||||
[Fact]
|
|
||||||
public void RuntimeOptionsGetsCopiedToRuntimeConfigJsonForAStandaloneApp()
|
|
||||||
{
|
|
||||||
var testInstance = TestAssetsManager.CreateTestInstance("PortableTests")
|
|
||||||
.WithLockFiles();
|
|
||||||
|
|
||||||
var netstandardappOutput = Build(testInstance);
|
|
||||||
|
|
||||||
var runtimeConfigJsonPath = Path.Combine(netstandardappOutput.FullName, "StandaloneApp.runtimeconfig.json");
|
|
||||||
|
|
||||||
using (var stream = new FileStream(runtimeConfigJsonPath, FileMode.Open, FileAccess.Read, FileShare.Read))
|
|
||||||
{
|
|
||||||
var reader = new StreamReader(stream);
|
|
||||||
|
|
||||||
var rawProject = JObject.Parse(reader.ReadToEnd());
|
|
||||||
var runtimeOptions = rawProject["runtimeOptions"];
|
|
||||||
|
|
||||||
runtimeOptions["somethingString"].Value<string>().Should().Be("anything");
|
|
||||||
runtimeOptions["somethingBoolean"].Value<bool>().Should().BeTrue();
|
|
||||||
runtimeOptions["someArray"].ToObject<string[]>().Should().Contain("one", "two");
|
|
||||||
runtimeOptions["someObject"].Value<JObject>()["someProperty"].Value<string>().Should().Be("someValue");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public DirectoryInfo Build(TestInstance testInstance)
|
|
||||||
{
|
|
||||||
var projectPath = Path.Combine(testInstance.TestRoot, "StandaloneApp");
|
|
||||||
|
|
||||||
var result = new BuildCommand(
|
|
||||||
projectPath: projectPath)
|
|
||||||
.ExecuteWithCapturedOutput();
|
|
||||||
|
|
||||||
var contexts = ProjectContext.CreateContextForEachFramework(
|
|
||||||
projectPath,
|
|
||||||
null,
|
|
||||||
RuntimeEnvironmentRidExtensions.GetAllCandidateRuntimeIdentifiers());
|
|
||||||
|
|
||||||
var runtime = contexts.FirstOrDefault(c => !string.IsNullOrEmpty(c.RuntimeIdentifier))?.RuntimeIdentifier;
|
|
||||||
|
|
||||||
result.Should().Pass();
|
|
||||||
|
|
||||||
var outputBase = new DirectoryInfo(
|
|
||||||
Path.Combine(testInstance.TestRoot, "StandaloneApp", "bin", "Debug", "netcoreapp1.0"));
|
|
||||||
|
|
||||||
return outputBase.Sub(runtime);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,27 +0,0 @@
|
||||||
// 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 FluentAssertions;
|
|
||||||
using Microsoft.DotNet.Tools.Test.Utilities;
|
|
||||||
using Xunit;
|
|
||||||
|
|
||||||
namespace Microsoft.DotNet.Tools.Builder.Tests
|
|
||||||
{
|
|
||||||
public class BuildWarningsTests : TestBase
|
|
||||||
{
|
|
||||||
[Fact]
|
|
||||||
public void HavingDeprecatedProjectFileProducesWarning()
|
|
||||||
{
|
|
||||||
var testInstance = TestAssetsManager.CreateTestInstance("TestLibraryWithDeprecatedProjectFile").WithLockFiles();
|
|
||||||
|
|
||||||
new BuildCommand(testInstance.TestRoot)
|
|
||||||
.ExecuteWithCapturedOutput()
|
|
||||||
.Should()
|
|
||||||
.Pass()
|
|
||||||
.And
|
|
||||||
.HaveStdErrContaining("DOTNET1015: The 'compilationOptions' option is deprecated. Use 'buildOptions' instead.")
|
|
||||||
.And
|
|
||||||
.HaveStdErrContaining("DOTNET1015: The 'packInclude' option is deprecated. Use 'files' in 'packOptions' instead.");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,119 +0,0 @@
|
||||||
// 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 System;
|
|
||||||
using System.IO;
|
|
||||||
using FluentAssertions;
|
|
||||||
using Microsoft.DotNet.Tools.Test.Utilities;
|
|
||||||
using Xunit;
|
|
||||||
|
|
||||||
namespace Microsoft.DotNet.Tools.Builder.Tests
|
|
||||||
{
|
|
||||||
public class GivenDotnetBuildBuildsProjects : TestBase
|
|
||||||
{
|
|
||||||
[Fact]
|
|
||||||
public void It_builds_projects_with_Unicode_in_path()
|
|
||||||
{
|
|
||||||
var testInstance = TestAssetsManager
|
|
||||||
.CreateTestInstance("TestAppWithUnicodéPath")
|
|
||||||
.WithLockFiles();
|
|
||||||
|
|
||||||
var testProjectDirectory = testInstance.TestRoot;
|
|
||||||
|
|
||||||
var buildCommand = new BuildCommand("");
|
|
||||||
buildCommand.WorkingDirectory = testProjectDirectory;
|
|
||||||
|
|
||||||
buildCommand.ExecuteWithCapturedOutput()
|
|
||||||
.Should()
|
|
||||||
.Pass();
|
|
||||||
}
|
|
||||||
|
|
||||||
[Fact]
|
|
||||||
public void It_builds_projects_with_Unicode_in_path_project_path_passed()
|
|
||||||
{
|
|
||||||
var testInstance = TestAssetsManager
|
|
||||||
.CreateTestInstance("TestAppWithUnicodéPath")
|
|
||||||
.WithLockFiles();
|
|
||||||
|
|
||||||
var testProject = Path.Combine(testInstance.TestRoot, "project.json");
|
|
||||||
|
|
||||||
new BuildCommand(testProject)
|
|
||||||
.ExecuteWithCapturedOutput()
|
|
||||||
.Should()
|
|
||||||
.Pass();
|
|
||||||
}
|
|
||||||
|
|
||||||
[Fact]
|
|
||||||
public void It_builds_projects_with_ruleset_relative_path()
|
|
||||||
{
|
|
||||||
var testInstance = TestAssetsManager
|
|
||||||
.CreateTestInstance("TestRuleSet")
|
|
||||||
.WithLockFiles();
|
|
||||||
|
|
||||||
new BuildCommand(Path.Combine("TestLibraryWithRuleSet", "project.json"), skipLoadProject: true)
|
|
||||||
.WithWorkingDirectory(testInstance.TestRoot)
|
|
||||||
.ExecuteWithCapturedOutput()
|
|
||||||
.Should()
|
|
||||||
.Pass()
|
|
||||||
.And
|
|
||||||
.HaveStdErrContaining("CA1001")
|
|
||||||
.And
|
|
||||||
.HaveStdErrContaining("CA2213")
|
|
||||||
.And
|
|
||||||
.NotHaveStdErrContaining("CA1018"); // this violation is hidden in the ruleset
|
|
||||||
}
|
|
||||||
|
|
||||||
[Fact]
|
|
||||||
public void It_builds_projects_with_a_local_project_json_path()
|
|
||||||
{
|
|
||||||
var testInstance = TestAssetsManager
|
|
||||||
.CreateTestInstance("TestAppSimple")
|
|
||||||
.WithLockFiles();
|
|
||||||
|
|
||||||
new BuildCommand("project.json")
|
|
||||||
.WithWorkingDirectory(testInstance.TestRoot)
|
|
||||||
.ExecuteWithCapturedOutput()
|
|
||||||
.Should()
|
|
||||||
.Pass();
|
|
||||||
}
|
|
||||||
|
|
||||||
[Fact]
|
|
||||||
public void It_builds_projects_with_xmlDoc_and_spaces_in_the_path()
|
|
||||||
{
|
|
||||||
var testInstance = TestAssetsManager
|
|
||||||
.CreateTestInstance("TestLibraryWithXmlDoc", identifier: "With Space")
|
|
||||||
.WithLockFiles();
|
|
||||||
|
|
||||||
testInstance.TestRoot.Should().Contain(" ");
|
|
||||||
|
|
||||||
var output = new DirectoryInfo(Path.Combine(testInstance.TestRoot, "output"));
|
|
||||||
|
|
||||||
new BuildCommand("", output: output.FullName, framework: DefaultLibraryFramework)
|
|
||||||
.WithWorkingDirectory(testInstance.TestRoot)
|
|
||||||
.ExecuteWithCapturedOutput()
|
|
||||||
.Should()
|
|
||||||
.Pass();
|
|
||||||
|
|
||||||
output.Should().HaveFiles(new[]
|
|
||||||
{
|
|
||||||
"TestLibraryWithXmlDoc.dll",
|
|
||||||
"TestLibraryWithXmlDoc.xml"
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
[WindowsOnlyFact]
|
|
||||||
public void It_builds_projects_targeting_net46_and_Roslyn()
|
|
||||||
{
|
|
||||||
var testInstance = TestAssetsManager
|
|
||||||
.CreateTestInstance("AppWithNet46AndRoslyn")
|
|
||||||
.WithLockFiles();
|
|
||||||
|
|
||||||
var testProject = Path.Combine(testInstance.TestRoot, "project.json");
|
|
||||||
|
|
||||||
new BuildCommand(testProject)
|
|
||||||
.Execute()
|
|
||||||
.Should()
|
|
||||||
.Pass();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,138 +0,0 @@
|
||||||
// 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 System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.IO;
|
|
||||||
using System.Linq;
|
|
||||||
using Microsoft.DotNet.Cli.Utils;
|
|
||||||
using Microsoft.DotNet.Tools.Test.Utilities;
|
|
||||||
|
|
||||||
namespace Microsoft.DotNet.Tools.Builder.Tests
|
|
||||||
{
|
|
||||||
public class IncrementalTestBase : TestBase
|
|
||||||
{
|
|
||||||
protected readonly string _libraryFrameworkFullName = ".NETStandard,Version=v1.5";
|
|
||||||
protected readonly string _appFrameworkFullName = ".NETCoreApp,Version=v1.0";
|
|
||||||
|
|
||||||
protected virtual string MainProject
|
|
||||||
{
|
|
||||||
get; set;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected virtual string ExpectedOutput
|
|
||||||
{
|
|
||||||
get; set;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected virtual string TestProjectRoot
|
|
||||||
{
|
|
||||||
get; set;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected IncrementalTestBase()
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public IncrementalTestBase(string testProjectsRoot, string mainProject, string expectedOutput)
|
|
||||||
{
|
|
||||||
MainProject = mainProject;
|
|
||||||
ExpectedOutput = expectedOutput;
|
|
||||||
TestProjectRoot = testProjectsRoot;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected void TouchSourcesOfProject()
|
|
||||||
{
|
|
||||||
TouchSourcesOfProject(MainProject);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected void TouchSourcesOfProject(string projectToTouch)
|
|
||||||
{
|
|
||||||
foreach (var sourceFile in GetSourceFilesForProject(projectToTouch))
|
|
||||||
{
|
|
||||||
TouchFile(sourceFile);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
protected static void TouchFile(string file)
|
|
||||||
{
|
|
||||||
File.SetLastWriteTimeUtc(file, DateTime.UtcNow);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected CommandResult BuildProject(bool noDependencies = false, bool noIncremental = false, bool expectBuildFailure = false)
|
|
||||||
{
|
|
||||||
var mainProjectFile = GetProjectFile(MainProject);
|
|
||||||
return BuildProject(mainProjectFile, noDependencies, noIncremental, expectBuildFailure);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected CommandResult BuildProject(string projectFile, bool noDependencies = false, bool noIncremental = false, bool expectBuildFailure = false)
|
|
||||||
{
|
|
||||||
var buildCommand = new BuildCommand(projectFile, output: GetOutputDir(), framework: "netcoreapp1.0", noIncremental: noIncremental, noDependencies : noDependencies);
|
|
||||||
var result = buildCommand.ExecuteWithCapturedOutput();
|
|
||||||
|
|
||||||
if (!expectBuildFailure)
|
|
||||||
{
|
|
||||||
result.Should().Pass();
|
|
||||||
TestOutputExecutable(GetOutputExePath(), buildCommand.GetOutputExecutableName(), ExpectedOutput);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
result.Should().Fail();
|
|
||||||
}
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected virtual string GetOutputExePath()
|
|
||||||
{
|
|
||||||
return GetBinRoot();
|
|
||||||
}
|
|
||||||
|
|
||||||
protected virtual string GetOutputDir()
|
|
||||||
{
|
|
||||||
return GetBinRoot();
|
|
||||||
}
|
|
||||||
|
|
||||||
protected string GetBinRoot()
|
|
||||||
{
|
|
||||||
return Path.Combine(TestProjectRoot, "bin");
|
|
||||||
}
|
|
||||||
|
|
||||||
protected virtual string GetProjectDirectory(string projectName)
|
|
||||||
{
|
|
||||||
return Path.Combine(TestProjectRoot);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected string GetProjectFile(string projectName)
|
|
||||||
{
|
|
||||||
return Path.Combine(GetProjectDirectory(projectName), "project.json");
|
|
||||||
}
|
|
||||||
|
|
||||||
private string GetOutputFileForProject(string projectName)
|
|
||||||
{
|
|
||||||
return Path.Combine(GetCompilationOutputPath(), projectName + ".dll");
|
|
||||||
}
|
|
||||||
|
|
||||||
private IEnumerable<string> GetSourceFilesForProject(string projectName)
|
|
||||||
{
|
|
||||||
return Directory.EnumerateFiles(GetProjectDirectory(projectName)).
|
|
||||||
Where(f => f.EndsWith(".cs"));
|
|
||||||
}
|
|
||||||
|
|
||||||
protected string GetCompilationOutputPath()
|
|
||||||
{
|
|
||||||
var executablePath = Path.Combine(GetBinRoot(), "Debug", "netcoreapp1.0");
|
|
||||||
|
|
||||||
return executablePath;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected string GetIntermediaryOutputPath()
|
|
||||||
{
|
|
||||||
var executablePath = Path.Combine(TestProjectRoot, "obj", "Debug", "netcoreapp1.0");
|
|
||||||
|
|
||||||
return executablePath;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,267 +0,0 @@
|
||||||
// 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 System;
|
|
||||||
using System.IO;
|
|
||||||
using System.Linq;
|
|
||||||
using FluentAssertions;
|
|
||||||
using Microsoft.DotNet.Cli.Utils;
|
|
||||||
using Microsoft.DotNet.Tools.Test.Utilities;
|
|
||||||
using Xunit;
|
|
||||||
using Microsoft.DotNet.TestFramework;
|
|
||||||
using System.Diagnostics;
|
|
||||||
|
|
||||||
namespace Microsoft.DotNet.Tools.Builder.Tests
|
|
||||||
{
|
|
||||||
public class IncrementalTests : IncrementalTestBase
|
|
||||||
{
|
|
||||||
public IncrementalTests()
|
|
||||||
{
|
|
||||||
MainProject = "TestSimpleIncrementalApp";
|
|
||||||
ExpectedOutput = "Hello World!" + Environment.NewLine;
|
|
||||||
}
|
|
||||||
|
|
||||||
private TestInstance _testInstance;
|
|
||||||
|
|
||||||
private void CreateTestInstance()
|
|
||||||
{
|
|
||||||
_testInstance = TestAssetsManager.CreateTestInstance("TestSimpleIncrementalApp")
|
|
||||||
.WithLockFiles();
|
|
||||||
TestProjectRoot = _testInstance.TestRoot;
|
|
||||||
}
|
|
||||||
|
|
||||||
[Fact]
|
|
||||||
public void TestNoIncrementalFlag()
|
|
||||||
{
|
|
||||||
CreateTestInstance();
|
|
||||||
|
|
||||||
var buildResult = BuildProject();
|
|
||||||
buildResult.Should().HaveCompiledProject(MainProject, _appFrameworkFullName);
|
|
||||||
|
|
||||||
buildResult = BuildProject(noIncremental: true);
|
|
||||||
buildResult.Should().HaveCompiledProject(MainProject, _appFrameworkFullName);
|
|
||||||
Assert.Contains("[Forced Unsafe]", buildResult.StdOut);
|
|
||||||
}
|
|
||||||
|
|
||||||
[Fact]
|
|
||||||
public void TestRebuildMissingPdb()
|
|
||||||
{
|
|
||||||
CreateTestInstance();
|
|
||||||
TestDeleteOutputWithExtension("pdb");
|
|
||||||
}
|
|
||||||
|
|
||||||
[Fact]
|
|
||||||
public void TestRebuildMissingDll()
|
|
||||||
{
|
|
||||||
CreateTestInstance();
|
|
||||||
TestDeleteOutputWithExtension("dll");
|
|
||||||
}
|
|
||||||
|
|
||||||
[Fact]
|
|
||||||
public void TestRebuildMissingXml()
|
|
||||||
{
|
|
||||||
CreateTestInstance();
|
|
||||||
TestDeleteOutputWithExtension("xml");
|
|
||||||
}
|
|
||||||
|
|
||||||
[Fact]
|
|
||||||
public void TestNoLockFile()
|
|
||||||
{
|
|
||||||
CreateTestInstance();
|
|
||||||
var buildResult = BuildProject();
|
|
||||||
buildResult.Should().HaveCompiledProject(MainProject, _appFrameworkFullName);
|
|
||||||
|
|
||||||
var lockFile = Path.Combine(TestProjectRoot, "project.lock.json");
|
|
||||||
Assert.True(File.Exists(lockFile));
|
|
||||||
|
|
||||||
File.Delete(lockFile);
|
|
||||||
Assert.False(File.Exists(lockFile));
|
|
||||||
|
|
||||||
buildResult = BuildProject(expectBuildFailure: true);
|
|
||||||
Assert.Contains("does not have a lock file", buildResult.StdErr);
|
|
||||||
Assert.Contains("dotnet restore", buildResult.StdErr);
|
|
||||||
}
|
|
||||||
|
|
||||||
[Fact]
|
|
||||||
public void TestModifiedVersionFile()
|
|
||||||
{
|
|
||||||
CreateTestInstance();
|
|
||||||
BuildProject().Should().HaveCompiledProject(MainProject, _appFrameworkFullName);
|
|
||||||
|
|
||||||
// change version file
|
|
||||||
var versionFile = Path.Combine(GetIntermediaryOutputPath(), ".SDKVersion");
|
|
||||||
File.Exists(versionFile).Should().BeTrue();
|
|
||||||
File.AppendAllText(versionFile, "text");
|
|
||||||
|
|
||||||
// assert rebuilt
|
|
||||||
BuildProject().Should().HaveCompiledProject(MainProject, _appFrameworkFullName);
|
|
||||||
}
|
|
||||||
|
|
||||||
[Fact]
|
|
||||||
public void TestNoVersionFile()
|
|
||||||
{
|
|
||||||
CreateTestInstance();
|
|
||||||
BuildProject().Should().HaveCompiledProject(MainProject, _appFrameworkFullName);
|
|
||||||
|
|
||||||
// delete version file
|
|
||||||
var versionFile = Path.Combine(GetIntermediaryOutputPath(), ".SDKVersion");
|
|
||||||
File.Exists(versionFile).Should().BeTrue();
|
|
||||||
File.Delete(versionFile);
|
|
||||||
File.Exists(versionFile).Should().BeFalse();
|
|
||||||
|
|
||||||
// assert build skipped due to no version file
|
|
||||||
BuildProject().Should().HaveSkippedProjectCompilation(MainProject, _appFrameworkFullName);
|
|
||||||
|
|
||||||
// the version file should have been regenerated during the build, even if compilation got skipped
|
|
||||||
File.Exists(versionFile).Should().BeTrue();
|
|
||||||
}
|
|
||||||
|
|
||||||
[Fact]
|
|
||||||
public void TestRebuildDeletedSource()
|
|
||||||
{
|
|
||||||
CreateTestInstance();
|
|
||||||
BuildProject().Should().HaveCompiledProject(MainProject, _appFrameworkFullName);
|
|
||||||
|
|
||||||
var sourceFile = Path.Combine(GetProjectDirectory(MainProject), "Program2.cs");
|
|
||||||
File.Delete(sourceFile);
|
|
||||||
Assert.False(File.Exists(sourceFile));
|
|
||||||
|
|
||||||
// second build; should get rebuilt since we deleted a source file
|
|
||||||
BuildProject().Should().HaveCompiledProject(MainProject, _appFrameworkFullName);
|
|
||||||
|
|
||||||
// third build; incremental cache should have been regenerated and project skipped
|
|
||||||
BuildProject().Should().HaveSkippedProjectCompilation(MainProject, _appFrameworkFullName);
|
|
||||||
}
|
|
||||||
|
|
||||||
[Fact]
|
|
||||||
public void TestRebuildRenamedSource()
|
|
||||||
{
|
|
||||||
CreateTestInstance();
|
|
||||||
var buildResult = BuildProject();
|
|
||||||
buildResult.Should().HaveCompiledProject(MainProject, _appFrameworkFullName);
|
|
||||||
|
|
||||||
var sourceFile = Path.Combine(GetProjectDirectory(MainProject), "Program2.cs");
|
|
||||||
var destinationFile = Path.Combine(Path.GetDirectoryName(sourceFile), "ProgramNew.cs");
|
|
||||||
File.Move(sourceFile, destinationFile);
|
|
||||||
Assert.False(File.Exists(sourceFile));
|
|
||||||
Assert.True(File.Exists(destinationFile));
|
|
||||||
|
|
||||||
// second build; should get rebuilt since we renamed a source file
|
|
||||||
buildResult = BuildProject();
|
|
||||||
buildResult.Should().HaveCompiledProject(MainProject, _appFrameworkFullName);
|
|
||||||
|
|
||||||
// third build; incremental cache should have been regenerated and project skipped
|
|
||||||
BuildProject().Should().HaveSkippedProjectCompilation(MainProject, _appFrameworkFullName);
|
|
||||||
}
|
|
||||||
|
|
||||||
[Fact]
|
|
||||||
public void TestRebuildDeletedSourceAfterCliChanged()
|
|
||||||
{
|
|
||||||
CreateTestInstance();
|
|
||||||
BuildProject().Should().HaveCompiledProject(MainProject, _appFrameworkFullName);
|
|
||||||
|
|
||||||
// change version file
|
|
||||||
var versionFile = Path.Combine(GetIntermediaryOutputPath(), ".SDKVersion");
|
|
||||||
File.Exists(versionFile).Should().BeTrue();
|
|
||||||
File.AppendAllText(versionFile, "text");
|
|
||||||
|
|
||||||
// delete a source file
|
|
||||||
var sourceFile = Path.Combine(GetProjectDirectory(MainProject), "Program2.cs");
|
|
||||||
File.Delete(sourceFile);
|
|
||||||
Assert.False(File.Exists(sourceFile));
|
|
||||||
|
|
||||||
// should get rebuilt since we changed version file and deleted source file
|
|
||||||
BuildProject().Should().HaveCompiledProject(MainProject, _appFrameworkFullName);
|
|
||||||
|
|
||||||
// third build; incremental cache should have been regenerated and project skipped
|
|
||||||
BuildProject().Should().HaveSkippedProjectCompilation(MainProject, _appFrameworkFullName);
|
|
||||||
}
|
|
||||||
|
|
||||||
[Fact]
|
|
||||||
public void TestRebuildChangedLockFile()
|
|
||||||
{
|
|
||||||
CreateTestInstance();
|
|
||||||
var buildResult = BuildProject();
|
|
||||||
buildResult.Should().HaveCompiledProject(MainProject, _appFrameworkFullName);
|
|
||||||
|
|
||||||
var lockFile = Path.Combine(TestProjectRoot, "project.lock.json");
|
|
||||||
TouchFile(lockFile);
|
|
||||||
|
|
||||||
buildResult = BuildProject();
|
|
||||||
buildResult.Should().HaveCompiledProject(MainProject, _appFrameworkFullName);
|
|
||||||
}
|
|
||||||
|
|
||||||
[Fact]
|
|
||||||
public void TestRebuildChangedProjectFile()
|
|
||||||
{
|
|
||||||
CreateTestInstance();
|
|
||||||
var buildResult = BuildProject();
|
|
||||||
buildResult.Should().HaveCompiledProject(MainProject, _appFrameworkFullName);
|
|
||||||
|
|
||||||
TouchFile(GetProjectFile(MainProject));
|
|
||||||
|
|
||||||
buildResult = BuildProject();
|
|
||||||
buildResult.Should().HaveCompiledProject(MainProject, _appFrameworkFullName);
|
|
||||||
}
|
|
||||||
|
|
||||||
// regression for https://github.com/dotnet/cli/issues/965
|
|
||||||
[Fact]
|
|
||||||
public void TestInputWithSameTimeAsOutputCausesProjectToCompile()
|
|
||||||
{
|
|
||||||
CreateTestInstance();
|
|
||||||
var buildResult = BuildProject();
|
|
||||||
buildResult.Should().HaveCompiledProject(MainProject, _appFrameworkFullName);
|
|
||||||
|
|
||||||
var outputTimestamp = SetAllOutputItemsToSameTime();
|
|
||||||
|
|
||||||
// set an input to have the same last write time as an output item
|
|
||||||
// this should trigger recompilation to account for file systems with second timestamp granularity
|
|
||||||
// (an input file that changed within the same second as the previous outputs should trigger a rebuild)
|
|
||||||
File.SetLastWriteTime(GetProjectFile(MainProject), outputTimestamp);
|
|
||||||
|
|
||||||
buildResult = BuildProject();
|
|
||||||
buildResult.Should().HaveCompiledProject(MainProject, _appFrameworkFullName);
|
|
||||||
}
|
|
||||||
|
|
||||||
private DateTime SetAllOutputItemsToSameTime()
|
|
||||||
{
|
|
||||||
var now = DateTime.Now;
|
|
||||||
foreach (var f in Directory.EnumerateFiles(GetCompilationOutputPath()))
|
|
||||||
{
|
|
||||||
File.SetLastWriteTime(f, now);
|
|
||||||
}
|
|
||||||
return now;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void TestDeleteOutputWithExtension(string extension)
|
|
||||||
{
|
|
||||||
|
|
||||||
var buildResult = BuildProject();
|
|
||||||
buildResult.Should().HaveCompiledProject(MainProject, _appFrameworkFullName);
|
|
||||||
|
|
||||||
Reporter.Verbose.WriteLine($"Files in {GetBinRoot()}");
|
|
||||||
foreach (var file in Directory.EnumerateFiles(GetBinRoot()))
|
|
||||||
{
|
|
||||||
Reporter.Verbose.Write($"\t {file}");
|
|
||||||
}
|
|
||||||
|
|
||||||
// delete output files with extensions
|
|
||||||
foreach (var outputFile in Directory.EnumerateFiles(GetBinRoot()).Where(f =>
|
|
||||||
{
|
|
||||||
var fileName = Path.GetFileName(f);
|
|
||||||
return fileName.StartsWith(MainProject, StringComparison.OrdinalIgnoreCase) &&
|
|
||||||
fileName.EndsWith(extension, StringComparison.OrdinalIgnoreCase);
|
|
||||||
}))
|
|
||||||
{
|
|
||||||
Reporter.Output.WriteLine($"Deleted {outputFile}");
|
|
||||||
|
|
||||||
File.Delete(outputFile);
|
|
||||||
Assert.False(File.Exists(outputFile));
|
|
||||||
}
|
|
||||||
|
|
||||||
// second build; should get rebuilt since we deleted an output item
|
|
||||||
buildResult = BuildProject();
|
|
||||||
buildResult.Should().HaveCompiledProject(MainProject, _appFrameworkFullName);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,36 +0,0 @@
|
||||||
// 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 System;
|
|
||||||
using System.IO;
|
|
||||||
using Microsoft.DotNet.Tools.Test.Utilities;
|
|
||||||
using Xunit;
|
|
||||||
|
|
||||||
namespace Microsoft.DotNet.Tools.Builder.Tests
|
|
||||||
{
|
|
||||||
public class IncrementalTestsOnCultureSpecificResource : IncrementalTestBase
|
|
||||||
{
|
|
||||||
public IncrementalTestsOnCultureSpecificResource()
|
|
||||||
{
|
|
||||||
MainProject = "TestProjectWithCultureSpecificResource";
|
|
||||||
ExpectedOutput = "Hello World!" + Environment.NewLine + "Bonjour!" + Environment.NewLine;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Sridhar-MS - temporarily disable the test and investigate why it is failing in CI machine.
|
|
||||||
// [Fact]
|
|
||||||
public void TestRebuildSkipsCompilationOnNonCultureResource()
|
|
||||||
{
|
|
||||||
var testInstance = TestAssetsManager.CreateTestInstance("TestProjectWithCultureSpecificResource")
|
|
||||||
.WithLockFiles();
|
|
||||||
|
|
||||||
TestProjectRoot = testInstance.TestRoot;
|
|
||||||
|
|
||||||
var buildResult = BuildProject();
|
|
||||||
buildResult.Should().HaveCompiledProject(MainProject, _appFrameworkFullName);
|
|
||||||
|
|
||||||
buildResult = BuildProject();
|
|
||||||
|
|
||||||
buildResult.Should().HaveSkippedProjectCompilation(MainProject, _appFrameworkFullName);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,34 +0,0 @@
|
||||||
// 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 System;
|
|
||||||
using System.IO;
|
|
||||||
using Microsoft.DotNet.Tools.Test.Utilities;
|
|
||||||
using Xunit;
|
|
||||||
|
|
||||||
namespace Microsoft.DotNet.Tools.Builder.Tests
|
|
||||||
{
|
|
||||||
public class IncrementalTestsOnResources : IncrementalTestBase
|
|
||||||
{
|
|
||||||
public IncrementalTestsOnResources()
|
|
||||||
{
|
|
||||||
MainProject = "TestProjectWithResource";
|
|
||||||
ExpectedOutput = "Hello World!" + Environment.NewLine;
|
|
||||||
}
|
|
||||||
|
|
||||||
[Fact]
|
|
||||||
public void TestRebuildSkipsCompilationOnNonCultureResource()
|
|
||||||
{
|
|
||||||
var testInstance = TestAssetsManager.CreateTestInstance("TestProjectWithResource")
|
|
||||||
.WithLockFiles();
|
|
||||||
|
|
||||||
TestProjectRoot = testInstance.TestRoot;
|
|
||||||
|
|
||||||
var buildResult = BuildProject();
|
|
||||||
buildResult.Should().HaveCompiledProject(MainProject, _appFrameworkFullName);
|
|
||||||
|
|
||||||
buildResult = BuildProject();
|
|
||||||
buildResult.Should().HaveSkippedProjectCompilation(MainProject, _appFrameworkFullName);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,48 +0,0 @@
|
||||||
// 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 System;
|
|
||||||
using System.IO;
|
|
||||||
using Microsoft.DotNet.Tools.Test.Utilities;
|
|
||||||
using Xunit;
|
|
||||||
|
|
||||||
namespace Microsoft.DotNet.Tools.Builder.Tests
|
|
||||||
{
|
|
||||||
public class IncrementalTestsTransitiveRuntime : IncrementalTestBase
|
|
||||||
{
|
|
||||||
private const string TestLibraryWithAppDependency = "TestLibraryWithAppDependency";
|
|
||||||
private const string LibraryProject = "TestLibrary";
|
|
||||||
private const string AppProject = "TestApp";
|
|
||||||
|
|
||||||
public IncrementalTestsTransitiveRuntime()
|
|
||||||
{
|
|
||||||
MainProject = "TestLibrary2";
|
|
||||||
ExpectedOutput = "This string came from the test library!" + Environment.NewLine;
|
|
||||||
}
|
|
||||||
|
|
||||||
[Fact]
|
|
||||||
public void TestSkipsRebuildWithTransitiveExeDependency()
|
|
||||||
{
|
|
||||||
var testInstance = TestAssetsManager.CreateTestInstance("TestAppWithTransitiveAppDependency")
|
|
||||||
.WithLockFiles();
|
|
||||||
TestProjectRoot = testInstance.TestRoot;
|
|
||||||
var buildResult = BuildProject();
|
|
||||||
buildResult.Should().HaveCompiledProject(MainProject, _appFrameworkFullName);
|
|
||||||
buildResult.Should().HaveCompiledProject(TestLibraryWithAppDependency, _appFrameworkFullName);
|
|
||||||
buildResult.Should().HaveCompiledProject(AppProject, _appFrameworkFullName);
|
|
||||||
buildResult.Should().HaveCompiledProject(LibraryProject, _appFrameworkFullName);
|
|
||||||
|
|
||||||
buildResult = BuildProject();
|
|
||||||
|
|
||||||
buildResult.Should().HaveSkippedProjectCompilation(MainProject, _appFrameworkFullName);
|
|
||||||
buildResult.Should().HaveSkippedProjectCompilation(TestLibraryWithAppDependency, _appFrameworkFullName);
|
|
||||||
buildResult.Should().HaveSkippedProjectCompilation(AppProject, _appFrameworkFullName);
|
|
||||||
buildResult.Should().HaveSkippedProjectCompilation(LibraryProject, _appFrameworkFullName);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override string GetProjectDirectory(string projectName)
|
|
||||||
{
|
|
||||||
return Path.Combine(TestProjectRoot, projectName);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,29 +0,0 @@
|
||||||
using Microsoft.DotNet.Tools.Test.Utilities;
|
|
||||||
using Xunit;
|
|
||||||
|
|
||||||
namespace Microsoft.DotNet.Tools.Builder.Tests
|
|
||||||
{
|
|
||||||
public class IncrementalTestsVersionSuffix : IncrementalTestBase
|
|
||||||
{
|
|
||||||
[Fact]
|
|
||||||
public void TestRebuildWhenVersionSuffixChanged()
|
|
||||||
{
|
|
||||||
var testInstance = TestAssetsManager.CreateTestInstance("TestSimpleIncrementalApp")
|
|
||||||
.WithLockFiles();
|
|
||||||
|
|
||||||
// Build with Version Suffix 1
|
|
||||||
var command = new BuildCommand(testInstance.TestRoot, versionSuffix: "1");
|
|
||||||
var result = command.ExecuteWithCapturedOutput();
|
|
||||||
|
|
||||||
// Verify the result
|
|
||||||
result.Should().HaveCompiledProject("TestSimpleIncrementalApp", ".NETCoreApp,Version=v1.0");
|
|
||||||
|
|
||||||
// Build with Version Suffix 2
|
|
||||||
command = new BuildCommand(testInstance.TestRoot, versionSuffix: "2");
|
|
||||||
result = command.ExecuteWithCapturedOutput();
|
|
||||||
|
|
||||||
// Verify the result
|
|
||||||
result.Should().HaveCompiledProject("TestSimpleIncrementalApp", ".NETCoreApp,Version=v1.0");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,135 +0,0 @@
|
||||||
using System;
|
|
||||||
using System.IO;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Runtime.CompilerServices;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using Microsoft.DotNet.TestFramework;
|
|
||||||
using Microsoft.DotNet.Tools.Test.Utilities;
|
|
||||||
using Xunit;
|
|
||||||
using FluentAssertions;
|
|
||||||
using NuGet.Frameworks;
|
|
||||||
|
|
||||||
namespace Microsoft.DotNet.Tools.Builder.Tests
|
|
||||||
{
|
|
||||||
public class ProjectNameArgumentTests : TestBase
|
|
||||||
{
|
|
||||||
private TestInstance _testInstance;
|
|
||||||
|
|
||||||
[Fact]
|
|
||||||
public void TestProjectDirectoryPath()
|
|
||||||
{
|
|
||||||
Test(new[] { Path.Combine("src", "L21") }, new[] { "L21" });
|
|
||||||
}
|
|
||||||
|
|
||||||
[Fact]
|
|
||||||
public void TestProjectFile()
|
|
||||||
{
|
|
||||||
Test(new[] { Path.Combine("src", "L21", "project.json") }, new[] { "L21" });
|
|
||||||
}
|
|
||||||
|
|
||||||
[Fact]
|
|
||||||
public void TestMultipleProjectDirectories()
|
|
||||||
{
|
|
||||||
Test(new[]
|
|
||||||
{
|
|
||||||
Path.Combine("src", "L21"),
|
|
||||||
Path.Combine("src", "L11")
|
|
||||||
},
|
|
||||||
new[] { "L21", "L11" });
|
|
||||||
}
|
|
||||||
|
|
||||||
[Fact]
|
|
||||||
public void TestMultipleProjectFiles()
|
|
||||||
{
|
|
||||||
Test(new[]
|
|
||||||
{
|
|
||||||
Path.Combine("src", "L21", "project.json"),
|
|
||||||
Path.Combine("src", "L11", "project.json"),
|
|
||||||
},
|
|
||||||
new[] { "L21", "L11" });
|
|
||||||
}
|
|
||||||
|
|
||||||
[Fact]
|
|
||||||
public void TestGlobbing()
|
|
||||||
{
|
|
||||||
Test(new[]
|
|
||||||
{
|
|
||||||
Path.Combine("src", "**", "project.json")
|
|
||||||
},
|
|
||||||
new[] { "L21", "L11", "L12" });
|
|
||||||
}
|
|
||||||
|
|
||||||
[Fact]
|
|
||||||
public void TestMultipleGlobbing()
|
|
||||||
{
|
|
||||||
Test(new[]
|
|
||||||
{
|
|
||||||
Path.Combine("src", "L1*", "project.json"),
|
|
||||||
Path.Combine("src", "L2*", "project.json")
|
|
||||||
},
|
|
||||||
new[] { "L11", "L12", "L21", "L22" });
|
|
||||||
}
|
|
||||||
|
|
||||||
[Fact]
|
|
||||||
public void TestFailsWhenNoGlobbingNoMatch()
|
|
||||||
{
|
|
||||||
Test(new[]
|
|
||||||
{
|
|
||||||
Path.Combine("src", "L33*", "project.json")
|
|
||||||
},
|
|
||||||
null);
|
|
||||||
}
|
|
||||||
|
|
||||||
[Fact]
|
|
||||||
public void TestFailsFileDoedNotExist()
|
|
||||||
{
|
|
||||||
Test(new[]
|
|
||||||
{
|
|
||||||
Path.Combine("src", "L33", "project.json")
|
|
||||||
},
|
|
||||||
null);
|
|
||||||
}
|
|
||||||
|
|
||||||
[Fact]
|
|
||||||
public void TestFindsProjectJsonInCurrentDirectoryWithNoArguments()
|
|
||||||
{
|
|
||||||
Test(new string[] { }, new[] { "L21" }, workingDirectory: Path.Combine("src", "L21"));
|
|
||||||
}
|
|
||||||
|
|
||||||
[Fact]
|
|
||||||
public void TestFailsIfNoProjectJsonInCurrentDirectoryWithNoArguments()
|
|
||||||
{
|
|
||||||
Test(new string[] { }, null, workingDirectory: "src");
|
|
||||||
}
|
|
||||||
|
|
||||||
private void Test(IEnumerable<string> inputs, IEnumerable<string> expectedProjects, string workingDirectory = null, [CallerMemberName] string testName = null)
|
|
||||||
{
|
|
||||||
var instance = TestAssetsManager.CreateTestInstance("TestProjectToProjectDependencies", testName)
|
|
||||||
.WithLockFiles()
|
|
||||||
.WithBuildArtifacts();
|
|
||||||
string args = string.Join(" ", inputs);
|
|
||||||
|
|
||||||
workingDirectory = workingDirectory != null
|
|
||||||
? Path.Combine(instance.TestRoot, workingDirectory)
|
|
||||||
: instance.TestRoot;
|
|
||||||
|
|
||||||
var result = new TestCommand("dotnet")
|
|
||||||
{
|
|
||||||
WorkingDirectory = Path.Combine(workingDirectory)
|
|
||||||
}.ExecuteWithCapturedOutput("--verbose build --no-dependencies " + args);
|
|
||||||
if (expectedProjects != null)
|
|
||||||
{
|
|
||||||
result.Should().Pass();
|
|
||||||
foreach (var expectedProject in expectedProjects)
|
|
||||||
{
|
|
||||||
result.Should().HaveSkippedProjectCompilation(expectedProject, NuGetFramework.Parse("netstandard1.5").DotNetFrameworkName);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
result.Should().Fail();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,36 +0,0 @@
|
||||||
using System;
|
|
||||||
using System.IO;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using Microsoft.DotNet.Cli.Utils;
|
|
||||||
using Microsoft.DotNet.Tools.Test.Utilities;
|
|
||||||
using FluentAssertions;
|
|
||||||
using Xunit;
|
|
||||||
|
|
||||||
namespace Microsoft.DotNet.Tools.Builder.Tests
|
|
||||||
{
|
|
||||||
public class WrappedProjectTests: TestBase
|
|
||||||
{
|
|
||||||
[Fact]
|
|
||||||
public void WrappedProjectFilesResolvedCorrectly()
|
|
||||||
{
|
|
||||||
var testInstance = TestAssetsManager.CreateTestInstance("TestAppWithWrapperProjectDependency")
|
|
||||||
.WithBuildArtifacts()
|
|
||||||
.WithLockFiles();
|
|
||||||
|
|
||||||
var root = testInstance.TestRoot;
|
|
||||||
|
|
||||||
// run compile
|
|
||||||
var outputDir = Path.Combine(root, "bin");
|
|
||||||
var testProject = ProjectUtils.GetProjectJson(root, "TestApp");
|
|
||||||
var buildCommand = new BuildCommand(testProject, output: outputDir, framework: DefaultFramework);
|
|
||||||
var result = buildCommand.ExecuteWithCapturedOutput();
|
|
||||||
result.Should().Pass();
|
|
||||||
|
|
||||||
new DirectoryInfo(outputDir).Should()
|
|
||||||
.HaveFiles(new [] { "TestLibrary.dll", "TestLibrary.pdb" });
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,21 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<Project ToolsVersion="14.0.23107" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
|
||||||
<PropertyGroup>
|
|
||||||
<VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">14.0.23107</VisualStudioVersion>
|
|
||||||
<VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
|
|
||||||
</PropertyGroup>
|
|
||||||
<Import Project="$(VSToolsPath)\DNX\Microsoft.DNX.Props" Condition="'$(VSToolsPath)' != ''" />
|
|
||||||
<PropertyGroup Label="Globals">
|
|
||||||
<ProjectGuid>833ffee1-7eed-4f51-8dfd-946d48833333</ProjectGuid>
|
|
||||||
<RootNamespace>Microsoft.DotNet.Tools.Builder.Tests</RootNamespace>
|
|
||||||
<BaseIntermediateOutputPath Condition="'$(BaseIntermediateOutputPath)'=='' ">..\..\artifacts\obj\$(MSBuildProjectName)</BaseIntermediateOutputPath>
|
|
||||||
<OutputPath Condition="'$(OutputPath)'=='' ">..\..\artifacts\bin</OutputPath>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup>
|
|
||||||
<SchemaVersion>2.0</SchemaVersion>
|
|
||||||
</PropertyGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<Service Include="{82a7f48d-3b50-4b1e-b82e-3ada8210c358}" />
|
|
||||||
</ItemGroup>
|
|
||||||
<Import Project="$(VSToolsPath)\DNX\Microsoft.DNX.targets" Condition="'$(VSToolsPath)' != ''" />
|
|
||||||
</Project>
|
|
|
@ -1,28 +0,0 @@
|
||||||
{
|
|
||||||
"version": "1.0.0-*",
|
|
||||||
"dependencies": {
|
|
||||||
"Microsoft.NETCore.App": {
|
|
||||||
"type": "platform",
|
|
||||||
"version": "1.0.0"
|
|
||||||
},
|
|
||||||
"System.Runtime.Serialization.Primitives": "4.1.1",
|
|
||||||
"Microsoft.DotNet.Tools.Tests.Utilities": {
|
|
||||||
"target": "project"
|
|
||||||
},
|
|
||||||
"Microsoft.DotNet.Cli.Utils": {
|
|
||||||
"target": "project"
|
|
||||||
},
|
|
||||||
"Newtonsoft.Json": "9.0.1",
|
|
||||||
"xunit": "2.1.0",
|
|
||||||
"dotnet-test-xunit": "1.0.0-rc2-192208-24"
|
|
||||||
},
|
|
||||||
"frameworks": {
|
|
||||||
"netcoreapp1.0": {
|
|
||||||
"imports": [
|
|
||||||
"dotnet5.4",
|
|
||||||
"portable-net451+win8"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"testRunner": "xunit"
|
|
||||||
}
|
|
Loading…
Add table
Add a link
Reference in a new issue