public override TestResult Run(EventListener listener, ITestFilter filter)
        {
            listener.TestStarted(base.TestName);
            long ticks = DateTime.Now.Ticks;
            var testResult = new TestResultShim();

            Exception existingError = null;

            _globalSetup.PrepareForTestPosition(Position, out existingError);

            if (existingError != null)
            {
                TestResultUtil.Error(testResult, TestExtensions.GetMultilineName(this), existingError, null, TestResultShim.Site.SetUp);
            }
            else
            {
                List<string> traceMessages = null;
                try
                {
                    RunTestMethod(testResult, out traceMessages);
                }
                catch (Exception e)
                {
                    var globalTraceMessages = _globalSetup.GetTraceMessages();
                    TestResultUtil.Error(testResult, TestExtensions.GetMultilineName(this), e, globalTraceMessages.Concat(traceMessages));
                }
            }

            var nunitTestResult = new TestResult(this);
            NativeTestResult.ApplyToNunitResult(testResult, nunitTestResult);
            nunitTestResult.Time = ((DateTime.Now.Ticks - ticks)) / 10000000.0;
            listener.TestFinished(nunitTestResult);
            return nunitTestResult;
        }
        public void NotifyEnd(string testFullName, TestResultShim testResult)
        {
            var test = _tests[testFullName];

            var result = new TestResult(test)
            {
                Outcome = MapToOutcome(testResult),
                DisplayName = testFullName
            };

            if (result.Outcome == TestOutcome.Failed)
            {
                result.ErrorMessage = testResult.FailureReason;
                result.ErrorStackTrace = testResult.FailureStackTrace;
            }
            else if (result.Outcome == TestOutcome.Skipped)
            {
                // TODO: can we include the reason skipped in VS output somehow?
                result.Messages.Add(
                    new TestResultMessage("ReasonSkipped", testResult.ReasonSkipped));
            }

            _frameworkHandle.RecordEnd(test, result.Outcome);
            _frameworkHandle.RecordResult(result);
        }
 public TestOutcome MapToOutcome(TestResultShim shim)
 {
     switch(shim.Status)
     {
     case TestResultShim.Result.Successs:
         return TestOutcome.Passed;
     case TestResultShim.Result.Error:
         return TestOutcome.Failed;
     case TestResultShim.Result.Skipped:
         return TestOutcome.Skipped;
     default:
         throw new ArgumentOutOfRangeException();
     }
 }
        public static TestResultShim RunTest(TestContext testContext, List<string> traceMessages)
        {
            var startTime = DateTime.UtcNow;
            var testResult = new TestResultShim();

            Exception existingError = testContext.FixtureContext.GlobalSetupManager.PrepareForTestPosition(testContext.Position);

            if (existingError != null)
            {
                TestResultUtil.Error(testResult, testContext.Name.MultilineName, existingError, null,
                                     TestResultShim.Site.SetUp);
            }
            else
            {
                traceMessages.AddRange(testContext.FixtureContext.GlobalSetupManager.GetTraceMessages());
                try
                {
                    List<string> traceMessages1 = traceMessages;
                    traceMessages1 = traceMessages1 ?? new List<string>();

                    var executionContext = new NJasmineTestRunContext(testContext.Position, testContext.FixtureContext.GlobalSetupManager, traceMessages1);
                    var runner = new NJasmineTestRunner(executionContext);

                    SpecificationFixture fixture = testContext.FixtureContext.FixtureFactory();

                    fixture.CurrentPosition = TestPosition.At(0);
                    fixture.Visitor = runner;
                    try
                    {
                        fixture.Run();
                    }
                    finally
                    {
                        executionContext.RunAllPerTestTeardowns();
                    }
                    testResult.Success();
                }
                catch (Exception e)
                {
                    TestResultUtil.Error(testResult, testContext.Name.MultilineName, e, traceMessages);
                }
            }

            testResult.SetExecutionTime(DateTime.UtcNow - startTime);
            return testResult;
        }
        public static TestResultShim RunTest(TestContext testContext, List <string> traceMessages)
        {
            var startTime  = DateTime.UtcNow;
            var testResult = new TestResultShim();

            Exception existingError = testContext.FixtureContext.GlobalSetupManager.PrepareForTestPosition(testContext.Position);

            if (existingError != null)
            {
                TestResultUtil.Error(testResult, testContext.Name.MultilineName, existingError, null,
                                     TestResultShim.Site.SetUp);
            }
            else
            {
                traceMessages.AddRange(testContext.FixtureContext.GlobalSetupManager.GetTraceMessages());
                try
                {
                    List <string> traceMessages1 = traceMessages;
                    traceMessages1 = traceMessages1 ?? new List <string>();

                    var executionContext = new NJasmineTestRunContext(testContext.Position, testContext.FixtureContext.GlobalSetupManager, traceMessages1);
                    var runner           = new NJasmineTestRunner(executionContext);

                    SpecificationFixture fixture = testContext.FixtureContext.FixtureFactory();

                    fixture.CurrentPosition = TestPosition.At(0);
                    fixture.Visitor         = runner;
                    try
                    {
                        fixture.Run();
                    }
                    finally
                    {
                        executionContext.RunAllPerTestTeardowns();
                    }
                    testResult.Success();
                }
                catch (Exception e)
                {
                    TestResultUtil.Error(testResult, testContext.Name.MultilineName, e, traceMessages);
                }
            }

            testResult.SetExecutionTime(DateTime.UtcNow - startTime);
            return(testResult);
        }
