static ExtendedXunitProject GetProjectFile(List <Tuple <string, string> > assemblies) { var result = new ExtendedXunitProject(); foreach (var assembly in assemblies) { result.Add(new XunitProjectAssembly { AssemblyFilename = Path.GetFullPath(assembly.Item1), ConfigFilename = assembly.Item2 != null ? Path.GetFullPath(assembly.Item2) : null, }); } return(result); }
public static List <Action <XElement> > GetXmlTransformers(ExtendedXunitProject project) { return(project.Output.Select(output => new Action <XElement>(xml => instance.availableTransforms[output.Key].OutputHandler(xml, output.Value))).ToList()); }
static int RunProject(string defaultDirectory, ExtendedXunitProject project, bool teamcity, bool appVeyor, bool showProgress, bool?parallelizeAssemblies, bool?parallelizeTestCollections, int?maxThreadCount) { XElement assembliesElement = null; var xmlTransformers = TransformFactory.GetXmlTransformers(project); var needsXml = xmlTransformers.Count > 0; var consoleLock = new object(); if (!parallelizeAssemblies.HasValue) { parallelizeAssemblies = project.All(assembly => assembly.Configuration.ParallelizeAssembly ?? false); } if (needsXml) { assembliesElement = new XElement("assemblies"); } var originalWorkingFolder = Directory.GetCurrentDirectory(); using (AssemblyHelper.SubscribeResolve()) { var clockTime = Stopwatch.StartNew(); if (parallelizeAssemblies.GetValueOrDefault()) { var tasks = project.Assemblies.Select(assembly => Task.Run(() => ExecuteAssembly(consoleLock, defaultDirectory, assembly, needsXml, teamcity, appVeyor, showProgress, parallelizeTestCollections, maxThreadCount, project.Filters))); var results = Task.WhenAll(tasks).GetAwaiter().GetResult(); foreach (var assemblyElement in results.Where(result => result != null)) { assembliesElement.Add(assemblyElement); } } else { foreach (var assembly in project.Assemblies) { var assemblyElement = ExecuteAssembly(consoleLock, defaultDirectory, assembly, needsXml, teamcity, appVeyor, showProgress, parallelizeTestCollections, maxThreadCount, project.Filters); if (assemblyElement != null) { assembliesElement.Add(assemblyElement); } } } clockTime.Stop(); if (completionMessages.Count > 0) { Console.ForegroundColor = ConsoleColor.White; Console.WriteLine(); Console.WriteLine("=== TEST EXECUTION SUMMARY ==="); Console.ForegroundColor = ConsoleColor.Gray; var totalTestsRun = completionMessages.Values.Sum(summary => summary.Total); var totalTestsFailed = completionMessages.Values.Sum(summary => summary.Failed); var totalTestsSkipped = completionMessages.Values.Sum(summary => summary.Skipped); var totalTime = completionMessages.Values.Sum(summary => summary.Time).ToString("0.000s"); var totalErrors = completionMessages.Values.Sum(summary => summary.Errors); var longestAssemblyName = completionMessages.Keys.Max(key => key.Length); var longestTotal = totalTestsRun.ToString().Length; var longestFailed = totalTestsFailed.ToString().Length; var longestSkipped = totalTestsSkipped.ToString().Length; var longestTime = totalTime.Length; var longestErrors = totalErrors.ToString().Length; foreach (var message in completionMessages.OrderBy(m => m.Key)) { Console.WriteLine(" {0} Total: {1}, Errors: {2}, Failed: {3}, Skipped: {4}, Time: {5}", message.Key.PadRight(longestAssemblyName), message.Value.Total.ToString().PadLeft(longestTotal), message.Value.Errors.ToString().PadLeft(longestErrors), message.Value.Failed.ToString().PadLeft(longestFailed), message.Value.Skipped.ToString().PadLeft(longestSkipped), message.Value.Time.ToString("0.000s").PadLeft(longestTime)); } if (completionMessages.Count > 1) { Console.WriteLine(" {0} {1} {2} {3} {4} {5}" + Environment.NewLine + " {6} {7} {8} {9} {10} {11} ({12})", " ".PadRight(longestAssemblyName), "-".PadRight(longestTotal, '-'), "-".PadRight(longestErrors, '-'), "-".PadRight(longestFailed, '-'), "-".PadRight(longestSkipped, '-'), "-".PadRight(longestTime, '-'), "GRAND TOTAL:".PadLeft(longestAssemblyName), totalTestsRun, totalErrors, totalTestsFailed, totalTestsSkipped, totalTime, clockTime.Elapsed.TotalSeconds.ToString("0.000s")); } } } Directory.SetCurrentDirectory(originalWorkingFolder); xmlTransformers.ForEach(transformer => transformer(assembliesElement)); return(failed ? 1 : completionMessages.Values.Sum(summary => summary.Failed)); }