Skip to content

Commit

Permalink
Merge pull request #25 from picoe/curtis/unit-test
Browse files Browse the repository at this point in the history
Unit Test GUI
  • Loading branch information
cwensley authored Feb 6, 2020
2 parents e51cef5 + 7ca23c7 commit 5909f2c
Show file tree
Hide file tree
Showing 62 changed files with 3,955 additions and 3 deletions.
64 changes: 61 additions & 3 deletions azure-pipelines.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,10 @@ variables:
solution: 'src/Eto.Toolkit.sln'
build.version: '0.1.0-ci-$(Build.BuildNumber)'
build.configuration: 'Release'
build.arguments: /restore /t:Build;Pack /p:BuildVersion=$(build.version) /p:BuildBranch=$(Build.SourceBranch)
build.basearguments: '/v:minimal /p:BuildVersion=$(build.version) /p:BuildBranch=$(Build.SourceBranch)'
build.arguments: '/restore /t:Build;Pack $(build.basearguments)'
build.dotnetversion: 3.1.100
build.xamarinversion: 6_6_0

trigger:
- master
Expand All @@ -17,22 +20,48 @@ jobs:
steps:
- checkout: self
submodules: true
- script: sudo $AGENT_HOMEDIRECTORY/scripts/select-xamarin-sdk.sh 5_18_1

- script: sudo $AGENT_HOMEDIRECTORY/scripts/select-xamarin-sdk.sh $(build.xamarinversion)
displayName: 'Select Xamarin SDK version'

- task: UseDotNet@2
displayName: Install .NET Core SDK
inputs:
packageType: sdk
version: $(build.dotnetversion)

- task: MSBuild@1
displayName: Restore, Build and Package
inputs:
solution: '$(solution)'
platform: '$(build.platform)'
configuration: '$(build.configuration)'
msbuildArguments: '$(build.arguments)'

- task: PublishBuildArtifacts@1
displayName: Publish nupkg
inputs:
pathtoPublish: artifacts/nuget/$(build.configuration)
artifactName: nuget
publishLocation: container

