/* This class is just a convenience wrapper for using the actual TestHarness. */ class AutotestRunner { private static bool m_IsRunning; private static bool m_IsDone; static bool IsRunning() { return m_IsRunning; } static bool IsDone() { return m_IsDone; } static void Start() { if (m_IsRunning) { ErrorEx("TestAutotest already running!"); return; } AutoTestFixture.SetWorldName(); // Enabled suites from JSON config provided on CLI (autotest param) set enabledSuites = new set(); enabledSuites = AutotestConfigHandler.GetSuites(); // Iterate through all suites and activate 'enabled' ones (list to be provided by config?) int numSuites = TestHarness.GetNSuites(); if (numSuites == 0) { AutoTestFixture.LogRPT("No TestSuites to run."); m_IsDone = true; return; } for (int i = 0; i < numSuites; ++i) { TestSuite suite = TestHarness.GetSuite(i); bool isEnabled = enabledSuites.Find(suite.GetName()) != -1 && suite.IsEnabled(); suite.SetEnabled(isEnabled); //AutoTestFixture.LogRPT(string.Format("Suite '%1' activation state set to: %2", suite.GetName(), isEnabled)); } // Start running active TestSuite m_IsRunning = true; TestHarness.Begin(); } static void Update(float deltaTime) { if (!m_IsRunning) return; if (!TestHarness.Finished()) { bool isDone = TestHarness.Run(); if (isDone) { string errorMessage; if (!AutoTestFixture.SaveXMLReport(TestHarness.Report(), errorMessage)) AutoTestFixture.LogRPT(errorMessage); TestHarness.End(); m_IsRunning = false; m_IsDone = true; } } } } /* Script wrapper for TestResultBase that allows script provided kind and message in elegant way. */ class CustomResult : TestResultBase { private bool m_Success; private string m_FailureText; private string m_FailureKind; override bool Failure() { return !m_Success; } // string FailureTextNativeFormat(string type, string userTxt); // That will return the formatted string override string FailureText() { return string.Format("%2", m_FailureKind, m_FailureText); } void CustomResult(bool success, string text = "User provided error!", string kind = "Failure") { m_Success = success; m_FailureText = text; m_FailureKind = kind; } } /* Suite is a collection of tests. */ /* class FooTestSuite : TestSuite { // !!! // Be careful, if you leave the suite empty - no error is given and it will just ommit everything. // !!! [Step(EStage.Setup)] void FooSetup() { Print("FooTestSuite is setting up... Tests can commence now.."); } [Step(EStage.TearDown)] void FooFinish() { Print("FooTestSuite is finishing up ... Tests are done.."); } } */ /* Test is registered within suite via the usage of the Test attribute. */ /* [Test("FooTestSuite")] class FooTest1 : TestBase { private int m_Value; private const int k_TargetValue = 10; [Step(EStage.Setup)] void Setup() { m_Value = k_TargetValue; } [Step(EStage.Main)] void Main() { if ( m_Value != k_TargetValue ) { SetResult( new CustomResult(false, string.Format("Expected value: %1, Actual value: %2", k_TargetValue, m_Value)) ); } else { SetResult( new CustomResult(true, "Successfull!") ); } } [Step(EStage.TearDown)] void Cleanup() { m_Value = 0; } } /* Test is registered within suite via the usage of the Test attribute. */ /* [Test("FooTestSuite")] class FooTest2 : TestBase { private int m_Value; private const int k_TargetValue = 10; [Step(EStage.Setup)] void Setup() { m_Value = 11; // intentionally wrong } [Step(EStage.Main)] void Main() { if ( m_Value != k_TargetValue ) { SetResult( new CustomResult(false, string.Format("Expected value: %1, Actual value: %2", k_TargetValue, m_Value)) ); } else { SetResult( new CustomResult(true, "Successfull!") ); } } [Step(EStage.TearDown)] void Cleanup() { m_Value = 0; } } class BarTestSuite : TestSuite { [Step(EStage.Setup)] void A(); } [Test("BarTestSuite")] class BarTest1 : TestBase { [Step(EStage.Setup)] void Setup(); [Step(EStage.Main)] void Main() { SetResult( new CustomResult(true, "Successfull!") ); } [Step(EStage.TearDown)] void Cleanup(); } */