Exemple #1
0
        /// <summary>
        /// Clean up the host side.
        /// We do the following steps. Each step is important and must be done whenever previous step throws or not.
        /// - Call HostSide.Cleanup.
        /// - Ask Runner IDE to detach debugger (if attached).
        /// - Dispose m_vsIde.
        /// This should not throw.
        /// </summary>
        private void CleanupHostSide()
        {
            lock (_hostSideLock)
            {
                Contract.Assert(HostSide != null);

                if (HostSide != null)
                {
                    try
                    {
                        HostSide.Cleanup();
                    }
                    catch (Exception ex)    // We don't know what this can throw in advance.
                    {
                        SendResult(string.Format(CultureInfo.InvariantCulture, "Warning: VsIdeHostAdapter failed to call ITestAdapter.Cleanup: {0}", ex), TestOutcome.Warning);
                    }
                }

                try
                {
                    Contract.Assert(_vsIde != null);
                    _vsIde.Dispose();
                }
                catch (Exception ex)
                {
                    SendResult(string.Format(CultureInfo.InvariantCulture, "Warning: VsIdeHostAdapter: error shutting down VS IDE: {0}", ex), TestOutcome.Warning);
                }

                _vsIde    = null;
                _hostSide = null;  // Note: host side lifetime is controlled by the addin.
            }
        }
        private ITestAdapter GetTestAdapter(ITestElement test)
        {
            Debug.Assert(test != null, "Internal error: test is null!");

            // Get more metadata off the type.
            string id                  = test.HumanReadableId;
            int    lastDot             = id.LastIndexOf('.');
            string typeName            = id.Substring(0, lastDot);
            Type   dynamicHostType     = DynamicHostTypeAttribute.GetDynamicHostType(test.Name, typeName, test.Storage);
            string dynamicHostTypeName = dynamicHostType.FullName;

            ITestAdapter realTestAdapter = null;
            bool         containsAdapter = m_adapters.TryGetValue(dynamicHostTypeName, out realTestAdapter);

            if (!containsAdapter)
            {
                realTestAdapter = (ITestAdapter)Activator.CreateInstance(dynamicHostType, new Object[] { });

                // Iniitialize was delayed to be run from the Run method.
                realTestAdapter.Initialize(m_runContext);

                m_adapters.Add(dynamicHostTypeName, realTestAdapter);
            }

            return(realTestAdapter);
        }
Exemple #3
0
        private void CleanupHostSide()
        {
            lock (m_hostSideLock)
            {
                Debug.Assert(HostSide != null);

                if (HostSide != null)
                {
                    try
                    {
                        ((ITestAdapter)HostSide).Cleanup();
                    }
                    catch (Exception ex)    // We don't know what this can throw in advance.
                    {
                        SendResult(string.Format(CultureInfo.InvariantCulture, Resources.FailedToCallTACleanup, ex), TestOutcome.Warning);
                    }
                }

                try
                {
                    Debug.Assert(m_vsIde != null);
                    m_vsIde.Dispose();
                }
                catch (Exception ex)
                {
                    SendResult(string.Format(CultureInfo.InvariantCulture, Resources.ErrorShuttingDownVS, ex), TestOutcome.Warning);
                }

                m_vsIde    = null;
                m_hostSide = null;  // Note: host side lifetime is controlled by the addin.
            }
        }
