Run tests on CoreCLR using DNX

This commit is contained in:
Victor Hurdugaci 2015-12-18 14:52:42 -08:00
parent 76c0f12c06
commit c626a599a7
8 changed files with 3100 additions and 2 deletions

View File

@ -24,6 +24,18 @@ CALL %~dp0dotnet-install.cmd
ECHO Adding %DOTNET_LOCAL_INSTALL_FOLDER% to PATH
SET PATH=%DOTNET_LOCAL_INSTALL_FOLDER%;%PATH%
SET DOTNET_HOME=%DOTNET_LOCAL_INSTALL_FOLDER%
REM ==== Temporary ====
IF "%BUILDCMD_DNX_VERSION%"=="" (
SET BUILDCMD_DNX_VERSION=latest
)
IF "%SKIP_DNX_INSTALL%"=="" (
CALL %KOREBUILD_FOLDER%\build\dnvm install %BUILDCMD_DNX_VERSION% -runtime CoreCLR -arch x86 -alias default
CALL %KOREBUILD_FOLDER%\build\dnvm install default -runtime CLR -arch x86 -alias default
) ELSE (
CALL %KOREBUILD_FOLDER%\build\dnvm use default -runtime CLR -arch x86
)
REM ============================
SET MAKEFILE_PATH=makefile.shade
IF NOT EXIST %MAKEFILE_PATH% (
@ -31,5 +43,6 @@ IF NOT EXIST %MAKEFILE_PATH% (
)
ECHO Using makefile: %MAKEFILE_PATH%
REM Don't use full paths. Sake doesn't support them!
"%~dp0Sake\tools\Sake.exe" -I %KOREBUILD_FOLDER%\build -f %MAKEFILE_PATH% %*

View File

@ -27,10 +27,23 @@ export DOTNET_HOME=DOTNET_INSTALL_DIR
export KOREBUILD_FOLDER=$koreBuildFolder
source $koreBuildFolder/build/dotnet-install.sh
# ==== Temporary ====
if ! type dnvm > /dev/null 2>&1; then
source $koreBuildFolder/build/dnvm.sh
fi
if ! type dnx > /dev/null 2>&1 || [ -z "$SKIP_DNX_INSTALL" ]; then
dnvm install latest -runtime coreclr -alias default
dnvm install default -runtime mono -alias default
else
dnvm use default -runtime mono
fi
# ============
makefilePath=makefile.shade
if test ! -f $makefilePath; then
makefilePath=$koreBuildFolder/build/makefile.shade
fi
echo "Using makefile: ${makefile}"
# Probe for Mono Reference assemblies
if test -z "$DOTNET_REFERENCE_ASSEMBLIES_PATH"; then

View File

@ -0,0 +1,56 @@
use import="Json"
use import="Environment"
default NO_PARALLEL_TEST_PROJECTS='${E("NO_PARALLEL_TEST_PROJECTS")}'
default KOREBUILD_TEST_DNXCORE='${E("KOREBUILD_TEST_DNXCORE")}'
default KOREBUILD_TEST_SKIPMONO='${E("KOREBUILD_TEST_SKIPMONO")}'
@{/*
dnx-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<string>(StringComparer.OrdinalIgnoreCase);
if (!string.IsNullOrEmpty(NO_PARALLEL_TEST_PROJECTS))
{
noParallelTestProjects.UnionWith(NO_PARALLEL_TEST_PROJECTS.Split((char)','));
}
var configs = project.ValueAsJsonObject("frameworks");
IEnumerable<string> targetFrameworks = configs == null?
new string[0]:
configs.Keys.Where(k => k.StartsWith("dnx", StringComparison.OrdinalIgnoreCase));
foreach (var framework in targetFrameworks)
{
var testArgs = noParallelTestProjects.Contains(projectName) ? " -parallel none" : "";
if (framework.StartsWith("dnxcore", StringComparison.OrdinalIgnoreCase))
{
if (IsLinux)
{
// Work around issue with testing in parallel on Mono.
testArgs = " -parallel none";
}
Dnx("test" + testArgs, projectFolder, "default -runtime coreclr");
}
}
}
}

View File

@ -0,0 +1,28 @@
@{/*
dnx
Run dnx commands in your project. Executes `dnx` command.
command=''
The `dnx` subcommand to execute.
dnxDir=''
Optional. The directory in which to execute the `dnx` command.
dnvmUse=''
Optional. The DNX framework to use. Suitable for a `dnvm run` or `dnvm use` command.
*/}
default currentDir = '${Directory.GetCurrentDirectory()}'
default dnxDir = '${ currentDir }'
default dnvmUse=''
var dnvmPath = '${ Path.Combine(Directory.GetCurrentDirectory(), ".build", "KoreBuild-dotnet", "build", "dnvm") }'
exec program='cmd' commandline='/C dnx ${command}' workingdir='${dnxDir}' if='!IsLinux && string.IsNullOrEmpty(dnvmUse)'
var cmdCommand = '/S /C ""${dnvmPath}.cmd" use ${dnvmUse} && dnx ${command}"'
exec program='cmd' commandline='${ cmdCommand }' workingdir='${dnxDir}' if='!IsLinux && !string.IsNullOrEmpty(dnvmUse)'
exec program='dnx' commandline='${command}' workingdir='${dnxDir}' if='IsLinux && string.IsNullOrEmpty(dnvmUse)'
var envCommand = 'bash -c "source \"${dnvmPath}.sh\" && dnvm use ${dnvmUse} && dnx ${command}"'
exec program='/usr/bin/env' commandline='${ envCommand }' workingdir='${dnxDir}' if='IsLinux && !string.IsNullOrEmpty(dnvmUse)'

View File

@ -171,12 +171,14 @@ default NUGET_FEED = 'https://api.nuget.org/v3/index.json'
if (ShouldRunInParallel)
{
Parallel.ForEach(projectFiles, projectFile => XunitTest(projectFile, testParallel: true));
Parallel.ForEach(projectFiles, projectFile => DotnetTest(projectFile, testParallel: true));
//Parallel.ForEach(projectFiles, projectFile => DotnetTest(projectFile, testParallel: true));
Parallel.ForEach(projectFiles, projectFile => DnxTest(projectFile, testParallel: true));
}
else
{
projectFiles.ForEach(projectFile => XunitTest(projectFile, testParallel: false));
projectFiles.ForEach(projectFile => DotnetTest(projectFile, testParallel: false));
//projectFiles.ForEach(projectFile => DotnetTest(projectFile, testParallel: false));
projectFiles.ForEach(projectFile => DnxTest(projectFile, testParallel: false));
}
}
@ -347,4 +349,11 @@ macro name="DotnetTest" projectFile='string' testParallel='bool'
macro name="XunitTest" projectFile='string' testParallel='bool'
xunit-test
macro name='Dnx' command='string' dnxDir='string' dnvmUse='string'
dnx
macro name="DnxTest" projectFile='string' testParallel='bool'
dnx-test

View File

@ -0,0 +1,10 @@
@Echo off
for /f "delims=" %%i in ('PowerShell -NoProfile -NoLogo -ExecutionPolicy unrestricted -Command "[System.IO.Path]::GetTempFileName()"') do set DNVM_CMD_PATH_FILE=%%i.cmd
PowerShell -NoProfile -NoLogo -ExecutionPolicy unrestricted -Command "[System.Threading.Thread]::CurrentThread.CurrentCulture = ''; [System.Threading.Thread]::CurrentThread.CurrentUICulture = '';$CmdPathFile='%DNVM_CMD_PATH_FILE%';& '%~dp0dnvm.ps1' %*"
IF EXIST %DNVM_CMD_PATH_FILE% (
CALL %DNVM_CMD_PATH_FILE%
DEL %DNVM_CMD_PATH_FILE%
)

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff