Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
443 changes: 443 additions & 0 deletions src/PlaywrightNative.Tests/Library/Coverage/CoverageTests.cs

Large diffs are not rendered by default.

14 changes: 5 additions & 9 deletions src/PlaywrightNative/Chromium/CRTracing.cs
Original file line number Diff line number Diff line change
Expand Up @@ -50,10 +50,10 @@ internal CRTracing(CRSession session, IBrowserContext context)
}

/// <inheritdoc/>
public Task StartAsync(PlaywrightNative.TracingStartOptions options)
public async Task StartAsync(PlaywrightNative.TracingStartOptions options)
{
OfficialTraceSession session = OfficialSession();
session.Start(options, chunk: false);
await session.StartAsync(options, chunk: false).ConfigureAwait(false);

// Keep an in-memory chrome-events buffer for Direct StopAsync(.json) paths
// (groups / non-empty traceEvents). Official zip remains for .zip stops.
Expand All @@ -65,8 +65,6 @@ public Task StartAsync(PlaywrightNative.TracingStartOptions options)
_events.Add(ChromeTraceEvents.GroupBegin("__tracing__"));
_events.Add(ChromeTraceEvents.GroupEnd("__tracing__"));
}

return Task.CompletedTask;
}

Task ITracing.StartAsync(Microsoft.Playwright.TracingStartOptions options)
Expand Down Expand Up @@ -98,12 +96,12 @@ public async Task StartAsync(string categories = null)
}

/// <inheritdoc/>
public Task StartChunkAsync(string name = default, string title = default)
public async Task StartChunkAsync(string name = default, string title = default)
{
OfficialTraceSession official = OfficialSessionOrNull();
if (official != null && official.IsRecording)
{
official.Start(new TracingStartOptions { Name = name, Title = title }, chunk: true);
await official.StartAsync(new TracingStartOptions { Name = name, Title = title }, chunk: true).ConfigureAwait(false);
lock (_gate)
{
_events.Clear();
Expand All @@ -113,7 +111,7 @@ public Task StartChunkAsync(string name = default, string title = default)
_events.Add(ChromeTraceEvents.GroupEnd("__tracing__"));
}

return Task.CompletedTask;
return;
}

_ = name;
Expand All @@ -127,8 +125,6 @@ public Task StartChunkAsync(string name = default, string title = default)

_events.Clear();
}

return Task.CompletedTask;
}

/// <inheritdoc/>
Expand Down
7 changes: 7 additions & 0 deletions src/PlaywrightNative/Contracts/Models/TracingStartOptions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ public TracingStartOptions(TracingStartOptions clone)

ScreenSnapshots = clone.ScreenSnapshots;
AriaSnapshots = clone.AriaSnapshots;
Coverage = clone.Coverage;
}

/// <summary>
Expand All @@ -55,5 +56,11 @@ public TracingStartOptions(TracingStartOptions clone)
/// with before/action/after phases.
/// </summary>
public bool? AriaSnapshots { get; set; }

/// <summary>
/// Official hidden <c>_coverage</c> option. Collects istanbul
/// <c>window.__coverage__</c> counters into the trace.
/// </summary>
internal bool? Coverage { get; set; }
}
}
16 changes: 8 additions & 8 deletions src/PlaywrightNative/Helpers/ActionTrace.cs
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ internal static IDisposable SuppressRecording()
return new SuppressScope();
}

internal static Task RunAsync(IBrowserContext context, string title, string className, string method, Func<Task> body, object parameters = null, object result = null)
internal static Task RunAsync(IBrowserContext context, string title, string className, string method, Func<Task> body, object parameters = null, object result = null, IPage page = null)
{
OfficialTraceSession session = OfficialTraceSession.Active(context);
if (session == null || Suppress.Value > 0 || Depth.Value > 0)
Expand All @@ -52,10 +52,10 @@ internal static Task RunAsync(IBrowserContext context, string title, string clas
return body();
}

return RunInsideAsync(() => session.ContinueActionAsync(callId, body, result));
return RunInsideAsync(() => session.ContinueActionAsync(callId, body, result, page));
}

internal static Task<T> RunAsync<T>(IBrowserContext context, string title, string className, string method, Func<Task<T>> body, object parameters = null, object result = null)
internal static Task<T> RunAsync<T>(IBrowserContext context, string title, string className, string method, Func<Task<T>> body, object parameters = null, object result = null, IPage page = null)
{
OfficialTraceSession session = OfficialTraceSession.Active(context);
if (session == null || Suppress.Value > 0 || Depth.Value > 0)
Expand All @@ -69,10 +69,10 @@ internal static Task<T> RunAsync<T>(IBrowserContext context, string title, strin
return body();
}

return RunInsideAsync(() => session.ContinueActionAsync(callId, body, result));
return RunInsideAsync(() => session.ContinueActionAsync(callId, body, result, page));
}

internal static Task<T> EvaluateUserAsync<T>(IBrowserContext context, Func<Task<T>> body, int consoleMessageCount = 0)
internal static Task<T> EvaluateUserAsync<T>(IBrowserContext context, Func<Task<T>> body, int consoleMessageCount = 0, IPage page = null)
{
if (body == null)
{
Expand All @@ -92,10 +92,10 @@ internal static Task<T> EvaluateUserAsync<T>(IBrowserContext context, Func<Task<
}

session.NoteEvaluateConsoleBaseline(callId, consoleMessageCount);
return RunInsideAsync(() => session.ContinueActionAsync(callId, body, null));
return RunInsideAsync(() => session.ContinueActionAsync(callId, body, null, page));
}

internal static Task<T> EvaluateHandleUserAsync<T>(IBrowserContext context, Func<Task<T>> body, int consoleMessageCount = 0)
internal static Task<T> EvaluateHandleUserAsync<T>(IBrowserContext context, Func<Task<T>> body, int consoleMessageCount = 0, IPage page = null)
{
if (body == null)
{
Expand All @@ -115,7 +115,7 @@ internal static Task<T> EvaluateHandleUserAsync<T>(IBrowserContext context, Func
}

session.NoteEvaluateConsoleBaseline(callId, consoleMessageCount);
return RunInsideAsync(() => session.ContinueActionAsync(callId, body, null));
return RunInsideAsync(() => session.ContinueActionAsync(callId, body, null, page));
}

internal static string NavigateTitle(string url)
Expand Down
Loading
Loading