/// <summary>
        /// Run the tests in the loaded TestPackage and return a test result. The tests
        /// are run synchronously and the listener interface is notified as it progresses.
        /// </summary>
        /// <param name="listener">An ITestEventHandler to receive events</param>
        /// <param name="filter">A TestFilter used to select tests</param>
        /// <returns>A TestEngineResult giving the result of the test execution</returns>
        protected override TestEngineResult RunTests(ITestEventListener listener, TestFilter filter)
        {
            IsTestRunning = true;

            if (listener != null)
            {
                listener.OnTestEvent(string.Format("<start-run count='{0}'/>", CountTestCases(filter)));
            }

            DateTime startTime  = DateTime.UtcNow;
            long     startTicks = Stopwatch.GetTimestamp();

            TestEngineResult result = _realRunner.Run(listener, filter).Aggregate("test-run", TestPackage.Name, TestPackage.FullName);

            result.Xml.InsertEnvironmentElement();

            double duration = (double)(Stopwatch.GetTimestamp() - startTicks) / Stopwatch.Frequency;

            result.Xml.AddAttribute("start-time", XmlConvert.ToString(startTime, "u"));
            result.Xml.AddAttribute("end-time", XmlConvert.ToString(DateTime.UtcNow, "u"));
            result.Xml.AddAttribute("duration", duration.ToString("0.000000", NumberFormatInfo.InvariantInfo));

            IsTestRunning = false;

            if (listener != null)
            {
                listener.OnTestEvent(result.Xml.OuterXml);
            }

            return(result);
        }
        private void OnTestStarted(TestName testName, bool isSuite)
        {
            string report = string.Format(
                "<{0} id=\"{1}\" name=\"{2}\" fullname=\"{3}\"/>",
                isSuite ? "start-suite" : "start-test",
                testName.TestID,
                FormatAttributeValue(testName.Name),
                FormatAttributeValue(testName.FullName));

            _listener.OnTestEvent(report);
        }
 public void SendTo(ITestEventListener listener)
 {
     foreach (string report in Reports)
     {
         listener.OnTestEvent(report);
     }
 }
Exemple #4
0
        public void IssuePendingNotifications(ITestEventListener listener)
        {
            lock (_trackerLock)
            {
                int count = _itemsInProcess.Count;

                // Signal completion of all pending suites, in reverse order
                while (count > 0)
                {
                    listener.OnTestEvent(CreateNotification(_itemsInProcess[--count]));
                }
            }
        }
Exemple #5
0
        /// <summary>
        /// Run the tests in the loaded TestPackage and return a test result. The tests
        /// are run synchronously and the listener interface is notified as it progresses.
        /// </summary>
        /// <param name="listener">An ITestEventHandler to receive events</param>
        /// <param name="filter">A TestFilter used to select tests</param>
        /// <returns>A TestEngineResult giving the result of the test execution</returns>
        protected override TestEngineResult RunTests(ITestEventListener listener, TestFilter filter)
        {
            IsTestRunning = true;

            if (listener != null)
            {
                listener.OnTestEvent(string.Format("<start-run count='{0}'/>", CountTestCases(filter)));
            }

            DateTime startTime  = DateTime.UtcNow;
            long     startTicks = Stopwatch.GetTimestamp();

            TestEngineResult result = _realRunner.Run(listener, filter).Aggregate("test-run", TestPackage.Name, TestPackage.FullName);

            // These are inserted in reverse order, since each is added as the first child.
            InsertFilterElement(result.Xml, filter);
            InsertCommandLineElement(result.Xml);

            result.Xml.AddAttribute("engine-version", Assembly.GetExecutingAssembly().GetName().Version.ToString());
            result.Xml.AddAttribute("clr-version", Environment.Version.ToString());

            double duration = (double)(Stopwatch.GetTimestamp() - startTicks) / Stopwatch.Frequency;

            result.Xml.AddAttribute("start-time", XmlConvert.ToString(startTime, "u"));
            result.Xml.AddAttribute("end-time", XmlConvert.ToString(DateTime.UtcNow, "u"));
            result.Xml.AddAttribute("duration", duration.ToString("0.000000", NumberFormatInfo.InvariantInfo));

            IsTestRunning = false;

            if (listener != null)
            {
                listener.OnTestEvent(result.Xml.OuterXml);
            }

            return(result);
        }
Exemple #6
0
        // Return the result of a test run as a TestEngineResult. ProgressMessages
        // preceding the final CommandReturnMessage are handled as well.
        private TestEngineResult TestRunResult(ITestEventListener listener)
        {
            var rdr = new SocketReader(_socket, _wireProtocol);

            while (true)
            {
                var receivedMessage = rdr.GetNextMessage();
                var receivedType    = receivedMessage.GetType();

                var returnMessage = receivedMessage as CommandReturnMessage;
                if (returnMessage != null)
                {
                    return((TestEngineResult)returnMessage.ReturnValue);
                }

                var progressMessage = receivedMessage as ProgressMessage;
                if (progressMessage == null)
                {
                    throw new InvalidOperationException($"Expected either a ProgressMessage or a CommandReturnMessage but received a {receivedType}");
                }

                listener.OnTestEvent(progressMessage.Report);
            }
        }
        /// <summary>
        /// Run the tests in the loaded TestPackage and return a test result. The tests
        /// are run synchronously and the listener interface is notified as it progresses.
        /// </summary>
        /// <param name="listener">An ITestEventHandler to receive events</param>
        /// <param name="filter">A TestFilter used to select tests</param>
        /// <returns>A TestEngineResult giving the result of the test execution</returns>
        protected override TestEngineResult RunTests(ITestEventListener listener, TestFilter filter)
        {
            IsTestRunning = true;

            if (listener != null)
                listener.OnTestEvent(string.Format("<start-run count='{0}'/>", CountTestCases(filter)));

            DateTime startTime = DateTime.UtcNow;
            long startTicks = Stopwatch.GetTimestamp();

            TestEngineResult result = _realRunner.Run(listener, filter).Aggregate("test-run", TestPackage.Name, TestPackage.FullName);

            // These are inserted in reverse order, since each is added as the first child.
            result.Xml.InsertFilterElement(filter);
            result.Xml.InsertSettingsElement(EffectiveSettings);
            result.Xml.InsertCommandLineElement();
            result.Xml.InsertEnvironmentElement();

            double duration = (double)(Stopwatch.GetTimestamp() - startTicks) / Stopwatch.Frequency;
            result.Xml.AddAttribute("start-time", XmlConvert.ToString(startTime, "u"));
            result.Xml.AddAttribute("end-time", XmlConvert.ToString(DateTime.UtcNow, "u"));
            result.Xml.AddAttribute("duration", duration.ToString("0.000000", NumberFormatInfo.InvariantInfo));

            IsTestRunning = false;

            if (listener != null)
                listener.OnTestEvent(result.Xml.OuterXml);

            return result;
        }