зеркало из https://github.com/microsoft/Oryx.git
202 строки
7.1 KiB
C#
202 строки
7.1 KiB
C#
// --------------------------------------------------------------------------------------------
|
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
// Licensed under the MIT license.
|
|
// --------------------------------------------------------------------------------------------
|
|
|
|
using System;
|
|
using System.IO;
|
|
using Microsoft.Oryx.BuildScriptGenerator;
|
|
using Microsoft.Oryx.BuildScriptGenerator.Exceptions;
|
|
using Microsoft.Oryx.Tests.Common;
|
|
using Xunit;
|
|
|
|
namespace Microsoft.Oryx.BuildScriptGeneratorCli.Tests
|
|
{
|
|
public class BuildScriptGeneratorOptionsHelperTest : IClassFixture<TestTempDirTestFixture>
|
|
{
|
|
private static string _testDirPath;
|
|
|
|
public BuildScriptGeneratorOptionsHelperTest(TestTempDirTestFixture testFixture)
|
|
{
|
|
_testDirPath = testFixture.RootDirPath;
|
|
}
|
|
|
|
[Fact]
|
|
public void ResolvesToCurrentDirectoryAbsolutePath_WhenDotNotationIsUsed()
|
|
{
|
|
// Arrange
|
|
var options = new BuildScriptGeneratorOptions();
|
|
var currentDir = Directory.GetCurrentDirectory();
|
|
|
|
// Act
|
|
BuildScriptGeneratorOptionsHelper.ConfigureBuildScriptGeneratorOptions(
|
|
options,
|
|
sourceDir: ".",
|
|
destinationDir: ".",
|
|
intermediateDir: ".",
|
|
language: null,
|
|
languageVersion: null,
|
|
scriptOnly: false,
|
|
properties: null);
|
|
|
|
// Assert
|
|
Assert.Equal(currentDir, options.SourceDir);
|
|
Assert.Equal(currentDir, options.DestinationDir);
|
|
Assert.Equal(currentDir, options.IntermediateDir);
|
|
}
|
|
|
|
[Theory]
|
|
[InlineData("dir1")]
|
|
[InlineData("dir1", "dir2")]
|
|
public void ResolvesToAbsolutePath_WhenRelativePathIsGiven(params string[] paths)
|
|
{
|
|
// Arrange
|
|
var options = new BuildScriptGeneratorOptions();
|
|
var providedPath = Path.Combine(paths);
|
|
var absolutePath = Path.Combine(Directory.GetCurrentDirectory(), providedPath);
|
|
|
|
// Act
|
|
BuildScriptGeneratorOptionsHelper.ConfigureBuildScriptGeneratorOptions(
|
|
options,
|
|
sourceDir: providedPath,
|
|
destinationDir: providedPath,
|
|
intermediateDir: providedPath,
|
|
language: null,
|
|
languageVersion: null,
|
|
scriptOnly: false,
|
|
properties: null);
|
|
|
|
// Assert
|
|
Assert.Equal(absolutePath, options.SourceDir);
|
|
Assert.Equal(absolutePath, options.DestinationDir);
|
|
Assert.Equal(absolutePath, options.IntermediateDir);
|
|
}
|
|
|
|
[Fact]
|
|
public void ResolvesToAbsolutePath_WhenAbsolutePathIsGiven()
|
|
{
|
|
// Arrange
|
|
var options = new BuildScriptGeneratorOptions();
|
|
var absolutePath = Path.GetTempPath();
|
|
|
|
// Act
|
|
BuildScriptGeneratorOptionsHelper.ConfigureBuildScriptGeneratorOptions(
|
|
options,
|
|
sourceDir: absolutePath,
|
|
destinationDir: absolutePath,
|
|
intermediateDir: absolutePath,
|
|
language: null,
|
|
languageVersion: null,
|
|
scriptOnly: false,
|
|
properties: null);
|
|
|
|
// Assert
|
|
Assert.Equal(absolutePath, options.SourceDir);
|
|
Assert.Equal(absolutePath, options.DestinationDir);
|
|
Assert.Equal(absolutePath, options.IntermediateDir);
|
|
}
|
|
|
|
[Fact]
|
|
public void ResolvesToAbsolutePath_WhenDoubleDotNotationIsUsed_RelativeToCurrentDir()
|
|
{
|
|
// Arrange
|
|
var options = new BuildScriptGeneratorOptions();
|
|
var currentDir = Directory.GetCurrentDirectory();
|
|
var expected = new DirectoryInfo(currentDir).Parent.FullName;
|
|
|
|
// Act
|
|
BuildScriptGeneratorOptionsHelper.ConfigureBuildScriptGeneratorOptions(
|
|
options,
|
|
sourceDir: "..",
|
|
destinationDir: "..",
|
|
intermediateDir: "..",
|
|
language: null,
|
|
languageVersion: null,
|
|
scriptOnly: false,
|
|
properties: null);
|
|
|
|
// Assert
|
|
Assert.Equal(expected, options.SourceDir);
|
|
Assert.Equal(expected, options.DestinationDir);
|
|
Assert.Equal(expected, options.IntermediateDir);
|
|
}
|
|
|
|
[Fact]
|
|
public void ResolvesToAbsolutePath_WhenDoubleDotNotationIsUsed()
|
|
{
|
|
// Arrange
|
|
var options = new BuildScriptGeneratorOptions();
|
|
var dir1 = CreateNewDir();
|
|
var dir2 = Directory.CreateDirectory(Path.Combine(dir1, "subDir1")).FullName;
|
|
var expected = Directory.CreateDirectory(Path.Combine(dir1, "subDir2")).FullName;
|
|
|
|
// Act
|
|
BuildScriptGeneratorOptionsHelper.ConfigureBuildScriptGeneratorOptions(
|
|
options,
|
|
sourceDir: Path.Combine(dir2, "..", "subDir2"),
|
|
destinationDir: Path.Combine(dir2, "..", "subDir2"),
|
|
intermediateDir: Path.Combine(dir2, "..", "subDir2"),
|
|
language: null,
|
|
languageVersion: null,
|
|
scriptOnly: false,
|
|
properties: null);
|
|
|
|
// Assert
|
|
Assert.Equal(expected, options.SourceDir);
|
|
Assert.Equal(expected, options.DestinationDir);
|
|
Assert.Equal(expected, options.IntermediateDir);
|
|
}
|
|
|
|
[Theory]
|
|
[InlineData("=")]
|
|
[InlineData("==")]
|
|
[InlineData("=true")]
|
|
public void ProcessProperties_Throws_WhenKeyIsNotPresent(string property)
|
|
{
|
|
// Arrange
|
|
var properties = new[] { property };
|
|
|
|
// Act & Assert
|
|
var exception = Assert.Throws<InvalidUsageException>(
|
|
() => BuildScriptGeneratorOptionsHelper.ProcessProperties(properties));
|
|
|
|
Assert.Equal($"Property key cannot start with '=' for property '{property}'.", exception.Message);
|
|
}
|
|
|
|
[Theory]
|
|
[InlineData("a=\"b c\"", "a", "b c")]
|
|
[InlineData("a=\"b \"", "a", "b ")]
|
|
[InlineData("a=\" b\"", "a", " b")]
|
|
[InlineData("a=\" b \"", "a", " b ")]
|
|
[InlineData("\"a b\"=d", "a b", "d")]
|
|
[InlineData("\"a \"=d", "a ", "d")]
|
|
[InlineData("\" a\"=d", " a", "d")]
|
|
public void ProcessProperties_ReturnsProperty_TrimmingTheQuotes(
|
|
string property,
|
|
string key,
|
|
string value)
|
|
{
|
|
// Arrange
|
|
var properties = new[] { property };
|
|
|
|
// Act
|
|
var actual = BuildScriptGeneratorOptionsHelper.ProcessProperties(properties);
|
|
|
|
// Assert
|
|
Assert.Collection(
|
|
actual,
|
|
(kvp) => { Assert.Equal(key, kvp.Key); Assert.Equal(value, kvp.Value); });
|
|
}
|
|
|
|
private string CreateNewDir()
|
|
{
|
|
return Directory.CreateDirectory(CreatePathForNewDir()).FullName;
|
|
}
|
|
|
|
private string CreatePathForNewDir()
|
|
{
|
|
return Path.Combine(_testDirPath, Guid.NewGuid().ToString());
|
|
}
|
|
}
|
|
}
|