Skip to content

Commit 7f2d093

Browse files
authored
Option for raw v8 script coverage (#2487)
* Synchronize frame tree with the events processing * Option for raw V8 script coverage * fix a test
1 parent 96bda2a commit 7f2d093

17 files changed

+160
-64
lines changed
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
using System.Threading.Tasks;
2+
using NUnit.Framework;
3+
using PuppeteerSharp.Nunit;
4+
using PuppeteerSharp.PageCoverage;
5+
6+
namespace PuppeteerSharp.Tests.CoverageTests
7+
{
8+
public class IncludeRawScriptCoverageTests : PuppeteerPageBaseTest
9+
{
10+
[Test, Retry(2), PuppeteerTest("coverage.spec", "Coverage specs JSCoverage includeRawScriptCoverage", "should not include rawScriptCoverage field when disabled")]
11+
public async Task ShouldNotIncludeRawScriptCoverageFieldWhenDisabled()
12+
{
13+
await Page.Coverage.StartJSCoverageAsync();
14+
await Page.GoToAsync(TestConstants.ServerUrl + "/jscoverage/simple.html", WaitUntilNavigation.Networkidle0);
15+
var coverage = await Page.Coverage.StopJSCoverageAsync();
16+
Assert.That(coverage, Has.Exactly(1).Items);
17+
Assert.IsNull(coverage[0].RawScriptCoverage);
18+
}
19+
20+
[Test, Retry(2), PuppeteerTest("coverage.spec", "Coverage specs JSCoverage includeRawScriptCoverage", "should include rawScriptCoverage field when enabled")]
21+
public async Task ShouldIncludeRawScriptCoverageFieldWhenEnabled()
22+
{
23+
await Page.Coverage.StartJSCoverageAsync(new CoverageStartOptions
24+
{
25+
IncludeRawScriptCoverage = true
26+
});
27+
await Page.GoToAsync(TestConstants.ServerUrl + "/jscoverage/simple.html", WaitUntilNavigation.Networkidle0);
28+
var coverage = await Page.Coverage.StopJSCoverageAsync();
29+
Assert.That(coverage, Has.Exactly(1).Items);
30+
Assert.IsNotNull(coverage[0].RawScriptCoverage);
31+
}
32+
}
33+
}

lib/PuppeteerSharp.Tests/CoverageTests/JSCoverageTests.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,7 @@ public async Task ShouldWorkWithConditionals()
134134
{
135135
const string involved = @"[
136136
{
137+
""RawScriptCoverage"": null,
137138
""Url"": ""http://localhost:<PORT>/jscoverage/involved.html"",
138139
""Ranges"": [
139140
{

lib/PuppeteerSharp.Tests/CoverageTests/JSResetOnNavigationTests.cs

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,6 @@ namespace PuppeteerSharp.Tests.CoverageTests
77
{
88
public class JSResetOnNavigationTests : PuppeteerPageBaseTest
99
{
10-
public JSResetOnNavigationTests() : base()
11-
{
12-
}
13-
1410
[Test, Retry(2), PuppeteerTest("coverage.spec", "Coverage specs resetOnNavigation", "should report scripts across navigations when disabled")]
1511
public async Task ShouldReportScriptsAcrossNavigationsWhenDisabled()
1612
{

lib/PuppeteerSharp/Messaging/CoverageResponseRange.cs

Lines changed: 0 additions & 13 deletions
This file was deleted.
Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,9 @@
1+
using PuppeteerSharp.PageCoverage;
2+
13
namespace PuppeteerSharp.Messaging
24
{
35
internal class ProfilerTakePreciseCoverageResponse
46
{
5-
public ProfilerTakePreciseCoverageResponseItem[] Result { get; set; }
6-
7-
internal class ProfilerTakePreciseCoverageResponseItem
8-
{
9-
public string ScriptId { get; set; }
10-
11-
public ProfilerTakePreciseCoverageResponseFunction[] Functions { get; set; }
12-
}
13-
14-
internal class ProfilerTakePreciseCoverageResponseFunction
15-
{
16-
public CoverageResponseRange[] Ranges { get; set; }
17-
}
7+
public ScriptCoverage[] Result { get; set; }
188
}
199
}

lib/PuppeteerSharp/PageCoverage/CSSCoverage.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -68,17 +68,17 @@ await Task.WhenAll(
6868
_client.SendAsync("CSS.disable"),
6969
_client.SendAsync("DOM.disable")).ConfigureAwait(false);
7070

71-
var styleSheetIdToCoverage = new Dictionary<string, List<CoverageResponseRange>>();
71+
var styleSheetIdToCoverage = new Dictionary<string, List<CoverageRange>>();
7272
foreach (var entry in trackingResponse.RuleUsage)
7373
{
7474
styleSheetIdToCoverage.TryGetValue(entry.StyleSheetId, out var ranges);
7575
if (ranges == null)
7676
{
77-
ranges = new List<CoverageResponseRange>();
77+
ranges = new List<CoverageRange>();
7878
styleSheetIdToCoverage[entry.StyleSheetId] = ranges;
7979
}
8080

81-
ranges.Add(new CoverageResponseRange
81+
ranges.Add(new CoverageRange
8282
{
8383
StartOffset = entry.StartOffset,
8484
EndOffset = entry.EndOffset,
@@ -93,7 +93,7 @@ await Task.WhenAll(
9393
var url = kv.Value.Url;
9494
var text = kv.Value.Source;
9595
styleSheetIdToCoverage.TryGetValue(styleSheetId, out var responseRanges);
96-
var ranges = Coverage.ConvertToDisjointRanges(responseRanges ?? new List<CoverageResponseRange>());
96+
var ranges = Coverage.ConvertToDisjointRanges(responseRanges ?? new List<CoverageRange>());
9797
coverage.Add(new CoverageEntry
9898
{
9999
Url = url,

lib/PuppeteerSharp/PageCoverage/Coverage.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ public Task StartJSCoverageAsync(CoverageStartOptions options = null)
2222
=> _jsCoverage.StartAsync(options ?? new CoverageStartOptions());
2323

2424
/// <inheritdoc/>
25-
public Task<CoverageEntry[]> StopJSCoverageAsync() => _jsCoverage.StopAsync();
25+
public Task<JSCoverageEntry[]> StopJSCoverageAsync() => _jsCoverage.StopAsync();
2626

2727
/// <inheritdoc/>
2828
public Task StartCSSCoverageAsync(CoverageStartOptions options = null)
@@ -31,7 +31,7 @@ public Task StartCSSCoverageAsync(CoverageStartOptions options = null)
3131
/// <inheritdoc/>
3232
public Task<CoverageEntry[]> StopCSSCoverageAsync() => _cssCoverage.StopAsync();
3333

34-
internal static CoverageEntryRange[] ConvertToDisjointRanges(List<CoverageResponseRange> nestedRanges)
34+
internal static CoverageEntryRange[] ConvertToDisjointRanges(List<CoverageRange> nestedRanges)
3535
{
3636
var points = new List<CoverageEntryPoint>();
3737
foreach (var range in nestedRanges)

lib/PuppeteerSharp/PageCoverage/CoverageEntry.cs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,9 @@
1-
using System.Collections.Generic;
2-
31
namespace PuppeteerSharp.PageCoverage
42
{
53
/// <summary>
64
/// Coverage report for all non-anonymous scripts.
75
/// </summary>
8-
public class CoverageEntry
6+
public record CoverageEntry
97
{
108
/// <summary>
119
/// Script URL.

lib/PuppeteerSharp/PageCoverage/CoverageEntryPoint.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ internal class CoverageEntryPoint : IComparable<CoverageEntryPoint>
99

1010
public int Type { get; internal set; }
1111

12-
public CoverageResponseRange Range { get; internal set; }
12+
public CoverageRange Range { get; internal set; }
1313

1414
public int CompareTo(CoverageEntryPoint other)
1515
{

lib/PuppeteerSharp/PageCoverage/CoverageEntryRange.cs

Lines changed: 1 addition & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ namespace PuppeteerSharp.PageCoverage
33
/// <summary>
44
/// Script range.
55
/// </summary>
6-
public class CoverageEntryRange
6+
public record CoverageEntryRange
77
{
88
/// <summary>
99
/// A start offset in text, inclusive.
@@ -16,23 +16,5 @@ public class CoverageEntryRange
1616
/// </summary>
1717
/// <value>End offset.</value>
1818
public int End { get; internal set; }
19-
20-
/// <inheritdoc/>
21-
[System.Diagnostics.CodeAnalysis.SuppressMessage("Design", "CA1062:Validate arguments of public methods", Justification = "Exceptions should not be raised in this type of method.")]
22-
public override bool Equals(object obj)
23-
{
24-
if (obj == null && GetType() != obj.GetType())
25-
{
26-
return false;
27-
}
28-
29-
var range = obj as CoverageEntryRange;
30-
31-
return range.Start == Start &&
32-
range.End == End;
33-
}
34-
35-
/// <inheritdoc/>
36-
public override int GetHashCode() => Start.GetHashCode() * 397 ^ End.GetHashCode() * 397;
3719
}
3820
}

0 commit comments

Comments
 (0)