2016-01-14 19:52:54 +00:00
|
|
|
|
// 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
|
|
|
|
|
{
|
2016-04-13 00:29:07 +00:00
|
|
|
|
protected readonly string _libraryFrameworkFullName = ".NETStandard,Version=v1.5";
|
|
|
|
|
protected readonly string _appFrameworkFullName = ".NETCoreApp,Version=v1.0";
|
|
|
|
|
|
2016-02-11 22:17:20 +00:00
|
|
|
|
protected virtual string MainProject
|
|
|
|
|
{
|
|
|
|
|
get; set;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
protected virtual string ExpectedOutput
|
|
|
|
|
{
|
|
|
|
|
get; set;
|
|
|
|
|
}
|
2016-01-14 19:52:54 +00:00
|
|
|
|
|
2016-02-11 22:17:20 +00:00
|
|
|
|
protected virtual string TestProjectRoot
|
|
|
|
|
{
|
|
|
|
|
get; set;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
protected IncrementalTestBase()
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
}
|
2016-01-14 19:52:54 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public IncrementalTestBase(string testProjectsRoot, string mainProject, string expectedOutput)
|
|
|
|
|
{
|
2016-01-26 22:53:56 +00:00
|
|
|
|
MainProject = mainProject;
|
|
|
|
|
ExpectedOutput = expectedOutput;
|
2016-02-11 22:17:20 +00:00
|
|
|
|
TestProjectRoot = testProjectsRoot;
|
2016-01-14 19:52:54 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
protected void TouchSourcesOfProject()
|
|
|
|
|
{
|
2016-01-26 22:53:56 +00:00
|
|
|
|
TouchSourcesOfProject(MainProject);
|
2016-01-14 19:52:54 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
protected void TouchSourcesOfProject(string projectToTouch)
|
|
|
|
|
{
|
|
|
|
|
foreach (var sourceFile in GetSourceFilesForProject(projectToTouch))
|
|
|
|
|
{
|
|
|
|
|
TouchFile(sourceFile);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
protected static void TouchFile(string file)
|
|
|
|
|
{
|
|
|
|
|
File.SetLastWriteTimeUtc(file, DateTime.UtcNow);
|
|
|
|
|
}
|
|
|
|
|
|
2016-02-05 23:29:34 +00:00
|
|
|
|
protected CommandResult BuildProject(bool noDependencies = false, bool noIncremental = false, bool expectBuildFailure = false)
|
2016-01-14 19:52:54 +00:00
|
|
|
|
{
|
2016-01-26 22:53:56 +00:00
|
|
|
|
var mainProjectFile = GetProjectFile(MainProject);
|
2016-02-16 19:26:40 +00:00
|
|
|
|
return BuildProject(mainProjectFile, noDependencies, noIncremental, expectBuildFailure);
|
2016-02-11 22:17:20 +00:00
|
|
|
|
}
|
2016-01-14 19:52:54 +00:00
|
|
|
|
|
2016-02-13 01:26:58 +00:00
|
|
|
|
protected CommandResult BuildProject(string projectFile, bool noDependencies = false, bool noIncremental = false, bool expectBuildFailure = false)
|
2016-02-11 22:17:20 +00:00
|
|
|
|
{
|
2016-04-13 00:29:07 +00:00
|
|
|
|
var buildCommand = new BuildCommand(projectFile, output: GetOutputDir(), framework: "netcoreapp1.0", noIncremental: noIncremental, noDependencies : noDependencies);
|
2016-01-14 19:52:54 +00:00
|
|
|
|
var result = buildCommand.ExecuteWithCapturedOutput();
|
|
|
|
|
|
|
|
|
|
if (!expectBuildFailure)
|
|
|
|
|
{
|
|
|
|
|
result.Should().Pass();
|
2016-02-11 22:17:20 +00:00
|
|
|
|
TestOutputExecutable(GetOutputExePath(), buildCommand.GetOutputExecutableName(), ExpectedOutput);
|
2016-01-14 19:52:54 +00:00
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
result.Should().Fail();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
2016-02-11 22:17:20 +00:00
|
|
|
|
protected virtual string GetOutputExePath()
|
|
|
|
|
{
|
|
|
|
|
return GetBinRoot();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
protected virtual string GetOutputDir()
|
|
|
|
|
{
|
|
|
|
|
return GetBinRoot();
|
|
|
|
|
}
|
|
|
|
|
|
2016-01-26 22:53:56 +00:00
|
|
|
|
protected string GetBinRoot()
|
2016-01-14 19:52:54 +00:00
|
|
|
|
{
|
2016-02-11 22:17:20 +00:00
|
|
|
|
return Path.Combine(TestProjectRoot, "bin");
|
2016-01-14 19:52:54 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
protected virtual string GetProjectDirectory(string projectName)
|
|
|
|
|
{
|
2016-02-11 22:17:20 +00:00
|
|
|
|
return Path.Combine(TestProjectRoot);
|
2016-01-14 19:52:54 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
protected string GetProjectFile(string projectName)
|
|
|
|
|
{
|
|
|
|
|
return Path.Combine(GetProjectDirectory(projectName), "project.json");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private string GetOutputFileForProject(string projectName)
|
|
|
|
|
{
|
2016-01-21 23:01:21 +00:00
|
|
|
|
return Path.Combine(GetCompilationOutputPath(), projectName + ".dll");
|
2016-01-14 19:52:54 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private IEnumerable<string> GetSourceFilesForProject(string projectName)
|
|
|
|
|
{
|
|
|
|
|
return Directory.EnumerateFiles(GetProjectDirectory(projectName)).
|
|
|
|
|
Where(f => f.EndsWith(".cs"));
|
|
|
|
|
}
|
|
|
|
|
|
2016-01-21 23:01:21 +00:00
|
|
|
|
protected string GetCompilationOutputPath()
|
|
|
|
|
{
|
2016-04-13 00:29:07 +00:00
|
|
|
|
var executablePath = Path.Combine(GetBinRoot(), "Debug", "netcoreapp1.0");
|
2016-01-21 23:01:21 +00:00
|
|
|
|
|
|
|
|
|
return executablePath;
|
|
|
|
|
}
|
2016-03-04 06:57:43 +00:00
|
|
|
|
|
|
|
|
|
protected string GetIntermediaryOutputPath()
|
|
|
|
|
{
|
2016-04-13 00:29:07 +00:00
|
|
|
|
var executablePath = Path.Combine(TestProjectRoot, "obj", "Debug", "netcoreapp1.0");
|
2016-03-04 06:57:43 +00:00
|
|
|
|
|
|
|
|
|
return executablePath;
|
|
|
|
|
}
|
2016-01-14 19:52:54 +00:00
|
|
|
|
}
|
2016-02-11 22:17:20 +00:00
|
|
|
|
}
|