Compare commits
20 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 41c9282023 | |||
| b7293a15f7 | |||
| 8e6a0ea916 | |||
| 709b166870 | |||
| 2251487778 | |||
| 5e3aa442b8 | |||
| c28059ca4c | |||
| d93c706a3d | |||
| e9dfb23e18 | |||
| f6e8918bef | |||
| 18275067e9 | |||
| 39f89587fc | |||
| 8c3c86d918 | |||
| 761f801e43 | |||
| 643d9061c8 | |||
| 6d4a249a97 | |||
| 5ed3579b30 | |||
| 1f55afd2e9 | |||
| c6c48067a7 | |||
| ab5b3afea2 |
@@ -214,3 +214,4 @@ FakesAssemblies/
|
|||||||
**/*.Server/GeneratedArtifacts
|
**/*.Server/GeneratedArtifacts
|
||||||
**/*.Server/ModelManifest.xml
|
**/*.Server/ModelManifest.xml
|
||||||
_Pvt_Extensions
|
_Pvt_Extensions
|
||||||
|
/Settings.XamlStyle
|
||||||
|
|||||||
@@ -3,4 +3,8 @@ XUnit Gui written in WPF
|
|||||||
|
|
||||||
A simple replacement for the old winforms xunit.gui with support for xunit 2.0.
|
A simple replacement for the old winforms xunit.gui with support for xunit 2.0.
|
||||||
|
|
||||||
|
Find it on NuGet at [xunit.runner.wpf](https://www.nuget.org/packages/xunit.runner.wpf).
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
[](https://ci.appveyor.com/project/Pilchie/xunit-runner-wpf/branch/master)
|
[](https://ci.appveyor.com/project/Pilchie/xunit-runner-wpf/branch/master)
|
||||||
|
|||||||
@@ -1,36 +0,0 @@
|
|||||||
using System.Reflection;
|
|
||||||
using System.Runtime.CompilerServices;
|
|
||||||
using System.Runtime.InteropServices;
|
|
||||||
|
|
||||||
// General Information about an assembly is controlled through the following
|
|
||||||
// set of attributes. Change these attribute values to modify the information
|
|
||||||
// associated with an assembly.
|
|
||||||
[assembly: AssemblyTitle("SampleTestAssembly")]
|
|
||||||
[assembly: AssemblyDescription("")]
|
|
||||||
[assembly: AssemblyConfiguration("")]
|
|
||||||
[assembly: AssemblyCompany("")]
|
|
||||||
[assembly: AssemblyProduct("SampleTestAssembly")]
|
|
||||||
[assembly: AssemblyCopyright("Copyright © 2015")]
|
|
||||||
[assembly: AssemblyTrademark("")]
|
|
||||||
[assembly: AssemblyCulture("")]
|
|
||||||
|
|
||||||
// Setting ComVisible to false makes the types in this assembly not visible
|
|
||||||
// to COM components. If you need to access a type in this assembly from
|
|
||||||
// COM, set the ComVisible attribute to true on that type.
|
|
||||||
[assembly: ComVisible(false)]
|
|
||||||
|
|
||||||
// The following GUID is for the ID of the typelib if this project is exposed to COM
|
|
||||||
[assembly: Guid("bdafb5dd-ffb3-4a94-a312-dfb080010846")]
|
|
||||||
|
|
||||||
// Version information for an assembly consists of the following four values:
|
|
||||||
//
|
|
||||||
// Major Version
|
|
||||||
// Minor Version
|
|
||||||
// Build Number
|
|
||||||
// Revision
|
|
||||||
//
|
|
||||||
// You can specify all the values or you can default the Build and Revision Numbers
|
|
||||||
// by using the '*' as shown below:
|
|
||||||
// [assembly: AssemblyVersion("1.0.*")]
|
|
||||||
[assembly: AssemblyVersion("1.0.0.0")]
|
|
||||||
[assembly: AssemblyFileVersion("1.0.0.0")]
|
|
||||||
@@ -1,82 +1,11 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
|
||||||
<Import Project="..\packages\Microsoft.Net.Compilers.2.2.0\build\Microsoft.Net.Compilers.props" Condition="Exists('..\packages\Microsoft.Net.Compilers.2.2.0\build\Microsoft.Net.Compilers.props')" />
|
|
||||||
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
<TargetFramework>netstandard2.0</TargetFramework>
|
||||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
|
||||||
<ProjectGuid>{BDAFB5DD-FFB3-4A94-A312-DFB080010846}</ProjectGuid>
|
|
||||||
<OutputType>Library</OutputType>
|
|
||||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
|
||||||
<RootNamespace>SampleTestAssembly</RootNamespace>
|
|
||||||
<AssemblyName>SampleTestAssembly</AssemblyName>
|
|
||||||
<TargetFrameworkVersion>v4.5.2</TargetFrameworkVersion>
|
|
||||||
<FileAlignment>512</FileAlignment>
|
|
||||||
<NuGetPackageImportStamp>
|
|
||||||
</NuGetPackageImportStamp>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
|
||||||
<DebugSymbols>true</DebugSymbols>
|
|
||||||
<DebugType>full</DebugType>
|
|
||||||
<Optimize>false</Optimize>
|
|
||||||
<OutputPath>bin\Debug\</OutputPath>
|
|
||||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
|
||||||
<ErrorReport>prompt</ErrorReport>
|
|
||||||
<WarningLevel>4</WarningLevel>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
|
||||||
<DebugType>pdbonly</DebugType>
|
|
||||||
<Optimize>true</Optimize>
|
|
||||||
<OutputPath>bin\Release\</OutputPath>
|
|
||||||
<DefineConstants>TRACE</DefineConstants>
|
|
||||||
<ErrorReport>prompt</ErrorReport>
|
|
||||||
<WarningLevel>4</WarningLevel>
|
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Reference Include="System" />
|
<PackageReference Include="xunit" Version="2.4.1" />
|
||||||
<Reference Include="System.Core" />
|
|
||||||
<Reference Include="System.Xml.Linq" />
|
|
||||||
<Reference Include="System.Data.DataSetExtensions" />
|
|
||||||
<Reference Include="Microsoft.CSharp" />
|
|
||||||
<Reference Include="System.Data" />
|
|
||||||
<Reference Include="System.Net.Http" />
|
|
||||||
<Reference Include="System.Xml" />
|
|
||||||
<Reference Include="xunit.abstractions, Version=2.0.0.0, Culture=neutral, PublicKeyToken=8d05b1bb7a6fdb6c, processorArchitecture=MSIL">
|
|
||||||
<HintPath>..\packages\xunit.abstractions.2.0.0\lib\net35\xunit.abstractions.dll</HintPath>
|
|
||||||
<Private>True</Private>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="xunit.assert, Version=2.1.0.3179, Culture=neutral, PublicKeyToken=8d05b1bb7a6fdb6c, processorArchitecture=MSIL">
|
|
||||||
<HintPath>..\packages\xunit.assert.2.1.0\lib\dotnet\xunit.assert.dll</HintPath>
|
|
||||||
<Private>True</Private>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="xunit.core, Version=2.1.0.3179, Culture=neutral, PublicKeyToken=8d05b1bb7a6fdb6c, processorArchitecture=MSIL">
|
|
||||||
<HintPath>..\packages\xunit.extensibility.core.2.1.0\lib\dotnet\xunit.core.dll</HintPath>
|
|
||||||
<Private>True</Private>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="xunit.execution.desktop, Version=2.1.0.3179, Culture=neutral, PublicKeyToken=8d05b1bb7a6fdb6c, processorArchitecture=MSIL">
|
|
||||||
<HintPath>..\packages\xunit.extensibility.execution.2.1.0\lib\net45\xunit.execution.desktop.dll</HintPath>
|
|
||||||
<Private>True</Private>
|
|
||||||
</Reference>
|
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
|
||||||
<Compile Include="Class1.cs" />
|
|
||||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<None Include="packages.config" />
|
|
||||||
</ItemGroup>
|
|
||||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
|
||||||
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
|
||||||
<PropertyGroup>
|
|
||||||
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
|
|
||||||
</PropertyGroup>
|
|
||||||
<Error Condition="!Exists('..\packages\Microsoft.Net.Compilers.2.2.0\build\Microsoft.Net.Compilers.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.Net.Compilers.2.2.0\build\Microsoft.Net.Compilers.props'))" />
|
|
||||||
</Target>
|
|
||||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
|
||||||
Other similar extension points exist, see Microsoft.Common.targets.
|
|
||||||
<Target Name="BeforeBuild">
|
|
||||||
</Target>
|
|
||||||
<Target Name="AfterBuild">
|
|
||||||
</Target>
|
|
||||||
-->
|
|
||||||
</Project>
|
</Project>
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<packages>
|
|
||||||
<package id="Microsoft.Net.Compilers" version="2.2.0" targetFramework="net452" developmentDependency="true" />
|
|
||||||
<package id="xunit" version="2.1.0" targetFramework="net452" />
|
|
||||||
<package id="xunit.abstractions" version="2.0.0" targetFramework="net452" />
|
|
||||||
<package id="xunit.assert" version="2.1.0" targetFramework="net452" />
|
|
||||||
<package id="xunit.core" version="2.1.0" targetFramework="net452" />
|
|
||||||
<package id="xunit.extensibility.core" version="2.1.0" targetFramework="net452" />
|
|
||||||
<package id="xunit.extensibility.execution" version="2.1.0" targetFramework="net452" />
|
|
||||||
</packages>
|
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 127 KiB |
@@ -1,35 +0,0 @@
|
|||||||
using System.Reflection;
|
|
||||||
using System.Runtime.InteropServices;
|
|
||||||
|
|
||||||
// General Information about an assembly is controlled through the following
|
|
||||||
// set of attributes. Change these attribute values to modify the information
|
|
||||||
// associated with an assembly.
|
|
||||||
[assembly: AssemblyTitle("xunit.runner.data")]
|
|
||||||
[assembly: AssemblyDescription("")]
|
|
||||||
[assembly: AssemblyConfiguration("")]
|
|
||||||
[assembly: AssemblyCompany("")]
|
|
||||||
[assembly: AssemblyProduct("xunit.runner.data")]
|
|
||||||
[assembly: AssemblyCopyright("Copyright © 2015")]
|
|
||||||
[assembly: AssemblyTrademark("")]
|
|
||||||
[assembly: AssemblyCulture("")]
|
|
||||||
|
|
||||||
// Setting ComVisible to false makes the types in this assembly not visible
|
|
||||||
// to COM components. If you need to access a type in this assembly from
|
|
||||||
// COM, set the ComVisible attribute to true on that type.
|
|
||||||
[assembly: ComVisible(false)]
|
|
||||||
|
|
||||||
// The following GUID is for the ID of the typelib if this project is exposed to COM
|
|
||||||
[assembly: Guid("a1f579f4-443e-4f64-bc55-998ab86ff293")]
|
|
||||||
|
|
||||||
// Version information for an assembly consists of the following four values:
|
|
||||||
//
|
|
||||||
// Major Version
|
|
||||||
// Minor Version
|
|
||||||
// Build Number
|
|
||||||
// Revision
|
|
||||||
//
|
|
||||||
// You can specify all the values or you can default the Build and Revision Numbers
|
|
||||||
// by using the '*' as shown below:
|
|
||||||
// [assembly: AssemblyVersion("1.0.*")]
|
|
||||||
[assembly: AssemblyVersion("1.0.0.0")]
|
|
||||||
[assembly: AssemblyFileVersion("1.0.0.0")]
|
|
||||||
@@ -10,6 +10,7 @@ namespace Xunit.Runner.Data
|
|||||||
{
|
{
|
||||||
All = 0,
|
All = 0,
|
||||||
NotRun,
|
NotRun,
|
||||||
|
Running,
|
||||||
Passed,
|
Passed,
|
||||||
Skipped,
|
Skipped,
|
||||||
Failed,
|
Failed,
|
||||||
|
|||||||
@@ -1,64 +1,8 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
|
||||||
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
|
||||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
|
||||||
<ProjectGuid>{A1F579F4-443E-4F64-BC55-998AB86FF293}</ProjectGuid>
|
|
||||||
<OutputType>Library</OutputType>
|
|
||||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
|
||||||
<RootNamespace>Xunit.Runner.Data</RootNamespace>
|
<RootNamespace>Xunit.Runner.Data</RootNamespace>
|
||||||
<AssemblyName>xunit.runner.data</AssemblyName>
|
<TargetFramework>netstandard2.0</TargetFramework>
|
||||||
<TargetFrameworkVersion>v4.5.2</TargetFrameworkVersion>
|
|
||||||
<FileAlignment>512</FileAlignment>
|
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
|
||||||
<DebugSymbols>true</DebugSymbols>
|
|
||||||
<DebugType>full</DebugType>
|
|
||||||
<Optimize>false</Optimize>
|
|
||||||
<OutputPath>bin\Debug\</OutputPath>
|
|
||||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
|
||||||
<ErrorReport>prompt</ErrorReport>
|
|
||||||
<WarningLevel>4</WarningLevel>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
|
||||||
<DebugType>pdbonly</DebugType>
|
|
||||||
<Optimize>true</Optimize>
|
|
||||||
<OutputPath>bin\Release\</OutputPath>
|
|
||||||
<DefineConstants>TRACE</DefineConstants>
|
|
||||||
<ErrorReport>prompt</ErrorReport>
|
|
||||||
<WarningLevel>4</WarningLevel>
|
|
||||||
</PropertyGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<Reference Include="System" />
|
|
||||||
<Reference Include="System.Core" />
|
|
||||||
<Reference Include="System.Xml.Linq" />
|
|
||||||
<Reference Include="System.Data.DataSetExtensions" />
|
|
||||||
<Reference Include="Microsoft.CSharp" />
|
|
||||||
<Reference Include="System.Data" />
|
|
||||||
<Reference Include="System.Net.Http" />
|
|
||||||
<Reference Include="System.Xml" />
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<Compile Include="ClientReader.cs" />
|
|
||||||
<Compile Include="ClientWriter.cs" />
|
|
||||||
<Compile Include="Constants.cs" />
|
|
||||||
<Compile Include="TestCaseData.cs" />
|
|
||||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
|
||||||
<Compile Include="TestDataKind.cs" />
|
|
||||||
<Compile Include="TestResultData.cs" />
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<PackageReference Include="Microsoft.Net.Compilers">
|
|
||||||
<Version>2.2.0</Version>
|
|
||||||
</PackageReference>
|
|
||||||
</ItemGroup>
|
|
||||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
|
||||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
|
||||||
Other similar extension points exist, see Microsoft.Common.targets.
|
|
||||||
<Target Name="BeforeBuild">
|
|
||||||
</Target>
|
|
||||||
<Target Name="AfterBuild">
|
|
||||||
</Target>
|
|
||||||
-->
|
|
||||||
</Project>
|
</Project>
|
||||||
@@ -0,0 +1,110 @@
|
|||||||
|
#if NETFRAMEWORK
|
||||||
|
|
||||||
|
// Taken from https://github.com/xunit/xunit/blob/master/src/common/AssemblyResolution/AssemblyHelper_Desktop.cs
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.ComponentModel;
|
||||||
|
using System.IO;
|
||||||
|
using System.Reflection;
|
||||||
|
using Xunit.Abstractions;
|
||||||
|
using Xunit.Sdk;
|
||||||
|
|
||||||
|
namespace Xunit
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// This class provides assistance with assembly resolution for missing assemblies.
|
||||||
|
/// </summary>
|
||||||
|
class AssemblyHelper : LongLivedMarshalByRefObject, IDisposable
|
||||||
|
{
|
||||||
|
static readonly string[] Extensions = { ".dll", ".exe" };
|
||||||
|
|
||||||
|
readonly string directory;
|
||||||
|
readonly IMessageSink internalDiagnosticsMessageSink;
|
||||||
|
readonly Dictionary<string, Assembly> lookupCache = new Dictionary<string, Assembly>();
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Constructs an instance using the given <paramref name="directory"/> for resolution.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="directory">The directory to use for resolving assemblies.</param>
|
||||||
|
public AssemblyHelper(string directory) : this(directory, null) { }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Constructs an instance using the given <paramref name="directory"/> for resolution.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="directory">The directory to use for resolving assemblies.</param>
|
||||||
|
/// <param name="internalDiagnosticsMessageSink">The message sink to send internal diagnostics messages to</param>
|
||||||
|
public AssemblyHelper(string directory, IMessageSink internalDiagnosticsMessageSink)
|
||||||
|
{
|
||||||
|
this.directory = directory;
|
||||||
|
this.internalDiagnosticsMessageSink = internalDiagnosticsMessageSink;
|
||||||
|
|
||||||
|
AppDomain.CurrentDomain.AssemblyResolve += Resolve;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <inheritdoc/>
|
||||||
|
public void Dispose()
|
||||||
|
=> AppDomain.CurrentDomain.AssemblyResolve -= Resolve;
|
||||||
|
|
||||||
|
Assembly LoadAssembly(AssemblyName assemblyName)
|
||||||
|
{
|
||||||
|
if (lookupCache.TryGetValue(assemblyName.Name, out var result))
|
||||||
|
return result;
|
||||||
|
|
||||||
|
var path = Path.Combine(directory, assemblyName.Name);
|
||||||
|
result = ResolveAndLoadAssembly(path, out var resolvedAssemblyPath);
|
||||||
|
|
||||||
|
if (internalDiagnosticsMessageSink != null)
|
||||||
|
{
|
||||||
|
if (result == null)
|
||||||
|
internalDiagnosticsMessageSink.OnMessage(new DiagnosticMessage($"[AssemblyHelper_Desktop.LoadAssembly] Resolution for '{assemblyName.Name}' failed, passed down to next resolver"));
|
||||||
|
else
|
||||||
|
internalDiagnosticsMessageSink.OnMessage(new DiagnosticMessage($"[AssemblyHelper_Desktop.LoadAssembly] Resolved '{assemblyName.Name}' to '{resolvedAssemblyPath}'"));
|
||||||
|
}
|
||||||
|
|
||||||
|
lookupCache[assemblyName.Name] = result;
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
Assembly Resolve(object sender, ResolveEventArgs args)
|
||||||
|
=> LoadAssembly(new AssemblyName(args.Name));
|
||||||
|
|
||||||
|
Assembly ResolveAndLoadAssembly(string pathWithoutExtension, out string resolvedAssemblyPath)
|
||||||
|
{
|
||||||
|
foreach (var extension in Extensions)
|
||||||
|
{
|
||||||
|
resolvedAssemblyPath = pathWithoutExtension + extension;
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (File.Exists(resolvedAssemblyPath))
|
||||||
|
return Assembly.LoadFrom(resolvedAssemblyPath);
|
||||||
|
}
|
||||||
|
catch { }
|
||||||
|
}
|
||||||
|
|
||||||
|
resolvedAssemblyPath = null;
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Subscribes to the appropriate assembly resolution event, to provide automatic assembly resolution for
|
||||||
|
/// an assembly and any of its dependencies. Depending on the target platform, this may include the use
|
||||||
|
/// of the .deps.json file generated during the build process.
|
||||||
|
/// </summary>
|
||||||
|
/// <returns>An object which, when disposed, un-subscribes.</returns>
|
||||||
|
public static IDisposable SubscribeResolveForAssembly(string assemblyFileName, IMessageSink internalDiagnosticsMessageSink = null)
|
||||||
|
=> new AssemblyHelper(Path.GetDirectoryName(Path.GetFullPath(assemblyFileName)), internalDiagnosticsMessageSink);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Subscribes to the appropriate assembly resolution event, to provide automatic assembly resolution for
|
||||||
|
/// an assembly and any of its dependencies. Depending on the target platform, this may include the use
|
||||||
|
/// of the .deps.json file generated during the build process.
|
||||||
|
/// </summary>
|
||||||
|
/// <returns>An object which, when disposed, un-subscribes.</returns>
|
||||||
|
public static IDisposable SubscribeResolveForAssembly(Type typeInAssembly, IMessageSink internalDiagnosticsMessageSink = null)
|
||||||
|
=> new AssemblyHelper(Path.GetDirectoryName(typeInAssembly.Assembly.Location), internalDiagnosticsMessageSink);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -35,7 +35,7 @@ namespace Xunit.Runner.Worker
|
|||||||
|
|
||||||
internal static void Go(string assemblyFileName, Stream stream)
|
internal static void Go(string assemblyFileName, Stream stream)
|
||||||
{
|
{
|
||||||
Go(assemblyFileName, stream, AppDomainSupport.Denied,
|
Go(assemblyFileName, stream, AppDomainSupport.IfAvailable,
|
||||||
(xunit, configuration, writer) =>
|
(xunit, configuration, writer) =>
|
||||||
{
|
{
|
||||||
using (var sink = new TestDiscoverySink(writer))
|
using (var sink = new TestDiscoverySink(writer))
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
using System;
|
using System;
|
||||||
using Xunit.Abstractions;
|
using Xunit.Abstractions;
|
||||||
|
using Xunit.Sdk;
|
||||||
|
|
||||||
namespace Xunit.Runner.Worker.MessageSinks
|
namespace Xunit.Runner.Worker.MessageSinks
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -19,6 +19,12 @@ namespace Xunit.Runner.Worker.MessageSinks
|
|||||||
|
|
||||||
protected override bool OnMessage(IMessageSinkMessage message)
|
protected override bool OnMessage(IMessageSinkMessage message)
|
||||||
{
|
{
|
||||||
|
var testStarted = message as ITestStarting;
|
||||||
|
if (testStarted != null)
|
||||||
|
{
|
||||||
|
OnTestStarted(testStarted);
|
||||||
|
}
|
||||||
|
|
||||||
var testFailed = message as ITestFailed;
|
var testFailed = message as ITestFailed;
|
||||||
if (testFailed != null)
|
if (testFailed != null)
|
||||||
{
|
{
|
||||||
@@ -47,6 +53,7 @@ namespace Xunit.Runner.Worker.MessageSinks
|
|||||||
|
|
||||||
protected virtual bool ShouldContinue => true;
|
protected virtual bool ShouldContinue => true;
|
||||||
|
|
||||||
|
protected abstract void OnTestStarted(ITestStarting testStarted);
|
||||||
protected abstract void OnTestFailed(ITestFailed testFailed);
|
protected abstract void OnTestFailed(ITestFailed testFailed);
|
||||||
protected abstract void OnTestPassed(ITestPassed testPassed);
|
protected abstract void OnTestPassed(ITestPassed testPassed);
|
||||||
protected abstract void OnTestSkipped(ITestSkipped testSkipped);
|
protected abstract void OnTestSkipped(ITestSkipped testSkipped);
|
||||||
|
|||||||
@@ -1,35 +0,0 @@
|
|||||||
using System.Reflection;
|
|
||||||
using System.Runtime.InteropServices;
|
|
||||||
|
|
||||||
// General Information about an assembly is controlled through the following
|
|
||||||
// set of attributes. Change these attribute values to modify the information
|
|
||||||
// associated with an assembly.
|
|
||||||
[assembly: AssemblyTitle("xunit.runner.worker")]
|
|
||||||
[assembly: AssemblyDescription("")]
|
|
||||||
[assembly: AssemblyConfiguration("")]
|
|
||||||
[assembly: AssemblyCompany("")]
|
|
||||||
[assembly: AssemblyProduct("xunit.runner.worker")]
|
|
||||||
[assembly: AssemblyCopyright("Copyright © 2015")]
|
|
||||||
[assembly: AssemblyTrademark("")]
|
|
||||||
[assembly: AssemblyCulture("")]
|
|
||||||
|
|
||||||
// Setting ComVisible to false makes the types in this assembly not visible
|
|
||||||
// to COM components. If you need to access a type in this assembly from
|
|
||||||
// COM, set the ComVisible attribute to true on that type.
|
|
||||||
[assembly: ComVisible(false)]
|
|
||||||
|
|
||||||
// The following GUID is for the ID of the typelib if this project is exposed to COM
|
|
||||||
[assembly: Guid("9df97a2b-0eb5-4b12-9f81-69dfac979814")]
|
|
||||||
|
|
||||||
// Version information for an assembly consists of the following four values:
|
|
||||||
//
|
|
||||||
// Major Version
|
|
||||||
// Minor Version
|
|
||||||
// Build Number
|
|
||||||
// Revision
|
|
||||||
//
|
|
||||||
// You can specify all the values or you can default the Build and Revision Numbers
|
|
||||||
// by using the '*' as shown below:
|
|
||||||
// [assembly: AssemblyVersion("1.0.*")]
|
|
||||||
[assembly: AssemblyVersion("1.0.0.0")]
|
|
||||||
[assembly: AssemblyFileVersion("1.0.0.0")]
|
|
||||||
@@ -23,13 +23,18 @@ namespace Xunit.Runner.Worker
|
|||||||
|
|
||||||
private void Process(string displayName, string uniqueID, TestState state, string output = "")
|
private void Process(string displayName, string uniqueID, TestState state, string output = "")
|
||||||
{
|
{
|
||||||
Console.WriteLine($"{state} - {displayName}");
|
System.Diagnostics.Trace.WriteLine($"{state} - {displayName}");
|
||||||
var result = new TestResultData(displayName, uniqueID, state, output);
|
var result = new TestResultData(displayName, uniqueID, state, output);
|
||||||
|
|
||||||
_writer.Write(TestDataKind.Value);
|
_writer.Write(TestDataKind.Value);
|
||||||
_writer.Write(result);
|
_writer.Write(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected override void OnTestStarted(ITestStarting testStarted)
|
||||||
|
{
|
||||||
|
Process(testStarted.TestCase.DisplayName, testStarted.TestCase.UniqueID, TestState.Running);
|
||||||
|
}
|
||||||
|
|
||||||
protected override void OnTestFailed(ITestFailed testFailed)
|
protected override void OnTestFailed(ITestFailed testFailed)
|
||||||
{
|
{
|
||||||
var displayName = testFailed.TestCase.DisplayName;
|
var displayName = testFailed.TestCase.DisplayName;
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ namespace Xunit.Runner.Worker
|
|||||||
protected static void Go(string assemblyFileName, Stream stream, AppDomainSupport appDomainSupport,
|
protected static void Go(string assemblyFileName, Stream stream, AppDomainSupport appDomainSupport,
|
||||||
Action<XunitFrontController, TestAssemblyConfiguration, ClientWriter> action)
|
Action<XunitFrontController, TestAssemblyConfiguration, ClientWriter> action)
|
||||||
{
|
{
|
||||||
using (AssemblyHelper.SubscribeResolve())
|
using (AssemblyHelper.SubscribeResolveForAssembly(assemblyFileName))
|
||||||
using (var xunit = new XunitFrontController(appDomainSupport, assemblyFileName, shadowCopy: false))
|
using (var xunit = new XunitFrontController(appDomainSupport, assemblyFileName, shadowCopy: false))
|
||||||
using (var writer = new ClientWriter(stream))
|
using (var writer = new ClientWriter(stream))
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,6 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<packages>
|
|
||||||
<package id="Microsoft.Net.Compilers" version="2.2.0" targetFramework="net46" developmentDependency="true" />
|
|
||||||
<package id="xunit.abstractions" version="2.0.0" targetFramework="net452" />
|
|
||||||
<package id="xunit.runner.utility" version="2.1.0" targetFramework="net46" />
|
|
||||||
</packages>
|
|
||||||
@@ -1,93 +1,14 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
|
||||||
<Import Project="..\packages\Microsoft.Net.Compilers.2.2.0\build\Microsoft.Net.Compilers.props" Condition="Exists('..\packages\Microsoft.Net.Compilers.2.2.0\build\Microsoft.Net.Compilers.props')" />
|
|
||||||
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
|
||||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
|
||||||
<ProjectGuid>{9DF97A2B-0EB5-4B12-9F81-69DFAC979814}</ProjectGuid>
|
|
||||||
<OutputType>Exe</OutputType>
|
<OutputType>Exe</OutputType>
|
||||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
|
||||||
<RootNamespace>Xunit.Runner.Worker</RootNamespace>
|
<RootNamespace>Xunit.Runner.Worker</RootNamespace>
|
||||||
<AssemblyName>xunit.runner.worker</AssemblyName>
|
<TargetFramework>net472</TargetFramework>
|
||||||
<TargetFrameworkVersion>v4.6</TargetFrameworkVersion>
|
|
||||||
<FileAlignment>512</FileAlignment>
|
|
||||||
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
|
|
||||||
<TargetFrameworkProfile />
|
|
||||||
<NuGetPackageImportStamp>
|
|
||||||
</NuGetPackageImportStamp>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
|
||||||
<PlatformTarget>AnyCPU</PlatformTarget>
|
|
||||||
<DebugSymbols>true</DebugSymbols>
|
|
||||||
<DebugType>full</DebugType>
|
|
||||||
<Optimize>false</Optimize>
|
|
||||||
<OutputPath>bin\Debug\</OutputPath>
|
|
||||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
|
||||||
<ErrorReport>prompt</ErrorReport>
|
|
||||||
<WarningLevel>4</WarningLevel>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
|
||||||
<PlatformTarget>AnyCPU</PlatformTarget>
|
|
||||||
<DebugType>pdbonly</DebugType>
|
|
||||||
<Optimize>true</Optimize>
|
|
||||||
<OutputPath>bin\Release\</OutputPath>
|
|
||||||
<DefineConstants>TRACE</DefineConstants>
|
|
||||||
<ErrorReport>prompt</ErrorReport>
|
|
||||||
<WarningLevel>4</WarningLevel>
|
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Reference Include="System" />
|
<PackageReference Include="xunit.runner.utility" Version="2.4.1" />
|
||||||
<Reference Include="System.Core" />
|
<ProjectReference Include="..\xunit.runner.data\xunit.runner.data.csproj" />
|
||||||
<Reference Include="System.Xml.Linq" />
|
|
||||||
<Reference Include="System.Data.DataSetExtensions" />
|
|
||||||
<Reference Include="Microsoft.CSharp" />
|
|
||||||
<Reference Include="System.Data" />
|
|
||||||
<Reference Include="System.Net.Http" />
|
|
||||||
<Reference Include="System.Xml" />
|
|
||||||
<Reference Include="xunit.abstractions">
|
|
||||||
<HintPath>..\packages\xunit.abstractions.2.0.0\lib\net35\xunit.abstractions.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="xunit.runner.utility.desktop, Version=2.1.0.3179, Culture=neutral, PublicKeyToken=8d05b1bb7a6fdb6c, processorArchitecture=MSIL">
|
|
||||||
<HintPath>..\packages\xunit.runner.utility.2.1.0\lib\net35\xunit.runner.utility.desktop.dll</HintPath>
|
|
||||||
<Private>True</Private>
|
|
||||||
</Reference>
|
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
|
||||||
<Compile Include="Connection.cs" />
|
|
||||||
<Compile Include="DiscoverUtil.cs" />
|
|
||||||
<Compile Include="Listener.cs" />
|
|
||||||
<Compile Include="MessageSinks\BaseMessageSink.cs" />
|
|
||||||
<Compile Include="MessageSinks\BaseTestRunSink.cs" />
|
|
||||||
<Compile Include="MessageSinks\DiagnosticSink.cs" />
|
|
||||||
<Compile Include="Program.cs" />
|
|
||||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
|
||||||
<Compile Include="RunUtil.cs" />
|
|
||||||
<Compile Include="MessageSinks\BaseTestDiscoverySink.cs" />
|
|
||||||
<Compile Include="XunitUtil.cs" />
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<None Include="App.config" />
|
|
||||||
<None Include="packages.config" />
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<ProjectReference Include="..\xunit.runner.data\xunit.runner.data.csproj">
|
|
||||||
<Project>{a1f579f4-443e-4f64-bc55-998ab86ff293}</Project>
|
|
||||||
<Name>xunit.runner.data</Name>
|
|
||||||
</ProjectReference>
|
|
||||||
</ItemGroup>
|
|
||||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
|
||||||
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
|
||||||
<PropertyGroup>
|
|
||||||
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
|
|
||||||
</PropertyGroup>
|
|
||||||
<Error Condition="!Exists('..\packages\Microsoft.Net.Compilers.2.2.0\build\Microsoft.Net.Compilers.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.Net.Compilers.2.2.0\build\Microsoft.Net.Compilers.props'))" />
|
|
||||||
</Target>
|
|
||||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
|
||||||
Other similar extension points exist, see Microsoft.Common.targets.
|
|
||||||
<Target Name="BeforeBuild">
|
|
||||||
</Target>
|
|
||||||
<Target Name="AfterBuild">
|
|
||||||
</Target>
|
|
||||||
-->
|
|
||||||
</Project>
|
</Project>
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<configuration>
|
|
||||||
<startup>
|
|
||||||
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6"/>
|
|
||||||
</startup>
|
|
||||||
</configuration>
|
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 659 B |
Binary file not shown.
|
After Width: | Height: | Size: 402 B |
@@ -9,6 +9,7 @@ namespace Xunit.Runner.Wpf.Converters
|
|||||||
{
|
{
|
||||||
public class TestStateConverter : IValueConverter
|
public class TestStateConverter : IValueConverter
|
||||||
{
|
{
|
||||||
|
private static ImageSource runningSource;
|
||||||
private static ImageSource failedSource;
|
private static ImageSource failedSource;
|
||||||
private static ImageSource passedSource;
|
private static ImageSource passedSource;
|
||||||
private static ImageSource skippedSource;
|
private static ImageSource skippedSource;
|
||||||
@@ -17,6 +18,7 @@ namespace Xunit.Runner.Wpf.Converters
|
|||||||
|
|
||||||
static TestStateConverter()
|
static TestStateConverter()
|
||||||
{
|
{
|
||||||
|
runningSource = LoadResourceImage("Running_small.png");
|
||||||
failedSource = LoadResourceImage("Failed_small.png");
|
failedSource = LoadResourceImage("Failed_small.png");
|
||||||
passedSource = LoadResourceImage("Passed_small.png");
|
passedSource = LoadResourceImage("Passed_small.png");
|
||||||
skippedSource = LoadResourceImage("Skipped_small.png");
|
skippedSource = LoadResourceImage("Skipped_small.png");
|
||||||
@@ -38,6 +40,8 @@ namespace Xunit.Runner.Wpf.Converters
|
|||||||
{
|
{
|
||||||
switch (state)
|
switch (state)
|
||||||
{
|
{
|
||||||
|
case TestState.Running:
|
||||||
|
return Brushes.Blue;
|
||||||
case TestState.Failed:
|
case TestState.Failed:
|
||||||
return Brushes.Red;
|
return Brushes.Red;
|
||||||
case TestState.Passed:
|
case TestState.Passed:
|
||||||
@@ -52,6 +56,8 @@ namespace Xunit.Runner.Wpf.Converters
|
|||||||
{
|
{
|
||||||
switch (state)
|
switch (state)
|
||||||
{
|
{
|
||||||
|
case TestState.Running:
|
||||||
|
return runningSource;
|
||||||
case TestState.Failed:
|
case TestState.Failed:
|
||||||
return failedSource;
|
return failedSource;
|
||||||
case TestState.Passed:
|
case TestState.Passed:
|
||||||
|
|||||||
@@ -84,6 +84,8 @@ namespace Xunit.Runner.Wpf.Impl
|
|||||||
processStartInfo.FileName = typeof(Xunit.Runner.Worker.Program).Assembly.Location;
|
processStartInfo.FileName = typeof(Xunit.Runner.Worker.Program).Assembly.Location;
|
||||||
processStartInfo.Arguments = $"{pipeName} {Process.GetCurrentProcess().Id}";
|
processStartInfo.Arguments = $"{pipeName} {Process.GetCurrentProcess().Id}";
|
||||||
processStartInfo.WindowStyle = ProcessWindowStyle.Hidden;
|
processStartInfo.WindowStyle = ProcessWindowStyle.Hidden;
|
||||||
|
processStartInfo.UseShellExecute = false;
|
||||||
|
processStartInfo.CreateNoWindow = true;
|
||||||
var process = Process.Start(processStartInfo);
|
var process = Process.Start(processStartInfo);
|
||||||
return new ProcessInfo(pipeName, process);
|
return new ProcessInfo(pipeName, process);
|
||||||
}
|
}
|
||||||
|
|||||||
+198
-151
@@ -1,24 +1,25 @@
|
|||||||
<Window x:Class="Xunit.Runner.Wpf.MainWindow"
|
<Window
|
||||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
x:Class="Xunit.Runner.Wpf.MainWindow"
|
||||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
xmlns:cmd="clr-namespace:GalaSoft.MvvmLight.Command;assembly=GalaSoft.MvvmLight.Platform"
|
||||||
xmlns:local="clr-namespace:Xunit.Runner.Wpf"
|
xmlns:converters="clr-namespace:Xunit.Runner.Wpf.Converters"
|
||||||
xmlns:converters="clr-namespace:Xunit.Runner.Wpf.Converters"
|
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||||
xmlns:vm="clr-namespace:Xunit.Runner.Wpf.ViewModel"
|
xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
|
||||||
xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
|
xmlns:local="clr-namespace:Xunit.Runner.Wpf"
|
||||||
xmlns:cmd="clr-namespace:GalaSoft.MvvmLight.Command;assembly=GalaSoft.MvvmLight.Platform"
|
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||||
xmlns:sys="clr-namespace:System;assembly=mscorlib"
|
xmlns:sys="clr-namespace:System;assembly=mscorlib"
|
||||||
mc:Ignorable="d"
|
xmlns:vm="clr-namespace:Xunit.Runner.Wpf.ViewModel"
|
||||||
DataContext="{Binding Main, Source={StaticResource Locator}}"
|
Name="Main"
|
||||||
Title="xUnit.net Test Runner"
|
Title="xUnit.net Test Runner"
|
||||||
Icon="Artwork\Application.ico"
|
Width="525"
|
||||||
ResizeMode="CanResizeWithGrip"
|
Height="600"
|
||||||
Height="600"
|
MinWidth="425"
|
||||||
MinHeight="525"
|
MinHeight="525"
|
||||||
Width="525"
|
DataContext="{Binding Main, Source={StaticResource Locator}}"
|
||||||
MinWidth="425"
|
Icon="Artwork\Application.ico"
|
||||||
Name="Main">
|
ResizeMode="CanResizeWithGrip"
|
||||||
|
mc:Ignorable="d">
|
||||||
|
|
||||||
<i:Interaction.Triggers>
|
<i:Interaction.Triggers>
|
||||||
<i:EventTrigger EventName="Loaded">
|
<i:EventTrigger EventName="Loaded">
|
||||||
@@ -43,12 +44,10 @@
|
|||||||
|
|
||||||
<Menu Grid.Row="0">
|
<Menu Grid.Row="0">
|
||||||
<MenuItem Header="_File">
|
<MenuItem Header="_File">
|
||||||
<MenuItem Header="E_xit"
|
<MenuItem Command="{Binding ExitCommand}" Header="E_xit" />
|
||||||
Command="{Binding ExitCommand}" />
|
|
||||||
</MenuItem>
|
</MenuItem>
|
||||||
<MenuItem Header="_Assembly">
|
<MenuItem Header="_Assembly">
|
||||||
<MenuItem Header="_Open"
|
<MenuItem Command="ApplicationCommands.Open" Header="_Open" />
|
||||||
Command="ApplicationCommands.Open" />
|
|
||||||
<MenuItem Header="R_ecent" ItemsSource="{Binding RecentAssemblies}">
|
<MenuItem Header="R_ecent" ItemsSource="{Binding RecentAssemblies}">
|
||||||
<MenuItem.ItemContainerStyle>
|
<MenuItem.ItemContainerStyle>
|
||||||
<Style TargetType="MenuItem">
|
<Style TargetType="MenuItem">
|
||||||
@@ -59,10 +58,14 @@
|
|||||||
</MenuItem.ItemContainerStyle>
|
</MenuItem.ItemContainerStyle>
|
||||||
</MenuItem>
|
</MenuItem>
|
||||||
<Separator />
|
<Separator />
|
||||||
<MenuItem Header="_Unload" Command="{Binding AssemblyRemoveAllCommand}"/>
|
<MenuItem Command="{Binding AssemblyRemoveAllCommand}" Header="_Unload" />
|
||||||
<MenuItem Header="_Reload" Command="{Binding AssemblyReloadAllCommand}" />
|
<MenuItem Command="{Binding AssemblyReloadAllCommand}" Header="_Reload" />
|
||||||
<Separator />
|
<Separator />
|
||||||
<MenuItem Header="_Auto Reload Test Assemblies" IsCheckable="True" IsChecked="{Binding AutoReloadAssemblies}" Command="{Binding AutoReloadAssembliesCommand}" />
|
<MenuItem
|
||||||
|
Command="{Binding AutoReloadAssembliesCommand}"
|
||||||
|
Header="_Auto Reload Test Assemblies"
|
||||||
|
IsCheckable="True"
|
||||||
|
IsChecked="{Binding AutoReloadAssemblies}" />
|
||||||
</MenuItem>
|
</MenuItem>
|
||||||
<MenuItem Header="_Project">
|
<MenuItem Header="_Project">
|
||||||
<MenuItem Header="_Open" />
|
<MenuItem Header="_Open" />
|
||||||
@@ -86,10 +89,11 @@
|
|||||||
<RowDefinition Height="auto" />
|
<RowDefinition Height="auto" />
|
||||||
</Grid.RowDefinitions>
|
</Grid.RowDefinitions>
|
||||||
|
|
||||||
<GroupBox Header="Refinements"
|
<GroupBox
|
||||||
Margin="3"
|
Grid.Row="0"
|
||||||
Grid.Column="0"
|
Grid.Column="0"
|
||||||
Grid.Row="0">
|
Margin="3"
|
||||||
|
Header="Refinements">
|
||||||
<Grid>
|
<Grid>
|
||||||
<Grid.RowDefinitions>
|
<Grid.RowDefinitions>
|
||||||
<RowDefinition Height="auto" />
|
<RowDefinition Height="auto" />
|
||||||
@@ -100,25 +104,24 @@
|
|||||||
<RowDefinition Height="*" />
|
<RowDefinition Height="*" />
|
||||||
</Grid.RowDefinitions>
|
</Grid.RowDefinitions>
|
||||||
|
|
||||||
<Label Content="Search:"
|
<Label Grid.Row="0" Content="Search:" />
|
||||||
Grid.Row="0" />
|
<TextBox Grid.Row="1" Text="{Binding FilterString, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
|
||||||
<TextBox Grid.Row="1"
|
|
||||||
Text="{Binding FilterString, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
|
|
||||||
|
|
||||||
<Label Content="Assemblies:"
|
<Label Grid.Row="2" Content="Assemblies:" />
|
||||||
Grid.Row="2" />
|
<ListBox
|
||||||
<ListBox Height="175"
|
Grid.Row="3"
|
||||||
ItemsSource="{Binding Assemblies}"
|
Height="175"
|
||||||
SelectionMode="Extended"
|
ItemsSource="{Binding Assemblies}"
|
||||||
Grid.Row="3">
|
SelectionMode="Extended">
|
||||||
<ListBox.ItemTemplate>
|
<ListBox.ItemTemplate>
|
||||||
<DataTemplate DataType="vm:TestAssemblyViewModel">
|
<DataTemplate DataType="vm:TestAssemblyViewModel">
|
||||||
<StackPanel Orientation="Horizontal">
|
<StackPanel Orientation="Horizontal">
|
||||||
<TextBlock Text="{Binding DisplayName}" />
|
<TextBlock Text="{Binding DisplayName}" />
|
||||||
|
|
||||||
<TextBlock Text=" Discovering tests..."
|
<TextBlock
|
||||||
FontStyle="Italic"
|
FontStyle="Italic"
|
||||||
Foreground="Gray">
|
Foreground="Gray"
|
||||||
|
Text=" Discovering tests...">
|
||||||
|
|
||||||
<TextBlock.Style>
|
<TextBlock.Style>
|
||||||
<Style TargetType="TextBlock">
|
<Style TargetType="TextBlock">
|
||||||
@@ -138,41 +141,36 @@
|
|||||||
|
|
||||||
<ListBox.ItemContainerStyle>
|
<ListBox.ItemContainerStyle>
|
||||||
<Style TargetType="{x:Type ListBoxItem}">
|
<Style TargetType="{x:Type ListBoxItem}">
|
||||||
<Setter Property="IsSelected" Value="{Binding Mode=TwoWay, Path=IsSelected}"/>
|
<Setter Property="IsSelected" Value="{Binding Mode=TwoWay, Path=IsSelected}" />
|
||||||
</Style>
|
</Style>
|
||||||
</ListBox.ItemContainerStyle>
|
</ListBox.ItemContainerStyle>
|
||||||
|
|
||||||
<ListBox.ContextMenu>
|
<ListBox.ContextMenu>
|
||||||
<ContextMenu>
|
<ContextMenu>
|
||||||
<MenuItem Header="Reload" Command="{Binding AssemblyReloadCommand}" />
|
<MenuItem Command="{Binding AssemblyReloadCommand}" Header="Reload" />
|
||||||
<MenuItem Header="Reload All" Command="{Binding AssemblyReloadAllCommand}" />
|
<MenuItem Command="{Binding AssemblyReloadAllCommand}" Header="Reload All" />
|
||||||
<Separator />
|
<Separator />
|
||||||
<MenuItem Header="Remove" Command="{Binding AssemblyRemoveCommand}" />
|
<MenuItem Command="{Binding AssemblyRemoveCommand}" Header="Remove" />
|
||||||
<MenuItem Header="Remove All" Command="{Binding AssemblyRemoveAllCommand}" />
|
<MenuItem Command="{Binding AssemblyRemoveAllCommand}" Header="Remove All" />
|
||||||
</ContextMenu>
|
</ContextMenu>
|
||||||
</ListBox.ContextMenu>
|
</ListBox.ContextMenu>
|
||||||
</ListBox>
|
</ListBox>
|
||||||
|
|
||||||
<Label Content="Traits:"
|
<Label Grid.Row="4" Content="Traits:" />
|
||||||
Grid.Row="4" />
|
|
||||||
|
|
||||||
<TreeView Grid.Row="5"
|
<TreeView Grid.Row="5" ItemsSource="{Binding Traits}">
|
||||||
ItemsSource="{Binding Traits}">
|
|
||||||
|
|
||||||
<TreeView.Resources>
|
<TreeView.Resources>
|
||||||
<HierarchicalDataTemplate DataType="{x:Type vm:TraitViewModel}"
|
<HierarchicalDataTemplate DataType="{x:Type vm:TraitViewModel}" ItemsSource="{Binding Children}">
|
||||||
ItemsSource="{Binding Children}">
|
|
||||||
|
|
||||||
<CheckBox IsChecked="{Binding IsChecked}" Content="{Binding Text}" >
|
<CheckBox Content="{Binding Text}" IsChecked="{Binding IsChecked}">
|
||||||
<i:Interaction.Triggers>
|
<i:Interaction.Triggers>
|
||||||
<i:EventTrigger EventName="Checked">
|
<i:EventTrigger EventName="Checked">
|
||||||
<cmd:EventToCommand Command="{Binding DataContext.TraitCheckedChangedCommand, RelativeSource={RelativeSource AncestorType=Window}}"
|
<cmd:EventToCommand Command="{Binding DataContext.TraitCheckedChangedCommand, RelativeSource={RelativeSource AncestorType=Window}}" CommandParameter="{Binding}" />
|
||||||
CommandParameter="{Binding}" />
|
|
||||||
</i:EventTrigger>
|
</i:EventTrigger>
|
||||||
|
|
||||||
<i:EventTrigger EventName="Unchecked">
|
<i:EventTrigger EventName="Unchecked">
|
||||||
<cmd:EventToCommand Command="{Binding DataContext.TraitCheckedChangedCommand, RelativeSource={RelativeSource AncestorType=Window}}"
|
<cmd:EventToCommand Command="{Binding DataContext.TraitCheckedChangedCommand, RelativeSource={RelativeSource AncestorType=Window}}" CommandParameter="{Binding}" />
|
||||||
CommandParameter="{Binding}" />
|
|
||||||
</i:EventTrigger>
|
</i:EventTrigger>
|
||||||
</i:Interaction.Triggers>
|
</i:Interaction.Triggers>
|
||||||
</CheckBox>
|
</CheckBox>
|
||||||
@@ -188,7 +186,7 @@
|
|||||||
|
|
||||||
<TreeView.ContextMenu>
|
<TreeView.ContextMenu>
|
||||||
<ContextMenu>
|
<ContextMenu>
|
||||||
<MenuItem Header="Clear" Command="{Binding TraitsClearCommand}" />
|
<MenuItem Command="{Binding TraitsClearCommand}" Header="Clear" />
|
||||||
</ContextMenu>
|
</ContextMenu>
|
||||||
</TreeView.ContextMenu>
|
</TreeView.ContextMenu>
|
||||||
|
|
||||||
@@ -196,36 +194,40 @@
|
|||||||
</Grid>
|
</Grid>
|
||||||
</GroupBox>
|
</GroupBox>
|
||||||
|
|
||||||
<Grid Grid.Column="0"
|
<Grid Grid.Row="1" Grid.Column="0">
|
||||||
Grid.Row="1">
|
|
||||||
<Grid.ColumnDefinitions>
|
<Grid.ColumnDefinitions>
|
||||||
<ColumnDefinition Width="*" />
|
<ColumnDefinition Width="*" />
|
||||||
<ColumnDefinition Width="*"/>
|
<ColumnDefinition Width="*" />
|
||||||
<ColumnDefinition Width="*" />
|
<ColumnDefinition Width="*" />
|
||||||
</Grid.ColumnDefinitions>
|
</Grid.ColumnDefinitions>
|
||||||
|
|
||||||
<Button Content="_Run All"
|
<Button
|
||||||
Command="{Binding RunAllCommand}"
|
Grid.Column="0"
|
||||||
Grid.Column="0" Margin="10,0,0,0"/>
|
Margin="10,0,0,0"
|
||||||
<Button Content="Run _Selected"
|
Command="{Binding RunAllCommand}"
|
||||||
Command="{Binding RunSelectedCommand}"
|
Content="_Run All" />
|
||||||
Grid.Column="1"/>
|
<Button
|
||||||
<Button Content="_Cancel"
|
Grid.Column="1"
|
||||||
Command="{Binding CancelCommand}"
|
Command="{Binding RunSelectedCommand}"
|
||||||
Grid.Column="2" Margin="0,0,10,0" />
|
Content="Run _Selected" />
|
||||||
|
<Button
|
||||||
|
Grid.Column="2"
|
||||||
|
Margin="0,0,10,0"
|
||||||
|
Command="{Binding CancelCommand}"
|
||||||
|
Content="_Cancel" />
|
||||||
</Grid>
|
</Grid>
|
||||||
|
|
||||||
<Grid Grid.Column="1"
|
<Grid Grid.Row="0" Grid.Column="1">
|
||||||
Grid.Row="0">
|
|
||||||
<Grid.RowDefinitions>
|
<Grid.RowDefinitions>
|
||||||
<RowDefinition Height="*" MinHeight="200px" />
|
<RowDefinition Height="*" MinHeight="200px" />
|
||||||
<RowDefinition Height="auto" />
|
<RowDefinition Height="auto" />
|
||||||
<RowDefinition Height="*" MinHeight="200px"/>
|
<RowDefinition Height="*" MinHeight="200px" />
|
||||||
</Grid.RowDefinitions>
|
</Grid.RowDefinitions>
|
||||||
|
|
||||||
<GroupBox Header="{Binding TestCasesCaption}"
|
<GroupBox
|
||||||
Margin="3"
|
Grid.Row="0"
|
||||||
Grid.Row="0">
|
Margin="3"
|
||||||
|
Header="{Binding TestCasesCaption}">
|
||||||
<Grid>
|
<Grid>
|
||||||
<Grid.RowDefinitions>
|
<Grid.RowDefinitions>
|
||||||
<RowDefinition Height="auto" />
|
<RowDefinition Height="auto" />
|
||||||
@@ -233,56 +235,82 @@
|
|||||||
</Grid.RowDefinitions>
|
</Grid.RowDefinitions>
|
||||||
|
|
||||||
<StackPanel Orientation="Horizontal">
|
<StackPanel Orientation="Horizontal">
|
||||||
<ToggleButton IsChecked="{Binding FilterPassedTests}"
|
<ToggleButton
|
||||||
BorderThickness="0"
|
Grid.Column="0"
|
||||||
Background="Transparent"
|
Margin="0,4,2,4"
|
||||||
Margin="0,4,2,4"
|
Background="Transparent"
|
||||||
Grid.Column="0"
|
BorderThickness="0"
|
||||||
Command="{Binding TestFilterChanged}">
|
Command="{Binding TestFilterChanged}"
|
||||||
|
IsChecked="{Binding FilterPassedTests}">
|
||||||
<StackPanel Orientation="Horizontal">
|
<StackPanel Orientation="Horizontal">
|
||||||
<Image Source="Artwork\Passed_large.png" />
|
<Image Source="Artwork\Passed_large.png" />
|
||||||
<TextBlock Margin="4,0"
|
<TextBlock
|
||||||
FontSize="16"
|
Margin="4,0"
|
||||||
Text="{Binding TestsPassed, StringFormat={}{0:#\,0}}"
|
VerticalAlignment="Center"
|
||||||
VerticalAlignment="Center" />
|
FontSize="16"
|
||||||
|
Text="{Binding TestsPassed, StringFormat={}{0:#\,0}}" />
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</ToggleButton>
|
</ToggleButton>
|
||||||
|
|
||||||
<ToggleButton IsChecked="{Binding FilterFailedTests}"
|
<ToggleButton
|
||||||
BorderThickness="0"
|
Grid.Column="1"
|
||||||
Background="Transparent"
|
Margin="2,4"
|
||||||
Margin="2,4"
|
Background="Transparent"
|
||||||
Grid.Column="1"
|
BorderThickness="0"
|
||||||
Command="{Binding TestFilterChanged}">
|
Command="{Binding TestFilterChanged}"
|
||||||
|
IsChecked="{Binding FilterFailedTests}">
|
||||||
<StackPanel Orientation="Horizontal">
|
<StackPanel Orientation="Horizontal">
|
||||||
<Image Source="Artwork\Failed_large.png" />
|
<Image Source="Artwork\Failed_large.png" />
|
||||||
<TextBlock Margin="4,0"
|
<TextBlock
|
||||||
FontSize="16"
|
Margin="4,0"
|
||||||
Text="{Binding TestsFailed, StringFormat={}{0:#\,0}}"
|
VerticalAlignment="Center"
|
||||||
VerticalAlignment="Center" />
|
FontSize="16"
|
||||||
|
Text="{Binding TestsFailed, StringFormat={}{0:#\,0}}" />
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</ToggleButton>
|
</ToggleButton>
|
||||||
|
|
||||||
<ToggleButton IsChecked="{Binding FilterSkippedTests}"
|
<ToggleButton
|
||||||
BorderThickness="0"
|
Grid.Column="2"
|
||||||
Background="Transparent"
|
Margin="2,4,0,4"
|
||||||
Margin="2,4,0,4"
|
Background="Transparent"
|
||||||
Grid.Column="2"
|
BorderThickness="0"
|
||||||
Command="{Binding TestFilterChanged}">
|
Command="{Binding TestFilterChanged}"
|
||||||
|
IsChecked="{Binding FilterSkippedTests}">
|
||||||
<StackPanel Orientation="Horizontal">
|
<StackPanel Orientation="Horizontal">
|
||||||
<Image Source="Artwork\Skipped_large.png" />
|
<Image Source="Artwork\Skipped_large.png" />
|
||||||
<TextBlock Margin="4,0"
|
<TextBlock
|
||||||
FontSize="16"
|
Margin="4,0"
|
||||||
Text="{Binding TestsSkipped, StringFormat={}{0:#\,0}}"
|
VerticalAlignment="Center"
|
||||||
VerticalAlignment="Center" />
|
FontSize="16"
|
||||||
|
Text="{Binding TestsSkipped, StringFormat={}{0:#\,0}}" />
|
||||||
|
</StackPanel>
|
||||||
|
</ToggleButton>
|
||||||
|
|
||||||
|
<ToggleButton
|
||||||
|
Grid.Column="2"
|
||||||
|
Margin="2,4,0,4"
|
||||||
|
Background="Transparent"
|
||||||
|
BorderThickness="0"
|
||||||
|
Command="{Binding TestFilterChanged}"
|
||||||
|
IsChecked="{Binding FilterRunningTests}">
|
||||||
|
<StackPanel Orientation="Horizontal">
|
||||||
|
<Image Source="Artwork\Running_large.png" />
|
||||||
|
<TextBlock
|
||||||
|
Margin="4,0"
|
||||||
|
VerticalAlignment="Center"
|
||||||
|
FontSize="16"
|
||||||
|
Text="{Binding TestsRunning, StringFormat={}{0:#\,0}}" />
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</ToggleButton>
|
</ToggleButton>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
|
|
||||||
<ListBox x:Name="TestCases" ItemsSource="{Binding FilteredTestCases}"
|
<ListBox
|
||||||
SelectionMode="Extended"
|
x:Name="TestCases"
|
||||||
SelectedItem="{Binding SelectedTestCase, Mode=TwoWay}"
|
Grid.Row="1"
|
||||||
Grid.Row="1" SelectionChanged="TestCases_SelectionChanged">
|
ItemsSource="{Binding FilteredTestCases}"
|
||||||
|
SelectedItem="{Binding SelectedTestCase, Mode=TwoWay}"
|
||||||
|
SelectionChanged="TestCases_SelectionChanged"
|
||||||
|
SelectionMode="Extended">
|
||||||
<ListBox.ItemTemplate>
|
<ListBox.ItemTemplate>
|
||||||
<DataTemplate DataType="vm:TestCaseViewModel">
|
<DataTemplate DataType="vm:TestCaseViewModel">
|
||||||
<Grid>
|
<Grid>
|
||||||
@@ -291,49 +319,71 @@
|
|||||||
<ColumnDefinition Width="*" />
|
<ColumnDefinition Width="*" />
|
||||||
</Grid.ColumnDefinitions>
|
</Grid.ColumnDefinitions>
|
||||||
|
|
||||||
<Image Width="16"
|
<Image
|
||||||
Margin="0,0,2,0"
|
Grid.Column="0"
|
||||||
Source="{Binding Path=State, Mode=OneWay, Converter={StaticResource TestStateConverter}}"
|
Width="16"
|
||||||
Grid.Column="0" />
|
Margin="0,0,2,0"
|
||||||
|
Source="{Binding Path=State, Mode=OneWay, Converter={StaticResource TestStateConverter}}" />
|
||||||
|
|
||||||
<TextBlock Text="{Binding DisplayName}"
|
<TextBlock
|
||||||
VerticalAlignment="Center"
|
Grid.Column="1"
|
||||||
Grid.Column="1" />
|
VerticalAlignment="Center"
|
||||||
|
Text="{Binding DisplayName}" />
|
||||||
</Grid>
|
</Grid>
|
||||||
</DataTemplate>
|
</DataTemplate>
|
||||||
</ListBox.ItemTemplate>
|
</ListBox.ItemTemplate>
|
||||||
|
<ListBox.InputBindings>
|
||||||
|
<KeyBinding Key="Enter" Command="{Binding RunSelectedCommand}" />
|
||||||
|
</ListBox.InputBindings>
|
||||||
|
<i:Interaction.Triggers>
|
||||||
|
<i:EventTrigger EventName="MouseDoubleClick">
|
||||||
|
<cmd:EventToCommand Command="{Binding Path=RunSelectedCommand}" PassEventArgsToCommand="False" />
|
||||||
|
</i:EventTrigger>
|
||||||
|
</i:Interaction.Triggers>
|
||||||
</ListBox>
|
</ListBox>
|
||||||
</Grid>
|
</Grid>
|
||||||
</GroupBox>
|
</GroupBox>
|
||||||
|
|
||||||
<GridSplitter Grid.Row="1" HorizontalAlignment="Stretch" Height="3" Background="White"/>
|
<GridSplitter
|
||||||
|
Grid.Row="1"
|
||||||
|
Height="3"
|
||||||
|
HorizontalAlignment="Stretch"
|
||||||
|
Background="White" />
|
||||||
|
|
||||||
<GroupBox Header="Output"
|
<GroupBox
|
||||||
Margin="3"
|
Grid.Row="2"
|
||||||
Grid.Row="2">
|
Margin="3"
|
||||||
<TextBox IsReadOnly="True"
|
Header="Output">
|
||||||
HorizontalScrollBarVisibility="Auto"
|
<TextBox
|
||||||
VerticalScrollBarVisibility="Visible"
|
FontFamily="Consolas"
|
||||||
FontFamily="Consolas"
|
HorizontalScrollBarVisibility="Auto"
|
||||||
Text="{Binding Output}"/>
|
IsReadOnly="True"
|
||||||
|
Text="{Binding Output}"
|
||||||
|
VerticalScrollBarVisibility="Visible" />
|
||||||
</GroupBox>
|
</GroupBox>
|
||||||
</Grid>
|
</Grid>
|
||||||
|
|
||||||
<GridSplitter Grid.Column="0" VerticalAlignment="Stretch" Width="3" Background="White"/>
|
<GridSplitter
|
||||||
|
Grid.Column="0"
|
||||||
|
Width="3"
|
||||||
|
VerticalAlignment="Stretch"
|
||||||
|
Background="White" />
|
||||||
|
|
||||||
<ProgressBar Foreground="{Binding Path=CurrentRunState, Converter={StaticResource TestStateConverter}, Mode=OneWay}"
|
<ProgressBar
|
||||||
Minimum="0"
|
Grid.Row="1"
|
||||||
Maximum="{Binding MaximumProgress}"
|
Grid.Column="1"
|
||||||
Value="{Binding Path=TestsCompleted}"
|
Margin="3"
|
||||||
Grid.Column="1"
|
Foreground="{Binding Path=CurrentRunState, Converter={StaticResource TestStateConverter}, Mode=OneWay}"
|
||||||
Grid.Row="1"
|
Maximum="{Binding MaximumProgress}"
|
||||||
Margin="3" />
|
Minimum="0"
|
||||||
|
Value="{Binding Path=TestsCompleted}" />
|
||||||
</Grid>
|
</Grid>
|
||||||
|
|
||||||
<StackPanel Grid.Row="2">
|
<StackPanel Grid.Row="2">
|
||||||
<Border BorderBrush="LightGray"
|
<Border
|
||||||
BorderThickness="1"
|
Margin="3"
|
||||||
Margin="3" />
|
BorderBrush="LightGray"
|
||||||
|
BorderThickness="1" />
|
||||||
<StatusBar>
|
<StatusBar>
|
||||||
<StatusBar.ItemsPanel>
|
<StatusBar.ItemsPanel>
|
||||||
<ItemsPanelTemplate>
|
<ItemsPanelTemplate>
|
||||||
@@ -343,7 +393,7 @@
|
|||||||
<ColumnDefinition Width="auto" />
|
<ColumnDefinition Width="auto" />
|
||||||
<ColumnDefinition Width="auto" />
|
<ColumnDefinition Width="auto" />
|
||||||
<ColumnDefinition Width="auto" />
|
<ColumnDefinition Width="auto" />
|
||||||
<ColumnDefinition Width="16"/>
|
<ColumnDefinition Width="16" />
|
||||||
</Grid.ColumnDefinitions>
|
</Grid.ColumnDefinitions>
|
||||||
</Grid>
|
</Grid>
|
||||||
</ItemsPanelTemplate>
|
</ItemsPanelTemplate>
|
||||||
@@ -351,28 +401,25 @@
|
|||||||
|
|
||||||
<StatusBarItem Grid.Column="1">
|
<StatusBarItem Grid.Column="1">
|
||||||
<StackPanel Orientation="Horizontal">
|
<StackPanel Orientation="Horizontal">
|
||||||
<TextBlock Text="Tests passed: "
|
<TextBlock Foreground="DarkGreen" Text="Tests passed: " />
|
||||||
Foreground="DarkGreen"/>
|
|
||||||
|
|
||||||
<TextBlock Text="{Binding TestsPassed, StringFormat={}{0:#\,0}}"/>
|
<TextBlock Text="{Binding TestsPassed, StringFormat={}{0:#\,0}}" />
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</StatusBarItem>
|
</StatusBarItem>
|
||||||
|
|
||||||
<StatusBarItem Grid.Column="2">
|
<StatusBarItem Grid.Column="2">
|
||||||
<StackPanel Orientation="Horizontal">
|
<StackPanel Orientation="Horizontal">
|
||||||
<TextBlock Text="Tests failed: "
|
<TextBlock Foreground="DarkRed" Text="Tests failed: " />
|
||||||
Foreground="DarkRed"/>
|
|
||||||
|
|
||||||
<TextBlock Text="{Binding TestsFailed, StringFormat={}{0:#\,0}}"/>
|
<TextBlock Text="{Binding TestsFailed, StringFormat={}{0:#\,0}}" />
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</StatusBarItem>
|
</StatusBarItem>
|
||||||
|
|
||||||
<StatusBarItem Grid.Column="3">
|
<StatusBarItem Grid.Column="3">
|
||||||
<StackPanel Orientation="Horizontal">
|
<StackPanel Orientation="Horizontal">
|
||||||
<TextBlock Text="Tests skipped: "
|
<TextBlock Foreground="DarkGoldenrod" Text="Tests skipped: " />
|
||||||
Foreground="DarkGoldenrod"/>
|
|
||||||
|
|
||||||
<TextBlock Text="{Binding TestsSkipped, StringFormat={}{0:#\,0}}"/>
|
<TextBlock Text="{Binding TestsSkipped, StringFormat={}{0:#\,0}}" />
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</StatusBarItem>
|
</StatusBarItem>
|
||||||
</StatusBar>
|
</StatusBar>
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ using Xunit.Runner.Wpf.Persistence;
|
|||||||
|
|
||||||
namespace Xunit.Runner.Wpf
|
namespace Xunit.Runner.Wpf
|
||||||
{
|
{
|
||||||
|
using GalaSoft.MvvmLight.Command;
|
||||||
using ViewModel;
|
using ViewModel;
|
||||||
|
|
||||||
public partial class MainWindow : Window
|
public partial class MainWindow : Window
|
||||||
|
|||||||
@@ -125,6 +125,10 @@ namespace Xunit.Runner.Wpf.Persistence
|
|||||||
|
|
||||||
settings.autoReloadAssemblies = autoReloadAssemblies;
|
settings.autoReloadAssemblies = autoReloadAssemblies;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
settings.autoReloadAssemblies = true;
|
||||||
|
}
|
||||||
|
|
||||||
return settings;
|
return settings;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,25 +1,4 @@
|
|||||||
using System.Reflection;
|
using System.Windows;
|
||||||
using System.Resources;
|
|
||||||
using System.Runtime.CompilerServices;
|
|
||||||
using System.Runtime.InteropServices;
|
|
||||||
using System.Windows;
|
|
||||||
|
|
||||||
// General Information about an assembly is controlled through the following
|
|
||||||
// set of attributes. Change these attribute values to modify the information
|
|
||||||
// associated with an assembly.
|
|
||||||
[assembly: AssemblyTitle("xunit.runner.wpf")]
|
|
||||||
[assembly: AssemblyDescription("")]
|
|
||||||
[assembly: AssemblyConfiguration("")]
|
|
||||||
[assembly: AssemblyCompany("")]
|
|
||||||
[assembly: AssemblyProduct("xunit.runner.wpf")]
|
|
||||||
[assembly: AssemblyCopyright("Copyright © 2015")]
|
|
||||||
[assembly: AssemblyTrademark("")]
|
|
||||||
[assembly: AssemblyCulture("")]
|
|
||||||
|
|
||||||
// Setting ComVisible to false makes the types in this assembly not visible
|
|
||||||
// to COM components. If you need to access a type in this assembly from
|
|
||||||
// COM, set the ComVisible attribute to true on that type.
|
|
||||||
[assembly: ComVisible(false)]
|
|
||||||
|
|
||||||
//In order to begin building localizable applications, set
|
//In order to begin building localizable applications, set
|
||||||
//<UICulture>CultureYouAreCodingWith</UICulture> in your .csproj file
|
//<UICulture>CultureYouAreCodingWith</UICulture> in your .csproj file
|
||||||
@@ -39,17 +18,3 @@ using System.Windows;
|
|||||||
//(used if a resource is not found in the page,
|
//(used if a resource is not found in the page,
|
||||||
// app, or any theme specific resource dictionaries)
|
// app, or any theme specific resource dictionaries)
|
||||||
)]
|
)]
|
||||||
|
|
||||||
|
|
||||||
// Version information for an assembly consists of the following four values:
|
|
||||||
//
|
|
||||||
// Major Version
|
|
||||||
// Minor Version
|
|
||||||
// Build Number
|
|
||||||
// Revision
|
|
||||||
//
|
|
||||||
// You can specify all the values or you can default the Build and Revision Numbers
|
|
||||||
// by using the '*' as shown below:
|
|
||||||
// [assembly: AssemblyVersion("1.0.*")]
|
|
||||||
[assembly: AssemblyVersion("1.0.0.0")]
|
|
||||||
[assembly: AssemblyFileVersion("1.0.0.0")]
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ using System.Windows;
|
|||||||
using System.Windows.Input;
|
using System.Windows.Input;
|
||||||
using System.Windows.Threading;
|
using System.Windows.Threading;
|
||||||
using GalaSoft.MvvmLight;
|
using GalaSoft.MvvmLight;
|
||||||
using GalaSoft.MvvmLight.CommandWpf;
|
using GalaSoft.MvvmLight.Command;
|
||||||
using Microsoft.Win32;
|
using Microsoft.Win32;
|
||||||
using Microsoft.WindowsAPICodePack.Taskbar;
|
using Microsoft.WindowsAPICodePack.Taskbar;
|
||||||
using Xunit.Runner.Data;
|
using Xunit.Runner.Data;
|
||||||
@@ -29,6 +29,8 @@ namespace Xunit.Runner.Wpf.ViewModel
|
|||||||
private readonly HashSet<string> allTestCaseUniqueIDs = new HashSet<string>();
|
private readonly HashSet<string> allTestCaseUniqueIDs = new HashSet<string>();
|
||||||
private readonly ObservableCollection<TestCaseViewModel> allTestCases = new ObservableCollection<TestCaseViewModel>();
|
private readonly ObservableCollection<TestCaseViewModel> allTestCases = new ObservableCollection<TestCaseViewModel>();
|
||||||
private readonly TraitCollectionView traitCollectionView = new TraitCollectionView();
|
private readonly TraitCollectionView traitCollectionView = new TraitCollectionView();
|
||||||
|
private readonly HashSet<string> runningTestSet = new HashSet<string>();
|
||||||
|
|
||||||
private CancellationTokenSource filterCancellationTokenSource = new CancellationTokenSource();
|
private CancellationTokenSource filterCancellationTokenSource = new CancellationTokenSource();
|
||||||
|
|
||||||
private CancellationTokenSource cancellationTokenSource;
|
private CancellationTokenSource cancellationTokenSource;
|
||||||
@@ -52,7 +54,7 @@ namespace Xunit.Runner.Wpf.ViewModel
|
|||||||
|
|
||||||
public ObservableCollection<RecentAssemblyViewModel> RecentAssemblies { get; } = new ObservableCollection<RecentAssemblyViewModel>();
|
public ObservableCollection<RecentAssemblyViewModel> RecentAssemblies { get; } = new ObservableCollection<RecentAssemblyViewModel>();
|
||||||
|
|
||||||
private ImmutableList<TestCaseViewModel> runningTests;
|
private ImmutableList<TestCaseViewModel> testsToRun;
|
||||||
|
|
||||||
public ICommand ExitCommand { get; }
|
public ICommand ExitCommand { get; }
|
||||||
public ICommand WindowLoadedCommand { get; }
|
public ICommand WindowLoadedCommand { get; }
|
||||||
@@ -107,6 +109,7 @@ namespace Xunit.Runner.Wpf.ViewModel
|
|||||||
|
|
||||||
RebuildRecentAssembliesMenu();
|
RebuildRecentAssembliesMenu();
|
||||||
AutoReloadAssemblies = this.settings.GetAutoReloadAssemblies();
|
AutoReloadAssemblies = this.settings.GetAutoReloadAssemblies();
|
||||||
|
UpdateAutoReloadStatus();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void RebuildRecentAssembliesMenu()
|
private void RebuildRecentAssembliesMenu()
|
||||||
@@ -152,10 +155,13 @@ namespace Xunit.Runner.Wpf.ViewModel
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var noFilter = !(searchQuery.FilterFailedTests | searchQuery.FilterPassedTests | searchQuery.FilterSkippedTests);
|
var noFilter = !(searchQuery.FilterRunningTests | searchQuery.FilterFailedTests | searchQuery.FilterPassedTests | searchQuery.FilterSkippedTests);
|
||||||
|
|
||||||
switch (testCase.State)
|
switch (testCase.State)
|
||||||
{
|
{
|
||||||
|
case TestState.Running:
|
||||||
|
return noFilter || searchQuery.FilterRunningTests;
|
||||||
|
|
||||||
case TestState.Passed:
|
case TestState.Passed:
|
||||||
return noFilter || searchQuery.FilterPassedTests;
|
return noFilter || searchQuery.FilterPassedTests;
|
||||||
|
|
||||||
@@ -262,6 +268,13 @@ namespace Xunit.Runner.Wpf.ViewModel
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private int testsRunning = 0;
|
||||||
|
public int TestsRunning
|
||||||
|
{
|
||||||
|
get { return testsRunning; }
|
||||||
|
set { Set(ref testsRunning, value); }
|
||||||
|
}
|
||||||
|
|
||||||
private int testsPassed = 0;
|
private int testsPassed = 0;
|
||||||
public int TestsPassed
|
public int TestsPassed
|
||||||
{
|
{
|
||||||
@@ -559,12 +572,12 @@ namespace Xunit.Runner.Wpf.ViewModel
|
|||||||
|
|
||||||
private async void OnExecuteRunAll()
|
private async void OnExecuteRunAll()
|
||||||
{
|
{
|
||||||
Debug.Assert(this.runningTests == null);
|
Debug.Assert(this.testsToRun == null);
|
||||||
UpdateTestCaseInfo(useSelected: false);
|
UpdateTestCaseInfo(useSelected: false);
|
||||||
|
|
||||||
await ExecuteTestSessionOperation(RunFilteredTests);
|
await ExecuteTestSessionOperation(RunFilteredTests);
|
||||||
|
|
||||||
this.runningTests = null;
|
this.testsToRun = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<Task> RunFilteredTests()
|
private List<Task> RunFilteredTests()
|
||||||
@@ -574,13 +587,13 @@ namespace Xunit.Runner.Wpf.ViewModel
|
|||||||
|
|
||||||
private async void OnExecuteRunSelected()
|
private async void OnExecuteRunSelected()
|
||||||
{
|
{
|
||||||
Debug.Assert(this.runningTests == null);
|
Debug.Assert(this.testsToRun == null);
|
||||||
Debug.Assert(this.SelectedTestCase != null);
|
Debug.Assert(this.SelectedTestCase != null);
|
||||||
UpdateTestCaseInfo(useSelected: true);
|
UpdateTestCaseInfo(useSelected: true);
|
||||||
|
|
||||||
await ExecuteTestSessionOperation(RunSelectedTests);
|
await ExecuteTestSessionOperation(RunSelectedTests);
|
||||||
|
|
||||||
this.runningTests = null;
|
this.testsToRun = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<Task> RunSelectedTests()
|
private List<Task> RunSelectedTests()
|
||||||
@@ -592,37 +605,38 @@ namespace Xunit.Runner.Wpf.ViewModel
|
|||||||
{
|
{
|
||||||
Debug.Assert(this.isBusy);
|
Debug.Assert(this.isBusy);
|
||||||
Debug.Assert(this.cancellationTokenSource != null);
|
Debug.Assert(this.cancellationTokenSource != null);
|
||||||
Debug.Assert(this.runningTests == null);
|
Debug.Assert(this.testsToRun == null);
|
||||||
|
|
||||||
TestsCompleted = 0;
|
TestsCompleted = 0;
|
||||||
|
TestsRunning = 0;
|
||||||
TestsPassed = 0;
|
TestsPassed = 0;
|
||||||
TestsFailed = 0;
|
TestsFailed = 0;
|
||||||
TestsSkipped = 0;
|
TestsSkipped = 0;
|
||||||
CurrentRunState = TestState.NotRun;
|
CurrentRunState = TestState.NotRun;
|
||||||
Output = string.Empty;
|
Output = string.Empty;
|
||||||
|
|
||||||
this.runningTests = tests;
|
this.testsToRun = tests;
|
||||||
|
|
||||||
foreach (var tc in this.runningTests)
|
foreach (var tc in this.testsToRun)
|
||||||
{
|
{
|
||||||
tc.State = TestState.NotRun;
|
tc.State = TestState.NotRun;
|
||||||
}
|
}
|
||||||
|
|
||||||
var runAll = this.runningTests.Count == this.allTestCases.Count;
|
var runAll = this.testsToRun.Count == this.allTestCases.Count;
|
||||||
var testSessionList = new List<Task>();
|
var testSessionList = new List<Task>();
|
||||||
|
|
||||||
foreach (var assemblyFileName in this.runningTests.Select(x => x.AssemblyFileName).Distinct())
|
foreach (var assemblyFileName in this.testsToRun.Select(x => x.AssemblyFileName).Distinct())
|
||||||
{
|
{
|
||||||
Task task;
|
Task task;
|
||||||
if (runAll)
|
if (runAll)
|
||||||
{
|
{
|
||||||
task = this.testUtil.RunAll(assemblyFileName, OnTestsFinished, this.cancellationTokenSource.Token);
|
task = this.testUtil.RunAll(assemblyFileName, OnTestStateChange, this.cancellationTokenSource.Token);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
var builder = ImmutableArray.CreateBuilder<string>();
|
var builder = ImmutableArray.CreateBuilder<string>();
|
||||||
|
|
||||||
foreach (var testCase in this.runningTests)
|
foreach (var testCase in this.testsToRun)
|
||||||
{
|
{
|
||||||
if (testCase.AssemblyFileName == assemblyFileName)
|
if (testCase.AssemblyFileName == assemblyFileName)
|
||||||
{
|
{
|
||||||
@@ -630,7 +644,7 @@ namespace Xunit.Runner.Wpf.ViewModel
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
task = this.testUtil.RunSpecific(assemblyFileName, builder.ToImmutable(), OnTestsFinished, this.cancellationTokenSource.Token);
|
task = this.testUtil.RunSpecific(assemblyFileName, builder.ToImmutable(), OnTestStateChange, this.cancellationTokenSource.Token);
|
||||||
}
|
}
|
||||||
|
|
||||||
testSessionList.Add(task);
|
testSessionList.Add(task);
|
||||||
@@ -710,28 +724,43 @@ namespace Xunit.Runner.Wpf.ViewModel
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnTestsFinished(IEnumerable<TestResultData> testResultData)
|
private void OnTestStateChange(IEnumerable<TestResultData> testResultData)
|
||||||
{
|
{
|
||||||
Debug.Assert(this.runningTests != null);
|
Debug.Assert(this.testsToRun != null);
|
||||||
|
|
||||||
foreach (var result in testResultData)
|
foreach (var result in testResultData)
|
||||||
{
|
{
|
||||||
var testCase = this.runningTests.Single(x => x.UniqueID == result.TestCaseUniqueID);
|
var testCase = this.testsToRun.Single(x => x.UniqueID == result.TestCaseUniqueID);
|
||||||
testCase.State = result.TestState;
|
testCase.State = result.TestState;
|
||||||
|
|
||||||
TestsCompleted++;
|
if (result.TestState == TestState.Running)
|
||||||
switch (result.TestState)
|
|
||||||
{
|
{
|
||||||
case TestState.Passed:
|
if (runningTestSet.Add(result.TestCaseUniqueID))
|
||||||
TestsPassed++;
|
{
|
||||||
break;
|
TestsRunning++;
|
||||||
case TestState.Failed:
|
}
|
||||||
TestsFailed++;
|
}
|
||||||
Output = Output + result.Output;
|
else
|
||||||
break;
|
{
|
||||||
case TestState.Skipped:
|
if (runningTestSet.Remove(result.TestCaseUniqueID))
|
||||||
TestsSkipped++;
|
{
|
||||||
break;
|
TestsRunning--;
|
||||||
|
}
|
||||||
|
|
||||||
|
TestsCompleted++;
|
||||||
|
switch (result.TestState)
|
||||||
|
{
|
||||||
|
case TestState.Passed:
|
||||||
|
TestsPassed++;
|
||||||
|
break;
|
||||||
|
case TestState.Failed:
|
||||||
|
TestsFailed++;
|
||||||
|
Output = Output + result.Output;
|
||||||
|
break;
|
||||||
|
case TestState.Skipped:
|
||||||
|
TestsSkipped++;
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (result.TestState > CurrentRunState)
|
if (result.TestState > CurrentRunState)
|
||||||
@@ -819,6 +848,18 @@ namespace Xunit.Runner.Wpf.ViewModel
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public bool FilterRunningTests
|
||||||
|
{
|
||||||
|
get { return searchQuery.FilterRunningTests; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (Set(ref searchQuery.FilterRunningTests, value))
|
||||||
|
{
|
||||||
|
FilterAfterDelay();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public bool FilterPassedTests
|
public bool FilterPassedTests
|
||||||
{
|
{
|
||||||
get { return searchQuery.FilterPassedTests; }
|
get { return searchQuery.FilterPassedTests; }
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ namespace Xunit.Runner.Wpf.ViewModel
|
|||||||
{
|
{
|
||||||
public class SearchQuery
|
public class SearchQuery
|
||||||
{
|
{
|
||||||
|
public bool FilterRunningTests = false;
|
||||||
public bool FilterFailedTests = false;
|
public bool FilterFailedTests = false;
|
||||||
public bool FilterPassedTests = false;
|
public bool FilterPassedTests = false;
|
||||||
public bool FilterSkippedTests = false;
|
public bool FilterSkippedTests = false;
|
||||||
|
|||||||
@@ -12,8 +12,8 @@
|
|||||||
See http://www.galasoft.ch/mvvm
|
See http://www.galasoft.ch/mvvm
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
using CommonServiceLocator;
|
||||||
using GalaSoft.MvvmLight.Ioc;
|
using GalaSoft.MvvmLight.Ioc;
|
||||||
using Microsoft.Practices.ServiceLocation;
|
|
||||||
|
|
||||||
namespace Xunit.Runner.Wpf.ViewModel
|
namespace Xunit.Runner.Wpf.ViewModel
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,22 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<packages>
|
|
||||||
<package id="CommonServiceLocator" version="1.3" targetFramework="net452" />
|
|
||||||
<package id="Microsoft.Net.Compilers" version="2.2.0" targetFramework="net46" developmentDependency="true" />
|
|
||||||
<package id="MvvmLight" version="5.3.0.0" targetFramework="net46" />
|
|
||||||
<package id="MvvmLightLibs" version="5.3.0.0" targetFramework="net46" />
|
|
||||||
<package id="NuGet.CommandLine" version="2.8.3" targetFramework="net46" />
|
|
||||||
<package id="System.Collections" version="4.3.0" targetFramework="net46" />
|
|
||||||
<package id="System.Collections.Immutable" version="1.4.0-preview1-25305-02" targetFramework="net46" />
|
|
||||||
<package id="System.Diagnostics.Debug" version="4.3.0" targetFramework="net46" />
|
|
||||||
<package id="System.Globalization" version="4.3.0" targetFramework="net46" />
|
|
||||||
<package id="System.Linq" version="4.3.0" targetFramework="net46" />
|
|
||||||
<package id="System.Resources.ResourceManager" version="4.3.0" targetFramework="net46" />
|
|
||||||
<package id="System.Runtime" version="4.3.0" targetFramework="net46" />
|
|
||||||
<package id="System.Runtime.Extensions" version="4.3.0" targetFramework="net46" />
|
|
||||||
<package id="System.Threading" version="4.3.0" targetFramework="net46" />
|
|
||||||
<package id="Tvl.NuGet.BuildTasks" version="1.0.0-alpha002" targetFramework="net46" developmentDependency="true" />
|
|
||||||
<package id="WindowsAPICodePack-Core" version="1.1.2" targetFramework="net46" />
|
|
||||||
<package id="WindowsAPICodePack-Shell" version="1.1.1" targetFramework="net46" />
|
|
||||||
<package id="xunit.abstractions" version="2.0.0" targetFramework="net452" />
|
|
||||||
<package id="xunit.runner.utility" version="2.1.0" targetFramework="net46" />
|
|
||||||
</packages>
|
|
||||||
@@ -1,216 +1,46 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">
|
||||||
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
|
||||||
<Import Project="..\packages\Microsoft.Net.Compilers.2.2.0\build\Microsoft.Net.Compilers.props" Condition="Exists('..\packages\Microsoft.Net.Compilers.2.2.0\build\Microsoft.Net.Compilers.props')" />
|
|
||||||
<Import Project="..\packages\Tvl.NuGet.BuildTasks.1.0.0-alpha002\build\Tvl.NuGet.BuildTasks.props" Condition="Exists('..\packages\Tvl.NuGet.BuildTasks.1.0.0-alpha002\build\Tvl.NuGet.BuildTasks.props')" />
|
|
||||||
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
|
||||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
|
||||||
<ProjectGuid>{34FB519C-FB49-4B31-ACA2-7F7879311BCF}</ProjectGuid>
|
|
||||||
<OutputType>WinExe</OutputType>
|
<OutputType>WinExe</OutputType>
|
||||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
<TargetFramework>netcoreapp3.0</TargetFramework>
|
||||||
|
<UseWpf>true</UseWpf>
|
||||||
<RootNamespace>Xunit.Runner.Wpf</RootNamespace>
|
<RootNamespace>Xunit.Runner.Wpf</RootNamespace>
|
||||||
<AssemblyName>xunit.runner.wpf</AssemblyName>
|
<NoWarn>NU1701;$(NoWarn)</NoWarn>
|
||||||
<TargetFrameworkVersion>v4.6</TargetFrameworkVersion>
|
|
||||||
<FileAlignment>512</FileAlignment>
|
|
||||||
<ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
|
|
||||||
<WarningLevel>4</WarningLevel>
|
|
||||||
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
|
|
||||||
<NuGetPackageImportStamp>
|
|
||||||
</NuGetPackageImportStamp>
|
|
||||||
<TargetFrameworkProfile />
|
|
||||||
<NuPkgVersion Condition="'$(appveyor_build_version)' != ''">$(appveyor_build_version)</NuPkgVersion>
|
|
||||||
<NuPkgVersion Condition="'$(NuPkgVersion)' == ''">1.0.0-local</NuPkgVersion>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
|
||||||
<PlatformTarget>AnyCPU</PlatformTarget>
|
|
||||||
<DebugSymbols>true</DebugSymbols>
|
|
||||||
<DebugType>full</DebugType>
|
|
||||||
<Optimize>false</Optimize>
|
|
||||||
<OutputPath>bin\Debug\</OutputPath>
|
|
||||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
|
||||||
<ErrorReport>prompt</ErrorReport>
|
|
||||||
<WarningLevel>4</WarningLevel>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
|
||||||
<PlatformTarget>AnyCPU</PlatformTarget>
|
|
||||||
<DebugType>pdbonly</DebugType>
|
|
||||||
<Optimize>true</Optimize>
|
|
||||||
<OutputPath>bin\Release\</OutputPath>
|
|
||||||
<DefineConstants>TRACE</DefineConstants>
|
|
||||||
<ErrorReport>prompt</ErrorReport>
|
|
||||||
<WarningLevel>4</WarningLevel>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup>
|
|
||||||
<ApplicationIcon>Artwork\Application.ico</ApplicationIcon>
|
<ApplicationIcon>Artwork\Application.ico</ApplicationIcon>
|
||||||
|
<Authors>Pilchie</Authors>
|
||||||
|
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
|
||||||
|
<PackAsTool>true</PackAsTool>
|
||||||
|
<AssetTargetFallback>net472</AssetTargetFallback>
|
||||||
|
<Description>XUnit Gui written in WPF</Description>
|
||||||
|
<PackageProjectUrl>https://github.com/Pilchie/xunit.runner.wpf</PackageProjectUrl>
|
||||||
|
<RepositoryUrl>https://github.com/Pilchie/xunit.runner.wpf</RepositoryUrl>
|
||||||
|
<PackageTags>XUnit Gui test runner</PackageTags>
|
||||||
|
<NeutralLanguage>en-us</NeutralLanguage>
|
||||||
|
<PackageVersion Condition="'$(appveyor_build_vzersion)' != ''">$(appveyor_build_version)</PackageVersion>
|
||||||
|
<PackageVersion Condition="'$(NuPkgVersion)' == ''">1.0.0-local</PackageVersion>
|
||||||
|
<AssemblyVersion Condition="'$(appveyor_build_version)' != ''">$(appveyor_build_version)</AssemblyVersion>
|
||||||
|
<FileVersion Condition="'$(appveyor_build_version)' != ''">$(appveyor_build_version)</FileVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Reference Include="GalaSoft.MvvmLight, Version=5.3.0.19026, Culture=neutral, PublicKeyToken=e7570ab207bcb616, processorArchitecture=MSIL">
|
<PackageReference Include="CommonServiceLocator" Version="2.0.2" />
|
||||||
<HintPath>..\packages\MvvmLightLibs.5.3.0.0\lib\net45\GalaSoft.MvvmLight.dll</HintPath>
|
<PackageReference Include="Microsoft.Windows.Compatibility" Version="2.1.0-preview.18571.3" />
|
||||||
<Private>True</Private>
|
<PackageReference Include="MvvmLightLibs" Version="5.4.1.1" />
|
||||||
</Reference>
|
<PackageReference Include="System.Collections.Immutable" Version="1.4.0-preview1-25305-02" />
|
||||||
<Reference Include="GalaSoft.MvvmLight.Extras, Version=5.3.0.19032, Culture=neutral, PublicKeyToken=669f0b5e8f868abf, processorArchitecture=MSIL">
|
<PackageReference Include="System.Windows.Interactivity.WPF" Version="2.0.20525" />
|
||||||
<HintPath>..\packages\MvvmLightLibs.5.3.0.0\lib\net45\GalaSoft.MvvmLight.Extras.dll</HintPath>
|
<PackageReference Include="WindowsAPICodePack" Version="1.1.0" />
|
||||||
<Private>True</Private>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="GalaSoft.MvvmLight.Platform, Version=5.3.0.19032, Culture=neutral, PublicKeyToken=5f873c45e98af8a1, processorArchitecture=MSIL">
|
|
||||||
<HintPath>..\packages\MvvmLightLibs.5.3.0.0\lib\net45\GalaSoft.MvvmLight.Platform.dll</HintPath>
|
|
||||||
<Private>True</Private>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="Microsoft.Practices.ServiceLocation, Version=1.3.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
|
|
||||||
<HintPath>..\packages\CommonServiceLocator.1.3\lib\portable-net4+sl5+netcore45+wpa81+wp8\Microsoft.Practices.ServiceLocation.dll</HintPath>
|
|
||||||
<Private>True</Private>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="Microsoft.WindowsAPICodePack, Version=1.1.2.0, Culture=neutral, processorArchitecture=MSIL">
|
|
||||||
<HintPath>..\packages\WindowsAPICodePack-Core.1.1.2\lib\Microsoft.WindowsAPICodePack.dll</HintPath>
|
|
||||||
<Private>True</Private>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="Microsoft.WindowsAPICodePack.Shell, Version=1.1.0.0, Culture=neutral, processorArchitecture=MSIL">
|
|
||||||
<HintPath>..\packages\WindowsAPICodePack-Shell.1.1.1\lib\Microsoft.WindowsAPICodePack.Shell.dll</HintPath>
|
|
||||||
<Private>True</Private>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="System" />
|
|
||||||
<Reference Include="System.Collections.Immutable, Version=1.2.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
|
||||||
<HintPath>..\packages\System.Collections.Immutable.1.4.0-preview1-25305-02\lib\portable-net45+win8+wp8+wpa81\System.Collections.Immutable.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="System.ComponentModel.Composition" />
|
|
||||||
<Reference Include="System.Data" />
|
|
||||||
<Reference Include="System.Windows.Interactivity, Version=4.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
|
|
||||||
<HintPath>..\packages\MvvmLightLibs.5.3.0.0\lib\net45\System.Windows.Interactivity.dll</HintPath>
|
|
||||||
<Private>True</Private>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="System.Xml" />
|
|
||||||
<Reference Include="Microsoft.CSharp" />
|
|
||||||
<Reference Include="System.Core" />
|
|
||||||
<Reference Include="System.Xml.Linq" />
|
|
||||||
<Reference Include="System.Data.DataSetExtensions" />
|
|
||||||
<Reference Include="System.Net.Http" />
|
|
||||||
<Reference Include="System.Xaml">
|
|
||||||
<RequiredTargetFramework>4.0</RequiredTargetFramework>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="WindowsBase" />
|
|
||||||
<Reference Include="PresentationCore" />
|
|
||||||
<Reference Include="PresentationFramework" />
|
|
||||||
<Reference Include="xunit.runner.utility.desktop, Version=2.1.0.3179, Culture=neutral, PublicKeyToken=8d05b1bb7a6fdb6c, processorArchitecture=MSIL">
|
|
||||||
<HintPath>..\packages\xunit.runner.utility.2.1.0\lib\net35\xunit.runner.utility.desktop.dll</HintPath>
|
|
||||||
<Private>True</Private>
|
|
||||||
</Reference>
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<ApplicationDefinition Include="App.xaml">
|
|
||||||
<Generator>MSBuild:Compile</Generator>
|
|
||||||
<SubType>Designer</SubType>
|
|
||||||
</ApplicationDefinition>
|
|
||||||
<Compile Include="CommandBindings.cs" />
|
|
||||||
<Compile Include="Converters\TestStateConverter.cs" />
|
|
||||||
<Compile Include="Extensions.cs" />
|
|
||||||
<Compile Include="FilteredCollectionView.cs" />
|
|
||||||
<Compile Include="Impl\RemoteTestUtil.Connection.cs" />
|
|
||||||
<Compile Include="Impl\RemoteTestUtil.BackgroundRunner.cs" />
|
|
||||||
<Compile Include="Impl\RemoteTestUtil.cs" />
|
|
||||||
<Compile Include="Impl\TestAssemblyWatcher.cs" />
|
|
||||||
<Compile Include="ITestAssemblyWatcher.cs" />
|
|
||||||
<Compile Include="ITestUtil.cs" />
|
|
||||||
<Compile Include="Persistence\Settings.cs" />
|
|
||||||
<Compile Include="Persistence\Storage.cs" />
|
|
||||||
<Compile Include="Persistence\Storage.WindowPlacement.cs" />
|
|
||||||
<Compile Include="Extensions.FuncComparer.cs" />
|
|
||||||
<Compile Include="ViewModel\RecentAssemblyViewModel.cs" />
|
|
||||||
<Compile Include="ViewModel\TraitCollectionView.cs" />
|
|
||||||
<Compile Include="ViewModel\AssemblyAndConfigFile.cs" />
|
|
||||||
<Compile Include="ViewModel\MainViewModel.cs" />
|
|
||||||
<Compile Include="ViewModel\SearchQuery.cs" />
|
|
||||||
<Compile Include="ViewModel\TestCaseViewModel.cs" />
|
|
||||||
<Compile Include="ViewModel\TestAssemblyViewModel.cs" />
|
|
||||||
<Compile Include="ViewModel\TraitViewModel.Comparer.cs" />
|
|
||||||
<Compile Include="ViewModel\TraitViewModel.cs" />
|
|
||||||
<Compile Include="ViewModel\ViewModelLocator.cs" />
|
|
||||||
<Page Include="MainWindow.xaml">
|
|
||||||
<Generator>MSBuild:Compile</Generator>
|
|
||||||
<SubType>Designer</SubType>
|
|
||||||
</Page>
|
|
||||||
<Compile Include="App.xaml.cs">
|
|
||||||
<DependentUpon>App.xaml</DependentUpon>
|
|
||||||
<SubType>Code</SubType>
|
|
||||||
</Compile>
|
|
||||||
<Compile Include="MainWindow.xaml.cs">
|
|
||||||
<DependentUpon>MainWindow.xaml</DependentUpon>
|
|
||||||
<SubType>Code</SubType>
|
|
||||||
</Compile>
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<Compile Include="Properties\AssemblyInfo.cs">
|
|
||||||
<SubType>Code</SubType>
|
|
||||||
</Compile>
|
|
||||||
<Compile Include="Properties\Resources.Designer.cs">
|
|
||||||
<AutoGen>True</AutoGen>
|
|
||||||
<DesignTime>True</DesignTime>
|
|
||||||
<DependentUpon>Resources.resx</DependentUpon>
|
|
||||||
</Compile>
|
|
||||||
<EmbeddedResource Include="Properties\Resources.resx">
|
|
||||||
<Generator>ResXFileCodeGenerator</Generator>
|
|
||||||
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
|
|
||||||
</EmbeddedResource>
|
|
||||||
<None Include="packages.config" />
|
|
||||||
<AppDesigner Include="Properties\" />
|
|
||||||
<None Include="xunit.runner.wpf.targets">
|
|
||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
|
||||||
<SubType>Designer</SubType>
|
|
||||||
</None>
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<NuGetManifest Include="xunit.runner.wpf.nuspec">
|
|
||||||
<Version>$(NuPkgVersion)</Version>
|
|
||||||
<PackageAnalysis>False</PackageAnalysis>
|
|
||||||
</NuGetManifest>
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<None Include="App.config" />
|
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\SampleTestAssembly\SampleTestAssembly.csproj">
|
<ProjectReference Include="..\SampleTestAssembly\SampleTestAssembly.csproj">
|
||||||
<Project>{bdafb5dd-ffb3-4a94-a312-dfb080010846}</Project>
|
|
||||||
<Name>SampleTestAssembly</Name>
|
|
||||||
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
|
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
|
||||||
</ProjectReference>
|
</ProjectReference>
|
||||||
<ProjectReference Include="..\xunit.runner.data\xunit.runner.data.csproj">
|
<ProjectReference Include="..\xunit.runner.data\xunit.runner.data.csproj" />
|
||||||
<Project>{a1f579f4-443e-4f64-bc55-998ab86ff293}</Project>
|
<ProjectReference Include="..\xunit.runner.worker\xunit.runner.worker.csproj" />
|
||||||
<Name>xunit.runner.data</Name>
|
|
||||||
</ProjectReference>
|
|
||||||
<ProjectReference Include="..\xunit.runner.worker\xunit.runner.worker.csproj">
|
|
||||||
<Project>{9df97a2b-0eb5-4b12-9f81-69dfac979814}</Project>
|
|
||||||
<Name>xunit.runner.worker</Name>
|
|
||||||
</ProjectReference>
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<Resource Include="Artwork\Passed_small.png" />
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<Resource Include="Artwork\Passed_large.png" />
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<Resource Include="Artwork\Failed_small.png" />
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<Resource Include="Artwork\Failed_large.png" />
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<Resource Include="Artwork\Skipped_small.png" />
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<Resource Include="Artwork\Skipped_large.png" />
|
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<Resource Include="Artwork\**\*.png" />
|
||||||
<Resource Include="Artwork\Application.ico" />
|
<Resource Include="Artwork\Application.ico" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
|
||||||
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
|
||||||
<PropertyGroup>
|
|
||||||
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
|
|
||||||
</PropertyGroup>
|
|
||||||
<Error Condition="!Exists('..\packages\Tvl.NuGet.BuildTasks.1.0.0-alpha002\build\Tvl.NuGet.BuildTasks.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Tvl.NuGet.BuildTasks.1.0.0-alpha002\build\Tvl.NuGet.BuildTasks.props'))" />
|
|
||||||
<Error Condition="!Exists('..\packages\Tvl.NuGet.BuildTasks.1.0.0-alpha002\build\Tvl.NuGet.BuildTasks.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Tvl.NuGet.BuildTasks.1.0.0-alpha002\build\Tvl.NuGet.BuildTasks.targets'))" />
|
|
||||||
<Error Condition="!Exists('..\packages\Microsoft.Net.Compilers.2.2.0\build\Microsoft.Net.Compilers.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.Net.Compilers.2.2.0\build\Microsoft.Net.Compilers.props'))" />
|
|
||||||
</Target>
|
|
||||||
<Import Project="..\packages\Tvl.NuGet.BuildTasks.1.0.0-alpha002\build\Tvl.NuGet.BuildTasks.targets" Condition="Exists('..\packages\Tvl.NuGet.BuildTasks.1.0.0-alpha002\build\Tvl.NuGet.BuildTasks.targets')" />
|
|
||||||
</Project>
|
</Project>
|
||||||
@@ -1,20 +0,0 @@
|
|||||||
<?xml version="1.0"?>
|
|
||||||
<package >
|
|
||||||
<metadata>
|
|
||||||
<id>xunit.runner.wpf</id>
|
|
||||||
<version>$version$</version>
|
|
||||||
<title>xUnit.Runner.WPF</title>
|
|
||||||
<authors>Pilchie</authors>
|
|
||||||
<owners>Pilchie</owners>
|
|
||||||
<projectUrl>https://github.com/Pilchie/xunit.runner.wpf</projectUrl>
|
|
||||||
<requireLicenseAcceptance>false</requireLicenseAcceptance>
|
|
||||||
<description>XUnit Gui written in WPF</description>
|
|
||||||
<tags>XUnit Gui test runner</tags>
|
|
||||||
</metadata>
|
|
||||||
<files>
|
|
||||||
<file src="bin\$Configuration$\*.dll" target="tools\"/>
|
|
||||||
<file src="xunit.runner.wpf.targets" target="build\net45"/>
|
|
||||||
<file src="bin\$Configuration$\*.exe" target="tools\" exclude="**\*vshost*"/>
|
|
||||||
<file src="bin\$Configuration$\*.config" target="tools\" exclude="**\*vshost*"/>
|
|
||||||
</files>
|
|
||||||
</package>
|
|
||||||
@@ -1,9 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
|
||||||
<PropertyGroup>
|
|
||||||
<StartAction Condition="'$(StartActions)' == ''">Program</StartAction>
|
|
||||||
<StartProgram Condition="'$(StartProgram)' == ''">$(MSBuildThisFileDirectory)..\tools\xunit.runner.wpf.exe</StartProgram>
|
|
||||||
<StartArguments Condition="'$(StartArguments)' == ''">$(AssemblyName).dll</StartArguments>
|
|
||||||
<StartWorkingDirectory Condition="'$(StartWorkingDirectory)' == ''">$(OutputDirectory)</StartWorkingDirectory>
|
|
||||||
</PropertyGroup>
|
|
||||||
</Project>
|
|
||||||
Reference in New Issue
Block a user