1+ using System . Collections . Generic ;
12using System . Threading . Tasks ;
23using NUnit . Framework ;
34using PuppeteerSharp . Helpers ;
@@ -11,6 +12,14 @@ public PageWorkerTests() : base()
1112 {
1213 }
1314
15+ private async Task < WebWorker > CreateWorkerAsync ( )
16+ {
17+ var workerCreatedTcs = new TaskCompletionSource < WebWorker > ( ) ;
18+ Page . WorkerCreated += ( _ , e ) => workerCreatedTcs . TrySetResult ( e . Worker ) ;
19+ await Page . EvaluateFunctionAsync ( "() => new Worker('data:text/javascript,1')" ) ;
20+ return await workerCreatedTcs . Task ;
21+ }
22+
1423 [ Test , PuppeteerTest ( "worker.spec" , "Workers" , "Page.workers" ) ]
1524 [ Ignore ( "TODO: Fix me. Too flaky" ) ]
1625 public async Task PageWorkers ( )
@@ -134,6 +143,174 @@ public async Task CanBeClosed()
134143 Assert . That ( await workerClosedTcs . Task , Is . SameAs ( worker ) ) ;
135144 }
136145
146+ [ Test , PuppeteerTest ( "worker.spec" , "Workers console" , "should work" ) ]
147+ public async Task ConsoleShouldWork ( )
148+ {
149+ var worker = await CreateWorkerAsync ( ) ;
150+ var consoleTcs = new TaskCompletionSource < ConsoleMessage > ( ) ;
151+ worker . Console += ( _ , e ) => consoleTcs . TrySetResult ( e . Message ) ;
152+
153+ await worker . EvaluateFunctionAsync ( "() => console.log('hello', 5, {foo: 'bar'})" ) ;
154+
155+ var message = await consoleTcs . Task . WithTimeout ( ) ;
156+ Assert . That ( message . Text , Does . Contain ( "hello" ) . And . Contain ( "5" ) ) ;
157+ Assert . That ( message . Type , Is . EqualTo ( ConsoleType . Log ) ) ;
158+ Assert . That ( message . Args , Has . Count . EqualTo ( 3 ) ) ;
159+ Assert . That ( await message . Args [ 0 ] . JsonValueAsync < string > ( ) , Is . EqualTo ( "hello" ) ) ;
160+ Assert . That ( await message . Args [ 1 ] . JsonValueAsync < int > ( ) , Is . EqualTo ( 5 ) ) ;
161+ }
162+
163+ [ Test , PuppeteerTest ( "worker.spec" , "Workers console" , "should work for Error instances" ) ]
164+ public async Task ConsoleShouldWorkForErrorInstances ( )
165+ {
166+ var worker = await CreateWorkerAsync ( ) ;
167+ var consoleTcs = new TaskCompletionSource < ConsoleMessage > ( ) ;
168+ worker . Console += ( _ , e ) => consoleTcs . TrySetResult ( e . Message ) ;
169+
170+ await worker . EvaluateFunctionAsync ( "() => console.log(new Error('test error'))" ) ;
171+
172+ var message = await consoleTcs . Task . WithTimeout ( ) ;
173+ Assert . That ( message . Text , Does . Contain ( "test error" ) . Or . EqualTo ( "JSHandle@error" ) ) ;
174+ Assert . That ( message . Type , Is . EqualTo ( ConsoleType . Log ) ) ;
175+ Assert . That ( message . Args , Has . Count . EqualTo ( 1 ) ) ;
176+ }
177+
178+ [ Test , PuppeteerTest ( "worker.spec" , "Workers console" , "should return the first line of the error message in text()" ) ]
179+ public async Task ConsoleShouldReturnFirstLineOfErrorMessageInText ( )
180+ {
181+ var worker = await CreateWorkerAsync ( ) ;
182+ var consoleTcs = new TaskCompletionSource < ConsoleMessage > ( ) ;
183+ worker . Console += ( _ , e ) => consoleTcs . TrySetResult ( e . Message ) ;
184+
185+ await worker . EvaluateFunctionAsync ( "() => console.log(new Error('test error\\ nsecond line'))" ) ;
186+
187+ var message = await consoleTcs . Task . WithTimeout ( ) ;
188+ Assert . That ( message . Text , Does . Contain ( "test error" ) . Or . EqualTo ( "JSHandle@error" ) ) ;
189+ Assert . That ( message . Type , Is . EqualTo ( ConsoleType . Log ) ) ;
190+ }
191+
192+ [ Test , PuppeteerTest ( "worker.spec" , "Workers console" , "should work for console.trace" ) ]
193+ public async Task ConsoleShouldWorkForConsoleTrace ( )
194+ {
195+ var worker = await CreateWorkerAsync ( ) ;
196+ var consoleTcs = new TaskCompletionSource < ConsoleMessage > ( ) ;
197+ worker . Console += ( _ , e ) => consoleTcs . TrySetResult ( e . Message ) ;
198+
199+ await worker . EvaluateFunctionAsync ( "() => console.trace('calling console.trace')" ) ;
200+
201+ var message = await consoleTcs . Task . WithTimeout ( ) ;
202+ Assert . That ( message . Type , Is . EqualTo ( ConsoleType . Trace ) ) ;
203+ Assert . That ( message . Text , Is . EqualTo ( "calling console.trace" ) ) ;
204+ }
205+
206+ [ Test , PuppeteerTest ( "worker.spec" , "Workers console" , "should work for console.dir" ) ]
207+ public async Task ConsoleShouldWorkForConsoleDir ( )
208+ {
209+ var worker = await CreateWorkerAsync ( ) ;
210+ var consoleTcs = new TaskCompletionSource < ConsoleMessage > ( ) ;
211+ worker . Console += ( _ , e ) => consoleTcs . TrySetResult ( e . Message ) ;
212+
213+ await worker . EvaluateFunctionAsync ( "() => console.dir('calling console.dir')" ) ;
214+
215+ var message = await consoleTcs . Task . WithTimeout ( ) ;
216+ Assert . That ( message . Type , Is . EqualTo ( ConsoleType . Dir ) ) ;
217+ Assert . That ( message . Text , Is . EqualTo ( "calling console.dir" ) ) ;
218+ }
219+
220+ [ Test , PuppeteerTest ( "worker.spec" , "Workers console" , "should work for console.warn" ) ]
221+ public async Task ConsoleShouldWorkForConsoleWarn ( )
222+ {
223+ var worker = await CreateWorkerAsync ( ) ;
224+ var consoleTcs = new TaskCompletionSource < ConsoleMessage > ( ) ;
225+ worker . Console += ( _ , e ) => consoleTcs . TrySetResult ( e . Message ) ;
226+
227+ await worker . EvaluateFunctionAsync ( "() => console.warn('calling console.warn')" ) ;
228+
229+ var message = await consoleTcs . Task . WithTimeout ( ) ;
230+ Assert . That ( message . Type , Is . EqualTo ( ConsoleType . Warning ) ) ;
231+ Assert . That ( message . Text , Is . EqualTo ( "calling console.warn" ) ) ;
232+ }
233+
234+ [ Test , PuppeteerTest ( "worker.spec" , "Workers console" , "should work for console.error" ) ]
235+ public async Task ConsoleShouldWorkForConsoleError ( )
236+ {
237+ var worker = await CreateWorkerAsync ( ) ;
238+ var consoleTcs = new TaskCompletionSource < ConsoleMessage > ( ) ;
239+ worker . Console += ( _ , e ) => consoleTcs . TrySetResult ( e . Message ) ;
240+
241+ await worker . EvaluateFunctionAsync ( "() => console.error('calling console.error')" ) ;
242+
243+ var message = await consoleTcs . Task . WithTimeout ( ) ;
244+ Assert . That ( message . Type , Is . EqualTo ( ConsoleType . Error ) ) ;
245+ Assert . That ( message . Text , Is . EqualTo ( "calling console.error" ) ) ;
246+ }
247+
248+ [ Test , PuppeteerTest ( "worker.spec" , "Workers console" , "should work for console.log with promise" ) ]
249+ public async Task ConsoleShouldWorkForConsoleLogWithPromise ( )
250+ {
251+ var worker = await CreateWorkerAsync ( ) ;
252+ var consoleTcs = new TaskCompletionSource < ConsoleMessage > ( ) ;
253+ worker . Console += ( _ , e ) => consoleTcs . TrySetResult ( e . Message ) ;
254+
255+ await worker . EvaluateFunctionAsync ( "() => console.log(Promise.resolve('should not wait until resolved!'))" ) ;
256+
257+ var message = await consoleTcs . Task . WithTimeout ( ) ;
258+ Assert . That ( message . Type , Is . EqualTo ( ConsoleType . Log ) ) ;
259+ Assert . That ( message . Text , Does . Contain ( "promise" ) . Or . Contain ( "Promise" ) ) ;
260+ }
261+
262+ [ Test , PuppeteerTest ( "worker.spec" , "Workers console" , "should work for different console API calls with timing functions" ) ]
263+ public async Task ConsoleShouldWorkForTimingFunctions ( )
264+ {
265+ var worker = await CreateWorkerAsync ( ) ;
266+ var messages = new List < ConsoleMessage > ( ) ;
267+ worker . Console += ( _ , e ) => messages . Add ( e . Message ) ;
268+
269+ await worker . EvaluateFunctionAsync ( @"() => {
270+ console.time('calling console.time');
271+ console.timeEnd('calling console.time');
272+ }" ) ;
273+
274+ Assert . That ( messages , Has . Count . EqualTo ( 1 ) ) ;
275+ Assert . That ( messages [ 0 ] . Type , Is . EqualTo ( ConsoleType . TimeEnd ) ) ;
276+ Assert . That ( messages [ 0 ] . Text , Does . Contain ( "calling console.time" ) ) ;
277+ }
278+
279+ [ Test , PuppeteerTest ( "worker.spec" , "Workers console" , "should work for different console API calls with group functions" ) ]
280+ public async Task ConsoleShouldWorkForGroupFunctions ( )
281+ {
282+ var worker = await CreateWorkerAsync ( ) ;
283+ var messages = new List < ConsoleMessage > ( ) ;
284+ worker . Console += ( _ , e ) => messages . Add ( e . Message ) ;
285+
286+ await worker . EvaluateFunctionAsync ( @"() => {
287+ console.group('calling console.group');
288+ console.groupEnd();
289+ }" ) ;
290+
291+ Assert . That ( messages , Has . Count . EqualTo ( 2 ) ) ;
292+ Assert . That ( messages [ 0 ] . Type , Is . EqualTo ( ConsoleType . StartGroup ) ) ;
293+ Assert . That ( messages [ 1 ] . Type , Is . EqualTo ( ConsoleType . EndGroup ) ) ;
294+ Assert . That ( messages [ 0 ] . Text , Does . Contain ( "calling console.group" ) ) ;
295+ }
296+
297+ [ Test , PuppeteerTest ( "worker.spec" , "Workers console" , "should return remote objects" ) ]
298+ public async Task ConsoleShouldReturnRemoteObjects ( )
299+ {
300+ var worker = await CreateWorkerAsync ( ) ;
301+ var consoleTcs = new TaskCompletionSource < ConsoleMessage > ( ) ;
302+ worker . Console += ( _ , e ) => consoleTcs . TrySetResult ( e . Message ) ;
303+
304+ await worker . EvaluateFunctionAsync ( @"() => {
305+ globalThis.test = 1;
306+ console.log(1, 2, 3, globalThis);
307+ }" ) ;
308+
309+ var message = await consoleTcs . Task . WithTimeout ( ) ;
310+ Assert . That ( message . Text , Does . Contain ( "1 2 3" ) ) ;
311+ Assert . That ( message . Args , Has . Count . EqualTo ( 4 ) ) ;
312+ }
313+
137314 [ Test , PuppeteerTest ( "worker.spec" , "Workers" , "should work with waitForNetworkIdle" ) ]
138315 public async Task ShouldWorkWithWaitForNetworkIdle ( )
139316 {
0 commit comments