- task: CopyFiles@2
displayName: Copy Eto.UnitTest.Desktop.app
inputs:
sourceFolder: artifacts/core/$(build.configuration)/net461
contents: Eto.UnitTest.Desktop.app/**
targetFolder: $(Build.ArtifactStagingDirectory)/dmg

- script: hdiutil create -fs HFS+ -srcfolder "$(Build.ArtifactStagingDirectory)/dmg" -volname "Eto.UnitTest.Desktop" "$(Build.ArtifactStagingDirectory)/Eto.UnitTest.Desktop.dmg"
displayName: 'Create Eto.UnitTest.Desktop.dmg'

- task: PublishBuildArtifacts@1
displayName: Publish Eto.UnitTest.Desktop for Mac
inputs:
pathtoPublish: $(Build.ArtifactStagingDirectory)/Eto.UnitTest.Desktop.dmg
artifactName: Eto.UnitTest
publishLocation: container

- job: Windows
pool:
vmImage: 'windows-2019'
Expand All @@ -41,16 +70,45 @@ jobs:
steps:
- checkout: self
submodules: true

- task: UseDotNet@2
displayName: Install .NET Core SDK
inputs:
packageType: sdk
version: $(build.dotnetversion)

- task: MSBuild@1
displayName: Restore, Build and Package
inputs:
solution: '$(solution)'
platform: '$(build.platform)'
configuration: '$(build.configuration)'
msbuildArguments: '$(build.arguments)'
msbuildArguments: '/t:Build;Pack $(build.arguments)'

- task: MSBuild@1
displayName: Publish Eto.UnitTest.Desktop
inputs:
solution: 'src/Eto.UnitTest.Desktop/Eto.UnitTest.Desktop.csproj'
platform: '$(build.platform)'
configuration: '$(build.configuration)'
msbuildArguments: '/t:Publish $(build.basearguments)'

- task: PublishBuildArtifacts@1
displayName: Publish nupkg
inputs:
pathtoPublish: artifacts/nuget/$(build.configuration)
artifactName: nuget
publishLocation: container

- task: CopyFiles@2
displayName: Copy Eto.UnitTest.Desktop
inputs:
sourceFolder: artifacts/core/Windows/$(build.configuration)/net461/publish
targetFolder: $(Build.ArtifactStagingDirectory)/Eto.UnitTest.Desktop/

- task: PublishBuildArtifacts@1
displayName: Publish Eto.UnitTest.Desktop
inputs:
pathtoPublish: $(Build.ArtifactStagingDirectory)
artifactName: Eto.UnitTest
publishLocation: container
46 changes: 46 additions & 0 deletions src/Eto.Toolkit.sln
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,16 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Build", "Build", "{23803176
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Eto.HtmlRenderer.XamMac2", "Eto.HtmlRenderer.Mac\Eto.HtmlRenderer.XamMac2.csproj", "{B5D415B5-22D9-44C9-888A-26301E76AE99}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "UnitTest", "UnitTest", "{AEA85D35-82E6-4863-B54C-4B6EE89D9234}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Eto.UnitTest", "Eto.UnitTest\Eto.UnitTest.csproj", "{6E2E7041-9E81-4B7D-BE9D-A3796954871D}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Eto.UnitTest.NUnit", "Eto.UnitTest.NUnit\Eto.UnitTest.NUnit.csproj", "{3076C3F6-4313-47DD-8CB2-C1B1A617FC6A}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Eto.UnitTest.Xunit", "Eto.UnitTest.Xunit\Eto.UnitTest.Xunit.csproj", "{CBCB2F2F-0BCF-4B0B-8AAC-85891FDDCEEE}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Eto.UnitTest.Desktop", "Eto.UnitTest.Desktop\Eto.UnitTest.Desktop.csproj", "{9E9C86EE-7E14-4E98-93EA-6CC8F54DC663}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Mac = Debug|Mac
Expand Down Expand Up @@ -140,6 +150,38 @@ Global
{B5D415B5-22D9-44C9-888A-26301E76AE99}.Release|Mac.ActiveCfg = Release|Any CPU
{B5D415B5-22D9-44C9-888A-26301E76AE99}.Release|Mac.Build.0 = Release|Any CPU
{B5D415B5-22D9-44C9-888A-26301E76AE99}.Release|Windows.ActiveCfg = Release|Any CPU
{6E2E7041-9E81-4B7D-BE9D-A3796954871D}.Debug|Mac.ActiveCfg = Debug|Any CPU
{6E2E7041-9E81-4B7D-BE9D-A3796954871D}.Debug|Mac.Build.0 = Debug|Any CPU
{6E2E7041-9E81-4B7D-BE9D-A3796954871D}.Debug|Windows.ActiveCfg = Debug|Any CPU
{6E2E7041-9E81-4B7D-BE9D-A3796954871D}.Debug|Windows.Build.0 = Debug|Any CPU
{6E2E7041-9E81-4B7D-BE9D-A3796954871D}.Release|Mac.ActiveCfg = Release|Any CPU
{6E2E7041-9E81-4B7D-BE9D-A3796954871D}.Release|Mac.Build.0 = Release|Any CPU
{6E2E7041-9E81-4B7D-BE9D-A3796954871D}.Release|Windows.ActiveCfg = Release|Any CPU
{6E2E7041-9E81-4B7D-BE9D-A3796954871D}.Release|Windows.Build.0 = Release|Any CPU
{3076C3F6-4313-47DD-8CB2-C1B1A617FC6A}.Debug|Mac.ActiveCfg = Debug|Any CPU
{3076C3F6-4313-47DD-8CB2-C1B1A617FC6A}.Debug|Mac.Build.0 = Debug|Any CPU
{3076C3F6-4313-47DD-8CB2-C1B1A617FC6A}.Debug|Windows.ActiveCfg = Debug|Any CPU
{3076C3F6-4313-47DD-8CB2-C1B1A617FC6A}.Debug|Windows.Build.0 = Debug|Any CPU
{3076C3F6-4313-47DD-8CB2-C1B1A617FC6A}.Release|Mac.ActiveCfg = Release|Any CPU
{3076C3F6-4313-47DD-8CB2-C1B1A617FC6A}.Release|Mac.Build.0 = Release|Any CPU
{3076C3F6-4313-47DD-8CB2-C1B1A617FC6A}.Release|Windows.ActiveCfg = Release|Any CPU
{3076C3F6-4313-47DD-8CB2-C1B1A617FC6A}.Release|Windows.Build.0 = Release|Any CPU
{CBCB2F2F-0BCF-4B0B-8AAC-85891FDDCEEE}.Debug|Mac.ActiveCfg = Debug|Any CPU
{CBCB2F2F-0BCF-4B0B-8AAC-85891FDDCEEE}.Debug|Mac.Build.0 = Debug|Any CPU
{CBCB2F2F-0BCF-4B0B-8AAC-85891FDDCEEE}.Debug|Windows.ActiveCfg = Debug|Any CPU
{CBCB2F2F-0BCF-4B0B-8AAC-85891FDDCEEE}.Debug|Windows.Build.0 = Debug|Any CPU
{CBCB2F2F-0BCF-4B0B-8AAC-85891FDDCEEE}.Release|Mac.ActiveCfg = Release|Any CPU
{CBCB2F2F-0BCF-4B0B-8AAC-85891FDDCEEE}.Release|Mac.Build.0 = Release|Any CPU
{CBCB2F2F-0BCF-4B0B-8AAC-85891FDDCEEE}.Release|Windows.ActiveCfg = Release|Any CPU
{CBCB2F2F-0BCF-4B0B-8AAC-85891FDDCEEE}.Release|Windows.Build.0 = Release|Any CPU
{9E9C86EE-7E14-4E98-93EA-6CC8F54DC663}.Debug|Mac.ActiveCfg = Debug|Any CPU
{9E9C86EE-7E14-4E98-93EA-6CC8F54DC663}.Debug|Mac.Build.0 = Debug|Any CPU
{9E9C86EE-7E14-4E98-93EA-6CC8F54DC663}.Debug|Windows.ActiveCfg = Debug|Any CPU
{9E9C86EE-7E14-4E98-93EA-6CC8F54DC663}.Debug|Windows.Build.0 = Debug|Any CPU
{9E9C86EE-7E14-4E98-93EA-6CC8F54DC663}.Release|Mac.ActiveCfg = Release|Any CPU
{9E9C86EE-7E14-4E98-93EA-6CC8F54DC663}.Release|Mac.Build.0 = Release|Any CPU
{9E9C86EE-7E14-4E98-93EA-6CC8F54DC663}.Release|Windows.ActiveCfg = Release|Any CPU
{9E9C86EE-7E14-4E98-93EA-6CC8F54DC663}.Release|Windows.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
Expand All @@ -158,6 +200,10 @@ Global
{364EDFB1-8C1A-46B1-A9F7-B9D7F9417E55} = {C5C9E1F4-B112-4BDE-A589-722E87D63962}
{F9D593CA-8448-466D-BC47-A1753E3949FD} = {C5C9E1F4-B112-4BDE-A589-722E87D63962}
{B5D415B5-22D9-44C9-888A-26301E76AE99} = {C5C9E1F4-B112-4BDE-A589-722E87D63962}
{6E2E7041-9E81-4B7D-BE9D-A3796954871D} = {AEA85D35-82E6-4863-B54C-4B6EE89D9234}
{3076C3F6-4313-47DD-8CB2-C1B1A617FC6A} = {AEA85D35-82E6-4863-B54C-4B6EE89D9234}
{CBCB2F2F-0BCF-4B0B-8AAC-85891FDDCEEE} = {AEA85D35-82E6-4863-B54C-4B6EE89D9234}
{9E9C86EE-7E14-4E98-93EA-6CC8F54DC663} = {AEA85D35-82E6-4863-B54C-4B6EE89D9234}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {B290EE1E-3782-4C57-A127-FD078514CD8C}
Expand Down
6 changes: 6 additions & 0 deletions src/Eto.UnitTest.Desktop/App.config
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
</startup>
</configuration>
138 changes: 138 additions & 0 deletions src/Eto.UnitTest.Desktop/AppDomainRunner.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,138 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace Eto.UnitTest.App
{
class AppDomainTestRunnerWrapper : MarshalByRefObject
{
ITestRunner _runner;
public bool IsRunning => _runner.IsRunning;

public ITest Test => _runner.TestSuite;

public event EventHandler<UnitTestLogEventArgs> Log;
public event EventHandler<UnitTestProgressEventArgs> Progress;
public event EventHandler<UnitTestResultEventArgs> TestFinished;
public event EventHandler<UnitTestTestEventArgs> TestStarted;
public event EventHandler<EventArgs> IsRunningChanged;

public async Task<IEnumerable<string>> GetCategories(ITestFilter filter)
{
var categories = await _runner.GetCategories(filter);
return categories.ToList();
}

public Task<int> GetTestCount(ITestFilter filter)
{
return _runner.GetTestCount(filter);
}

public Task<ITestResult> RunAsync(ITestFilter filter)
{
return _runner.RunAsync(filter);
}

public void StopTests() => _runner.StopTests();

public void CreateRunner(Type type)
{
var runnerType = Activator.CreateInstance(type) as ITestRunnerType;
_runner = runnerType.CreateRunner();
}

public Task Load(ITestSource source) => _runner.Load(source);
}

public class AppDomainTestRunner : ITestRunner, IDisposable
{
AppDomainTestRunnerWrapper _wrapper;
public bool IsRunning => _wrapper.IsRunning;

public ITest TestSuite => _wrapper.Test;

public event EventHandler<UnitTestLogEventArgs> Log;
public event EventHandler<UnitTestProgressEventArgs> Progress;
public event EventHandler<UnitTestResultEventArgs> TestFinished;
public event EventHandler<UnitTestTestEventArgs> TestStarted;
public event EventHandler<EventArgs> IsRunningChanged;

public AppDomainTestRunner()
{
_wrapper = Domain.CreateInstanceFromAndUnwrap(typeof(AppDomainTestRunnerWrapper).Assembly.CodeBase, typeof(AppDomainTestRunnerWrapper).FullName) as AppDomainTestRunnerWrapper;
}

public void Initialize(Type runnerType)
{
_wrapper.CreateRunner(runnerType);
}

AppDomain _domain;

AppDomain Domain
{
get
{
if (_domain != null)
return _domain;

var cur = AppDomain.CurrentDomain;
var si = cur.SetupInformation;
//var path = AssemblyPath;
var setup = new AppDomainSetup
{
ApplicationName = si.ApplicationName ?? "Eto.UnitTest",
CachePath = si.CachePath,
ShadowCopyFiles = "true",//si.ShadowCopyFiles,
ShadowCopyDirectories = si.ShadowCopyDirectories,
PrivateBinPath = si.PrivateBinPath,
//DynamicBase = si.DynamicBase,
TargetFrameworkName = si.TargetFrameworkName,
ConfigurationFile = si.ConfigurationFile,
ApplicationBase = si.ApplicationBase,
LoaderOptimization = LoaderOptimization.MultiDomain,//= si.LoaderOptimization,
//SandboxInterop = si.SandboxInterop
};
//setup.SetCompatibilitySwitches(new[] { "NetFx40_LegacySecurityPolicy" });
_domain = AppDomain.CreateDomain("UnitTests");//, cur.Evidence, setup);
cur.DomainUnload += (sender, e) => UnloadDomain();
return _domain;
}
}

public Task<IEnumerable<string>> GetCategories(ITestFilter filter)
{
return _wrapper.GetCategories(filter);
}

public Task<int> GetTestCount(ITestFilter filter)
{
return _wrapper.GetTestCount(filter);
}

public Task<ITestResult> RunAsync(ITestFilter filter)
{
return _wrapper.RunAsync(filter);
}

public void StopTests()
{
_wrapper.StopTests();
}

void UnloadDomain()
{
if (_domain == null)
return;

AppDomain.Unload(_domain);
_domain = null;
}

public void Dispose() => UnloadDomain();

public Task Load(ITestSource source) => _wrapper.Load(source);
}

}
36 changes: 36 additions & 0 deletions src/Eto.UnitTest.Desktop/Eto.UnitTest.Desktop.csproj
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
<Project>

<Import Project="Sdk.props" Sdk="Microsoft.NET.Sdk" />

<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>net461</TargetFramework>
<IsPackable>False</IsPackable>
</PropertyGroup>

<ItemGroup Condition="$(EtoBasePath) == ''">
<PackageReference Include="Eto.Forms" Version="2.5.0-rc.4" />
<PackageReference Include="Eto.Platform.Wpf" Version="2.5.0-rc.4" />
<PackageReference Include="Eto.Platform.Mac64" Version="2.5.0-rc.4" />
<PackageReference Include="Eto.Platform.Gtk" Version="2.5.0-rc.4" />
</ItemGroup>
<ItemGroup Condition="$(EtoBasePath) != ''">
<ProjectReference Include="$(EtoBasePath)src\Eto\Eto.csproj" />
<ProjectReference Include="$(EtoBasePath)src\Eto.Mac\Eto.Mac64.csproj" />
<ProjectReference Include="$(EtoBasePath)src\Eto.Gtk\Eto.Gtk.csproj" />
<ProjectReference Include="$(EtoBasePath)src\Eto.Wpf\Eto.Wpf.csproj" Condition="$(OS) == 'Windows_NT'" />
</ItemGroup>

<ItemGroup>
<ProjectReference Include="..\Eto.UnitTest\Eto.UnitTest.csproj" />
<ProjectReference Include="..\Eto.UnitTest.NUnit\Eto.UnitTest.NUnit.csproj" />
<ProjectReference Include="..\Eto.UnitTest.Xunit\Eto.UnitTest.Xunit.csproj" />
</ItemGroup>

<ItemGroup>
<PackageReference Include="System.CommandLine" Version="2.0.0-beta1.20071.2" />
</ItemGroup>
<Import Project="Sdk.targets" Sdk="Microsoft.NET.Sdk" />

<Import Condition="$(EtoBasePath) != ''" Project="$(EtoBasePath)build\Common.Mac.targets" />
</Project>
Loading

0 comments on commit 5909f2c

Please sign in to comment.