use import="Json" use import="Environment" default NO_PARALLEL_TEST_PROJECTS='${E("NO_PARALLEL_TEST_PROJECTS")}' default KOREBUILD_TEST_DNXCORE='${E("KOREBUILD_TEST_DNXCORE")}' @{/* dotnet-test Run unit tests in your project. projectFile='' Required. Path to the test project.json to execute */} @{ var projectText = File.ReadAllText(projectFile); var project = (JsonObject)Json.Deserialize(projectText); var commands = project.ValueAsJsonObject("commands"); if (commands != null && commands.Keys.Contains("test")) { var projectFolder = Path.GetDirectoryName(projectFile); var projectName = Path.GetFileName(projectFolder); var noParallelTestProjects = new HashSet(StringComparer.OrdinalIgnoreCase); if (!string.IsNullOrEmpty(NO_PARALLEL_TEST_PROJECTS)) { noParallelTestProjects.UnionWith(NO_PARALLEL_TEST_PROJECTS.Split((char)',')); } var configs = project.ValueAsJsonObject("frameworks"); IEnumerable targetFrameworks; if (configs == null) { // Assume dnx451 only if none specified targetFrameworks = new[] { "dnx451" }; } else { targetFrameworks = configs.Keys; } // Currently only dnx* targets are supported. See aspnet/Universe#53 targetFrameworks = targetFrameworks.Where(k => k.StartsWith("dnx", StringComparison.OrdinalIgnoreCase)); foreach (var framework in targetFrameworks) { var testArgs = noParallelTestProjects.Contains(projectName) ? " -parallel none" : ""; Console.WriteLine("!!! Tests skipped for " + projectName); if (!framework.StartsWith("dnxcore", StringComparison.OrdinalIgnoreCase)) { if (IsLinux) { // Work around issue with testing in parallel on Mono. testArgs = " -parallel none"; } // Dotnet("test" + testArgs, projectFolder); } else if (!IsLinux || !string.IsNullOrEmpty(KOREBUILD_TEST_DNXCORE)) { // Dotnet("test" + testArgs, projectFolder, "default -runtime coreclr"); } } } }