mirror of
https://github.com/danbulant/Cosmos
synced 2026-05-19 12:30:32 +00:00
50 lines
1.9 KiB
C#
50 lines
1.9 KiB
C#
using System;
|
|
using System.IO;
|
|
using Cosmos.Build.Common;
|
|
using Cosmos.TestRunner.Core;
|
|
using NUnit.Framework;
|
|
|
|
namespace DebugCompiler
|
|
{
|
|
[TestFixture]
|
|
public class RunKernels
|
|
{
|
|
[TestCaseSource(typeof(MySource), nameof(MySource.ProvideData))]
|
|
public void Test(Type kernelToRun)
|
|
{
|
|
Environment.CurrentDirectory = Path.GetDirectoryName(typeof(RunKernels).Assembly.Location);
|
|
|
|
var xEngine = new Engine();
|
|
// Sets the time before an error is registered. For example if set to 60 then if a kernel runs for more than 60 seconds then
|
|
// that kernel will be marked as a failure and terminated
|
|
xEngine.AllowedSecondsInKernel = 600;
|
|
|
|
// If you want to test only specific platforms, add them to the list, like next line. By default, all platforms are run.
|
|
xEngine.RunTargets.Add(RunTargetEnum.Bochs);
|
|
|
|
// If you're working on the compiler (or other lower parts), you can choose to run the compiler in process
|
|
// one thing to keep in mind though, is that this only works with 1 kernel at a time!
|
|
xEngine.RunIL2CPUInProcess = false;
|
|
xEngine.TraceAssembliesLevel = TraceAssemblies.User;
|
|
|
|
xEngine.EnableStackCorruptionChecks = true;
|
|
xEngine.StackCorruptionChecksLevel = StackCorruptionDetectionLevel.AllInstructions;
|
|
|
|
// Select kernels to be tested by adding them to the engine
|
|
xEngine.AddKernel(kernelToRun.Assembly.Location);
|
|
|
|
xEngine.OutputHandler = new TestOutputHandler();
|
|
|
|
Assert.IsTrue(xEngine.Execute());
|
|
|
|
}
|
|
|
|
private class TestOutputHandler : OutputHandlerFullTextBase
|
|
{
|
|
protected override void Log(string message)
|
|
{
|
|
TestContext.WriteLine(String.Concat(DateTime.Now.ToString("hh:mm:ss.ffffff "), new String(' ', mLogLevel * 2), message));
|
|
}
|
|
}
|
|
}
|
|
}
|