Cosmos/Tests/Cosmos.TestRunner.TestController/Assert.cs

107 lines
4.4 KiB
C#

using System;
using System.Runtime.CompilerServices;
namespace Cosmos.TestRunner
{
public static class Assert
{
public static void IsTrue(bool condition, string message, [CallerFilePath] string file = null, [CallerLineNumber] int line = 0)
{
if (condition)
{
TestController.Debugger.Send("Assertion succeeded:");
TestController.Debugger.Send(message);
TestController.AssertionSucceeded();
}
else
{
TestController.Debugger.Send("Assertion failed:");
TestController.Debugger.Send("File: " + file);
TestController.Debugger.Send("Line number: " + line);
TestController.Debugger.Send(message);
TestController.Failed();
throw new Exception("Assertion failed!");
}
}
public static void IsFalse(bool condition, string message, [CallerFilePath] string file = null, [CallerLineNumber] int line = 0)
{
IsTrue(!condition, message, file, line);
}
public static void AreEqual(int expected, int actual, string message, [CallerFilePath] string file = null, [CallerLineNumber] int line = 0)
{
var xResult = expected == actual;
if (!xResult)
{
TestController.Debugger.Send("Expected value");
TestController.Debugger.SendNumber((uint) expected);
TestController.Debugger.Send("Actual value");
TestController.Debugger.SendNumber((uint)actual);
TestController.Debugger.SendNumber("TestAssertion", "Expected", (uint)expected, 32);
TestController.Debugger.SendNumber("TestAssertion", "Actual", (uint)actual, 32);
TestController.Debugger.Send("Numbers sent!");
}
IsTrue(xResult, message, file, line);
}
public static void AreEqual(string expected, string actual, string message, [CallerFilePath] string file = null, [CallerLineNumber] int line = 0)
{
var xResult = expected == actual;
if (!xResult)
{
TestController.Debugger.Send($"Expected value: '{expected}'");
TestController.Debugger.Send($"Actual value: '{actual}'");
}
IsTrue(xResult, message, file, line);
}
public static void AreEqual(long expected, long actual, string message, [CallerFilePath] string file = null, [CallerLineNumber] int line = 0)
{
var xResult = expected == actual;
if (!xResult)
{
TestController.Debugger.Send($"Expected value: '{expected}'");
TestController.Debugger.Send($"Actual value: '{actual}'");
}
IsTrue(xResult, message, file, line);
}
public static void AreEqual(string[] expected, string[] actual, string message, [CallerFilePath] string file = null, [CallerLineNumber] int line = 0)
{
if(expected.Length != actual.Length)
{
TestController.Debugger.Send($"Array lengths differ: Expected: {expected.Length} Actual: {actual.Length}");
if (actual.Length < 32 && expected.Length < 32)
{
TestController.Debugger.Send("Values in Expected:");
for (int i = 0; i < expected.Length; i++)
{
TestController.Debugger.Send(expected[i]);
}
TestController.Debugger.Send("Values in Actual:");
for (int i = 0; i < actual.Length; i++)
{
TestController.Debugger.Send(actual[i]);
}
}
IsTrue(false, message, file, line);
return;
}
for (int i = 0; i < expected.Length; i++)
{
if(expected[i] != actual[i])
{
TestController.Debugger.Send($"Values differ in row {i}");
TestController.Debugger.Send($"Expected value: '{expected[i]}'");
TestController.Debugger.Send($"Actual value: '{actual[i]}'");
IsTrue(false, message, file, line);
return;
}
}
IsTrue(true, message, file, line);
}
}
}