Exemplo n.º 1
0
        public void Run(XunitTestAssemblyTask assemblyTask, bool disableAllConcurrency)
        {
            var environment = new TestEnvironment(assemblyTask, disableAllConcurrency);
            try
            {
                if (environment.TestAssemblyConfiguration.ShadowCopyOrDefault)
                    server.SetTempFolderPath(environment.ShadowCopyPath);

                using (var controller = GetFrontController(environment))
                {
                    var discoverer = new Discoverer(controller, RunContext, environment);
                    var testCases = discoverer.GetTestCases();

                    if (testCases.Count == 0)
                        throw new InternalErrorException("Unexpected: Unable to find any matching test cases");

                    if (testCases.Count > 0)
                    {
                        RunContext.AddRange(testCases);

                        var executor = new Executor(controller, RunContext, environment);
                        executor.RunTests(testCases);
                    }
                }

                environment.DiagnosticMessages.Report(server);
            }
            catch (Exception e)
            {
                ReportException(assemblyTask, environment, e);
            }
        }
Exemplo n.º 2
0
        public void Run(XunitTestAssemblyTask assemblyTask, TaskProvider taskProvider)
        {
            var priorCurrentDirectory = Environment.CurrentDirectory;
            try
            {
                // Use the assembly in the folder that the user has specified, or, if not, use the assembly location
                var assemblyFolder = GetAssemblyFolder(configuration, assemblyTask);
                var assemblyPath = Path.Combine(assemblyFolder, GetFileName(assemblyTask.AssemblyLocation));

                Environment.CurrentDirectory = assemblyFolder;

                // If we just pass null for the config file, the AppDomain will load {assembly}.config if it exists,
                // or use the config file of this app domain, which will usually be JetBrains.ReSharper.TaskRunner.*.exe.config.
                // If we specify the name directly, it will just use it, or have no configuration, with no fallback.
                // This is good because it stops the TaskRunner.exe config leaking into your tests. For example, that
                // file redirects all ReSharper assemblies to the current version. When the default AppDomain loads our
                // code, the assemblies are successfully redirected, and we use the latest version. If the new AppDomain
                // uses the same redirects, and the test assembly references resharper assemblies (e.g. xunitcontrib tests!)
                // the redirects are applied, but the new AppDomain can't find the newer assemblies, and throws
                var configFile = assemblyPath + ".config";

                using (var executorWrapper = new ExecutorWrapper(assemblyPath, configFile, configuration.ShadowCopy))
                {
                    SetTempFolderPath(executorWrapper);

                    var run = new XunitTestRun(server, executorWrapper, taskProvider);
                    run.RunTests();
                }
            }
            finally
            {
                Environment.CurrentDirectory = priorCurrentDirectory;
            }
        }
        public void TwoTasksWithSameAssemblyLocationReturnTrueForEquals()
        {
            const string assemblyLocation = "C:\\assembly.dll";

            var task1 = new XunitTestAssemblyTask(assemblyLocation);
            var task2 = new XunitTestAssemblyTask(assemblyLocation);

            Assert.NotSame(task1, task2);
            Assert.Equal(task1, task2);
        }
Exemplo n.º 4
0
        public void TwoTasksWithSameAssemblyLocationReturnTrueForEquals()
        {
            const string assemblyLocation = "C:\\assembly.dll";

            var task1 = new XunitTestAssemblyTask(assemblyLocation);
            var task2 = new XunitTestAssemblyTask(assemblyLocation);

            Assert.NotSame(task1, task2);
            Assert.Equal(task1, task2);
        }
        public void TwoTasksWithDifferentAssemblyLocationsReturnsDifferentHashCodes()
        {
            const string assemblyLocation1 = "C:\\assembly1.dll";
            const string assemblyLocation2 = "C:\\assembly2.dll";

            var task1 = new XunitTestAssemblyTask(assemblyLocation1);
            var task2 = new XunitTestAssemblyTask(assemblyLocation2);

            Assert.NotSame(task1, task2);
            Assert.NotEqual(task1.GetHashCode(), task2.GetHashCode());
        }
