@@ -388,4 +388,178 @@ o.spec("updateElement", function() {
388388 o ( root . childNodes . length ) . equals ( 3 )
389389 o ( x ) . notEquals ( y ) // this used to be a recycling pool test
390390 } )
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+ } )
391565} )
0 commit comments