Exemple #4
0
        private void CreateHostSide()
        {
            // Note: we already have try-catch-Debug.Fail in Initialize that calls this method.
            // Note: registryHive can be null when using HostType attribute. In this case we'll use default hive.
            Debug.Assert(!string.IsNullOrEmpty(m_workingDir));
            // Note: registryHive can be null when using the attribute. That's OK, VsIde will figure out.
            Debug.Assert(!string.IsNullOrEmpty(m_workingDir));
            Debug.Assert(m_hostSide == null, "HA.CreateHostSide: m_hostSide should be null (ignorable).");
            Debug.Assert(m_vsIde == null, "HA.CreateHostSide: m_vsIde should be null (ignorable).");

            // Start devenv.
            m_vsIde = new VisualStudioIde(new VsIdeStartupInfo(m_vsRegistryHive, m_workingDir));
            m_vsIde.ErrorHandler += HostProcessErrorHandler;

            Stopwatch timer = Stopwatch.StartNew();

            do
            {
                try
                {
                    m_vsIde.Dte.MainWindow.Visible = true;    // This could be in TestRunConfig options for this host type.
                    break;
                }
                catch (Exception)
                {
                }
                System.Threading.Thread.Sleep(RegistrySettings.BaseSleepDuration);
            } while (timer.Elapsed < s_ideStartupTimeout);

            m_hostSide = GetHostSideFromAddin();
        }
Exemple #5
0
        /// <summary>
        /// Starts new Visual Studio process and obtains host side from it.
        /// </summary>
        private void CreateHostSide()
        {
            Contract.Assert(!string.IsNullOrEmpty(_workingDir));
            Contract.Assert(_hostSide == null);
            Contract.Assert(_vsIde == null);

            // Start devenv.
            _vsIde = new VisualStudioIde(new VsIdeStartupInfo(_vsRegistryHive, _workingDir));
            _vsIde.ErrorHandler += HostProcessErrorHandler;

            Stopwatch timer = Stopwatch.StartNew();

            do
            {
                try
                {
                    _vsIde.Dte.MainWindow.Visible = true;    // This could be in TestRunConfig options for this host type.
                    break;
                }
                catch (Exception)
                {
                }
                System.Threading.Thread.Sleep(_baseSleepDuration);
            } while (timer.Elapsed < _ideStartupTimeout);

            _hostSide = GetHostSideFromAddin();
        }
        /// <summary>
        /// IBaseAdapter method: called to execute a test.
        /// </summary>
        /// <param name="testElement">The test object to run</param>
        /// <param name="testContext">The Test conext for this test invocation</param>
        void IBaseAdapter.Run(ITestElement testElement, ITestContext testContext)
        {
            Trace.TraceInformation("Called DynamicHostAdapter.Run");
            ITestAdapter realAdapter = GetTestAdapter(testElement);

            realAdapter.Run(testElement, testContext);
        }
Exemple #7
0
        public void Setup()
        {
            var type = Assembly.LoadFrom($"..\\{Version}.Adapter\\{Version}.Adapter.dll")
                       .GetType($"{Version}.Adapter.TestAdapter");

            Adapter           = (ITestAdapter)Activator.CreateInstance(type);
            Adapter.Container = Adapter.CreateContainer();
        }
Exemple #8
0
        private ITestAdapter GetHostSideFromAddin()
        {
            // Find the Addin.
            // Note: After VS starts addin needs some time to load, so we try a few times.
            AddIn addinLookingFor = null;

            Stopwatch timer = Stopwatch.StartNew();

            try
            {
                do
                {
                    try
                    {
                        // There is no index-by-name API, so we have to check all addins.
                        foreach (AddIn addin in m_vsIde.Dte.AddIns)
                        {
                            if (addin.Name == Constants.VsAddinName)
                            {
                                addinLookingFor = addin;
                                break;
                            }
                        }
                    }
                    catch (Exception)
                    {
                        // Catch all exceptions to prevent intermittent failures such as COMException (0x8001010A)
                        // while VS has not started yet. Just retry again until we timeout.
                    }

                    if (addinLookingFor != null)
                    {
                        break;
                    }

                    System.Threading.Thread.Sleep(RegistrySettings.BaseSleepDuration);
                } while (timer.Elapsed < s_addinWaitTimeout);
            }
            finally
            {
                timer.Stop();
            }

            if (addinLookingFor == null)
            {
                Debug.Fail("HA.GetHostSideFromAddin: timed out but could not get the addin from VS.");
                throw new VsIdeTestHostException(Resources.TimedOutGettingAddin);
            }

            m_testHostAddin = (IVsIdeTestHostAddin)addinLookingFor.Object;
            ITestAdapter hostSide = m_testHostAddin.GetHostSide();

            Debug.Assert(hostSide != null);

            return(hostSide);
        }
