@@ -388,4 +388,178 @@ o.spec("updateElement", function() {
388
388
o ( root . childNodes . length ) . equals ( 3 )
389
389
o ( x ) . notEquals ( y ) // this used to be a recycling pool test
390
390
} )
391
+ o . spec ( "element node with `is` attribute" , function ( ) {
392
+ o ( "recreate element node with `is` attribute (set `is`)" , function ( ) {
393
+ var vnode = m ( "a" )
394
+ var updated = m ( "a" , { is : "bar" } )
395
+
396
+ render ( root , vnode )
397
+ render ( root , updated )
398
+
399
+ o ( vnode . dom ) . notEquals ( root . firstChild )
400
+ o ( updated . dom ) . equals ( root . firstChild )
401
+ o ( updated . dom . nodeName ) . equals ( "A" )
402
+ o ( updated . dom . getAttribute ( "is" ) ) . equals ( "bar" )
403
+ } )
404
+ o ( "recreate element node without `is` attribute (remove `is`)" , function ( ) {
405
+ var vnode = m ( "a" , { is : "foo" } )
406
+ var updated = m ( "a" )
407
+
408
+ render ( root , vnode )
409
+ render ( root , updated )
410
+
411
+ o ( vnode . dom ) . notEquals ( root . firstChild )
412
+ o ( updated . dom ) . equals ( root . firstChild )
413
+ o ( updated . dom . nodeName ) . equals ( "A" )
414
+ o ( updated . dom . getAttribute ( "is" ) ) . equals ( null )
415
+ } )
416
+ o ( "recreate element node with `is` attribute (same tag, different `is`)" , function ( ) {
417
+ var vnode = m ( "a" , { is : "foo" } )
418
+ var updated = m ( "a" , { is : "bar" } )
419
+
420
+ render ( root , vnode )
421
+ render ( root , updated )
422
+
423
+ o ( vnode . dom ) . notEquals ( root . firstChild )
424
+ o ( updated . dom ) . equals ( root . firstChild )
425
+ o ( updated . dom . nodeName ) . equals ( "A" )
426
+ o ( updated . dom . getAttribute ( "is" ) ) . equals ( "bar" )
427
+ } )
428
+ o ( "recreate element node with `is` attribute (different tag, same `is`)" , function ( ) {
429
+ var vnode = m ( "a" , { is : "foo" } )
430
+ var updated = m ( "b" , { is : "foo" } )
431
+
432
+ render ( root , vnode )
433
+ render ( root , updated )
434
+
435
+ o ( vnode . dom ) . notEquals ( root . firstChild )
436
+ o ( updated . dom ) . equals ( root . firstChild )
437
+ o ( updated . dom . nodeName ) . equals ( "B" )
438
+ o ( updated . dom . getAttribute ( "is" ) ) . equals ( "foo" )
439
+ } )
440
+ o ( "recreate element node with `is` attribute (different tag, different `is`)" , function ( ) {
441
+ var vnode = m ( "a" , { is : "foo" } )
442
+ var updated = m ( "b" , { is : "bar" } )
443
+
444
+ render ( root , vnode )
445
+ render ( root , updated )
446
+
447
+ o ( vnode . dom ) . notEquals ( root . firstChild )
448
+ o ( updated . dom ) . equals ( root . firstChild )
449
+ o ( updated . dom . nodeName ) . equals ( "B" )
450
+ o ( updated . dom . getAttribute ( "is" ) ) . equals ( "bar" )
451
+ } )
452
+ o ( "keep element node with `is` attribute (same tag, same `is`)" , function ( ) {
453
+ var vnode = m ( "a" , { is : "foo" } )
454
+ var updated = m ( "a" , { is : "foo" } , "x" )
455
+
456
+ render ( root , vnode )
457
+ render ( root , updated )
458
+
459
+ o ( vnode . dom ) . equals ( root . firstChild )
460
+ o ( updated . dom ) . equals ( root . firstChild )
461
+ o ( updated . dom . nodeName ) . equals ( "A" )
462
+ o ( updated . dom . getAttribute ( "is" ) ) . equals ( "foo" )
463
+ o ( updated . dom . firstChild . nodeValue ) . equals ( "x" )
464
+ } )
465
+ o ( "recreate element node with `is` attribute (set `is`, CSS selector)" , function ( ) {
466
+ var vnode = m ( "a" )
467
+ var updated = m ( "a[is=bar]" )
468
+
469
+ render ( root , vnode )
470
+ render ( root , updated )
471
+
472
+ o ( vnode . dom ) . notEquals ( root . firstChild )
473
+ o ( updated . dom ) . equals ( root . firstChild )
474
+ o ( updated . dom . nodeName ) . equals ( "A" )
475
+ o ( updated . dom . getAttribute ( "is" ) ) . equals ( "bar" )
476
+ } )
477
+ o ( "recreate element node without `is` attribute (remove `is`, CSS selector)" , function ( ) {
478
+ var vnode = m ( "a[is=foo]" )
479
+ var updated = m ( "a" )
480
+
481
+ render ( root , vnode )
482
+ render ( root , updated )
483
+
484
+ o ( vnode . dom ) . notEquals ( root . firstChild )
485
+ o ( updated . dom ) . equals ( root . firstChild )
486
+ o ( updated . dom . nodeName ) . equals ( "A" )
487
+ o ( updated . dom . getAttribute ( "is" ) ) . equals ( null )
488
+ } )
489
+ o ( "recreate element node with `is` attribute (same tag, different `is`, CSS selector)" , function ( ) {
490
+ var vnode = m ( "a[is=foo]" )
491
+ var updated = m ( "a[is=bar]" )
492
+
493
+ render ( root , vnode )
494
+ render ( root , updated )
495
+
496
+ o ( vnode . dom ) . notEquals ( root . firstChild )
497
+ o ( updated . dom ) . equals ( root . firstChild )
498
+ o ( updated . dom . nodeName ) . equals ( "A" )
499
+ o ( updated . dom . getAttribute ( "is" ) ) . equals ( "bar" )
500
+ } )
501
+ o ( "recreate element node with `is` attribute (different tag, same `is`, CSS selector)" , function ( ) {
502
+ var vnode = m ( "a[is=foo]" )
503
+ var updated = m ( "b[is=foo]" )
504
+
505
+ render ( root , vnode )
506
+ render ( root , updated )
507
+
508
+ o ( vnode . dom ) . notEquals ( root . firstChild )
509
+ o ( updated . dom ) . equals ( root . firstChild )
510
+ o ( updated . dom . nodeName ) . equals ( "B" )
511
+ o ( updated . dom . getAttribute ( "is" ) ) . equals ( "foo" )
512
+ } )
513
+ o ( "recreate element node with `is` attribute (different tag, different `is`, CSS selector)" , function ( ) {
514
+ var vnode = m ( "a[is=foo]" )
515
+ var updated = m ( "b[is=bar]" )
516
+
517
+ render ( root , vnode )
518
+ render ( root , updated )
519
+
520
+ o ( vnode . dom ) . notEquals ( root . firstChild )
521
+ o ( updated . dom ) . equals ( root . firstChild )
522
+ o ( updated . dom . nodeName ) . equals ( "B" )
523
+ o ( updated . dom . getAttribute ( "is" ) ) . equals ( "bar" )
524
+ } )
525
+ o ( "keep element node with `is` attribute (same tag, same `is`, CSS selector)" , function ( ) {
526
+ var vnode = m ( "a[is=foo]" )
527
+ var updated = m ( "a[is=foo]" , "x" )
528
+
529
+ render ( root , vnode )
530
+ render ( root , updated )
531
+
532
+ o ( vnode . dom ) . equals ( root . firstChild )
533
+ o ( updated . dom ) . equals ( root . firstChild )
534
+ o ( updated . dom . nodeName ) . equals ( "A" )
535
+ o ( updated . dom . getAttribute ( "is" ) ) . equals ( "foo" )
536
+ o ( updated . dom . firstChild . nodeValue ) . equals ( "x" )
537
+ } )
538
+ o ( "keep element node with `is` attribute (same tag, same `is`, from attrs to CSS selector)" , function ( ) {
539
+ var vnode = m ( "a" , { is : "foo" } )
540
+ var updated = m ( "a[is=foo]" , "x" )
541
+
542
+ render ( root , vnode )
543
+ render ( root , updated )
544
+
545
+ o ( vnode . dom ) . equals ( root . firstChild )
546
+ o ( updated . dom ) . equals ( root . firstChild )
547
+ o ( updated . dom . nodeName ) . equals ( "A" )
548
+ o ( updated . dom . getAttribute ( "is" ) ) . equals ( "foo" )
549
+ o ( updated . dom . firstChild . nodeValue ) . equals ( "x" )
550
+ } )
551
+ o ( "keep element node with `is` attribute (same tag, same `is`, from CSS selector to attrs)" , function ( ) {
552
+ var vnode = m ( "a[is=foo]" )
553
+ var updated = m ( "a" , { is : "foo" } , "x" )
554
+
555
+ render ( root , vnode )
556
+ render ( root , updated )
557
+
558
+ o ( vnode . dom ) . equals ( root . firstChild )
559
+ o ( updated . dom ) . equals ( root . firstChild )
560
+ o ( updated . dom . nodeName ) . equals ( "A" )
561
+ o ( updated . dom . getAttribute ( "is" ) ) . equals ( "foo" )
562
+ o ( updated . dom . firstChild . nodeValue ) . equals ( "x" )
563
+ } )
564
+ } )
391
565
} )
0 commit comments