59 lines
1.5 KiB
C#
59 lines
1.5 KiB
C#
using Xunit;
|
|
using Xunit.Abstractions;
|
|
|
|
namespace TinyCC.E2ETests;
|
|
|
|
public class E2ETests : IAsyncLifetime
|
|
{
|
|
private readonly ITestOutputHelper _output;
|
|
private readonly E2ETestRunner _runner;
|
|
|
|
public E2ETests(ITestOutputHelper output)
|
|
{
|
|
_output = output;
|
|
_runner = new E2ETestRunner();
|
|
}
|
|
|
|
public Task InitializeAsync() => Task.CompletedTask;
|
|
|
|
public Task DisposeAsync()
|
|
{
|
|
_runner.Cleanup();
|
|
return Task.CompletedTask;
|
|
}
|
|
|
|
[Theory]
|
|
[MemberData(nameof(GetBasicTestCases))]
|
|
public async Task BasicFeature_ShouldCompileAndRun(TestCase testCase)
|
|
{
|
|
// Act
|
|
var result = await _runner.RunTestAsync(testCase);
|
|
|
|
// Assert
|
|
_output.WriteLine($"测试: {testCase.Name}");
|
|
_output.WriteLine($"源代码:\n{testCase.SourceCode}");
|
|
_output.WriteLine($"结果: {(result.Passed ? "通过" : "失败")}");
|
|
if (!result.Passed)
|
|
{
|
|
_output.WriteLine($"错误: {result.ErrorMessage}");
|
|
_output.WriteLine($"实际退出码: {result.ActualExitCode}");
|
|
if (result.ActualOutput != null)
|
|
{
|
|
_output.WriteLine($"实际输出: {result.ActualOutput}");
|
|
}
|
|
}
|
|
|
|
Assert.True(result.Passed, result.ErrorMessage);
|
|
}
|
|
|
|
public static TheoryData<TestCase> GetBasicTestCases()
|
|
{
|
|
var data = new TheoryData<TestCase>();
|
|
foreach (var testCase in TestCases.GetBasicTests())
|
|
{
|
|
data.Add(testCase);
|
|
}
|
|
return data;
|
|
}
|
|
}
|