Skip to content

Commit ac677b9

Browse files
campersauamaitland
authored andcommitted
Add tests for javascript callbacks
1 parent 6f5f94a commit ac677b9

File tree

2 files changed

+75
-12
lines changed

2 files changed

+75
-12
lines changed

CefSharp.Test/Javascript/EvaluateScriptAsyncTests.cs

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -36,38 +36,38 @@ public async Task V8Context()
3636
await browser.CreateBrowserAsync();
3737

3838
// no V8 context
39-
await Assert.ThrowsAsync<Exception>(() => browser.EvaluateScriptAsync("1+1"));
39+
var withoutV8ContextException = await Assert.ThrowsAsync<Exception>(() => browser.EvaluateScriptAsync("1+1"));
40+
Assert.StartsWith("Unable to execute javascript at this time", withoutV8ContextException.Message);
4041

41-
Task evaluateWithoutV8ContextCancelTask;
42-
Task<int> evaluateWithoutV8ContextTask;
42+
Task<JavascriptResponse> evaluateWithoutV8ContextTask;
4343
using (var frame = browser.GetMainFrame())
4444
{
45-
evaluateWithoutV8ContextTask = frame.EvaluateScriptAsync<int>("1+2");
46-
evaluateWithoutV8ContextCancelTask = frame.EvaluateScriptAsync("new Promise(resolve => setTimeout(resolve, 1000))");
45+
evaluateWithoutV8ContextTask = frame.EvaluateScriptAsync("1+2");
4746
}
4847

4948
// V8 context
5049
await browser.LoadUrlAsync(CefExample.HelloWorldUrl);
51-
var evaluateCancelAfterV8ContextChangeTask = browser.EvaluateScriptAsync("new Promise(resolve => setTimeout(resolve, 1000))");
50+
var evaluateWithoutV8ContextResponse = await evaluateWithoutV8ContextTask;
51+
Assert.True(evaluateWithoutV8ContextResponse.Success);
52+
Assert.Equal(3, evaluateWithoutV8ContextResponse.Result);
5253

53-
Assert.Equal(3, await evaluateWithoutV8ContextTask);
54-
Assert.Equal(4, await browser.EvaluateScriptAsync<int>("1+3"));
54+
var evaluateCancelAfterV8ContextChangeTask = browser.EvaluateScriptAsync("new Promise(resolve => setTimeout(resolve, 1000))");
5555

5656
// change V8 context
5757
await browser.LoadUrlAsync(CefExample.HelloWorldUrl);
58-
evaluateCancelAfterDisposeTask = browser.EvaluateScriptAsync("new Promise(resolve => setTimeout(resolve, 1000))");
59-
60-
Assert.Equal(5, await browser.EvaluateScriptAsync<int>("1+4"));
6158

6259
await Assert.ThrowsAsync<TaskCanceledException>(() => evaluateCancelAfterV8ContextChangeTask);
63-
await Assert.ThrowsAsync<TaskCanceledException>(() => evaluateWithoutV8ContextCancelTask);
60+
61+
evaluateCancelAfterDisposeTask = browser.EvaluateScriptAsync("new Promise(resolve => setTimeout(resolve, 1000))");
6462
}
6563
await Assert.ThrowsAsync<TaskCanceledException>(() => evaluateCancelAfterDisposeTask);
6664
}
6765