Exemple #9
0
        [Test] public void TestHtmlFileWithSrcFiles()
        {
            using (ITestAdapter adapter = JSNet.ClosureLibrary(basejsfile))
            {
                ITestResults results = adapter.RunTest(@"resources\test_with_src_files.html");

                Assert.AreEqual(0, results.Failed.Count(), results.ToString());
                Assert.AreEqual(65, results.Passed.Count(), results.ToString());
            }
        }
Exemple #10
0
        [Test] public void RunHtmlFileTest()
        {
            using (ITestAdapter adapter = JSNet.ClosureLibrary(basejsfile))
            {
                ITestResults results = adapter.RunTest(@"J:\dev\Projects\Misc\closure-library\closure\goog\array\array_test.html");

                Assert.AreEqual(0, results.Failed.Count(), results.ToString());
                Assert.AreEqual(73, results.Passed.Count(), results.ToString());
            }
        }
Exemple #11
0
        [Test] public void RunSingleTestFile()
        {
            using (ITestAdapter adapter = JSNet.QUnit(qUnitJS))
            {
                ITestResults results = adapter.RunTest(@"J:\dev\libs\qunit\test\test.js");

                Assert.AreEqual(2, results.Failed.Count());
                Assert.AreEqual(23, results.Passed.Count());
            }
        }
Exemple #12
0
        [Test] public void RunJSFileTest()
        {
            using (ITestAdapter adapter = JSNet.ClosureLibrary(basejsfile))
            {
                ITestResults results = adapter.RunTest(@"resources\simple_closure_tests.js");

                Assert.AreEqual(0, results.Failed.Count(), results.ToString());
                Assert.AreEqual(66, results.Passed.Count(), results.ToString());
            }
        }
Exemple #13
0
        /// <summary>
        /// IBaseAdapter method: called to execute a test.
        /// </summary>
        /// <param name="testElement">The test object to run</param>
        /// <param name="testContext">The Test conext for this test invocation</param>
        void IBaseAdapter.Run(ITestElement testElement, ITestContext testContext)
        {
            Trace.TraceInformation("Called MtaHostAdapter.Run");
            ITestAdapter realAdapter = GetTestAdapter(testElement);

            RunOnMtaThread(() =>
            {
                realAdapter.Run(testElement, testContext);
            });
        }
Exemple #14
0
        /// <summary>
        /// Obtain host side from the addin.
        /// </summary>
        /// <returns></returns>
        private ITestAdapter GetHostSideFromAddin()
        {
            // Find the Addin.
            // Note: After VS starts addin needs some time to load, so we try a few times.
            AddIn addinLookingFor = null;

            Stopwatch timer = Stopwatch.StartNew();

            try
            {
                do
                {
                    try
                    {
                        // There is no index-by-name API, so we have to check all addins.
                        foreach (AddIn addin in _vsIde.Dte.AddIns)
                        {
                            if (addin.Name == VsAddinName)
                            {
                                addinLookingFor = addin;
                                break;
                            }
                        }
                    }
                    catch (Exception)
                    {
                        // Catch all exceptions to prevent intermittent failures such as COMException (0x8001010A)
                        // while VS has not started yet. Just retry again until we timeout.
                    }

                    if (addinLookingFor != null)
                    {
                        break;
                    }

                    System.Threading.Thread.Sleep(_baseSleepDuration);
                } while (timer.Elapsed < _addinWaitTimeout);
            }
            finally
            {
                timer.Stop();
            }

            if (addinLookingFor == null)
            {
                throw new VsIdeTestHostException("Timed out getting Vs Ide Test Host Add-in from Visual Studio. Please make sure that the Add-in is installed and started when VS starts (use Tools->Add-in Manager).");
            }

            _testHostAddin = (IVsIdeTestHostAddin)addinLookingFor.Object;
            ITestAdapter hostSide = _testHostAddin.GetHostSide();

            Contract.Assert(hostSide != null);

            return(hostSide);
        }
