Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Remove unnecessary use of dynamics #652

Merged
merged 18 commits into from Oct 12, 2018
Merged
Show file tree
Hide file tree
Changes from 17 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
2 changes: 1 addition & 1 deletion lib/PuppeteerSharp.Tests/FrameTests/WaitForXPathTests.cs
Expand Up @@ -19,7 +19,7 @@ public async Task ShouldSupportSomeFancyXpath()
{
await Page.SetContentAsync("<p>red herring</p><p>hello world </p>");
var waitForXPath = Page.WaitForXPathAsync("//p[normalize-space(.)=\"hello world\"]");
Assert.Equal("hello world ", await Page.EvaluateFunctionAsync("x => x.textContent", await waitForXPath));
Assert.Equal("hello world ", await Page.EvaluateFunctionAsync<string>("x => x.textContent", await waitForXPath));
}

[Fact]
Expand Down
6 changes: 3 additions & 3 deletions lib/PuppeteerSharp.Tests/InputTests/InputTests.cs
Expand Up @@ -170,7 +170,7 @@ public async Task ShouldUploadTheFile()
var input = await Page.QuerySelectorAsync("input");
await input.UploadFileAsync(filePath);
Assert.Equal("file-to-upload.txt", await Page.EvaluateFunctionAsync<string>("e => e.files[0].name", input));
Assert.Equal("contents of the file", await Page.EvaluateFunctionAsync(@"e => {
Assert.Equal("contents of the file", await Page.EvaluateFunctionAsync<string>(@"e => {
const reader = new FileReader();
const promise = new Promise(fulfill => reader.onload = fulfill);
reader.readAsText(e.files[0]);
Expand Down Expand Up @@ -222,10 +222,10 @@ public async Task ShouldSendACharacterWithSendCharacter()
await Page.GoToAsync(TestConstants.ServerUrl + "/input/textarea.html");
await Page.FocusAsync("textarea");
await Page.Keyboard.SendCharacterAsync("嗨");
Assert.Equal("嗨", await Page.EvaluateExpressionAsync("document.querySelector('textarea').value"));
Assert.Equal("嗨", await Page.EvaluateExpressionAsync<string>("document.querySelector('textarea').value"));
await Page.EvaluateExpressionAsync("window.addEventListener('keydown', e => e.preventDefault(), true)");
await Page.Keyboard.SendCharacterAsync("a");
Assert.Equal("嗨a", await Page.EvaluateExpressionAsync("document.querySelector('textarea').value"));
Assert.Equal("嗨a", await Page.EvaluateExpressionAsync<string>("document.querySelector('textarea').value"));
}

tommymonk marked this conversation as resolved.
Show resolved Hide resolved
[Fact]
Expand Down
2 changes: 1 addition & 1 deletion lib/PuppeteerSharp.Tests/JSHandleTests/AsElementTests.cs
Expand Up @@ -34,7 +34,7 @@ public async Task ShouldReturnElementHandleForTextNodes()
var aHandle = await Page.EvaluateExpressionHandleAsync("document.querySelector('div').firstChild");
var element = aHandle as ElementHandle;
Assert.NotNull(element);
Assert.NotNull(await Page.EvaluateFunctionAsync("e => e.nodeType === HTMLElement.TEXT_NODE", element));
Assert.True(await Page.EvaluateFunctionAsync<bool>("e => e.nodeType === HTMLElement.TEXT_NODE", element));
}
}
}
6 changes: 3 additions & 3 deletions lib/PuppeteerSharp.Tests/PageTests/AddStyleTagTests.cs
Expand Up @@ -27,7 +27,7 @@ public async Task ShouldWorkWithAUrl()
await Page.GoToAsync(TestConstants.EmptyPage);
var styleHandle = await Page.AddStyleTagAsync(new AddTagOptions { Url = "/injectedstyle.css" });
Assert.NotNull(styleHandle as ElementHandle);
Assert.Equal("rgb(255, 0, 0)", await Page.EvaluateExpressionAsync(
Assert.Equal("rgb(255, 0, 0)", await Page.EvaluateExpressionAsync<string>(
"window.getComputedStyle(document.querySelector('body')).getPropertyValue('background-color')"));
}

Expand All @@ -46,7 +46,7 @@ public async Task ShouldWorkWithAPath()
await Page.GoToAsync(TestConstants.EmptyPage);
var styleHandle = await Page.AddStyleTagAsync(new AddTagOptions { Path = "assets/injectedstyle.css" });
Assert.NotNull(styleHandle as ElementHandle);
Assert.Equal("rgb(255, 0, 0)", await Page.EvaluateExpressionAsync(
Assert.Equal("rgb(255, 0, 0)", await Page.EvaluateExpressionAsync<string>(
"window.getComputedStyle(document.querySelector('body')).getPropertyValue('background-color')"));
}

Expand All @@ -69,7 +69,7 @@ public async Task ShouldWorkWithContent()
await Page.GoToAsync(TestConstants.EmptyPage);
var styleHandle = await Page.AddStyleTagAsync(new AddTagOptions { Content = "body { background-color: green; }" });
Assert.NotNull(styleHandle as ElementHandle);
Assert.Equal("rgb(0, 128, 0)", await Page.EvaluateExpressionAsync(
Assert.Equal("rgb(0, 128, 0)", await Page.EvaluateExpressionAsync<string>(
"window.getComputedStyle(document.querySelector('body')).getPropertyValue('background-color')"));
}

Expand Down
12 changes: 6 additions & 6 deletions lib/PuppeteerSharp.Tests/PageTests/EvaluateTests.cs
Expand Up @@ -50,7 +50,7 @@ public async Task ShouldRejectPromiseWithExeption()
{
var exception = await Assert.ThrowsAsync<EvaluationFailedException>(() =>
{
return Page.EvaluateFunctionAsync<object>("() => not.existing.object.property");
return Page.EvaluateFunctionAsync("() => not.existing.object.property");
});

Assert.Contains("not is not defined", exception.Message);
Expand All @@ -63,7 +63,7 @@ public async Task SouldReturnComplexObjects()
{
foo = "bar!"
};
dynamic result = await Page.EvaluateFunctionAsync("a => a", obj);
var result = await Page.EvaluateFunctionAsync("a => a", obj);
Assert.Equal("bar!", result.foo.ToString());
}

Expand All @@ -74,7 +74,7 @@ public async Task SouldReturnComplexObjects()
[InlineData("() => -Infinity", double.NegativeInfinity)] //ShouldReturnNegativeInfinty
public async Task BasicEvaluationTest(string script, object expected)
{
dynamic result = await Page.EvaluateFunctionAsync(script);
var result = await Page.EvaluateFunctionAsync<object>(script);
Assert.Equal(expected, result);
}

Expand Down Expand Up @@ -162,7 +162,7 @@ public async Task ShouldWorkFromInsideAnExposedFunction()
{
await Page.ExposeFunctionAsync("callController", async (int a, int b) =>
{
return await Page.EvaluateFunctionAsync("(a, b) => a * b", a, b);
return await Page.EvaluateFunctionAsync<int>("(a, b) => a * b", a, b);
});
var result = await Page.EvaluateFunctionAsync<int>(@"async function() {
return await callController(9, 3);
Expand Down Expand Up @@ -191,7 +191,7 @@ public async Task ShouldThrowWhenEvaluationTriggersReload()
{
var exception = await Assert.ThrowsAsync<EvaluationFailedException>(() =>
{
return Page.EvaluateFunctionAsync<object>(@"() => {
return Page.EvaluateFunctionAsync(@"() => {
location.reload();
return new Promise(resolve => {
setTimeout(() => resolve(1), 0);
Expand All @@ -205,7 +205,7 @@ public async Task ShouldThrowWhenEvaluationTriggersReload()
[Fact]
public async Task ShouldFailForCircularObject()
{
var result = await Page.EvaluateFunctionAsync<object>(@"() => {
var result = await Page.EvaluateFunctionAsync(@"() => {
const a = {};
const b = {a};
a.b = b;
Expand Down
7 changes: 4 additions & 3 deletions lib/PuppeteerSharp.Tests/PuppeteerBaseTest.cs
@@ -1,4 +1,5 @@
using PuppeteerSharp.TestServer;
using Newtonsoft.Json.Linq;
using PuppeteerSharp.TestServer;
using System.IO;
using System.Threading.Tasks;
using Xunit.Abstractions;
Expand Down Expand Up @@ -33,9 +34,9 @@ protected void Initialize()
HttpsServer.Reset();
}

protected static Task<dynamic> WaitEvent(CDPSession emitter, string eventName)
protected static Task<JToken> WaitEvent(CDPSession emitter, string eventName)
{
var completion = new TaskCompletionSource<dynamic>();
var completion = new TaskCompletionSource<JToken>();
void handler(object sender, MessageEventArgs e)
{
if (e.MessageID != eventName)
Expand Down
2 changes: 1 addition & 1 deletion lib/PuppeteerSharp.Tests/PuppeteerTests/HeadfulTests.cs
Expand Up @@ -41,7 +41,7 @@ public async Task TargetPageShouldReturnABackgroundPage()
{
var backgroundPageTarget = await WaitForBackgroundPageTargetAsync(browserWithExtension);
var page = await backgroundPageTarget.PageAsync();
Assert.Equal(6, await page.EvaluateFunctionAsync("() => 2 * 3"));
Assert.Equal(6, await page.EvaluateFunctionAsync<int>("() => 2 * 3"));
}
}

Expand Down
Expand Up @@ -138,7 +138,7 @@ public async Task UserDataDirOptionShouldRestoreState()
{
var page2 = await browser2.NewPageAsync();
await page2.GoToAsync(TestConstants.EmptyPage);
Assert.Equal("hello", await page2.EvaluateExpressionAsync("localStorage.hey"));
Assert.Equal("hello", await page2.EvaluateExpressionAsync<string>("localStorage.hey"));
}
}
}
Expand All @@ -164,7 +164,7 @@ public async Task UserDataDirOptionShouldRestoreCookies()
{
var page2 = await browser2.NewPageAsync();
await page2.GoToAsync(TestConstants.EmptyPage);
Assert.Equal("doSomethingOnlyOnce=true", await page2.EvaluateExpressionAsync("document.cookie"));
Assert.Equal("doSomethingOnlyOnce=true", await page2.EvaluateExpressionAsync<string>("document.cookie"));
}
}
}
Expand Down
62 changes: 31 additions & 31 deletions lib/PuppeteerSharp.Tests/RequestTests/RespondTests.cs
@@ -1,40 +1,40 @@
using System.Collections.Generic;
using System.IO;
using System.IO;
using System.Net;
using System.Threading.Tasks;
using Xunit;
using System.Threading.Tasks;
using Xunit;
using Xunit.Abstractions;

namespace PuppeteerSharp.Tests.RequestTests
{
[Collection("PuppeteerLoaderFixture collection")]
public class RespondTests : PuppeteerPageBaseTest
namespace PuppeteerSharp.Tests.RequestTests
{
[Collection("PuppeteerLoaderFixture collection")]
public class RespondTests : PuppeteerPageBaseTest
{
public RespondTests(ITestOutputHelper output) : base(output)
{
}

[Fact]
public async Task ShouldWork()
{
await Page.SetRequestInterceptionAsync(true);
Page.Request += async (sender, e) =>
{
await e.Request.RespondAsync(new ResponseData
[Fact]
public async Task ShouldWork()
{
await Page.SetRequestInterceptionAsync(true);
Page.Request += async (sender, e) =>
{
await e.Request.RespondAsync(new ResponseData
{
Status = HttpStatusCode.Created,
Headers = new Dictionary<string, object>
{
["foo"] = "bar"
},
Body = "Yo, page!"
});
};

var response = await Page.GoToAsync(TestConstants.EmptyPage);
Status = HttpStatusCode.Created,
Headers = new Dictionary<string, object>
{
["foo"] = "bar"
},
Body = "Yo, page!"
});
};
var response = await Page.GoToAsync(TestConstants.EmptyPage);
Assert.Equal(HttpStatusCode.Created, response.Status);
Assert.Equal("bar", response.Headers["foo"]);
Assert.Equal("Yo, page!", await Page.EvaluateExpressionAsync<string>("document.body.textContent"));
Assert.Equal("Yo, page!", await Page.EvaluateExpressionAsync<string>("document.body.textContent"));
}

[Fact]
Expand All @@ -45,13 +45,13 @@ public async Task ShouldAllowMockingBinaryResponses()
{
var imageData = File.ReadAllBytes("./assets/pptr.png");
await e.Request.RespondAsync(new ResponseData
{
ContentType = "image/png",
{
ContentType = "image/png",
BodyData = imageData
});
};

await Page.EvaluateFunctionAsync(@"PREFIX =>
await Page.EvaluateFunctionAsync(@"PREFIX =>
{
const img = document.createElement('img');
img.src = PREFIX + '/does-not-exist.png';
Expand All @@ -60,6 +60,6 @@ public async Task ShouldAllowMockingBinaryResponses()
}", TestConstants.ServerUrl);
var img = await Page.QuerySelectorAsync("img");
Assert.True(ScreenshotHelper.PixelMatch("mock-binary-response.png", await img.ScreenshotDataAsync()));
}
}
}
}
}
}
5 changes: 3 additions & 2 deletions lib/PuppeteerSharp.Tests/TargetTests/CreateCDPSessionTests.cs
Expand Up @@ -3,6 +3,7 @@
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json.Linq;
using Xunit;
using Xunit.Abstractions;

Expand Down Expand Up @@ -63,7 +64,7 @@ public async Task ShouldEnableAndDisableDomainsIndependently()
Page.EvaluateExpressionAsync("//# sourceURL=foo.js")
);
// expect events to be dispatched.
Assert.Equal("foo.js", eventTask.Result.url.ToString());
Assert.Equal("foo.js", eventTask.Result["url"].Value<string>());
}

[Fact]
Expand All @@ -72,7 +73,7 @@ public async Task ShouldBeAbleToDetachSession()
var client = await Page.Target.CreateCDPSessionAsync();
await client.SendAsync("Runtime.enable");
var evalResponse = await client.SendAsync("Runtime.evaluate", new { expression = "1 + 2", returnByValue = true });
Assert.Equal(3, evalResponse.result.value.ToObject<int>());
Assert.Equal(3, evalResponse["result"]["value"].ToObject<int>());
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just thinking about an example. Would a user be able to do this?

dynamic evalResponse = await client.SendAsync<ExpandoObject>("Runtime.evaluate", new { expression = "1 + 2", returnByValue = true });
Assert.Equal(3, evalResponse.result.value.ToObject<int>());

Copy link
Contributor Author

@tommymonk tommymonk Sep 29, 2018

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Even easier;

dynamic evalResponse = await client.SendAsync("Runtime.evaluate", new { expression = "1 + 2", returnByValue = true });
Assert.Equal(3, evalResponse.result.value.ToObject<int>());

Or

var evalResponse = await client.SendAsync("Runtime.evaluate", new { expression = "1 + 2", returnByValue = true });
Assert.Equal(3, evalResponse.SelectToken("result.value"));

await client.DetachAsync();

var exception = await Assert.ThrowsAnyAsync<Exception>(()
Expand Down
14 changes: 7 additions & 7 deletions lib/PuppeteerSharp/Browser.cs
Expand Up @@ -224,8 +224,8 @@ public async Task<Page[]> PagesAsync()
/// </remarks>
public async Task<string> GetVersionAsync()
{
dynamic version = await Connection.SendAsync("Browser.getVersion").ConfigureAwait(false);
return version.product.ToString();
var version = await Connection.SendAsync("Browser.getVersion").ConfigureAwait(false);
return version[MessageKeys.Product].AsString();
}

/// <summary>
Expand All @@ -237,8 +237,8 @@ public async Task<string> GetVersionAsync()
/// </remarks>
public async Task<string> GetUserAgentAsync()
{
dynamic version = await Connection.SendAsync("Browser.getVersion").ConfigureAwait(false);
return version.userAgent.ToString();
var version = await Connection.SendAsync("Browser.getVersion").ConfigureAwait(false);
return version[MessageKeys.UserAgent].AsString();
}

/// <summary>
Expand Down Expand Up @@ -305,12 +305,12 @@ internal void ChangeTarget(Target target)

internal async Task<Page> CreatePageInContextAsync(string contextId)
{
var args = new Dictionary<string, object> { ["url"] = "about:blank" };
var args = new Dictionary<string, object> { [MessageKeys.Url] = "about:blank" };
if (contextId != null)
{
args["browserContextId"] = contextId;
args[MessageKeys.BrowserContextId] = contextId;
}
string targetId = (await Connection.SendAsync("Target.createTarget", args)).targetId.ToString();
string targetId = (await Connection.SendAsync("Target.createTarget", args))[MessageKeys.TargetId].AsString();

var target = TargetsMap[targetId];
await target.InitializedTask;
Expand Down