public void StartScript(LightScript lightScript) { InitializeNewRun(); TestData.TestFixture = lightScript; RunnerFactory.PassDependencies(TestData); new Thread(delegate() { Task.Delay(150).Wait(); // make sure first screenshot is taken before starting running commands var runner = RunnerFactory.GetFor(lightScript.GetType()); runner.Run(lightScript); ScreenStateThread.Stop(); FeatureDetectionThread.Stop(); TestRunEnd?.Invoke(); }).Start(); }
/// <summary> /// Runs all tests from all test fixtures. /// Accepts Regex filter for fixture and test names. /// </summary> public void StartTests(string testFilter = ".") { InitializeNewRun(); new Thread(delegate() { Task.Delay(150).Wait(); // make sure first screenshot is taken before starting running commands var fixtureImporters = RuntimeAssetManager.AssetImporters.Where(importer => importer.HoldsType() == typeof(LightTestFixture)); var fixtures = fixtureImporters.Select(i => i.Load <LightTestFixture>()).Where(value => value != null); // If test fixuture failed to import, it might be null. Ignore them // RunnerFactory.GetFor uses reflection to check attribute, might be faster to just cache the value var cachedScriptRunner = RunnerFactory.GetFor(typeof(LightScript)); foreach (var fixture in fixtures) { var fixtureMathesFilter = Regex.IsMatch(fixture.Name, testFilter); var isThereASingleTestMatchingFilter = fixture.Tests.Any(test => Regex.IsMatch(fixture.Name + "." + test.Name, testFilter)); if (!isThereASingleTestMatchingFilter && !fixtureMathesFilter) { continue; } FixtureIsBeingRun?.Invoke(fixture); RunScriptIfNotEmpty(cachedScriptRunner, fixture.OneTimeSetup); if (TestData.ShouldCancelRun) { return; } CheckIfTestFailedAndFireCallbacks(fixture, fixture.OneTimeSetup); foreach (var test in fixture.Tests) { var testMathesFilter = Regex.IsMatch(fixture.Name + "." + test.Name, testFilter); if (!fixtureMathesFilter && !testMathesFilter) { continue; } TestIsBeingRun?.Invoke(fixture, test); // Setup RunScriptIfNotEmpty(cachedScriptRunner, fixture.Setup); if (TestData.ShouldCancelRun) { return; } CheckIfTestFailedAndFireCallbacks(fixture, fixture.Setup); // Test RunnerFactory.PassDependencies(TestData); cachedScriptRunner.Run(test); if (TestData.ShouldCancelRun) { return; } CheckIfTestFailedAndFireCallbacks(fixture, test); // Teardown RunScriptIfNotEmpty(cachedScriptRunner, fixture.TearDown); if (TestData.ShouldCancelRun) { return; } CheckIfTestFailedAndFireCallbacks(fixture, fixture.TearDown); } RunScriptIfNotEmpty(cachedScriptRunner, fixture.OneTimeTeardown); CheckIfTestFailedAndFireCallbacks(fixture, fixture.OneTimeTeardown); } ScreenStateThread.Stop(); FeatureDetectionThread.Stop(); TestRunEnd?.Invoke(); }).Start(); }