Exemple #15
0
        [Test] public void AssertThatTheClosureTestWorksWithoutAnyCoverageStuff()
        {
            using (ITestAdapter adapter = JSNet.ClosureLibrary(basejsfile))
            {
                adapter.LoadSourceFile(@"resources\jscoverage\src\jscoverage_source.js");
                ITestResults results = adapter.RunTest(@"resources\jscoverage\jscoverage_test.js");

                Assert.AreEqual(0, results.Failed.Count(), results.ToString());
                Assert.AreEqual(4, results.Passed.Count(), results.ToString());
            }
        }
Exemple #16
0
        private static ITestAdapter CreateRemoteShim()
        {
            IIsolatedEnvironment environment = SharedEnvironmentManager.GetSharedEnvironment();

            environment.Loader.AddHintDirectory(GetVSTSDirectoryPath());

            Type         shimType = typeof(Shim);
            ITestAdapter shim     = (ITestAdapter)environment.AppDomain.CreateInstanceAndUnwrap(shimType.Assembly.FullName, shimType.FullName);

            return(shim);
        }
        void IBaseAdapter.Run(ITestElement testElement, ITestContext testContext)
        {
            UIThreadInvoker.Initialize();
            UIThreadInvoker.Invoke((ThreadInvoker) delegate()
            {
                ITestAdapter realAdapter = GetTestAdapter(testElement);

                realAdapter.Run(testElement, testContext);
                Trace.TraceInformation("Completed UI thread call to Run");
            });
            Trace.TraceInformation("Completed incoming call to Run");
        }
Exemple #18
0
        [Test] public void SucceedingTests()
        {
            using (ITestAdapter adapter = JSNet.JSUnit(jsUnitCoreFile))
            {
                ITestResults results = adapter.RunTest(@"J:\dev\libs\jsunit\tests\jsUnitAssertionTests.html");

                Assert.AreEqual(0, results.Failed.Count());
                Assert.AreEqual(31, results.Passed.Count());

                Assert.IsNotNull(results);
                Console.WriteLine(results);
            }
        }
Exemple #19
0
        [Test] public void RunFailingTests()
        {
            using (ITestAdapter adapter = JSNet.Jasmine(jasmineJsFile))
            {
                adapter.LoadSourceFile(@"J:\dev\libs\jasmine\src\Player.js");
                ITestResults results = adapter.RunTest(@"J:\dev\libs\jasmine\spec\PlayerSpec.js");

                Assert.AreEqual(5, results.Failed.Count());
                Assert.AreEqual(0, results.Passed.Count());

                Assert.IsNotNull(results);
                Console.WriteLine(results);
            }
        }
Exemple #20
0
        private ITestResults RunSingleTest(string file)
        {
            Trace.Assert(!String.IsNullOrWhiteSpace(file));
            Trace.Assert(File.Exists(file), string.Format("Could not find file '{0}'", file));

            using (ITestAdapter adapter = GetAdapter())
            {
                foreach (string globalFile in globalSourceFiles)
                {
                    adapter.LoadSourceFile(globalFile);
                }
                return(adapter.RunTest(file));
            }
        }
        /// <summary>
        /// Get real TA.
        /// </summary>
        private ITestAdapter GetTestAdapter(ITestElement test)
        {
            Debug.Assert(test != null, "Internal error: test is null!");
            Debug.Assert(!string.IsNullOrEmpty(test.Adapter), "Internal error: test.Adapter is null or empty!");

            ITestAdapter realTestAdapter = null;
            bool         containsAdapter = m_adapters.TryGetValue(test.Adapter, out realTestAdapter);

            if (!containsAdapter)
            {
                realTestAdapter = (ITestAdapter)Activator.CreateInstance(Type.GetType(test.Adapter), new Object[] { });

                // Initialize was delayed to be run from the Run method.
                realTestAdapter.Initialize(m_runContext);

                m_adapters.Add(test.Adapter, realTestAdapter);
            }

            return(realTestAdapter);
        }
