Add basic tests

This commit is contained in:
Stone_Red
2022-04-21 14:27:39 +02:00
parent c1b581e2db
commit 3c78755858
3 changed files with 128 additions and 0 deletions
+44
View File
@@ -0,0 +1,44 @@
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System.Collections.Generic;
namespace YesNt.Interpreter.Tests;
[TestClass]
public class CodeFlowTests
{
[TestMethod]
public void FunctionTest()
{
List<string> lines = new List<string>()
{
"cal yes",
"fnc yes",
"!<result = 1",
"ret",
">result"
};
YesNtAssert.IsLastLineEqual(lines, "1");
}
[TestMethod]
public void LabelsTest()
{
List<string> lines = new List<string>()
{
"<result = 1",
"jmp yes",
"<result = 0",
"lbl yes",
">result"
};
YesNtAssert.IsLastLineEqual(lines, "1");
}
[TestMethod]
public void CalculationsTest()
{
Assert.Inconclusive();
YesNtAssert.IsLineEqual("10 * 10 !calc", (20).ToString());
}
}
@@ -0,0 +1,21 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<Nullable>enable</Nullable>
<IsPackable>false</IsPackable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.11.0" />
<PackageReference Include="MSTest.TestAdapter" Version="2.2.7" />
<PackageReference Include="MSTest.TestFramework" Version="2.2.7" />
<PackageReference Include="coverlet.collector" Version="3.1.0" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\YesNt.Interpreter\YesNt.Interpreter.csproj" />
</ItemGroup>
</Project>
+63
View File
@@ -0,0 +1,63 @@
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System;
using System.Collections.Generic;
using System.Threading;
using YesNt.Interpreter.Runtime;
namespace YesNt.Interpreter.Tests;
internal static class YesNtAssert
{
private static readonly YesNtInterpreter yesNtInterpreter = new YesNtInterpreter();
static YesNtAssert()
{
yesNtInterpreter.Initialize();
}
public static void IsLastLineEqual(List<string> lines, string expected, int timeout = 1000)
{
AutoResetEvent onDone = new AutoResetEvent(false);
DebugEventArgs debugEventArgs = new DebugEventArgs();
yesNtInterpreter.OnLineExecuted += (er) =>
{
debugEventArgs = er ?? debugEventArgs;
if (er is null)
{
onDone.Set();
}
};
yesNtInterpreter.Execute(lines, true);
_ = onDone.WaitOne(TimeSpan.FromSeconds(timeout));
Assert.AreEqual(expected, debugEventArgs.CurrentLine);
}
public static void IsLineEqual(string line, string expected, int timeout = 1000)
{
AutoResetEvent onDone = new AutoResetEvent(false);
List<string> lines = new List<string>()
{
line
};
DebugEventArgs debugEventArgs = new DebugEventArgs();
yesNtInterpreter.OnLineExecuted += (er) =>
{
debugEventArgs = er ?? debugEventArgs;
onDone.Set();
};
yesNtInterpreter.Execute(lines, true);
_ = onDone.WaitOne(TimeSpan.FromMilliseconds(timeout));
Assert.AreEqual(expected, debugEventArgs.CurrentLine);
}
}