import { assert } from "chai" ; import { init , RemoveHook , attachTo , h } from "../../src/index" ; const patch = init ( [ ] ) ; describe ( "attachTo" , function ( ) { let elm , vnode0 ; beforeEach ( function ( ) { elm = document . createElement ( "div" ) ; vnode0 = elm ; } ) ; it ( "adds element to target" , function ( ) { const vnode1 = h ( "div" , [ h ( "div#wrapper" , [ h ( "div" , "Some element" ) , attachTo ( elm , h ( "div#attached" , "Test" ) ) , ] ) , ] ) ; elm = patch ( vnode0 , vnode1 ) . elm ; assert . strictEqual ( elm . children . length , 2 ) ; } ) ; it ( "updates element at target" , function ( ) { const vnode1 = h ( "div" , [ h ( "div#wrapper" , [ h ( "div" , "Some element" ) , attachTo ( elm , h ( "div#attached" , "First text" ) ) , ] ) , ] ) ; const vnode2 = h ( "div" , [ h ( "div#wrapper" , [ h ( "div" , "Some element" ) , attachTo ( elm , h ( "div#attached" , "New text" ) ) , ] ) , ] ) ; elm = patch ( vnode0 , vnode1 ) . elm ; assert . strictEqual ( elm . children [ 0 ] . innerHTML , "First text" ) ; elm = patch ( vnode1 , vnode2 ) . elm ; assert . strictEqual ( elm . children [ 0 ] . innerHTML , "New text" ) ; } ) ; it ( "element can be inserted before modal" , function ( ) { const vnode1 = h ( "div" , [ h ( "div#wrapper" , [ h ( "div" , "Some element" ) , attachTo ( elm , h ( "div#attached" , "Text" ) ) , ] ) , ] ) ; const vnode2 = h ( "div" , [ h ( "div#wrapper" , [ h ( "div" , "Some element" ) , h ( "div" , "A new element" ) , attachTo ( elm , h ( "div#attached" , "Text" ) ) , ] ) , ] ) ; elm = patch ( vnode0 , vnode1 ) . elm ; assert . strictEqual ( elm . children [ 0 ] . innerHTML , "Text" ) ; elm = patch ( vnode1 , vnode2 ) . elm ; assert . strictEqual ( elm . children [ 0 ] . innerHTML , "Text" ) ; } ) ; it ( "removes element at target" , function ( ) { const vnode1 = h ( "div" , [ h ( "div#wrapper" , [ h ( "div" , "Some element" ) , attachTo ( elm , h ( "div#attached" , "First text" ) ) , ] ) , ] ) ; const vnode2 = h ( "div" , [ h ( "div#wrapper" , [ h ( "div" , "Some element" ) ] ) ] ) ; elm = patch ( vnode0 , vnode1 ) . elm ; assert . strictEqual ( elm . children [ 0 ] . innerHTML , "First text" ) ; elm = patch ( vnode1 , vnode2 ) . elm ; assert . strictEqual ( elm . children . length , 1 ) ; } ) ; it ( "remove hook receives real element" , function ( ) { const rm = ( vnode , cb ) => { const elm = vnode . elm as HTMLDivElement ; assert . strictEqual ( elm . tagName , "DIV" ) ; assert . strictEqual ( elm . innerHTML , "First text" ) ; cb ( ) ; } ; const vnode1 = h ( "div" , [ h ( "div#wrapper" , [ h ( "div" , "Some element" ) , attachTo ( elm , h ( "div#attached" , { hook : { remove : rm } } , "First text" ) ) , ] ) , ] ) ; const vnode2 = h ( "div" , [ h ( "div#wrapper" , [ h ( "div" , "Some element" ) ] ) ] ) ; elm = patch ( vnode0 , vnode1 ) . elm ; elm = patch ( vnode1 , vnode2 ) . elm ; } ) ; } ) ;