6866
[Fact]
6967
public async Task CancelEvaluateOnCrash()
7068
{
69+
AssertInitialLoadComplete();
70+
7171
var task = Browser.EvaluateScriptAsync("new Promise(resolve => setTimeout(resolve, 1000))");
7272
await Browser.LoadUrlAsync("chrome://crash");
7373
await Assert.ThrowsAsync<TaskCanceledException>(() => task);

CefSharp.Test/Javascript/JavascriptCallbackTests.cs

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
using System.Dynamic;
77
using System.Globalization;
88
using System.Threading.Tasks;
9+
using CefSharp.Example;
910
using Xunit;
1011
using Xunit.Abstractions;
1112

@@ -23,6 +24,68 @@ public JavascriptCallbackTests(ITestOutputHelper output, CefSharpFixture collect
2324
this.collectionFixture = collectionFixture;
2425
}
2526

27+
[Fact]
28+
public async Task V8Context()
29+
{
30+
Task callbackExecuteCancelAfterDisposeTask;
31+
using (var browser = new CefSharp.OffScreen.ChromiumWebBrowser(automaticallyCreateBrowser: false))
32+
{
33+
await browser.CreateBrowserAsync();
34+
35+
// no V8 context
36+
var withoutV8ContextException = await Assert.ThrowsAsync<Exception>(() => browser.EvaluateScriptAsync("(function() { return 1+1; })"));
37+
Assert.StartsWith("Unable to execute javascript at this time", withoutV8ContextException.Message);
38+
39+
Task<JavascriptResponse> callbackExecuteWithoutV8ContextTask;
40+
using (var frame = browser.GetMainFrame())
41+
{
42+
callbackExecuteWithoutV8ContextTask = frame.EvaluateScriptAsync("(function() { return 1+2; })");
43+
}
44+
45+
// V8 context
46+
await browser.LoadUrlAsync(CefExample.HelloWorldUrl);
47+
48+
var callbackExecuteWithoutV8ContextResponse = await callbackExecuteWithoutV8ContextTask;
49+
Assert.True(callbackExecuteWithoutV8ContextResponse.Success);
50+
var callbackExecuteWithoutV8ContextCallback = (IJavascriptCallback)callbackExecuteWithoutV8ContextResponse.Result;
51+
var callbackExecuteWithoutV8ContextExecuteResponse = await callbackExecuteWithoutV8ContextCallback.ExecuteAsync();
52+
Assert.True(callbackExecuteWithoutV8ContextExecuteResponse.Success);
53+
Assert.Equal(3, callbackExecuteWithoutV8ContextExecuteResponse.Result);
54+
55+
var callbackExecuteCancelAfterV8ContextResponse = await browser.EvaluateScriptAsync("(function() { return new Promise(resolve => setTimeout(resolve, 1000)); })");
56+
Assert.True(callbackExecuteCancelAfterV8ContextResponse.Success);
57+
var evaluateCancelAfterV8ContextCallback = (IJavascriptCallback)callbackExecuteCancelAfterV8ContextResponse.Result;
58+
var evaluateCancelAfterV8ContextTask = evaluateCancelAfterV8ContextCallback.ExecuteAsync();
59+
60+
// change V8 context
61+
await browser.LoadUrlAsync(CefExample.HelloWorldUrl);
62+
63+
await Assert.ThrowsAsync<TaskCanceledException>(() => evaluateCancelAfterV8ContextTask);
64+
65+
var callbackExecuteCancelAfterDisposeResponse = await browser.EvaluateScriptAsync("(function() { return new Promise(resolve => setTimeout(resolve, 1000)); })");
66+
Assert.True(callbackExecuteCancelAfterDisposeResponse.Success);
67+
var callbackExecuteCancelAfterDisposeCallback = (IJavascriptCallback)callbackExecuteCancelAfterDisposeResponse.Result;
68+
callbackExecuteCancelAfterDisposeTask = callbackExecuteCancelAfterDisposeCallback.ExecuteAsync();
69+
}
70+
await Assert.ThrowsAsync<TaskCanceledException>(() => callbackExecuteCancelAfterDisposeTask);
71+
}
72+
73+
[Fact]
74+
public async Task CancelCallbackOnCrash()
75+
{
76+
AssertInitialLoadComplete();
77+
78+
var javascriptResponse = await Browser.EvaluateScriptAsync("(function() { return new Promise(resolve => setTimeout(resolve, 1000)); })");
79+
Assert.True(javascriptResponse.Success);
80+
81+
var callback = (IJavascriptCallback)javascriptResponse.Result;
82+
83+
var task = callback.ExecuteAsync();
84+
85+
await Browser.LoadUrlAsync("chrome://crash");
86+
await Assert.ThrowsAsync<TaskCanceledException>(() => task);
87+
}
88+
2689
[Theory]
2790
[InlineData("(function() { return Promise.resolve(53)})", 53)]
2891
[InlineData("(function() { return Promise.resolve('53')})", "53")]

0 commit comments

Comments
 (0)