Exemplo n.º 6
0
        public void TwoTasksWithDifferentAssemblyLocationsReturnsDifferentHashCodes()
        {
            const string assemblyLocation1 = "C:\\assembly1.dll";
            const string assemblyLocation2 = "C:\\assembly2.dll";

            var task1 = new XunitTestAssemblyTask(assemblyLocation1);
            var task2 = new XunitTestAssemblyTask(assemblyLocation2);

            Assert.NotSame(task1, task2);
            Assert.NotEqual(task1.GetHashCode(), task2.GetHashCode());
        }
        public void TwoDeserialisedTaskInstanceHaveSameHashCodes()
        {
            const string assemblyLocation = "C:\\assembly.dll";

            var task1 = new XunitTestAssemblyTask(assemblyLocation);

            var xmlDocument = new XmlDocument();
            var xmlElement = xmlDocument.CreateElement("root");
            xmlDocument.AppendChild(xmlElement);
            task1.SaveXml(xmlDocument.DocumentElement);

            var task2 = new XunitTestAssemblyTask(xmlDocument.DocumentElement);

            Assert.NotSame(task1, task2);
            Assert.Equal(task1.GetHashCode(), task2.GetHashCode());
        }
        public void CanSerialiseToAndFromXml()
        {
            const string assemblyLocation = "C:\\assembly.dll";

            var task1 = new XunitTestAssemblyTask(assemblyLocation);

            var xmlDocument = new XmlDocument();
            var xmlElement = xmlDocument.CreateElement("root");
            xmlDocument.AppendChild(xmlElement);
            task1.SaveXml(xmlDocument.DocumentElement);

            var task2 = new XunitTestAssemblyTask(xmlDocument.DocumentElement);

            Assert.NotSame(task1, task2);
            Assert.Equal(task1, task2);
        }
Exemplo n.º 9
0
        public void TwoDeserialisedTaskInstanceHaveSameHashCodes()
        {
            const string assemblyLocation = "C:\\assembly.dll";

            var task1 = new XunitTestAssemblyTask(assemblyLocation);

            var xmlDocument = new XmlDocument();
            var xmlElement  = xmlDocument.CreateElement("root");

            xmlDocument.AppendChild(xmlElement);
            task1.SaveXml(xmlDocument.DocumentElement);

            var task2 = new XunitTestAssemblyTask(xmlDocument.DocumentElement);

            Assert.NotSame(task1, task2);
            Assert.Equal(task1.GetHashCode(), task2.GetHashCode());
        }
Exemplo n.º 10
0
        public void CanSerialiseToAndFromXml()
        {
            const string assemblyLocation = "C:\\assembly.dll";

            var task1 = new XunitTestAssemblyTask(assemblyLocation);

            var xmlDocument = new XmlDocument();
            var xmlElement  = xmlDocument.CreateElement("root");

            xmlDocument.AppendChild(xmlElement);
            task1.SaveXml(xmlDocument.DocumentElement);

            var task2 = new XunitTestAssemblyTask(xmlDocument.DocumentElement);

            Assert.NotSame(task1, task2);
            Assert.Equal(task1, task2);
        }
Exemplo n.º 11
0
        public TestEnvironment(XunitTestAssemblyTask assemblyTask, bool disableAllConcurrency)
        {
            // Use the assembly in the folder that the user has specified, or, if not, use the assembly location
            var assemblyFolder = GetAssemblyFolder(ResharperConfiguration, assemblyTask);
            AssemblyPath = Path.Combine(assemblyFolder, Path.GetFileName(assemblyTask.AssemblyLocation));
            ConfigPath = GetConfigFile(AssemblyPath);

            Logger.LogVerbose("Setting current directory to {0}", assemblyFolder);

            Environment.CurrentDirectory = assemblyFolder;

            // Tell ReSharper about the shadow copy path, so it can clean up after abort. Xunit (1+2) will try and
            // clean up at the end of the run
            ShadowCopyPath = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString());

            // The hosts require disabling concurrency (e.g. code coverage, continuous testing, dotMemoryUnit)
            DisableAllConcurrency = disableAllConcurrency;

            TestAssemblyConfiguration = GetXunitConfiguration(AssemblyPath, ConfigPath);
            MergeConfiguration();
            DiagnosticMessages = new DiagnosticMessages(TestAssemblyConfiguration.DiagnosticMessagesOrDefault);
        }
Exemplo n.º 12
0
 private static string GetAssemblyFolder(TaskExecutorConfiguration config, XunitTestAssemblyTask assemblyTask)
 {
     return string.IsNullOrEmpty(config.AssemblyFolder)
         ? Path.GetDirectoryName(assemblyTask.AssemblyLocation)
         : config.AssemblyFolder;
 }
Exemplo n.º 13
0
        private void ReportException(XunitTestAssemblyTask assemblyTask, TestEnvironment environment, Exception e)
        {
            Logger.LogException(e);

            var description = "Exception: " + e;
            if (environment.DiagnosticMessages != null && environment.DiagnosticMessages.HasMessages)
            {
                description = string.Format("{0}{1}{1}Diagnostic Messages:{1}{2}", description,
                    Environment.NewLine, environment.DiagnosticMessages.Messages);
            }
            server.ShowNotification("Unable to run xUnit.net tests - " + e.Message, description);

            // This doesn't help - assemblyTask doesn't map to anything in the tree...
            server.TaskException(assemblyTask, new[] {new TaskException(e)});
        }