Exemple #22
0
        /// <summary>
        /// Common logic for test both Anchorables and Documents
        /// </summary>
        /// <param name="adapter"></param>
        private void TestResetNotification(ITestAdapter adapter)
        {
            // Make sure we have the correct initial counts
            Assert.AreEqual(adapter.ExpectedCount, adapter.CollectionCount);
            Assert.AreEqual(adapter.ExpectedCount, adapter.SourceCount);

            // We are only expecting the newly added items
            AreEqual(adapter.Notifications, new NotifyActionCount {
                AddCount = adapter.ExpectedCount
            });

            // Raise the Reset notification. Previous versions of AvalonDock assumed the collection was cleared.
            adapter.GetCollection().Refresh();

            // Nothing should have changed
            Assert.AreEqual(adapter.ExpectedCount, adapter.CollectionCount);
            Assert.AreEqual(adapter.ExpectedCount, adapter.SourceCount);

            // Verify nothing has been closed and the Reset notification was received
            AreEqual(adapter.Notifications, new NotifyActionCount {
                AddCount = adapter.ExpectedCount, ResetCount = 1
            });

            // Close the odd items. This will also raise the Reset notification.
            var removeChildren = adapter.GetSource().Where((x, i) => i % 2 != 0).ToList();

            adapter.GetCollection().RemoveRange(removeChildren);

            // Verify the remaining items
            int remainingCount = adapter.ExpectedCount - removeChildren.Count;

            Assert.AreEqual(remainingCount, adapter.CollectionCount);
            Assert.AreEqual(remainingCount, adapter.SourceCount);

            // NOTE: The RemoveCount is still zero because RemoveRange silently removed the items then issues a Reset.
            AreEqual(adapter.Notifications, new NotifyActionCount {
                AddCount = adapter.ExpectedCount, ResetCount = 2
            });
        }
        void IBaseAdapter.Run(ITestElement testElement, ITestContext testContext)
        {
            Thread myThread = Thread.CurrentThread;

            try
            {
                // Make sure to abort the previous test's Run thread if it isn't done yet - this could happen if a test times out
                Thread threadToAbort;
                lock (m_runThreadLock)
                {
                    threadToAbort = m_runThread;
                    m_runThread   = myThread;
                }
                AbortThread(threadToAbort);

                //Register configuration proxy to merge test configuration with VS
                ConfigurationProxy.Register(testElement.Storage);

                ITestAdapter realAdapter = GetTestAdapter(testElement);
                realAdapter.Run(testElement, testContext);
            }
            catch (ThreadAbortException)
            {
                // The agent-side adapter's thread that called this method may have already been aborted due to a timeout, so
                // don't send this exception back
                Thread.ResetAbort();
            }
            finally
            {
                lock (m_runThreadLock)
                {
                    if (m_runThread != null && m_runThread.ManagedThreadId == myThread.ManagedThreadId)
                    {
                        m_runThread = null;
                    }
                }
            }
        }
Exemple #24
0
 public static ICoverageAdapter JSCoverage(ITestAdapter testAdapter)
 {
     return new JSCoverageTestAdapter(testAdapter);
 }
Exemple #25
0
        public JSCoverageTestAdapter(ITestAdapter testAdapter)
        {
            Trace.Assert(testAdapter != null);

              this.testAdapter = testAdapter;
        }
 public MarshalByRefTestAdapterProxy(ITestAdapter target)
 {
     this.target = target;
 }
Exemple #27
0
 public TestCodeRunner(ITestAdapter testAdapter)
 {
     _testAdapter = testAdapter;
 }
