Build xunit wrappers the same way on windows and unix (dotnet/coreclr#18695)
authorSven Boemer <sbomer@gmail.com>
Thu, 19 Jul 2018 20:44:16 +0000 (13:44 -0700)
committerGitHub <noreply@github.com>
Thu, 19 Jul 2018 20:44:16 +0000 (13:44 -0700)
commit57323096ebe5f104e14c063adf96f0816c7eec70
tree535e7ae7532fadeeaee35ef582128af5ecb3fa05
parenta82451bc8dcff8aae2febd00a57cd4bc6f5db3df
Build xunit wrappers the same way on windows and unix (dotnet/coreclr#18695)

* Initial change to allow build wrappers and runtest.py

* Build xunit wrappers on unix

The generated wrapper needs to target netcoreapp on unix. I had to
exclude assets from the xunit package and introduce a dependency on
the private corefx bits, to resolve a dependency conflict in which the
generated wrapper was depending on an older System.Runtime.dll than
the helper library.

I also disabled binclash logging, because the wrapper build binplaces
the helper library to the same location multiple times. I couldn't
find a simple way to disable binclash logging for the wrapper build
only, since that requires passing an empty switch to run.exe, and bash
word splitting makes this nontrivial from build-test.

* Correctly generate TestEnv xplat

Note that this will still require changes to the test wrapper
to actually source the TestEnv on unix

* Build xunit wrappers using SDK

* Target netcoreapp2.0 in xunit wrappers

This way, the wrappers can build even if the 2.1 SDK isn't installed on
the machine.

* Restore to packages directory for xunit wrappers

* Move common properties out to dir.common.props

When building wrappers using the SDK, we need some basic
properties (like the build os/arch/config, and the output directories)
to be set. I factored out properties used by both the old test build
and the new SDK-project test build.

At first I tried using Directory.Build.props (which is automatically
imported by the SDK), but our test build already imports SDK targets
in various places, so this was resulting in duplicate
imports. Instead, I used dir.common.props, and made the imports
explicit.

* Remove desktop-specific test wrapper csproj

* Pass build os/arch/type and logsdir to msbuild from runtest.py

* Remove xunit wrapper helper library from traversal build

* Fix parameter passing in build-test.sh

Use bash arrays to pass parameters for the build command. This makes
it possible to pass arguments with spaces to build_Tests_internal. We
use this to disable binclashlogging selectively (for the xunit wrapper
build only).

* Clean up factored .props files

* Undo runtest.sh changes

* Use latest xunit console runner everywhere

* Remove extra StaticDependency on xunit.runner.console

* Eliminate tests/src/dir.common.props, and rename dir.sdkbuild.props

tests/src/dir.common.props was only used for the desktop-specific
xunit wrapper helper library. There's no need for it any more, so its
properties have been moved into tests/src/dir.props.

dir.sdkbuild.props has been renamed to dir.common.props, since it
contains properties used by SDK projects and buildtools projects.

This change also re-enables the test build.

* Reintroduce dir.sdkbuild.props as a place for SDK-only props

With this, some properties shared by SDK projects can go in a global
location. The TargetFramework is shared by all SDK projects in the
test tree.

This change also uses a property for the xunit package directory that
contains the xunit.console.dll we copy to core_root.

* Add xml namespace to dir.common.props

This fixes a failure in the windows build.

* Satisfy xunit analyzer

* Satisfy xunit analyzer again

* Use SDK msbuild to build wrappers

On windows, the use of run.exe, config.json, and msbuild.cmd uses
msbuild.exe on the path. This change will build wrappers using the
local SDK via "dotnet msbuild", bypassing run.exe. Run.exe will go
away entirely with the move from buildtools to arcade, so other build
invocatios should follow suit.

* Remove Microsoft.CSharp.Core.targets workaround

UseBuildTools used to be true all the time. Now that we are building
wrappers on core, UseBuildTools becomes false. However, the rest of
the runtest.proj expects to build using buildtools, so we keep
UseBuildTools true until we switch to arcade.

The CSharpCoreTargetsPath was imported when running on core only. This
used to happen only on unix, but now it also happens when building
runtest.proj for the xunit wrappers on windows. On unix, this targets
file was a symlink to itself to work around some buildtools logic that
expected the file to exist. This workaround no longer appears
necessary, and on windows, this was never used in the first place, so
this change removes it.

* Remove UseRoslynCompilers prop and unify roslyn import

UseRoslynCompilers was introduced in buildtools by
https://github.com/dotnet/buildtools/pull/947, with different
behaviors on windows/unix. It was removed by
https://github.com/dotnet/buildtools/pull/1974, so we can unify our
roslyn imports now.

* Don't copy xunit dlls to corefx test host

The corefx tests run on specific versions of xunit dlls, defined in
CoreFX.depproj. We want to use these versions in the test host, not
those in CORE_ROOT, so exclude these from being copied to the test host
directory. This fixes the failing corefx tests.

* Don't pass run.exe arguments through build-test.cmd in test pipeline

These arguments get passed along to the xunit wrapper build as
unprocessed build args. They need to work for "dotnet msbuild" (used
for the wrapper build) as well as for run.exe.

* Fix parameter passing of priority arg in build-test.cmd

UnprocessedBuildArgs should contain arguments in the format expected by
msbuild, not by run.exe.

* Fix parameter passing of unprocessed args in build-test.cmd

The "--" syntax is used by run.exe to pass everything following to
msbuild directly. It should not be a part of unprocessed args.

* Pass TargetsWindowsArg to wrapper build in build-test.cmd

Helix builds tests on windows and runs them on unix using the xunit
wrappers. When cross-building the wrappers like this, TargetsWindows
is set to false by the test build pipeline. This variable ensures that
the wrapper uses correct directory separators when invoking the test
.sh file.

* Pass BuildTestsAgainstPackages arg to exclude unix tests

Helix builds xunit wrappers on windows, and runs them on unix. The
BuildTestsAgainstPackages should currently be set to true in the
windows wrapper build to properly filter the .cmd files based on
exclusions in issues.targets.

Commit migrated from https://github.com/dotnet/coreclr/commit/f5f9a3456abcfdea5d886fededaa0265c80281ed
31 files changed:
src/coreclr/build-test.cmd
src/coreclr/build-test.sh
src/coreclr/buildpipeline/tests/Dotnet-CoreClr-Trusted-BuildTests.json
src/coreclr/dependencies.props
src/coreclr/dir.common.props [new file with mode: 0644]
src/coreclr/dir.props
src/coreclr/run.sh
src/coreclr/tests/build.proj
src/coreclr/tests/dir.common.props [new file with mode: 0644]
src/coreclr/tests/dir.props
src/coreclr/tests/dir.sdkbuild.props [new file with mode: 0644]
src/coreclr/tests/helixprep.proj
src/coreclr/tests/override.targets
src/coreclr/tests/runtest.proj
src/coreclr/tests/runtest.py [new file with mode: 0755]
src/coreclr/tests/scripts/scripts.csproj
src/coreclr/tests/src/Common/Coreclr.TestWrapper/Coreclr.TestWrapper.csproj
src/coreclr/tests/src/Common/Desktop.Coreclr.TestWrapper/Desktop.Coreclr.TestWrapper.csproj [deleted file]
src/coreclr/tests/src/Common/external/external.depproj
src/coreclr/tests/src/JIT/Performance/CodeQuality/Layout/SearchLoops.cs
src/coreclr/tests/src/JIT/Performance/CodeQuality/SIMD/SeekUnroll/SeekUnroll.cs
src/coreclr/tests/src/JIT/config/benchmark+roslyn/benchmark+roslyn.csproj
src/coreclr/tests/src/JIT/config/benchmark+serialize/benchmark+serialize.csproj
src/coreclr/tests/src/JIT/config/benchmark/benchmark.csproj
src/coreclr/tests/src/TestWrappersConfig/TestWrappersConfig.csproj [deleted file]
src/coreclr/tests/src/dir.common.props [deleted file]
src/coreclr/tests/src/dir.props
src/coreclr/tests/src/dirs.proj
src/coreclr/tests/src/performance/performance.csproj
src/coreclr/tests/tests.targets
src/coreclr/tests/xunitwrapper.targets [deleted file]