dotnet-installer/test/Microsoft.DotNet.ProjectJsonMigration.Tests/ProjectJsonBuilder.cs
Krzysztof Wicher a6bc22e499 Remove TAM (#5670)
* remove reference to TestAssetsManager in dotnet-add-reference

* remove TestAssetsManager dependency from dotnet-build

* remove TAM ref from dotnet-list-reference

* remove TAM dependency from dotnet-msbuild

* remove TAM dependency from ProjectJsonMigration tests

* remove TAM dependency from dotnet.Tests

* remove TAM dependency from dotnet-new.Tests

* remove TAM from dotnet-pack.Tests

* remove TAM from dotnet-publish.Tests

* remove TAM from dotnet-restore.Tests

* remove TAM dependency from dotnet-remove-reference.Tests

* remove TAM dependency from dotnet-run.Tests

* remove TAM dependency from dotnet-test.Tests

* remove TAM dependency from Microsoft.DotNet.Cli.Utils.Tests

* remove TAM from TestBase

* remove TAM

* remove newly introduced dependency on TAM
2017-02-15 15:35:03 -08:00

112 lines
2.9 KiB
C#

using Microsoft.DotNet.TestFramework;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
namespace Microsoft.DotNet.ProjectJsonMigration.Tests
{
/// <summary>
/// Used to build up test scenario project.jsons without needing to add a new test asset.
/// </summary>
public class ProjectJsonBuilder
{
private readonly TestAssets _testAssets;
private JObject _projectJson;
private bool _baseDefined = false;
public ProjectJsonBuilder(TestAssets testAssets)
{
_testAssets = testAssets;
}
public string SaveToDisk(string outputDirectory)
{
EnsureBaseIsSet();
var projectPath = Path.Combine(outputDirectory, "project.json");
File.WriteAllText(projectPath, _projectJson.ToString());
return projectPath;
}
public JObject Build()
{
EnsureBaseIsSet();
return _projectJson;
}
public ProjectJsonBuilder FromTestAssetBase(string testAssetName)
{
var testProjectDirectory = _testAssets.Get(testAssetName)
.CreateInstance()
.WithSourceFiles()
.Root.FullName;
var testProject = Path.Combine(testProjectDirectory, "project.json");
SetBase(JObject.Parse(File.ReadAllText(testProject)));
return this;
}
public ProjectJsonBuilder FromStringBase(string jsonString)
{
SetBase(JObject.Parse(jsonString));
return this;
}
public ProjectJsonBuilder FromEmptyBase()
{
SetBase(new JObject());
return this;
}
public ProjectJsonBuilder WithCustomProperty(string propertyName, Dictionary<string, string> value)
{
EnsureBaseIsSet();
_projectJson[propertyName] = JObject.FromObject(value);
return this;
}
public ProjectJsonBuilder WithCustomProperty(string propertyName, string value)
{
EnsureBaseIsSet();
_projectJson[propertyName] = value;
return this;
}
public ProjectJsonBuilder WithCustomProperty(string propertyName, string[] value)
{
EnsureBaseIsSet();
_projectJson[propertyName] = JArray.FromObject(value);
return this;
}
private void SetBase(JObject project)
{
if (_baseDefined)
{
throw new Exception("Base was already defined.");
}
_baseDefined = true;
_projectJson = project;
}
private void EnsureBaseIsSet()
{
if (!_baseDefined)
{
throw new Exception("Cannot build without base set");
}
}
}
}