dotnet-installer/src/Microsoft.DotNet.TestFramework/Microsoft.DotNet.TestFramework.TestInstance.cs

117 lines
4.3 KiB
C#
Raw Normal View History

// 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;
namespace Microsoft.DotNet.TestFramework
{
public class TestInstance
{
private string _testDestination;
private TestScenario _testScenario;
internal TestInstance(TestScenario testScenario, string testDestination)
{
if (testScenario == null)
{
throw new ArgumentNullException("testScenario");
}
if (string.IsNullOrEmpty(testDestination))
{
throw new ArgumentException("testDestination");
}
_testScenario = testScenario;
_testDestination = testDestination;
if (Directory.Exists(testDestination))
{
Directory.Delete(testDestination, true);
}
Directory.CreateDirectory(testDestination);
CopySource();
}
private void CopySource()
{
var sourceDirs = Directory.GetDirectories(_testScenario.SourceRoot, "*", SearchOption.AllDirectories)
.Where(dir =>
{
dir = dir.ToLower();
return !dir.EndsWith("\\bin") && !dir.Contains("\\bin\\")
&& !dir.EndsWith("\\obj") && !dir.Contains("\\obj\\");
});
foreach (string sourceDir in sourceDirs)
{
Directory.CreateDirectory(sourceDir.Replace(_testScenario.SourceRoot, _testDestination));
}
var sourceFiles = Directory.GetFiles(_testScenario.SourceRoot, "*.*", SearchOption.AllDirectories)
.Where(file =>
{
file = file.ToLower();
return !file.EndsWith("project.lock.json")
&& !file.Contains("\\bin\\") && !file.Contains("\\obj\\");
});
foreach (string srcFile in sourceFiles)
{
File.Copy(srcFile, srcFile.Replace(_testScenario.SourceRoot, _testDestination), true);
}
}
public TestInstance WithLockFiles()
{
foreach (string lockFile in Directory.GetFiles(_testScenario.SourceRoot, "project.lock.json", SearchOption.AllDirectories))
{
string destinationLockFile = lockFile.Replace(_testScenario.SourceRoot, _testDestination);
File.Copy(lockFile, destinationLockFile, true);
}
return this;
}
public TestInstance WithBinaries()
{
var binDirs = Directory.GetDirectories(_testScenario.SourceRoot, "*", SearchOption.AllDirectories)
.Where(dir =>
{
dir = dir.ToLower();
return dir.EndsWith("\\bin") || dir.Contains("\\bin\\")
|| dir.EndsWith("\\obj") || dir.Contains("\\obj\\");
});
foreach (string dirPath in binDirs)
{
Directory.CreateDirectory(dirPath.Replace(_testScenario.SourceRoot, _testDestination));
}
var binFiles = Directory.GetFiles(_testScenario.SourceRoot, "*.*", SearchOption.AllDirectories)
.Where(file =>
{
file = file.ToLower();
return file.Contains("\\bin\\") || file.Contains("\\obj\\");
});
foreach (string binFile in binFiles)
{
File.Copy(binFile, binFile.Replace(_testScenario.SourceRoot, _testDestination), true);
}
return this;
}
public string TestRoot
{
get { return _testDestination; }
}
}
}