106 lines
3.8 KiB
C#
106 lines
3.8 KiB
C#
// 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 FluentAssertions;
|
|
using Microsoft.DotNet.Cli.Utils;
|
|
using Microsoft.DotNet.Tools.Test;
|
|
using Moq;
|
|
using NuGet.Frameworks;
|
|
using Xunit;
|
|
using Newtonsoft.Json;
|
|
using Microsoft.Extensions.Testing.Abstractions;
|
|
using System.Linq;
|
|
using Newtonsoft.Json.Linq;
|
|
|
|
namespace Microsoft.Dotnet.Tools.Test.Tests
|
|
{
|
|
public class GivenATestRunner
|
|
{
|
|
private Mock<ICommand> _commandMock;
|
|
private Mock<ICommandFactory> _commandFactoryMock;
|
|
private Mock<ITestRunnerArgumentsBuilder> _argumentsBuilderMock;
|
|
private string _runner = "runner";
|
|
private string[] _testRunnerArguments;
|
|
|
|
public GivenATestRunner()
|
|
{
|
|
_testRunnerArguments = new[] {"assembly.dll", "--list", "--designtime"};
|
|
|
|
_commandMock = new Mock<ICommand>();
|
|
_commandMock.Setup(c => c.CommandName).Returns(_runner);
|
|
_commandMock.Setup(c => c.CommandArgs).Returns(string.Join(" ", _testRunnerArguments));
|
|
_commandMock.Setup(c => c.OnOutputLine(It.IsAny<Action<string>>())).Returns(_commandMock.Object);
|
|
|
|
_argumentsBuilderMock = new Mock<ITestRunnerArgumentsBuilder>();
|
|
_argumentsBuilderMock.Setup(a => a.BuildArguments())
|
|
.Returns(_testRunnerArguments);
|
|
|
|
_commandFactoryMock = new Mock<ICommandFactory>();
|
|
_commandFactoryMock.Setup(c => c.Create(
|
|
$"dotnet-{_runner}",
|
|
_testRunnerArguments,
|
|
null,
|
|
null)).Returns(_commandMock.Object).Verifiable();
|
|
}
|
|
|
|
[Fact]
|
|
public void It_creates_a_command_using_the_right_parameters()
|
|
{
|
|
var testRunner = new TestRunner(_runner, _commandFactoryMock.Object, _argumentsBuilderMock.Object);
|
|
|
|
testRunner.RunTestCommand();
|
|
|
|
_commandFactoryMock.Verify();
|
|
}
|
|
|
|
[Fact]
|
|
public void It_executes_the_command()
|
|
{
|
|
var testRunner = new TestRunner(_runner, _commandFactoryMock.Object, _argumentsBuilderMock.Object);
|
|
|
|
testRunner.RunTestCommand();
|
|
|
|
_commandMock.Verify(c => c.Execute(), Times.Once);
|
|
}
|
|
|
|
[Fact]
|
|
public void It_throws_TestRunnerOperationFailedException_when_the_returns_return_an_error_code()
|
|
{
|
|
_commandMock.Setup(c => c.Execute()).Returns(new CommandResult(null, 1, null, null));
|
|
|
|
var testRunner = new TestRunner(_runner, _commandFactoryMock.Object, _argumentsBuilderMock.Object);
|
|
|
|
Action action = () => testRunner.RunTestCommand();
|
|
|
|
action.ShouldThrow<TestRunnerOperationFailedException>();
|
|
}
|
|
|
|
[Fact]
|
|
public void It_executes_the_command_when_RunTestCommand_is_called()
|
|
{
|
|
var testResult = new Message
|
|
{
|
|
MessageType = "Irrelevant",
|
|
Payload = JToken.FromObject("Irrelevant")
|
|
};
|
|
|
|
var testRunner = new TestRunner(_runner, _commandFactoryMock.Object, _argumentsBuilderMock.Object);
|
|
|
|
testRunner.RunTestCommand();
|
|
|
|
_commandMock.Verify(c => c.Execute(), Times.Once);
|
|
}
|
|
|
|
[Fact]
|
|
public void It_returns_a_ProcessStartInfo_object_with_the_right_parameters_to_execute_the_test_command()
|
|
{
|
|
var testRunner = new TestRunner(_runner, _commandFactoryMock.Object, _argumentsBuilderMock.Object);
|
|
|
|
var testCommandProcessStartInfo = testRunner.GetProcessStartInfo();
|
|
|
|
testCommandProcessStartInfo.FileName.Should().Be(_runner);
|
|
testCommandProcessStartInfo.Arguments.Should().Be(string.Join(" ", _testRunnerArguments));
|
|
}
|
|
}
|
|
}
|