示例#1
0
        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();
        }
示例#2
0
        /// <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();
        }