forked from hardkoded/puppeteer-sharp
-
-
Notifications
You must be signed in to change notification settings - Fork 6
/
DevToolsContextLoaderFixture.cs
89 lines (72 loc) · 3.13 KB
/
DevToolsContextLoaderFixture.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
using CefSharp.OffScreen;
using CefSharp;
using System;
using System.IO;
using System.Threading.Tasks;
using Nito.AsyncEx;
using Xunit;
using PuppeteerSharp.TestServer;
namespace PuppeteerSharp.Tests
{
public class DevToolsContextLoaderFixture : IDisposable, IAsyncLifetime
{
private readonly AsyncContextThread contextThread;
public static SimpleServer Server { get; private set; }
public static SimpleServer HttpsServer { get; private set; }
public DevToolsContextLoaderFixture()
{
contextThread = new AsyncContextThread();
//TODO: Improve this
SetupAsync().GetAwaiter().GetResult();
}
private void InitializeAsyncInternal()
{
if (!Cef.IsInitialized)
{
var isDefault = AppDomain.CurrentDomain.IsDefaultAppDomain();
if (!isDefault)
{
throw new Exception(@"Appdomains must be disabled. See https://xunit.net/docs/configuration-files#appDomain");
}
Cef.EnableWaitForBrowsersToClose();
CefSharpSettings.ShutdownOnExit = false;
var settings = new CefSettings();
//The location where cache data will be stored on disk. If empty an in-memory cache will be used for some features and a temporary disk cache for others.
//HTML5 databases such as localStorage will only persist across sessions if a cache path is specified.
settings.CachePath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "CefSharp\\Tests\\Cache");
settings.RootCachePath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "CefSharp\\Tests");
//settings.CefCommandLineArgs.Add("renderer-startup-dialog");
settings.CefCommandLineArgs.Add("disable-request-handling-for-testing");
Cef.Initialize(settings, performDependencyCheck: false, browserProcessHandler: null);
}
}
private void DisposeAsyncInternal()
{
if (Cef.IsInitialized)
{
Cef.Shutdown();
}
}
public Task InitializeAsync()
{
return contextThread.Factory.StartNew(InitializeAsyncInternal);
}
public Task DisposeAsync()
{
return contextThread.Factory.StartNew(DisposeAsyncInternal);
}
public void Dispose()
{
contextThread.Dispose();
Task.WaitAll(Server.StopAsync(), HttpsServer.StopAsync());
}
private async Task SetupAsync()
{
Server = SimpleServer.Create(TestConstants.Port, TestUtils.FindParentDirectory("PuppeteerSharp.TestServer"));
HttpsServer = SimpleServer.CreateHttps(TestConstants.HttpsPort, TestUtils.FindParentDirectory("PuppeteerSharp.TestServer"));
var serverStart = Server.StartAsync();
var httpsServerStart = HttpsServer.StartAsync();
await Task.WhenAll(serverStart, httpsServerStart);
}
}
}