1+ using  System . Linq ; 
2+ using  System . Collections . Generic ; 
3+ using  System . Threading . Tasks ; 
4+ using  Newtonsoft . Json . Linq ; 
5+ using  Xunit ; 
6+ 
7+ namespace  PuppeteerSharp . Tests . Page . Events 
8+ { 
9+     [ Collection ( "PuppeteerLoaderFixture collection" ) ] 
10+     public  class  ConsoleTests  :  PuppeteerPageBaseTest 
11+     { 
12+         [ Fact ] 
13+         public  async  Task  ShouldWork ( ) 
14+         { 
15+             ConsoleMessage  message  =  null ; 
16+ 
17+             void  EventHandler ( object  sender ,  ConsoleEventArgs  e ) 
18+             { 
19+                 message  =  e . Message ; 
20+                 Page . Console  -=  EventHandler ; 
21+             } 
22+ 
23+             Page . Console  +=  EventHandler ; 
24+ 
25+             await  Page . EvaluateExpressionAsync ( "console.log('hello', 5, {foo: 'bar'})" ) ; 
26+             
27+             var  obj  =  new  Dictionary < string ,  object >  { { "foo" ,  "bar" } } ; 
28+ 
29+             Assert . Equal ( "hello 5 JSHandle@object" ,  message . Text ) ; 
30+             Assert . Equal ( ConsoleType . Log ,  message . Type ) ; 
31+ 
32+             Assert . Equal ( "hello" ,  await  message . Args [ 0 ] . JsonValue ( ) ) ; 
33+             Assert . Equal ( 5 ,  await  message . Args [ 1 ] . JsonValue < float > ( ) ) ; 
34+             Assert . Equal ( obj ,  await  message . Args [ 2 ] . JsonValue < Dictionary < string ,  object > > ( ) ) ; 
35+             Assert . Equal ( "bar" ,  ( await  message . Args [ 2 ] . JsonValue < dynamic > ( ) ) . foo . ToString ( ) ) ; 
36+         } 
37+ 
38+         [ Fact ] 
39+         public  async  Task  ShouldWorkForDifferentConsoleApiCalls ( ) 
40+         { 
41+             var  messages  =  new  List < ConsoleMessage > ( ) ; 
42+ 
43+             Page . Console  +=  ( sender ,  e )  =>  messages . Add ( e . Message ) ; 
44+ 
45+             await  Page . EvaluateFunctionAsync ( @"() => { 
46+               // A pair of time/timeEnd generates only one Console API call. 
47+               console.time('calling console.time'); 
48+               console.timeEnd('calling console.time'); 
49+               console.trace('calling console.trace'); 
50+               console.dir('calling console.dir'); 
51+               console.warn('calling console.warn'); 
52+               console.error('calling console.error'); 
53+               console.log(Promise.resolve('should not wait until resolved!')); 
54+             }" ) ; 
55+ 
56+             Assert . Equal ( new [ ] 
57+             { 
58+                 ConsoleType . TimeEnd , 
59+                 ConsoleType . Trace , 
60+                 ConsoleType . Dir , 
61+                 ConsoleType . Warning , 
62+                 ConsoleType . Error , 
63+                 ConsoleType . Log 
64+             } ,  messages 
65+                 . Select ( _ =>  _ . Type ) 
66+                 . ToArray ( ) ) ; 
67+ 
68+             Assert . Contains ( "calling console.time" ,  messages [ 0 ] . Text ) ; 
69+ 
70+             Assert . Equal ( new [ ] 
71+             { 
72+                 "calling console.trace" , 
73+                 "calling console.dir" , 
74+                 "calling console.warn" , 
75+                 "calling console.error" , 
76+                 "JSHandle@promise" 
77+             } ,  messages 
78+                 . Skip ( 1 ) 
79+                 . Select ( msg =>  msg . Text ) 
80+                 . ToArray ( ) ) ; 
81+         } 
82+ 
83+         [ Fact ] 
84+         public  async  Task  ShouldNotFailForWindowObject ( ) 
85+         { 
86+             ConsoleMessage  message  =  null ; 
87+ 
88+             void  EventHandler ( object  sender ,  ConsoleEventArgs  e ) 
89+             { 
90+                 message  =  e . Message ; 
91+                 Page . Console  -=  EventHandler ; 
92+             } 
93+ 
94+             Page . Console  +=  EventHandler ; 
95+ 
96+             await  Page . EvaluateExpressionAsync ( "console.error(window)" ) ; 
97+ 
98+             Assert . Equal ( "JSHandle@object" ,  message . Text ) ; 
99+         } 
100+     } 
101+ } 
0 commit comments