示例#6
0
 private static FailureSite GetNUnitFailureSite(TestResultShim.Site site)
 {
     switch (site)
     {
         case TestResultShim.Site.Test:
             return FailureSite.Test;
         case TestResultShim.Site.SetUp:
             return FailureSite.SetUp;
         case TestResultShim.Site.TearDown:
             return FailureSite.TearDown;
         case TestResultShim.Site.Parent:
             return FailureSite.Parent;
         case TestResultShim.Site.Child:
             return FailureSite.Child;
         default:
             throw new ArgumentOutOfRangeException("site");
     }
 }
示例#7
0
        public static TestResult ApplyToNunitResult(TestResultShim shim, TestResult result)
        {
            switch (shim.Status)
            {
                case TestResultShim.Result.Successs:
                    result.Success();
                    break;
                case TestResultShim.Result.Error:
                    result.SetResult(ResultState.Error, shim.FailureReason, shim.FailureStackTrace, GetNUnitFailureSite(shim.FailureSite));
                    break;
                default:
                    throw new ArgumentOutOfRangeException();
            }

            result.Time = shim.ExecutionTime.Seconds;

            return result;
        }
        protected override void DoOneTimeTearDown(TestResult suiteResult)
        {
            try
            {
                _testContext.FixtureContext.GlobalSetupManager.Cleanup(_testContext.Position);
            }
            catch (Exception innerException)
            {
                NUnitException exception2 = innerException as NUnitException;
                if (exception2 != null)
                {
                    innerException = exception2.InnerException;
                }

                var shim = new TestResultShim();
                TestResultUtil.Error(shim, suiteResult.Test.GetMultilineName(), innerException, null, TestResultShim.Site.TearDown);
                NativeTestResult.ApplyToNunitResult(shim, suiteResult);
            }
        }
        protected override void DoOneTimeTearDown(TestResult suiteResult)
        {
            try
            {
                _oneTimeTeardown();
            }
            catch (Exception innerException)
            {
                NUnitException exception2 = innerException as NUnitException;
                if (exception2 != null)
                {
                    innerException = exception2.InnerException;
                }

                var shim = new TestResultShim();
                TestResultUtil.Error(shim, suiteResult.Test.GetMultilineName(), innerException, null, TestResultShim.Site.TearDown);
                NativeTestResult.ApplyToNunitResult(shim, suiteResult);
            }
        }
示例#10
0
        public void RunTestMethodInner(TestResultShim testResult, out List<string> traceMessages)
        {
            traceMessages = new List<string>();

            var executionContext = new NJasmineTestRunContext(Position, _globalSetup, traceMessages);
            var runner = new NJasmineTestRunner(executionContext);

            SpecificationFixture fixture = this._fixtureFactory();

            fixture.CurrentPosition = new TestPosition(0);
            fixture.Visitor = runner;
            try
            {
                fixture.Run();
            }
            finally
            {
                executionContext.RunAllPerTestTeardowns();
            }
            testResult.Success();
        }
示例#11
0
        public static void Error(TestResultShim testResult, string multilineName, Exception exception, IEnumerable<string> traceMessages, TestResultShim.Site failureSite = TestResultShim.Site.Test)
        {
            traceMessages = traceMessages ?? new List<string>();

            testResult.SetError(BuildMessage(exception), BuildStackTrace(exception, multilineName, traceMessages), failureSite);
        }
示例#12
0
 public void RunTestMethod(TestResultShim testResult, out List<string> traceMessages)
 {
     RunTestMethodInner(testResult, out traceMessages);
 }
示例#13
0
        public static void Error(TestResultShim testResult, string multilineName, Exception exception, IEnumerable <string> traceMessages, TestResultShim.Site failureSite = TestResultShim.Site.Test)
        {
            traceMessages = traceMessages ?? new List <string>();

            testResult.SetError(BuildMessage(exception), BuildStackTrace(exception, multilineName, traceMessages), failureSite);
        }
示例#14
0
            public void RunTests(string assemblyName, string[] testNames, string explictlyIncluding, ITestResultListener listener)
            {
                using(var nativeTestFactory = RunTestDiscovery(Assembly.Load(assemblyName), t => true))
                {
                    foreach(var name in testNames)
                    {
                        var testContext = nativeTestFactory.Contexts[name];

                        var ignoreReason = nativeTestFactory.GetIgnoreReason(name, explictlyIncluding);

                        listener.NotifyStart(testContext.Name.FullName);

                        List<string> traceMessages = new List<string>();

                        if (ignoreReason == null)
                        {
                            var result = SpecificationRunner.RunTest(testContext, traceMessages);

                            listener.NotifyEnd(testContext.Name.FullName, result);
                        }
                        else
                        {
                            var result = new TestResultShim();
                            result.SetSkipped(ignoreReason);
                            listener.NotifyEnd(testContext.Name.FullName, result);
                        }
                    }
                }
            }
        void expect_test_to_observe(TestPosition testPosition, List<string> expected)
        {
            var fixture = new has_test_in_loop();
            var method = new NJasmineTestMethod(() => fixture, testPosition, new FakeGlobalSetupManager());

            TestResultShim result = new TestResultShim();
            List<string> ignored;
            method.RunTestMethodInner(result, out ignored);

            expect(() => result.IsSuccess);

            Assert.That(fixture.Observations, Is.EquivalentTo(expected));
        }