Exemple #28
0
 /// <summary>
 /// Setting test model which determines test structure
 /// </summary>
 /// <param name="model">Test Adapter</param>
 public void SetTestModel(ITestAdapter model)
 {
     mTestModel = model;
 }
Exemple #29
0
        public void SetUp()
        {
            const string basejsfile = @"J:\dev\Projects\Misc\closure-library\closure\goog\base.js";

              ctx = JSNet.ClosureLibrary(basejsfile);
        }
Exemple #30
0
 public static ICoverageAdapter JSCoverage(ITestAdapter testAdapter)
 {
     return(new JSCoverageTestAdapter(testAdapter));
 }
Exemple #31
0
 public TestGenerator(ITestAdapter model, WordSet wordSet)
 {
     mTestModel = model;
     mWordSet   = wordSet;
     mSelector  = new WordSelector(new EasyModeWordSelectionStrategy(), wordSet);
 }
Exemple #32
0
        [SetUp] public void SetUp()
        {
            const string basejsfile = @"J:\dev\Projects\Misc\closure-library\closure\goog\base.js";

            ctx = JSNet.ClosureLibrary(basejsfile);
        }
 public MarshalByRefTestAdapterProxy(ITestAdapter target)
 {
     this.target = target;
 }
Exemple #34
0
        void IBaseAdapter.Run(ITestElement testElement, ITestContext testContext)
        {
            ITestAdapter realAdapter = GetTestAdapter(testElement);

            realAdapter.Run(testElement, testContext);
        }
        /// <summary>
        /// Clean up the host side.
        /// We do the following steps. Each step is important and must be done whenever previous step throws or not.
        /// - Call HostSide.Cleanup.
        /// - Ask Runner IDE to detach debugger (if attached).
        /// - Dispose m_vsIde.
        /// This should not throw.
        /// </summary>
        private void CleanupHostSide()
        {
            lock (_hostSideLock)
            {
                Contract.Assert(HostSide != null);

                if (HostSide != null)
                {
                    try
                    {
                        HostSide.Cleanup();
                    }
                    catch (Exception ex)    // We don't know what this can throw in advance.
                    {
                        SendResult(string.Format(CultureInfo.InvariantCulture, "Warning: VsIdeHostAdapter failed to call ITestAdapter.Cleanup: {0}", ex), TestOutcome.Warning);
                    }
                }

                try
                {
                    Contract.Assert(_vsIde != null);
                    _vsIde.Dispose();
                }
                catch (InvalidComObjectException)
                {
                    // This exception is always thrown when quitting VS. Nothing
                    // is gained by reporting it for every run.
                }
                catch (Exception ex)
                {
                    SendResult(string.Format(CultureInfo.InvariantCulture, "Warning: VsIdeHostAdapter: error shutting down VS IDE: {0}", ex), TestOutcome.Warning);
                }

                _vsIde = null;
                _hostSide = null;  // Note: host side lifetime is controlled by the addin.
            }
        }
        /// <summary>
        /// Starts new Visual Studio process and obtains host side from it.
        /// </summary>
        private void CreateHostSide()
        {
            Contract.Assert(!string.IsNullOrEmpty(_workingDir));
            Contract.Assert(_hostSide == null);
            Contract.Assert(_vsIde == null);

            // Start devenv.
            _vsIde = new VisualStudioIde(new VsIdeStartupInfo(_vsRegistryHive, _workingDir));
            _vsIde.ErrorHandler += HostProcessErrorHandler;

            Stopwatch timer = Stopwatch.StartNew();
            do
            {
                try
                {
                    _vsIde.Dte.MainWindow.Visible = true;    // This could be in TestRunConfig options for this host type.
                    break;
                }
                catch (Exception)
                {
                }
                System.Threading.Thread.Sleep(_baseSleepDuration);
            } while (timer.Elapsed < _ideStartupTimeout);

            _hostSide = GetHostSideFromAddin();
        }