@@ -281,7 +281,7 @@ describe("When working with PolyPlug,", function() {
281
281
} ) ;
282
282
describe ( "when registering events in the DOM," , function ( ) {
283
283
it ( "raises the expected polyplugSend event with the event context" , function ( done ) {
284
- document . addEventListener ( "polyplugSend" , function ( e ) {
284
+ function eventListener ( e ) {
285
285
const detail = JSON . parse ( e . detail ) ;
286
286
expect ( detail . type ) . toEqual ( "click" ) ;
287
287
expect ( detail . listener ) . toEqual ( "myTestClicker" ) ;
@@ -300,12 +300,14 @@ describe("When working with PolyPlug,", function() {
300
300
}
301
301
]
302
302
} ) ;
303
- done ( )
304
- } )
303
+ done ( ) ;
304
+ }
305
+ document . addEventListener ( "polyplugSend" , eventListener ) ;
305
306
plug . registerEvent ( { id : "testButton" } , "click" , "myTestClicker" ) ;
306
307
const button = plug . getElements ( { id : "testButton" } ) [ 0 ] ;
307
308
const clickEvent = new Event ( "click" ) ;
308
309
button . dispatchEvent ( clickEvent ) ;
310
+ document . removeEventListener ( "polyplugSend" , eventListener ) ;
309
311
} ) ;
310
312
} ) ;
311
313
describe ( "when handling incoming messages," , function ( ) {
@@ -349,5 +351,87 @@ describe("When working with PolyPlug,", function() {
349
351
const expected = JSON . stringify ( target ) ;
350
352
expect ( actual ) . toEqual ( expected ) ;
351
353
} ) ;
354
+ it ( "the registerEvent message registers an event" , function ( done ) {
355
+ const msg = JSON . stringify ( {
356
+ type : "registerEvent" ,
357
+ query : {
358
+ id : "testButton2"
359
+ } ,
360
+ eventType : "click" ,
361
+ listener : "my_on_click_function"
362
+ } ) ;
363
+ plug . receiveMessage ( msg ) ;
364
+ function eventListener ( e ) {
365
+ const detail = JSON . parse ( e . detail ) ;
366
+ expect ( detail . type ) . toEqual ( "click" ) ;
367
+ expect ( detail . listener ) . toEqual ( "my_on_click_function" ) ;
368
+ expect ( detail . target ) . toEqual ( {
369
+ "nodeType" : 1 ,
370
+ "tagName" : "button" ,
371
+ "attributes" : {
372
+ "id" : "testButton2"
373
+ } ,
374
+ "childNodes" : [
375
+ {
376
+ "nodeType" : 3 ,
377
+ "nodeName" : "#text" ,
378
+ "nodeValue" : "Click Me Again" ,
379
+ "childNodes" : [ ]
380
+ }
381
+ ]
382
+ } ) ;
383
+ done ( ) ;
384
+ }
385
+ document . addEventListener ( "polyplugSend" , eventListener ) ;
386
+ const button = plug . getElements ( { id : "testButton2" } ) [ 0 ] ;
387
+ const clickEvent = new Event ( "click" ) ;
388
+ button . dispatchEvent ( clickEvent ) ;
389
+ document . removeEventListener ( "polyplugSend" , eventListener ) ;
390
+ } ) ;
391
+ it ( "the stdout message dispatches a polyplugStdout event" , function ( done ) {
392
+ function eventListener ( e ) {
393
+ expect ( e . detail ) . toEqual ( "Hello, world" ) ;
394
+ done ( ) ;
395
+ }
396
+ document . addEventListener ( "polyplugStdout" , eventListener ) ;
397
+ const msg = JSON . stringify ( {
398
+ type : "stdout" ,
399
+ content : "Hello, world"
400
+ } ) ;
401
+ plug . receiveMessage ( msg ) ;
402
+ document . removeEventListener ( "polyplugStdout" , eventListener ) ;
403
+ } ) ;
404
+ it ( "the stderr message dispatches a polyplugStdout event" , function ( done ) {
405
+ function eventListener ( e ) {
406
+ expect ( e . detail ) . toEqual ( "Hello, stderr" ) ;
407
+ done ( ) ;
408
+ }
409
+ document . addEventListener ( "polyplugStderr" , eventListener ) ;
410
+ const msg = JSON . stringify ( {
411
+ type : "stderr" ,
412
+ content : "Hello, stderr"
413
+ } ) ;
414
+ plug . receiveMessage ( msg ) ;
415
+ document . removeEventListener ( "polyplugStderr" , eventListener ) ;
416
+ } ) ;
417
+ it ( "the error message dispatches a polyplugErrorevent" , function ( done ) {
418
+ // Arbitrary error context from the remote interpreter.
419
+ const errorContext = {
420
+ exception : "ValueError" ,
421
+ message : "The thing went bang!" ,
422
+ stackTrace : [ "frame1" , "frame2" , "frame3" ]
423
+ }
424
+ function eventListener ( e ) {
425
+ expect ( e . detail ) . toEqual ( errorContext ) ;
426
+ done ( ) ;
427
+ }
428
+ document . addEventListener ( "polyplugError" , eventListener ) ;
429
+ const msg = JSON . stringify ( {
430
+ type : "error" ,
431
+ context : errorContext
432
+ } ) ;
433
+ plug . receiveMessage ( msg ) ;
434
+ document . removeEventListener ( "polyplugError" , eventListener ) ;
435
+ } ) ;
352
436
} ) ;
353
437
} ) ;
0 commit comments