2
2
3
3
from ... import create_console_api_message , recursive_compare
4
4
5
+ pytestmark = pytest .mark .asyncio
6
+
5
7
6
- @pytest .mark .asyncio
7
8
async def test_subscribe_one_user_context (bidi_session , subscribe_events , create_user_context , wait_for_events ):
8
9
user_context = await create_user_context ()
9
10
@@ -33,7 +34,6 @@ async def test_subscribe_one_user_context(bidi_session, subscribe_events, create
33
34
)
34
35
35
36
36
- @pytest .mark .asyncio
37
37
async def test_subscribe_multiple_user_contexts (bidi_session , subscribe_events , wait_for_events , create_user_context ):
38
38
user_context = await create_user_context ()
39
39
@@ -54,3 +54,291 @@ async def test_subscribe_multiple_user_contexts(bidi_session, subscribe_events,
54
54
await create_console_api_message (bidi_session , other_context , "text2" )
55
55
events = await waiter .get_events (lambda events : len (events ) >= 2 )
56
56
assert len (events ) == 2
57
+
58
+
59
+ async def test_buffered_event (
60
+ bidi_session , subscribe_events , create_user_context , wait_for_events
61
+ ):
62
+ user_context = await create_user_context ()
63
+
64
+ new_context = await bidi_session .browsing_context .create (
65
+ type_hint = "tab" , user_context = user_context
66
+ )
67
+
68
+ with wait_for_events (["log.entryAdded" ]) as waiter :
69
+ await create_console_api_message (bidi_session , new_context , "text1" )
70
+ events = await waiter .get_events (lambda events : len (events ) >= 0 )
71
+
72
+ # Make sure we didn't receive any events
73
+ assert len (events ) == 0
74
+
75
+ # Subscribe to user context and make sure we received the buffered event.
76
+ await subscribe_events (events = ["log.entryAdded" ], user_contexts = [user_context ])
77
+
78
+ events = await waiter .get_events (lambda events : len (events ) >= 1 )
79
+
80
+ assert len (events ) == 1
81
+ recursive_compare (
82
+ {
83
+ "text" : "text1" ,
84
+ },
85
+ events [0 ][1 ],
86
+ )
87
+
88
+
89
+ async def test_subscribe_to_user_context_and_then_globally (
90
+ bidi_session , subscribe_events , create_user_context , new_tab , wait_for_events
91
+ ):
92
+ user_context = await create_user_context ()
93
+ new_context_in_user_context = await bidi_session .browsing_context .create (
94
+ user_context = user_context , type_hint = "tab"
95
+ )
96
+
97
+ # Subscribe for log events to a specific user context
98
+ await subscribe_events (events = ["log.entryAdded" ], user_contexts = [user_context ])
99
+
100
+ with wait_for_events (["log.entryAdded" ]) as waiter :
101
+ # Trigger console event in another user context
102
+ event_expected_text = await create_console_api_message (
103
+ bidi_session , new_tab , "text1"
104
+ )
105
+
106
+ events = await waiter .get_events (lambda events : len (events ) >= 0 )
107
+
108
+ assert len (events ) == 0
109
+
110
+ expected_text = await create_console_api_message (
111
+ bidi_session , new_context_in_user_context , "text2"
112
+ )
113
+ events = await waiter .get_events (lambda events : len (events ) >= 1 )
114
+
115
+ assert len (events ) == 1
116
+ recursive_compare (
117
+ {
118
+ "text" : expected_text ,
119
+ },
120
+ events [0 ][1 ],
121
+ )
122
+
123
+ # Subscribe for log events globally
124
+ await subscribe_events (events = ["log.entryAdded" ])
125
+
126
+ events = await waiter .get_events (lambda events : len (events ) >= 2 )
127
+
128
+ # Check that we received the buffered event
129
+ assert len (events ) == 2
130
+ recursive_compare (
131
+ {
132
+ "text" : event_expected_text ,
133
+ },
134
+ events [1 ][1 ],
135
+ )
136
+
137
+ # Trigger again events in each context
138
+ expected_text = await create_console_api_message (bidi_session , new_tab , "text3" )
139
+ events = await waiter .get_events (lambda events : len (events ) >= 3 )
140
+
141
+ assert len (events ) == 3
142
+ recursive_compare (
143
+ {
144
+ "text" : expected_text ,
145
+ },
146
+ events [2 ][1 ],
147
+ )
148
+
149
+ expected_text = await create_console_api_message (
150
+ bidi_session , new_context_in_user_context , "text4"
151
+ )
152
+ events = await waiter .get_events (lambda events : len (events ) >= 4 )
153
+
154
+ assert len (events ) == 4
155
+ recursive_compare (
156
+ {
157
+ "text" : expected_text ,
158
+ },
159
+ events [3 ][1 ],
160
+ )
161
+
162
+
163
+ async def test_subscribe_to_user_context_and_then_to_browsing_context (
164
+ bidi_session , subscribe_events , create_user_context , wait_for_events
165
+ ):
166
+ user_context = await create_user_context ()
167
+ new_context_in_user_context = await bidi_session .browsing_context .create (
168
+ user_context = user_context , type_hint = "tab"
169
+ )
170
+
171
+ # Subscribe for log events to a specific user context
172
+ await subscribe_events (events = ["log.entryAdded" ], user_contexts = [user_context ])
173
+
174
+ with wait_for_events (["log.entryAdded" ]) as waiter :
175
+ # Trigger console event in the observed context
176
+ expected_text = await create_console_api_message (
177
+ bidi_session , new_context_in_user_context , "text"
178
+ )
179
+ events = await waiter .get_events (lambda events : len (events ) >= 1 )
180
+
181
+ assert len (events ) == 1
182
+ recursive_compare (
183
+ {
184
+ "text" : expected_text ,
185
+ },
186
+ events [0 ][1 ],
187
+ )
188
+
189
+ # Subscribe for log events to the browsing context
190
+ # in the observed user context.
191
+ await subscribe_events (
192
+ events = ["log.entryAdded" ], contexts = [new_context_in_user_context ["context" ]]
193
+ )
194
+
195
+ with wait_for_events (["log.entryAdded" ]) as waiter :
196
+ # Trigger again the event
197
+ expected_text = await create_console_api_message (
198
+ bidi_session , new_context_in_user_context , "text2"
199
+ )
200
+ events = await waiter .get_events (lambda events : len (events ) >= 1 )
201
+
202
+ assert len (events ) == 1
203
+ recursive_compare (
204
+ {
205
+ "text" : expected_text ,
206
+ },
207
+ events [0 ][1 ],
208
+ )
209
+
210
+ # Create a new context in the default user context
211
+ new_context_in_default_user_context = await bidi_session .browsing_context .create (
212
+ type_hint = "tab"
213
+ )
214
+
215
+ # Subscribe for log events to the browsing context
216
+ # in the default user context.
217
+ await subscribe_events (
218
+ events = ["log.entryAdded" ],
219
+ contexts = [new_context_in_default_user_context ["context" ]],
220
+ )
221
+
222
+ with wait_for_events (["log.entryAdded" ]) as waiter :
223
+ # Trigger again the event
224
+ expected_text = await create_console_api_message (
225
+ bidi_session , new_context_in_default_user_context , "text3"
226
+ )
227
+ events = await waiter .get_events (lambda events : len (events ) >= 1 )
228
+
229
+ assert len (events ) == 1
230
+ recursive_compare (
231
+ {
232
+ "text" : expected_text ,
233
+ },
234
+ events [0 ][1 ],
235
+ )
236
+
237
+
238
+ async def test_subscribe_globally_and_then_to_user_context (
239
+ bidi_session , subscribe_events , create_user_context , wait_for_events
240
+ ):
241
+ user_context = await create_user_context ()
242
+ new_context_in_user_context = await bidi_session .browsing_context .create (
243
+ user_context = user_context , type_hint = "tab"
244
+ )
245
+
246
+ # Subscribe for log events globally
247
+ await subscribe_events (events = ["log.entryAdded" ])
248
+
249
+ with wait_for_events (["log.entryAdded" ]) as waiter :
250
+ expected_text = await create_console_api_message (
251
+ bidi_session , new_context_in_user_context , "text"
252
+ )
253
+ events = await waiter .get_events (lambda events : len (events ) >= 1 )
254
+
255
+ assert len (events ) == 1
256
+ recursive_compare (
257
+ {
258
+ "text" : expected_text ,
259
+ },
260
+ events [0 ][1 ],
261
+ )
262
+
263
+ # Subscribe for log events to a specific user context
264
+ await subscribe_events (events = ["log.entryAdded" ], user_contexts = [user_context ])
265
+
266
+ with wait_for_events (["log.entryAdded" ]) as waiter :
267
+ # Trigger the event again.
268
+ expected_text = await create_console_api_message (
269
+ bidi_session , new_context_in_user_context , "text2"
270
+ )
271
+ events = await waiter .get_events (lambda events : len (events ) >= 1 )
272
+
273
+ assert len (events ) == 1
274
+ recursive_compare (
275
+ {
276
+ "text" : expected_text ,
277
+ },
278
+ events [0 ][1 ],
279
+ )
280
+
281
+
282
+ async def test_subscribe_to_browsing_context_and_then_to_user_context (
283
+ bidi_session , subscribe_events , create_user_context , wait_for_events
284
+ ):
285
+ user_context = await create_user_context ()
286
+ new_context_in_user_context = await bidi_session .browsing_context .create (
287
+ user_context = user_context , type_hint = "tab"
288
+ )
289
+
290
+ # Subscribe for log events to browsing context
291
+ await subscribe_events (
292
+ events = ["log.entryAdded" ], contexts = [new_context_in_user_context ["context" ]]
293
+ )
294
+
295
+ with wait_for_events (["log.entryAdded" ]) as waiter :
296
+ expected_text = await create_console_api_message (
297
+ bidi_session , new_context_in_user_context , "text"
298
+ )
299
+ events = await waiter .get_events (lambda events : len (events ) >= 1 )
300
+
301
+ assert len (events ) == 1
302
+ recursive_compare (
303
+ {
304
+ "text" : expected_text ,
305
+ },
306
+ events [0 ][1 ],
307
+ )
308
+
309
+ # Subscribe for log events to a specific user context
310
+ await subscribe_events (events = ["log.entryAdded" ], user_contexts = [user_context ])
311
+
312
+ with wait_for_events (["log.entryAdded" ]) as waiter :
313
+ # Trigger the event again.
314
+ expected_text = await create_console_api_message (
315
+ bidi_session , new_context_in_user_context , "text2"
316
+ )
317
+ events = await waiter .get_events (lambda events : len (events ) >= 1 )
318
+
319
+ assert len (events ) == 1
320
+ recursive_compare (
321
+ {
322
+ "text" : expected_text ,
323
+ },
324
+ events [0 ][1 ],
325
+ )
326
+
327
+ # Create a new context in the targeted user context
328
+ new_context_in_user_context_2 = await bidi_session .browsing_context .create (
329
+ user_context = user_context , type_hint = "tab"
330
+ )
331
+
332
+ # Trigger again the event
333
+ expected_text = await create_console_api_message (
334
+ bidi_session , new_context_in_user_context_2 , "text3"
335
+ )
336
+ events = await waiter .get_events (lambda events : len (events ) >= 2 )
337
+
338
+ assert len (events ) == 2
339
+ recursive_compare (
340
+ {
341
+ "text" : expected_text ,
342
+ },
343
+ events [1 ][1 ],
344
+ )
0 commit comments