// Jest Snapshot v1, https://goo.gl/fbAQLP

exports[`basic widget properties reconciliation alg works for t-foreach in t-foreach 1`] = `
"function anonymous(context,extra
) {
    let utils = this.constructor.utils;
    let QWeb = this.constructor;
    let parent = context;
    let owner = context;
    let sibling = null;
    context = Object.create(context);
    var h = this.h;
    let c1 = [], p1 = {key:1};
    var vn1 = h('div', p1, c1);
    var _2 = context['state'].s;
    if (!_2) { throw new Error('QWeb error: Invalid loop expression')}
    var _3 = _4 = _2;
    if (!(_2 instanceof Array)) {
        _3 = Object.keys(_2);
        _4 = Object.values(_2);
    }
    var _length3 = _3.length;
    for (let i1 = 0; i1 < _length3; i1++) {
        context.section_first = i1 === 0;
        context.section_last = i1 === _length3 - 1;
        context.section_index = i1;
        context.section = _3[i1];
        context.section_value = _4[i1];
        var _5 = context['section'].blips;
        if (!_5) { throw new Error('QWeb error: Invalid loop expression')}
        var _6 = _7 = _5;
        if (!(_5 instanceof Array)) {
            _6 = Object.keys(_5);
            _7 = Object.values(_5);
        }
        var _length6 = _6.length;
        for (let i2 = 0; i2 < _length6; i2++) {
            context.blip_first = i2 === 0;
            context.blip_last = i2 === _length6 - 1;
            context.blip_index = i2;
            context.blip = _6[i2];
            context.blip_value = _7[i2];
            //COMPONENT
            let templateId9 = \`__10__\${i1}__\${i2}__\`;
            let w9 = templateId9 in parent.__owl__.cmap ? parent.__owl__.children[parent.__owl__.cmap[templateId9]] : false;
            let props9 = {blip:context['blip']};
            if (w9 && w9.__owl__.currentFiber && !w9.__owl__.vnode) {
                w9.destroy();
                w9 = false;
            }
            if (w9) {
                w9.__updateProps(props9, extra.fiber, undefined, undefined, sibling);
                let pvnode = w9.__owl__.pvnode;
                c1.push(pvnode);
            } else {
                let componentKey9 = \`Child\`;
                let W9 = context.constructor.components[componentKey9] || QWeb.components[componentKey9]|| context['Child'];
                if (!W9) {throw new Error('Cannot find the definition of component \\"' + componentKey9 + '\\"')}
                w9 = new W9(parent, props9);
                parent.__owl__.cmap[templateId9] = w9.__owl__.id;
                let def8 = w9.__prepare(extra.fiber, undefined, undefined, sibling);
                let pvnode = h('dummy', {key: templateId9, hook: {insert(vn) { let nvn=w9.__mount(fiber, pvnode.elm);pvnode.elm=nvn.elm;},remove() {},destroy(vn) {w9.destroy();}}});
                const fiber = w9.__owl__.currentFiber;
                def8.then(function () {if (fiber.isCancelled) {return;} const vnode = fiber.vnode; pvnode.sel = vnode.sel; });
                c1.push(pvnode);
                w9.__owl__.pvnode = pvnode;
            }
            sibling = w9.__owl__.currentFiber || sibling;
        }
    }
    return vn1;
}"
`;

exports[`class and style attributes with t-component dynamic t-att-style is properly added and updated on widget root el 1`] = `
"function anonymous(context,extra
) {
    let utils = this.constructor.utils;
    let QWeb = this.constructor;
    let parent = context;
    let owner = context;
    let sibling = null;
    var h = this.h;
    let c1 = [], p1 = {key:1};
    var vn1 = h('div', p1, c1);
    //COMPONENT
    let templateId3 = \`__4__\`;
    const _5 = context['state'].style;
    let w3 = templateId3 in parent.__owl__.cmap ? parent.__owl__.children[parent.__owl__.cmap[templateId3]] : false;
    let props3 = {};
    if (w3 && w3.__owl__.currentFiber && !w3.__owl__.vnode) {
        w3.destroy();
        w3 = false;
    }
    if (w3) {
        w3.__updateProps(props3, extra.fiber, undefined, undefined, sibling).then(()=>{if (w3.__owl__.isDestroyed) {return};w3.el.style=_5;});;
        let pvnode = w3.__owl__.pvnode;
        c1.push(pvnode);
    } else {
        let componentKey3 = \`child\`;
        let W3 = context.constructor.components[componentKey3] || QWeb.components[componentKey3]|| context['child'];
        if (!W3) {throw new Error('Cannot find the definition of component \\"' + componentKey3 + '\\"')}
        w3 = new W3(parent, props3);
        parent.__owl__.cmap[templateId3] = w3.__owl__.id;
        let def2 = w3.__prepare(extra.fiber, undefined, undefined, sibling);
        let pvnode = h('dummy', {key: templateId3, hook: {insert(vn) { let nvn=w3.__mount(fiber, pvnode.elm);pvnode.elm=nvn.elm;},remove() {},destroy(vn) {w3.destroy();}}});
        const fiber = w3.__owl__.currentFiber;
        def2.then(function () {if (fiber.isCancelled) {return;} const vnode = fiber.vnode; pvnode.sel = vnode.sel; vnode.data.hook = {create(_, vn){vn.elm.style = _5;}};});
        c1.push(pvnode);
        w3.__owl__.pvnode = pvnode;
    }
    sibling = w3.__owl__.currentFiber || sibling;
    return vn1;
}"
`;

exports[`class and style attributes with t-component t-att-class is properly added/removed on widget root el (v2) 1`] = `
"function anonymous(context,extra
) {
    let utils = this.constructor.utils;
    let QWeb = this.constructor;
    let parent = context;
    let owner = context;
    context.__owl__.refs = context.__owl__.refs || {};
    let sibling = null;
    var h = this.h;
    let c1 = [], p1 = {key:1};
    var vn1 = h('div', p1, c1);
    //COMPONENT
    let templateId3 = \`__4__\`;
    const ref5 = \`child\`;
    let _6 = {'a':true};
    Object.assign(_6, {b:context['state'].b})
    let w3 = templateId3 in parent.__owl__.cmap ? parent.__owl__.children[parent.__owl__.cmap[templateId3]] : false;
    let props3 = {};
    if (w3 && w3.__owl__.currentFiber && !w3.__owl__.vnode) {
        w3.destroy();
        w3 = false;
    }
    if (w3) {
        w3.__updateProps(props3, extra.fiber, undefined, undefined, sibling);
        let pvnode = w3.__owl__.pvnode;
        c1.push(pvnode);
    } else {
        let componentKey3 = \`Child\`;
        let W3 = context.constructor.components[componentKey3] || QWeb.components[componentKey3]|| context['Child'];
        if (!W3) {throw new Error('Cannot find the definition of component \\"' + componentKey3 + '\\"')}
        w3 = new W3(parent, props3);
        parent.__owl__.cmap[templateId3] = w3.__owl__.id;
        let def2 = w3.__prepare(extra.fiber, undefined, undefined, sibling);
        let pvnode = h('dummy', {key: templateId3, hook: {insert(vn) { let nvn=w3.__mount(fiber, pvnode.elm);pvnode.elm=nvn.elm;context.__owl__.refs[ref5] = w3;},remove() {},destroy(vn) {w3.destroy();delete context.__owl__.refs[ref5];}}});
        const fiber = w3.__owl__.currentFiber;
        def2.then(function () {if (fiber.isCancelled) {return;} const vnode = fiber.vnode; pvnode.sel = vnode.sel; vnode.data.hook = {create(_, vn){}};});
        c1.push(pvnode);
        w3.__owl__.pvnode = pvnode;
    }
    w3.__owl__.classObj=_6;
    sibling = w3.__owl__.currentFiber || sibling;
    return vn1;
}"
`;

exports[`class and style attributes with t-component t-att-class is properly added/removed on widget root el (v2) 2`] = `
"function anonymous(context,extra
) {
    let utils = this.constructor.utils;
    let sibling = null;
    var h = this.h;
    let _2 = {'c':true};
    Object.assign(_2, utils.toObj({d:context['state'].d}))
    let c3 = [], p3 = {key:3,class:_2};
    var vn3 = h('span', p3, c3);
    return vn3;
}"
`;

exports[`class and style attributes with t-component t-att-class is properly added/removed on widget root el (v3) 1`] = `
"function anonymous(context,extra
) {
    let utils = this.constructor.utils;
    let QWeb = this.constructor;
    let parent = context;
    let owner = context;
    context.__owl__.refs = context.__owl__.refs || {};
    let sibling = null;
    var h = this.h;
    let c1 = [], p1 = {key:1};
    var vn1 = h('div', p1, c1);
    //COMPONENT
    let templateId3 = \`__4__\`;
    const ref5 = \`child\`;
    let _6 = {'a':true};
    Object.assign(_6, utils.toObj(context['state'].b?'b':''))
    let w3 = templateId3 in parent.__owl__.cmap ? parent.__owl__.children[parent.__owl__.cmap[templateId3]] : false;
    let props3 = {};
    if (w3 && w3.__owl__.currentFiber && !w3.__owl__.vnode) {
        w3.destroy();
        w3 = false;
    }
    if (w3) {
        w3.__updateProps(props3, extra.fiber, undefined, undefined, sibling);
        let pvnode = w3.__owl__.pvnode;
        c1.push(pvnode);
    } else {
        let componentKey3 = \`Child\`;
        let W3 = context.constructor.components[componentKey3] || QWeb.components[componentKey3]|| context['Child'];
        if (!W3) {throw new Error('Cannot find the definition of component \\"' + componentKey3 + '\\"')}
        w3 = new W3(parent, props3);
        parent.__owl__.cmap[templateId3] = w3.__owl__.id;
        let def2 = w3.__prepare(extra.fiber, undefined, undefined, sibling);
        let pvnode = h('dummy', {key: templateId3, hook: {insert(vn) { let nvn=w3.__mount(fiber, pvnode.elm);pvnode.elm=nvn.elm;context.__owl__.refs[ref5] = w3;},remove() {},destroy(vn) {w3.destroy();delete context.__owl__.refs[ref5];}}});
        const fiber = w3.__owl__.currentFiber;
        def2.then(function () {if (fiber.isCancelled) {return;} const vnode = fiber.vnode; pvnode.sel = vnode.sel; vnode.data.hook = {create(_, vn){}};});
        c1.push(pvnode);
        w3.__owl__.pvnode = pvnode;
    }
    w3.__owl__.classObj=_6;
    sibling = w3.__owl__.currentFiber || sibling;
    return vn1;
}"
`;

exports[`class and style attributes with t-component t-att-class is properly added/removed on widget root el (v3) 2`] = `
"function anonymous(context,extra
) {
    let utils = this.constructor.utils;
    let sibling = null;
    var h = this.h;
    let _2 = {'c':true};
    Object.assign(_2, utils.toObj(context['state'].d?'d':''))
    let c3 = [], p3 = {key:3,class:_2};
    var vn3 = h('span', p3, c3);
    return vn3;
}"
`;

exports[`composition sub components with some state rendered in a loop 1`] = `
"function anonymous(context,extra
) {
    let utils = this.constructor.utils;
    let QWeb = this.constructor;
    let parent = context;
    let owner = context;
    let sibling = null;
    context = Object.create(context);
    var h = this.h;
    let c1 = [], p1 = {key:1};
    var vn1 = h('div', p1, c1);
    var _2 = context['state'].numbers;
    if (!_2) { throw new Error('QWeb error: Invalid loop expression')}
    var _3 = _4 = _2;
    if (!(_2 instanceof Array)) {
        _3 = Object.keys(_2);
        _4 = Object.values(_2);
    }
    var _length3 = _3.length;
    for (let i1 = 0; i1 < _length3; i1++) {
        context.number_first = i1 === 0;
        context.number_last = i1 === _length3 - 1;
        context.number_index = i1;
        context.number = _3[i1];
        context.number_value = _4[i1];
        const nodeKey5 = context['number'];
        //COMPONENT
        let templateId7 = \`__8__\` + nodeKey5;
        let w7 = templateId7 in parent.__owl__.cmap ? parent.__owl__.children[parent.__owl__.cmap[templateId7]] : false;
        let props7 = {};
        if (w7 && w7.__owl__.currentFiber && !w7.__owl__.vnode) {
            w7.destroy();
            w7 = false;
        }
        if (w7) {
            w7.__updateProps(props7, extra.fiber, undefined, undefined, sibling);
            let pvnode = w7.__owl__.pvnode;
            c1.push(pvnode);
        } else {
            let componentKey7 = \`ChildWidget\`;
            let W7 = context.constructor.components[componentKey7] || QWeb.components[componentKey7]|| context['ChildWidget'];
            if (!W7) {throw new Error('Cannot find the definition of component \\"' + componentKey7 + '\\"')}
            w7 = new W7(parent, props7);
            parent.__owl__.cmap[templateId7] = w7.__owl__.id;
            let def6 = w7.__prepare(extra.fiber, undefined, undefined, sibling);
            let pvnode = h('dummy', {key: templateId7, hook: {insert(vn) { let nvn=w7.__mount(fiber, pvnode.elm);pvnode.elm=nvn.elm;},remove() {},destroy(vn) {w7.destroy();}}});
            const fiber = w7.__owl__.currentFiber;
            def6.then(function () {if (fiber.isCancelled) {return;} const vnode = fiber.vnode; pvnode.sel = vnode.sel; });
            c1.push(pvnode);
            w7.__owl__.pvnode = pvnode;
        }
        sibling = w7.__owl__.currentFiber || sibling;
    }
    return vn1;
}"
`;

exports[`composition t-component with dynamic value 1`] = `
"function anonymous(context,extra
) {
    let utils = this.constructor.utils;
    let QWeb = this.constructor;
    let parent = context;
    let owner = context;
    let sibling = null;
    var h = this.h;
    let c1 = [], p1 = {key:1};
    var vn1 = h('div', p1, c1);
    //COMPONENT
    let templateId3 = \`__4__\`;
    let w3 = templateId3 in parent.__owl__.cmap ? parent.__owl__.children[parent.__owl__.cmap[templateId3]] : false;
    let props3 = {};
    if (w3 && w3.__owl__.currentFiber && !w3.__owl__.vnode) {
        w3.destroy();
        w3 = false;
    }
    if (w3) {
        w3.__updateProps(props3, extra.fiber, undefined, undefined, sibling);
        let pvnode = w3.__owl__.pvnode;
        c1.push(pvnode);
    } else {
        let componentKey3 = (context['state'].widget);
        let W3 = context.constructor.components[componentKey3] || QWeb.components[componentKey3];
        if (!W3) {throw new Error('Cannot find the definition of component \\"' + componentKey3 + '\\"')}
        w3 = new W3(parent, props3);
        parent.__owl__.cmap[templateId3] = w3.__owl__.id;
        let def2 = w3.__prepare(extra.fiber, undefined, undefined, sibling);
        let pvnode = h('dummy', {key: templateId3, hook: {insert(vn) { let nvn=w3.__mount(fiber, pvnode.elm);pvnode.elm=nvn.elm;},remove() {},destroy(vn) {w3.destroy();}}});
        const fiber = w3.__owl__.currentFiber;
        def2.then(function () {if (fiber.isCancelled) {return;} const vnode = fiber.vnode; pvnode.sel = vnode.sel; });
        c1.push(pvnode);
        w3.__owl__.pvnode = pvnode;
    }
    sibling = w3.__owl__.currentFiber || sibling;
    return vn1;
}"
`;

exports[`composition t-component with dynamic value 2 1`] = `
"function anonymous(context,extra
) {
    let utils = this.constructor.utils;
    let QWeb = this.constructor;
    let parent = context;
    let owner = context;
    let sibling = null;
    var h = this.h;
    let c1 = [], p1 = {key:1};
    var vn1 = h('div', p1, c1);
    //COMPONENT
    let templateId3 = \`__4__\`;
    let w3 = templateId3 in parent.__owl__.cmap ? parent.__owl__.children[parent.__owl__.cmap[templateId3]] : false;
    let props3 = {};
    if (w3 && w3.__owl__.currentFiber && !w3.__owl__.vnode) {
        w3.destroy();
        w3 = false;
    }
    if (w3) {
        w3.__updateProps(props3, extra.fiber, undefined, undefined, sibling);
        let pvnode = w3.__owl__.pvnode;
        c1.push(pvnode);
    } else {
        let componentKey3 = \`Widget\${context['state'].widget}\`;
        let W3 = context.constructor.components[componentKey3] || QWeb.components[componentKey3];
        if (!W3) {throw new Error('Cannot find the definition of component \\"' + componentKey3 + '\\"')}
        w3 = new W3(parent, props3);
        parent.__owl__.cmap[templateId3] = w3.__owl__.id;
        let def2 = w3.__prepare(extra.fiber, undefined, undefined, sibling);
        let pvnode = h('dummy', {key: templateId3, hook: {insert(vn) { let nvn=w3.__mount(fiber, pvnode.elm);pvnode.elm=nvn.elm;},remove() {},destroy(vn) {w3.destroy();}}});
        const fiber = w3.__owl__.currentFiber;
        def2.then(function () {if (fiber.isCancelled) {return;} const vnode = fiber.vnode; pvnode.sel = vnode.sel; });
        c1.push(pvnode);
        w3.__owl__.pvnode = pvnode;
    }
    sibling = w3.__owl__.currentFiber || sibling;
    return vn1;
}"
`;

exports[`dynamic t-props basic use 1`] = `
"function anonymous(context,extra
) {
    let utils = this.constructor.utils;
    let QWeb = this.constructor;
    let parent = context;
    let owner = context;
    let sibling = null;
    var h = this.h;
    let c1 = [], p1 = {key:1};
    var vn1 = h('div', p1, c1);
    //COMPONENT
    let templateId3 = \`__4__\`;
    let w3 = templateId3 in parent.__owl__.cmap ? parent.__owl__.children[parent.__owl__.cmap[templateId3]] : false;
    let props3 = Object.assign({}, context['some'].obj);
    if (w3 && w3.__owl__.currentFiber && !w3.__owl__.vnode) {
        w3.destroy();
        w3 = false;
    }
    if (w3) {
        w3.__updateProps(props3, extra.fiber, undefined, undefined, sibling);
        let pvnode = w3.__owl__.pvnode;
        c1.push(pvnode);
    } else {
        let componentKey3 = \`Child\`;
        let W3 = context.constructor.components[componentKey3] || QWeb.components[componentKey3]|| context['Child'];
        if (!W3) {throw new Error('Cannot find the definition of component \\"' + componentKey3 + '\\"')}
        w3 = new W3(parent, props3);
        parent.__owl__.cmap[templateId3] = w3.__owl__.id;
        let def2 = w3.__prepare(extra.fiber, undefined, undefined, sibling);
        let pvnode = h('dummy', {key: templateId3, hook: {insert(vn) { let nvn=w3.__mount(fiber, pvnode.elm);pvnode.elm=nvn.elm;},remove() {},destroy(vn) {w3.destroy();}}});
        const fiber = w3.__owl__.currentFiber;
        def2.then(function () {if (fiber.isCancelled) {return;} const vnode = fiber.vnode; pvnode.sel = vnode.sel; });
        c1.push(pvnode);
        w3.__owl__.pvnode = pvnode;
    }
    sibling = w3.__owl__.currentFiber || sibling;
    return vn1;
}"
`;

exports[`other directives with t-component t-on with getter as handler 1`] = `
"function anonymous(context,extra
) {
    let utils = this.constructor.utils;
    let QWeb = this.constructor;
    let parent = context;
    let owner = context;
    let sibling = null;
    var h = this.h;
    let c1 = [], p1 = {key:1};
    var vn1 = h('div', p1, c1);
    var _2 = context['state'].counter;
    if (_2 || _2 === 0) {
        c1.push({text: _2});
    }
    //COMPONENT
    let templateId4 = \`__5__\`;
    let w4 = templateId4 in parent.__owl__.cmap ? parent.__owl__.children[parent.__owl__.cmap[templateId4]] : false;
    let props4 = {};
    if (w4 && w4.__owl__.currentFiber && !w4.__owl__.vnode) {
        w4.destroy();
        w4 = false;
    }
    if (w4) {
        w4.__updateProps(props4, extra.fiber, undefined, undefined, sibling);
        let pvnode = w4.__owl__.pvnode;
        c1.push(pvnode);
    } else {
        let componentKey4 = \`Child\`;
        let W4 = context.constructor.components[componentKey4] || QWeb.components[componentKey4]|| context['Child'];
        if (!W4) {throw new Error('Cannot find the definition of component \\"' + componentKey4 + '\\"')}
        w4 = new W4(parent, props4);
        parent.__owl__.cmap[templateId4] = w4.__owl__.id;
        let def3 = w4.__prepare(extra.fiber, undefined, undefined, sibling);
        let pvnode = h('dummy', {key: templateId4, hook: {insert(vn) { let nvn=w4.__mount(fiber, pvnode.elm);pvnode.elm=nvn.elm;},remove() {},destroy(vn) {w4.destroy();}}});
        const fiber = w4.__owl__.currentFiber;
        def3.then(function () {if (fiber.isCancelled) {return;} const vnode = fiber.vnode; pvnode.sel = vnode.sel; vnode.data.hook = {create(_, vn){vn.elm.addEventListener('ev', function (e) {const fn = owner['handler'];if (fn) { fn.call(owner, e); } else { owner.handler; }});}};});
        c1.push(pvnode);
        w4.__owl__.pvnode = pvnode;
    }
    sibling = w4.__owl__.currentFiber || sibling;
    return vn1;
}"
`;

exports[`other directives with t-component t-on with handler bound to argument 1`] = `
"function anonymous(context,extra
) {
    let utils = this.constructor.utils;
    let QWeb = this.constructor;
    let parent = context;
    let owner = context;
    let sibling = null;
    var h = this.h;
    let c1 = [], p1 = {key:1};
    var vn1 = h('div', p1, c1);
    //COMPONENT
    let templateId3 = \`__4__\`;
    let w3 = templateId3 in parent.__owl__.cmap ? parent.__owl__.children[parent.__owl__.cmap[templateId3]] : false;
    let props3 = {};
    if (w3 && w3.__owl__.currentFiber && !w3.__owl__.vnode) {
        w3.destroy();
        w3 = false;
    }
    if (w3) {
        w3.__updateProps(props3, extra.fiber, undefined, undefined, sibling);
        let pvnode = w3.__owl__.pvnode;
        c1.push(pvnode);
    } else {
        let componentKey3 = \`child\`;
        let W3 = context.constructor.components[componentKey3] || QWeb.components[componentKey3]|| context['child'];
        if (!W3) {throw new Error('Cannot find the definition of component \\"' + componentKey3 + '\\"')}
        w3 = new W3(parent, props3);
        parent.__owl__.cmap[templateId3] = w3.__owl__.id;
        let def2 = w3.__prepare(extra.fiber, undefined, undefined, sibling);
        let pvnode = h('dummy', {key: templateId3, hook: {insert(vn) { let nvn=w3.__mount(fiber, pvnode.elm);pvnode.elm=nvn.elm;},remove() {},destroy(vn) {w3.destroy();}}});
        const fiber = w3.__owl__.currentFiber;
        def2.then(function () {if (fiber.isCancelled) {return;} const vnode = fiber.vnode; pvnode.sel = vnode.sel; vnode.data.hook = {create(_, vn){vn.elm.addEventListener('ev', function (e) {const fn = owner['onEv'];if (fn) { fn.call(owner, 3, e); } else { owner.onEv; }});}};});
        c1.push(pvnode);
        w3.__owl__.pvnode = pvnode;
    }
    sibling = w3.__owl__.currentFiber || sibling;
    return vn1;
}"
`;

exports[`other directives with t-component t-on with handler bound to empty object (with non empty inner string) 1`] = `
"function anonymous(context,extra
) {
    let utils = this.constructor.utils;
    let QWeb = this.constructor;
    let parent = context;
    let owner = context;
    let sibling = null;
    var h = this.h;
    let c1 = [], p1 = {key:1};
    var vn1 = h('div', p1, c1);
    //COMPONENT
    let templateId3 = \`__4__\`;
    let w3 = templateId3 in parent.__owl__.cmap ? parent.__owl__.children[parent.__owl__.cmap[templateId3]] : false;
    let props3 = {};
    if (w3 && w3.__owl__.currentFiber && !w3.__owl__.vnode) {
        w3.destroy();
        w3 = false;
    }
    if (w3) {
        w3.__updateProps(props3, extra.fiber, undefined, undefined, sibling);
        let pvnode = w3.__owl__.pvnode;
        c1.push(pvnode);
    } else {
        let componentKey3 = \`child\`;
        let W3 = context.constructor.components[componentKey3] || QWeb.components[componentKey3]|| context['child'];
        if (!W3) {throw new Error('Cannot find the definition of component \\"' + componentKey3 + '\\"')}
        w3 = new W3(parent, props3);
        parent.__owl__.cmap[templateId3] = w3.__owl__.id;
        let def2 = w3.__prepare(extra.fiber, undefined, undefined, sibling);
        let pvnode = h('dummy', {key: templateId3, hook: {insert(vn) { let nvn=w3.__mount(fiber, pvnode.elm);pvnode.elm=nvn.elm;},remove() {},destroy(vn) {w3.destroy();}}});
        const fiber = w3.__owl__.currentFiber;
        def2.then(function () {if (fiber.isCancelled) {return;} const vnode = fiber.vnode; pvnode.sel = vnode.sel; vnode.data.hook = {create(_, vn){vn.elm.addEventListener('ev', function (e) {const fn = owner['onEv'];if (fn) { fn.call(owner, {}, e); } else { owner.onEv; }});}};});
        c1.push(pvnode);
        w3.__owl__.pvnode = pvnode;
    }
    sibling = w3.__owl__.currentFiber || sibling;
    return vn1;
}"
`;

exports[`other directives with t-component t-on with handler bound to empty object 1`] = `
"function anonymous(context,extra
) {
    let utils = this.constructor.utils;
    let QWeb = this.constructor;
    let parent = context;
    let owner = context;
    let sibling = null;
    var h = this.h;
    let c1 = [], p1 = {key:1};
    var vn1 = h('div', p1, c1);
    //COMPONENT
    let templateId3 = \`__4__\`;
    let w3 = templateId3 in parent.__owl__.cmap ? parent.__owl__.children[parent.__owl__.cmap[templateId3]] : false;
    let props3 = {};
    if (w3 && w3.__owl__.currentFiber && !w3.__owl__.vnode) {
        w3.destroy();
        w3 = false;
    }
    if (w3) {
        w3.__updateProps(props3, extra.fiber, undefined, undefined, sibling);
        let pvnode = w3.__owl__.pvnode;
        c1.push(pvnode);
    } else {
        let componentKey3 = \`child\`;
        let W3 = context.constructor.components[componentKey3] || QWeb.components[componentKey3]|| context['child'];
        if (!W3) {throw new Error('Cannot find the definition of component \\"' + componentKey3 + '\\"')}
        w3 = new W3(parent, props3);
        parent.__owl__.cmap[templateId3] = w3.__owl__.id;
        let def2 = w3.__prepare(extra.fiber, undefined, undefined, sibling);
        let pvnode = h('dummy', {key: templateId3, hook: {insert(vn) { let nvn=w3.__mount(fiber, pvnode.elm);pvnode.elm=nvn.elm;},remove() {},destroy(vn) {w3.destroy();}}});
        const fiber = w3.__owl__.currentFiber;
        def2.then(function () {if (fiber.isCancelled) {return;} const vnode = fiber.vnode; pvnode.sel = vnode.sel; vnode.data.hook = {create(_, vn){vn.elm.addEventListener('ev', function (e) {const fn = owner['onEv'];if (fn) { fn.call(owner, {}, e); } else { owner.onEv; }});}};});
        c1.push(pvnode);
        w3.__owl__.pvnode = pvnode;
    }
    sibling = w3.__owl__.currentFiber || sibling;
    return vn1;
}"
`;

exports[`other directives with t-component t-on with handler bound to object 1`] = `
"function anonymous(context,extra
) {
    let utils = this.constructor.utils;
    let QWeb = this.constructor;
    let parent = context;
    let owner = context;
    let sibling = null;
    var h = this.h;
    let c1 = [], p1 = {key:1};
    var vn1 = h('div', p1, c1);
    //COMPONENT
    let templateId3 = \`__4__\`;
    let w3 = templateId3 in parent.__owl__.cmap ? parent.__owl__.children[parent.__owl__.cmap[templateId3]] : false;
    let props3 = {};
    if (w3 && w3.__owl__.currentFiber && !w3.__owl__.vnode) {
        w3.destroy();
        w3 = false;
    }
    if (w3) {
        w3.__updateProps(props3, extra.fiber, undefined, undefined, sibling);
        let pvnode = w3.__owl__.pvnode;
        c1.push(pvnode);
    } else {
        let componentKey3 = \`child\`;
        let W3 = context.constructor.components[componentKey3] || QWeb.components[componentKey3]|| context['child'];
        if (!W3) {throw new Error('Cannot find the definition of component \\"' + componentKey3 + '\\"')}
        w3 = new W3(parent, props3);
        parent.__owl__.cmap[templateId3] = w3.__owl__.id;
        let def2 = w3.__prepare(extra.fiber, undefined, undefined, sibling);
        let pvnode = h('dummy', {key: templateId3, hook: {insert(vn) { let nvn=w3.__mount(fiber, pvnode.elm);pvnode.elm=nvn.elm;},remove() {},destroy(vn) {w3.destroy();}}});
        const fiber = w3.__owl__.currentFiber;
        def2.then(function () {if (fiber.isCancelled) {return;} const vnode = fiber.vnode; pvnode.sel = vnode.sel; vnode.data.hook = {create(_, vn){vn.elm.addEventListener('ev', function (e) {const fn = owner['onEv'];if (fn) { fn.call(owner, {val:3}, e); } else { owner.onEv; }});}};});
        c1.push(pvnode);
        w3.__owl__.pvnode = pvnode;
    }
    sibling = w3.__owl__.currentFiber || sibling;
    return vn1;
}"
`;

exports[`other directives with t-component t-on with inline statement 1`] = `
"function anonymous(context,extra
) {
    let utils = this.constructor.utils;
    let QWeb = this.constructor;
    let parent = context;
    let owner = context;
    let sibling = null;
    var h = this.h;
    let c1 = [], p1 = {key:1};
    var vn1 = h('div', p1, c1);
    var _2 = context['state'].counter;
    if (_2 || _2 === 0) {
        c1.push({text: _2});
    }
    //COMPONENT
    let templateId4 = \`__5__\`;
    let w4 = templateId4 in parent.__owl__.cmap ? parent.__owl__.children[parent.__owl__.cmap[templateId4]] : false;
    let props4 = {};
    if (w4 && w4.__owl__.currentFiber && !w4.__owl__.vnode) {
        w4.destroy();
        w4 = false;
    }
    if (w4) {
        w4.__updateProps(props4, extra.fiber, undefined, undefined, sibling);
        let pvnode = w4.__owl__.pvnode;
        c1.push(pvnode);
    } else {
        let componentKey4 = \`Child\`;
        let W4 = context.constructor.components[componentKey4] || QWeb.components[componentKey4]|| context['Child'];
        if (!W4) {throw new Error('Cannot find the definition of component \\"' + componentKey4 + '\\"')}
        w4 = new W4(parent, props4);
        parent.__owl__.cmap[templateId4] = w4.__owl__.id;
        let def3 = w4.__prepare(extra.fiber, undefined, undefined, sibling);
        let pvnode = h('dummy', {key: templateId4, hook: {insert(vn) { let nvn=w4.__mount(fiber, pvnode.elm);pvnode.elm=nvn.elm;},remove() {},destroy(vn) {w4.destroy();}}});
        const fiber = w4.__owl__.currentFiber;
        def3.then(function () {if (fiber.isCancelled) {return;} const vnode = fiber.vnode; pvnode.sel = vnode.sel; vnode.data.hook = {create(_, vn){vn.elm.addEventListener('ev', function (e) {const fn = owner['state.counter++'];if (fn) { fn.call(owner, e); } else { owner.state.counter++; }});}};});
        c1.push(pvnode);
        w4.__owl__.pvnode = pvnode;
    }
    sibling = w4.__owl__.currentFiber || sibling;
    return vn1;
}"
`;

exports[`other directives with t-component t-on with no handler (only modifiers) 1`] = `
"function anonymous(context,extra
) {
    let utils = this.constructor.utils;
    let QWeb = this.constructor;
    let parent = context;
    let owner = context;
    let sibling = null;
    var h = this.h;
    let c1 = [], p1 = {key:1};
    var vn1 = h('div', p1, c1);
    //COMPONENT
    let templateId3 = \`__4__\`;
    let w3 = templateId3 in parent.__owl__.cmap ? parent.__owl__.children[parent.__owl__.cmap[templateId3]] : false;
    let props3 = {};
    if (w3 && w3.__owl__.currentFiber && !w3.__owl__.vnode) {
        w3.destroy();
        w3 = false;
    }
    if (w3) {
        w3.__updateProps(props3, extra.fiber, undefined, undefined, sibling);
        let pvnode = w3.__owl__.pvnode;
        c1.push(pvnode);
    } else {
        let componentKey3 = \`ComponentA\`;
        let W3 = context.constructor.components[componentKey3] || QWeb.components[componentKey3]|| context['ComponentA'];
        if (!W3) {throw new Error('Cannot find the definition of component \\"' + componentKey3 + '\\"')}
        w3 = new W3(parent, props3);
        parent.__owl__.cmap[templateId3] = w3.__owl__.id;
        let def2 = w3.__prepare(extra.fiber, undefined, undefined, sibling);
        let pvnode = h('dummy', {key: templateId3, hook: {insert(vn) { let nvn=w3.__mount(fiber, pvnode.elm);pvnode.elm=nvn.elm;},remove() {},destroy(vn) {w3.destroy();}}});
        const fiber = w3.__owl__.currentFiber;
        def2.then(function () {if (fiber.isCancelled) {return;} const vnode = fiber.vnode; pvnode.sel = vnode.sel; vnode.data.hook = {create(_, vn){vn.elm.addEventListener('ev', function (e) {const fn = owner['onEv'];if (fn) { fn.call(owner, e); } else { owner.onEv; }});}};});
        c1.push(pvnode);
        w3.__owl__.pvnode = pvnode;
    }
    sibling = w3.__owl__.currentFiber || sibling;
    return vn1;
}"
`;

exports[`other directives with t-component t-on with prevent and self modifiers (order matters) 1`] = `
"function anonymous(context,extra
) {
    let utils = this.constructor.utils;
    let QWeb = this.constructor;
    let parent = context;
    let owner = context;
    let sibling = null;
    var h = this.h;
    let c1 = [], p1 = {key:1};
    var vn1 = h('div', p1, c1);
    //COMPONENT
    let templateId3 = \`__4__\`;
    let w3 = templateId3 in parent.__owl__.cmap ? parent.__owl__.children[parent.__owl__.cmap[templateId3]] : false;
    let props3 = {};
    if (w3 && w3.__owl__.currentFiber && !w3.__owl__.vnode) {
        w3.destroy();
        w3 = false;
    }
    if (w3) {
        w3.__updateProps(props3, extra.fiber, undefined, undefined, sibling);
        let pvnode = w3.__owl__.pvnode;
        c1.push(pvnode);
    } else {
        let componentKey3 = \`Child\`;
        let W3 = context.constructor.components[componentKey3] || QWeb.components[componentKey3]|| context['Child'];
        if (!W3) {throw new Error('Cannot find the definition of component \\"' + componentKey3 + '\\"')}
        w3 = new W3(parent, props3);
        parent.__owl__.cmap[templateId3] = w3.__owl__.id;
        let def2 = w3.__prepare(extra.fiber, undefined, undefined, sibling);
        let pvnode = h('dummy', {key: templateId3, hook: {insert(vn) { let nvn=w3.__mount(fiber, pvnode.elm);pvnode.elm=nvn.elm;},remove() {},destroy(vn) {w3.destroy();}}});
        const fiber = w3.__owl__.currentFiber;
        def2.then(function () {if (fiber.isCancelled) {return;} const vnode = fiber.vnode; pvnode.sel = vnode.sel; vnode.data.hook = {create(_, vn){vn.elm.addEventListener('ev', function (e) {e.preventDefault();if (e.target !== vn.elm) {return}const fn = owner['onEv'];if (fn) { fn.call(owner, e); } else { owner.onEv; }});}};});
        c1.push(pvnode);
        w3.__owl__.pvnode = pvnode;
    }
    sibling = w3.__owl__.currentFiber || sibling;
    return vn1;
}"
`;

exports[`other directives with t-component t-on with self and prevent modifiers (order matters) 1`] = `
"function anonymous(context,extra
) {
    let utils = this.constructor.utils;
    let QWeb = this.constructor;
    let parent = context;
    let owner = context;
    let sibling = null;
    var h = this.h;
    let c1 = [], p1 = {key:1};
    var vn1 = h('div', p1, c1);
    //COMPONENT
    let templateId3 = \`__4__\`;
    let w3 = templateId3 in parent.__owl__.cmap ? parent.__owl__.children[parent.__owl__.cmap[templateId3]] : false;
    let props3 = {};
    if (w3 && w3.__owl__.currentFiber && !w3.__owl__.vnode) {
        w3.destroy();
        w3 = false;
    }
    if (w3) {
        w3.__updateProps(props3, extra.fiber, undefined, undefined, sibling);
        let pvnode = w3.__owl__.pvnode;
        c1.push(pvnode);
    } else {
        let componentKey3 = \`child\`;
        let W3 = context.constructor.components[componentKey3] || QWeb.components[componentKey3]|| context['child'];
        if (!W3) {throw new Error('Cannot find the definition of component \\"' + componentKey3 + '\\"')}
        w3 = new W3(parent, props3);
        parent.__owl__.cmap[templateId3] = w3.__owl__.id;
        let def2 = w3.__prepare(extra.fiber, undefined, undefined, sibling);
        let pvnode = h('dummy', {key: templateId3, hook: {insert(vn) { let nvn=w3.__mount(fiber, pvnode.elm);pvnode.elm=nvn.elm;},remove() {},destroy(vn) {w3.destroy();}}});
        const fiber = w3.__owl__.currentFiber;
        def2.then(function () {if (fiber.isCancelled) {return;} const vnode = fiber.vnode; pvnode.sel = vnode.sel; vnode.data.hook = {create(_, vn){vn.elm.addEventListener('ev', function (e) {if (e.target !== vn.elm) {return}e.preventDefault();const fn = owner['onEv'];if (fn) { fn.call(owner, e); } else { owner.onEv; }});}};});
        c1.push(pvnode);
        w3.__owl__.pvnode = pvnode;
    }
    sibling = w3.__owl__.currentFiber || sibling;
    return vn1;
}"
`;

exports[`other directives with t-component t-on with self modifier 1`] = `
"function anonymous(context,extra
) {
    let utils = this.constructor.utils;
    let QWeb = this.constructor;
    let parent = context;
    let owner = context;
    let sibling = null;
    var h = this.h;
    let c1 = [], p1 = {key:1};
    var vn1 = h('div', p1, c1);
    //COMPONENT
    let templateId3 = \`__4__\`;
    let w3 = templateId3 in parent.__owl__.cmap ? parent.__owl__.children[parent.__owl__.cmap[templateId3]] : false;
    let props3 = {};
    if (w3 && w3.__owl__.currentFiber && !w3.__owl__.vnode) {
        w3.destroy();
        w3 = false;
    }
    if (w3) {
        w3.__updateProps(props3, extra.fiber, undefined, undefined, sibling);
        let pvnode = w3.__owl__.pvnode;
        c1.push(pvnode);
    } else {
        let componentKey3 = \`child\`;
        let W3 = context.constructor.components[componentKey3] || QWeb.components[componentKey3]|| context['child'];
        if (!W3) {throw new Error('Cannot find the definition of component \\"' + componentKey3 + '\\"')}
        w3 = new W3(parent, props3);
        parent.__owl__.cmap[templateId3] = w3.__owl__.id;
        let def2 = w3.__prepare(extra.fiber, undefined, undefined, sibling);
        let pvnode = h('dummy', {key: templateId3, hook: {insert(vn) { let nvn=w3.__mount(fiber, pvnode.elm);pvnode.elm=nvn.elm;},remove() {},destroy(vn) {w3.destroy();}}});
        const fiber = w3.__owl__.currentFiber;
        def2.then(function () {if (fiber.isCancelled) {return;} const vnode = fiber.vnode; pvnode.sel = vnode.sel; vnode.data.hook = {create(_, vn){vn.elm.addEventListener('ev-1', function (e) {const fn = owner['onEv1'];if (fn) { fn.call(owner, e); } else { owner.onEv1; }});vn.elm.addEventListener('ev-2', function (e) {if (e.target !== vn.elm) {return}const fn = owner['onEv2'];if (fn) { fn.call(owner, e); } else { owner.onEv2; }});}};});
        c1.push(pvnode);
        w3.__owl__.pvnode = pvnode;
    }
    sibling = w3.__owl__.currentFiber || sibling;
    return vn1;
}"
`;

exports[`other directives with t-component t-on with stop and/or prevent modifiers 1`] = `
"function anonymous(context,extra
) {
    let utils = this.constructor.utils;
    let QWeb = this.constructor;
    let parent = context;
    let owner = context;
    let sibling = null;
    var h = this.h;
    let c1 = [], p1 = {key:1};
    var vn1 = h('div', p1, c1);
    //COMPONENT
    let templateId3 = \`__4__\`;
    let w3 = templateId3 in parent.__owl__.cmap ? parent.__owl__.children[parent.__owl__.cmap[templateId3]] : false;
    let props3 = {};
    if (w3 && w3.__owl__.currentFiber && !w3.__owl__.vnode) {
        w3.destroy();
        w3 = false;
    }
    if (w3) {
        w3.__updateProps(props3, extra.fiber, undefined, undefined, sibling);
        let pvnode = w3.__owl__.pvnode;
        c1.push(pvnode);
    } else {
        let componentKey3 = \`child\`;
        let W3 = context.constructor.components[componentKey3] || QWeb.components[componentKey3]|| context['child'];
        if (!W3) {throw new Error('Cannot find the definition of component \\"' + componentKey3 + '\\"')}
        w3 = new W3(parent, props3);
        parent.__owl__.cmap[templateId3] = w3.__owl__.id;
        let def2 = w3.__prepare(extra.fiber, undefined, undefined, sibling);
        let pvnode = h('dummy', {key: templateId3, hook: {insert(vn) { let nvn=w3.__mount(fiber, pvnode.elm);pvnode.elm=nvn.elm;},remove() {},destroy(vn) {w3.destroy();}}});
        const fiber = w3.__owl__.currentFiber;
        def2.then(function () {if (fiber.isCancelled) {return;} const vnode = fiber.vnode; pvnode.sel = vnode.sel; vnode.data.hook = {create(_, vn){vn.elm.addEventListener('ev-1', function (e) {e.stopPropagation();const fn = owner['onEv1'];if (fn) { fn.call(owner, e); } else { owner.onEv1; }});vn.elm.addEventListener('ev-2', function (e) {e.preventDefault();const fn = owner['onEv2'];if (fn) { fn.call(owner, e); } else { owner.onEv2; }});vn.elm.addEventListener('ev-3', function (e) {e.stopPropagation();e.preventDefault();const fn = owner['onEv3'];if (fn) { fn.call(owner, e); } else { owner.onEv3; }});}};});
        c1.push(pvnode);
        w3.__owl__.pvnode = pvnode;
    }
    sibling = w3.__owl__.currentFiber || sibling;
    return vn1;
}"
`;

exports[`random stuff/miscellaneous can inject values in tagged templates 1`] = `
"function anonymous(context,extra
) {
    let sibling = null;
    var h = this.h;
    let c1 = [], p1 = {key:1};
    var vn1 = h('div', p1, c1);
    let c2 = [], p2 = {key:2};
    var vn2 = h('span', p2, c2);
    c1.push(vn2);
    var _3 = context['state'].n;
    if (_3 || _3 === 0) {
        c2.push({text: _3});
    }
    return vn1;
}"
`;

exports[`random stuff/miscellaneous snapshotting compiled code 1`] = `
"function anonymous(context,extra
) {
    let utils = this.constructor.utils;
    let QWeb = this.constructor;
    let parent = context;
    let owner = context;
    let sibling = null;
    var h = this.h;
    let c1 = [], p1 = {key:1};
    var vn1 = h('div', p1, c1);
    const nodeKey2 = 'somestring';
    //COMPONENT
    let templateId4 = \`__5__\` + nodeKey2;
    let w4 = templateId4 in parent.__owl__.cmap ? parent.__owl__.children[parent.__owl__.cmap[templateId4]] : false;
    let props4 = {flag:context['state'].flag};
    if (w4 && w4.__owl__.currentFiber && !w4.__owl__.vnode) {
        w4.destroy();
        w4 = false;
    }
    if (w4) {
        w4.__updateProps(props4, extra.fiber, undefined, undefined, sibling);
        let pvnode = w4.__owl__.pvnode;
        c1.push(pvnode);
    } else {
        let componentKey4 = \`child\`;
        let W4 = context.constructor.components[componentKey4] || QWeb.components[componentKey4]|| context['child'];
        if (!W4) {throw new Error('Cannot find the definition of component \\"' + componentKey4 + '\\"')}
        w4 = new W4(parent, props4);
        parent.__owl__.cmap[templateId4] = w4.__owl__.id;
        let def3 = w4.__prepare(extra.fiber, undefined, undefined, sibling);
        let pvnode = h('dummy', {key: templateId4, hook: {insert(vn) { let nvn=w4.__mount(fiber, pvnode.elm);pvnode.elm=nvn.elm;},remove() {},destroy(vn) {w4.destroy();}}});
        const fiber = w4.__owl__.currentFiber;
        def3.then(function () {if (fiber.isCancelled) {return;} const vnode = fiber.vnode; pvnode.sel = vnode.sel; });
        c1.push(pvnode);
        w4.__owl__.pvnode = pvnode;
    }
    sibling = w4.__owl__.currentFiber || sibling;
    return vn1;
}"
`;

exports[`random stuff/miscellaneous t-on with handler bound to dynamic argument on a t-foreach 1`] = `
"function anonymous(context,extra
) {
    let utils = this.constructor.utils;
    let QWeb = this.constructor;
    let parent = context;
    let owner = context;
    let sibling = null;
    context = Object.create(context);
    var h = this.h;
    let c1 = [], p1 = {key:1};
    var vn1 = h('div', p1, c1);
    var _2 = context['items'];
    if (!_2) { throw new Error('QWeb error: Invalid loop expression')}
    var _3 = _4 = _2;
    if (!(_2 instanceof Array)) {
        _3 = Object.keys(_2);
        _4 = Object.values(_2);
    }
    var _length3 = _3.length;
    for (let i1 = 0; i1 < _length3; i1++) {
        context.item_first = i1 === 0;
        context.item_last = i1 === _length3 - 1;
        context.item_index = i1;
        context.item = _3[i1];
        context.item_value = _4[i1];
        const nodeKey5 = context['item'];
        //COMPONENT
        let templateId7 = \`__8__\` + nodeKey5;
        let arg9 = context['item'];
        let w7 = templateId7 in parent.__owl__.cmap ? parent.__owl__.children[parent.__owl__.cmap[templateId7]] : false;
        let props7 = {};
        if (w7 && w7.__owl__.currentFiber && !w7.__owl__.vnode) {
            w7.destroy();
            w7 = false;
        }
        if (w7) {
            w7.__updateProps(props7, extra.fiber, undefined, undefined, sibling);
            let pvnode = w7.__owl__.pvnode;
            c1.push(pvnode);
        } else {
            let componentKey7 = \`Child\`;
            let W7 = context.constructor.components[componentKey7] || QWeb.components[componentKey7]|| context['Child'];
            if (!W7) {throw new Error('Cannot find the definition of component \\"' + componentKey7 + '\\"')}
            w7 = new W7(parent, props7);
            parent.__owl__.cmap[templateId7] = w7.__owl__.id;
            let def6 = w7.__prepare(extra.fiber, undefined, undefined, sibling);
            let pvnode = h('dummy', {key: templateId7, hook: {insert(vn) { let nvn=w7.__mount(fiber, pvnode.elm);pvnode.elm=nvn.elm;},remove() {},destroy(vn) {w7.destroy();}}});
            const fiber = w7.__owl__.currentFiber;
            def6.then(function () {if (fiber.isCancelled) {return;} const vnode = fiber.vnode; pvnode.sel = vnode.sel; vnode.data.hook = {create(_, vn){vn.elm.addEventListener('ev', function (e) {const fn = owner['onEv'];if (fn) { fn.call(owner, arg9, e); } else { owner.onEv; }});}};});
            c1.push(pvnode);
            w7.__owl__.pvnode = pvnode;
        }
        sibling = w7.__owl__.currentFiber || sibling;
    }
    return vn1;
}"
`;

exports[`t-model directive .lazy modifier 1`] = `
"function anonymous(context,extra
) {
    let sibling = null;
    var h = this.h;
    let c1 = [], p1 = {key:1};
    var vn1 = h('div', p1, c1);
    let c2 = [], p2 = {key:2,on:{}};
    var vn2 = h('input', p2, c2);
    c1.push(vn2);
    p2.props = {value: context['state'].text};
    extra.handlers['change' + 2] = extra.handlers['change' + 2] || ((ev) => {context['state'].text = ev.target.value});
    p2.on['change'] = extra.handlers['change' + 2];
    let c3 = [], p3 = {key:3};
    var vn3 = h('span', p3, c3);
    c1.push(vn3);
    var _4 = context['state'].text;
    if (_4 || _4 === 0) {
        c3.push({text: _4});
    }
    return vn1;
}"
`;

exports[`t-model directive basic use, on an input 1`] = `
"function anonymous(context,extra
) {
    let sibling = null;
    var h = this.h;
    let c1 = [], p1 = {key:1};
    var vn1 = h('div', p1, c1);
    let c2 = [], p2 = {key:2,on:{}};
    var vn2 = h('input', p2, c2);
    c1.push(vn2);
    p2.props = {value: context['state'].text};
    extra.handlers['input' + 2] = extra.handlers['input' + 2] || ((ev) => {context['state'].text = ev.target.value});
    p2.on['input'] = extra.handlers['input' + 2];
    let c3 = [], p3 = {key:3};
    var vn3 = h('span', p3, c3);
    c1.push(vn3);
    var _4 = context['state'].text;
    if (_4 || _4 === 0) {
        c3.push({text: _4});
    }
    return vn1;
}"
`;

exports[`t-model directive basic use, on another key in component 1`] = `
"function anonymous(context,extra
) {
    let sibling = null;
    var h = this.h;
    let c1 = [], p1 = {key:1};
    var vn1 = h('div', p1, c1);
    let c2 = [], p2 = {key:2,on:{}};
    var vn2 = h('input', p2, c2);
    c1.push(vn2);
    p2.props = {value: context['some'].text};
    extra.handlers['input' + 2] = extra.handlers['input' + 2] || ((ev) => {context['some'].text = ev.target.value});
    p2.on['input'] = extra.handlers['input' + 2];
    let c3 = [], p3 = {key:3};
    var vn3 = h('span', p3, c3);
    c1.push(vn3);
    var _4 = context['some'].text;
    if (_4 || _4 === 0) {
        c3.push({text: _4});
    }
    return vn1;
}"
`;

exports[`t-model directive on a select 1`] = `
"function anonymous(context,extra
) {
    let sibling = null;
    var h = this.h;
    let c1 = [], p1 = {key:1};
    var vn1 = h('div', p1, c1);
    let c2 = [], p2 = {key:2,on:{}};
    var vn2 = h('select', p2, c2);
    c1.push(vn2);
    p2.props = {value: context['state'].color};
    extra.handlers['change' + 2] = extra.handlers['change' + 2] || ((ev) => {context['state'].color = ev.target.value});
    p2.on['change'] = extra.handlers['change' + 2];
    p2.hook = {
      create: (_, n) => {
        n.elm.value=context['state'].color;
      },
    };
    var _3 = '';
    let c4 = [], p4 = {key:4,attrs:{value: _3}};
    var vn4 = h('option', p4, c4);
    c2.push(vn4);
    c4.push({text: \`Please select one\`});
    var _5 = 'red';
    let c6 = [], p6 = {key:6,attrs:{value: _5}};
    var vn6 = h('option', p6, c6);
    c2.push(vn6);
    c6.push({text: \`Red\`});
    var _7 = 'blue';
    let c8 = [], p8 = {key:8,attrs:{value: _7}};
    var vn8 = h('option', p8, c8);
    c2.push(vn8);
    c8.push({text: \`Blue\`});
    let c9 = [], p9 = {key:9};
    var vn9 = h('span', p9, c9);
    c1.push(vn9);
    c9.push({text: \`Choice: \`});
    var _10 = context['state'].color;
    if (_10 || _10 === 0) {
        c9.push({text: _10});
    }
    return vn1;
}"
`;

exports[`t-model directive on a sub state key 1`] = `
"function anonymous(context,extra
) {
    let sibling = null;
    var h = this.h;
    let c1 = [], p1 = {key:1};
    var vn1 = h('div', p1, c1);
    let c2 = [], p2 = {key:2,on:{}};
    var vn2 = h('input', p2, c2);
    c1.push(vn2);
    p2.props = {value: context['state'].something.text};
    extra.handlers['input' + 2] = extra.handlers['input' + 2] || ((ev) => {context['state'].something.text = ev.target.value});
    p2.on['input'] = extra.handlers['input' + 2];
    let c3 = [], p3 = {key:3};
    var vn3 = h('span', p3, c3);
    c1.push(vn3);
    var _4 = context['state'].something.text;
    if (_4 || _4 === 0) {
        c3.push({text: _4});
    }
    return vn1;
}"
`;

exports[`t-model directive on an input type=radio 1`] = `
"function anonymous(context,extra
) {
    let sibling = null;
    var h = this.h;
    let c1 = [], p1 = {key:1};
    var vn1 = h('div', p1, c1);
    var _2 = 'radio';
    var _3 = 'one';
    var _4 = 'One';
    let c5 = [], p5 = {key:5,attrs:{type: _2,id: _3,value: _4},on:{}};
    var vn5 = h('input', p5, c5);
    c1.push(vn5);
    p5.props = {checked:context['state'].choice === 'One'};
    extra.handlers['click' + 5] = extra.handlers['click' + 5] || ((ev) => {context['state'].choice = ev.target.value});
    p5.on['click'] = extra.handlers['click' + 5];
    var _6 = 'radio';
    var _7 = 'two';
    var _8 = 'Two';
    let c9 = [], p9 = {key:9,attrs:{type: _6,id: _7,value: _8},on:{}};
    var vn9 = h('input', p9, c9);
    c1.push(vn9);
    p9.props = {checked:context['state'].choice === 'Two'};
    extra.handlers['click' + 9] = extra.handlers['click' + 9] || ((ev) => {context['state'].choice = ev.target.value});
    p9.on['click'] = extra.handlers['click' + 9];
    let c10 = [], p10 = {key:10};
    var vn10 = h('span', p10, c10);
    c1.push(vn10);
    c10.push({text: \`Choice: \`});
    var _11 = context['state'].choice;
    if (_11 || _11 === 0) {
        c10.push({text: _11});
    }
    return vn1;
}"
`;

exports[`t-model directive on an input, type=checkbox 1`] = `
"function anonymous(context,extra
) {
    let sibling = null;
    var h = this.h;
    let c1 = [], p1 = {key:1};
    var vn1 = h('div', p1, c1);
    var _2 = 'checkbox';
    let c3 = [], p3 = {key:3,attrs:{type: _2},on:{}};
    var vn3 = h('input', p3, c3);
    c1.push(vn3);
    p3.props = {checked: context['state'].flag};
    extra.handlers['input' + 3] = extra.handlers['input' + 3] || ((ev) => {context['state'].flag = ev.target.checked});
    p3.on['input'] = extra.handlers['input' + 3];
    let c4 = [], p4 = {key:4};
    var vn4 = h('span', p4, c4);
    c1.push(vn4);
    if (context['state'].flag) {
        c4.push({text: \`yes\`});
    }
    else {
        c4.push({text: \`no\`});
    }
    return vn1;
}"
`;

exports[`t-slot directive can define and call slots 1`] = `
"function anonymous(context,extra
) {
    let utils = this.constructor.utils;
    let QWeb = this.constructor;
    let parent = context;
    let owner = context;
    let sibling = null;
    var h = this.h;
    let c1 = [], p1 = {key:1};
    var vn1 = h('div', p1, c1);
    //COMPONENT
    let templateId3 = \`__4__\`;
    let w3 = templateId3 in parent.__owl__.cmap ? parent.__owl__.children[parent.__owl__.cmap[templateId3]] : false;
    let props3 = {};
    if (w3 && w3.__owl__.currentFiber && !w3.__owl__.vnode) {
        w3.destroy();
        w3 = false;
    }
    if (w3) {
        w3.__updateProps(props3, extra.fiber, {}, undefined, sibling);
        let pvnode = w3.__owl__.pvnode;
        c1.push(pvnode);
    } else {
        let componentKey3 = \`Dialog\`;
        let W3 = context.constructor.components[componentKey3] || QWeb.components[componentKey3]|| context['Dialog'];
        if (!W3) {throw new Error('Cannot find the definition of component \\"' + componentKey3 + '\\"')}
        w3 = new W3(parent, props3);
        parent.__owl__.cmap[templateId3] = w3.__owl__.id;
        w3.__owl__.slotId = 1;
        let def2 = w3.__prepare(extra.fiber, {}, undefined, sibling);
        let pvnode = h('dummy', {key: templateId3, hook: {insert(vn) { let nvn=w3.__mount(fiber, pvnode.elm);pvnode.elm=nvn.elm;},remove() {},destroy(vn) {w3.destroy();}}});
        const fiber = w3.__owl__.currentFiber;
        def2.then(function () {if (fiber.isCancelled) {return;} const vnode = fiber.vnode; pvnode.sel = vnode.sel; });
        c1.push(pvnode);
        w3.__owl__.pvnode = pvnode;
    }
    sibling = w3.__owl__.currentFiber || sibling;
    return vn1;
}"
`;

exports[`t-slot directive can define and call slots 2`] = `
"function anonymous(context,extra
) {
    let owner = context;
    let sibling = null;
    var h = this.h;
    let c1 = [], p1 = {key:1};
    var vn1 = h('div', p1, c1);
    let c2 = [], p2 = {key:2};
    var vn2 = h('div', p2, c2);
    c1.push(vn2);
    const slot3 = this.constructor.slots[context.__owl__.slotId + '_' + 'header'];
    if (slot3) {
        slot3.call(this, context.__owl__.parent, Object.assign({}, extra, {parentNode: c2, vars: extra.vars, parent: owner}));
    }
    let c4 = [], p4 = {key:4};
    var vn4 = h('div', p4, c4);
    c1.push(vn4);
    const slot5 = this.constructor.slots[context.__owl__.slotId + '_' + 'footer'];
    if (slot5) {
        slot5.call(this, context.__owl__.parent, Object.assign({}, extra, {parentNode: c4, vars: extra.vars, parent: owner}));
    }
    return vn1;
}"
`;

exports[`t-slot directive can define and call slots 3`] = `
"function anonymous(context,extra
) {
    let sibling = null;
    var h = this.h;
    let c1 = extra.parentNode;
        Object.assign(context, extra.fiber.scope);
    let c6 = [], p6 = {key:6};
    var vn6 = h('span', p6, c6);
    c1.push(vn6);
    c6.push({text: \`header\`});
}"
`;

exports[`t-slot directive can define and call slots 4`] = `
"function anonymous(context,extra
) {
    let sibling = null;
    var h = this.h;
    let c1 = extra.parentNode;
        Object.assign(context, extra.fiber.scope);
    let c6 = [], p6 = {key:6};
    var vn6 = h('span', p6, c6);
    c1.push(vn6);
    c6.push({text: \`footer\`});
}"
`;

exports[`t-slot directive content is the default slot 1`] = `
"function anonymous(context,extra
) {
    let sibling = null;
    var h = this.h;
    let c1 = extra.parentNode;
        Object.assign(context, extra.fiber.scope);
    let c6 = [], p6 = {key:6};
    var vn6 = h('span', p6, c6);
    c1.push(vn6);
    c6.push({text: \`sts rocks\`});
}"
`;

exports[`t-slot directive default slot work with text nodes 1`] = `
"function anonymous(context,extra
) {
    let sibling = null;
    var h = this.h;
    let c1 = extra.parentNode;
        Object.assign(context, extra.fiber.scope);
    c1.push({text: \`sts rocks\`});
}"
`;

exports[`t-slot directive multiple roots are allowed in a default slot 1`] = `
"function anonymous(context,extra
) {
    let sibling = null;
    var h = this.h;
    let c1 = extra.parentNode;
        Object.assign(context, extra.fiber.scope);
    let c6 = [], p6 = {key:6};
    var vn6 = h('span', p6, c6);
    c1.push(vn6);
    c6.push({text: \`sts\`});
    let c7 = [], p7 = {key:7};
    var vn7 = h('span', p7, c7);
    c1.push(vn7);
    c7.push({text: \`rocks\`});
}"
`;

exports[`t-slot directive multiple roots are allowed in a named slot 1`] = `
"function anonymous(context,extra
) {
    let sibling = null;
    var h = this.h;
    let c1 = extra.parentNode;
        Object.assign(context, extra.fiber.scope);
    let c6 = [], p6 = {key:6};
    var vn6 = h('span', p6, c6);
    c1.push(vn6);
    c6.push({text: \`sts\`});
    let c7 = [], p7 = {key:7};
    var vn7 = h('span', p7, c7);
    c1.push(vn7);
    c7.push({text: \`rocks\`});
}"
`;

exports[`t-slot directive refs are properly bound in slots 1`] = `
"function anonymous(context,extra
) {
    let owner = context;
    context.__owl__.refs = context.__owl__.refs || {};
    let sibling = null;
    var h = this.h;
    let c1 = extra.parentNode;
        Object.assign(context, extra.fiber.scope);
    let c10 = [], p10 = {key:10,on:{}};
    var vn10 = h('button', p10, c10);
    c1.push(vn10);
    extra.handlers['click' + 10] = extra.handlers['click' + 10] || function (e) {const fn = context['doSomething'];if (fn) { fn.call(owner, e); } else { context.doSomething; }};
    p10.on['click'] = extra.handlers['click' + 10];
    const ref11 = \`myButton\`;
    p10.hook = {
      create: (_, n) => {
        context.__owl__.refs[ref11] = n.elm;
      },
      destroy: () => {
        delete context.__owl__.refs[ref11];
      },
    };
    c10.push({text: \`do something\`});
}"
`;

exports[`t-slot directive slots are rendered with proper context 1`] = `
"function anonymous(context,extra
) {
    let owner = context;
    let sibling = null;
    var h = this.h;
    let c1 = extra.parentNode;
        Object.assign(context, extra.fiber.scope);
    let c10 = [], p10 = {key:10,on:{}};
    var vn10 = h('button', p10, c10);
    c1.push(vn10);
    extra.handlers['click' + 10] = extra.handlers['click' + 10] || function (e) {const fn = context['doSomething'];if (fn) { fn.call(owner, e); } else { context.doSomething; }};
    p10.on['click'] = extra.handlers['click' + 10];
    c10.push({text: \`do something\`});
}"
`;

exports[`t-slot directive slots are rendered with proper context, part 2 1`] = `
"function anonymous(context,extra
) {
    let owner = context;
    let sibling = null;
    var h = this.h;
    var _1 = context['props'].to;
    let c2 = [], p2 = {key:2,attrs:{href: _1}};
    var vn2 = h('a', p2, c2);
    const slot3 = this.constructor.slots[context.__owl__.slotId + '_' + 'default'];
    if (slot3) {
        slot3.call(this, context.__owl__.parent, Object.assign({}, extra, {parentNode: c2, vars: extra.vars, parent: owner}));
    }
    return vn2;
}"
`;

exports[`t-slot directive slots are rendered with proper context, part 2 2`] = `
"function anonymous(context,extra
) {
    let utils = this.constructor.utils;
    let QWeb = this.constructor;
    let parent = context;
    let owner = context;
    let sibling = null;
    context = Object.create(context);
    const scope = Object.create(null);
    var h = this.h;
    let c1 = [], p1 = {key:1};
    var vn1 = h('div', p1, c1);
    let c2 = [], p2 = {key:2};
    var vn2 = h('u', p2, c2);
    c1.push(vn2);
    var _3 = context['state'].users;
    if (!_3) { throw new Error('QWeb error: Invalid loop expression')}
    var _4 = _5 = _3;
    if (!(_3 instanceof Array)) {
        _4 = Object.keys(_3);
        _5 = Object.values(_3);
    }
    var _length4 = _4.length;
    for (let i1 = 0; i1 < _length4; i1++) {
        context.user_first = i1 === 0;
        scope.user_first = context.user_first;
        context.user_last = i1 === _length4 - 1;
        scope.user_last = context.user_last;
        context.user_index = i1;
        scope.user_index = context.user_index;
        context.user = _4[i1];
        scope.user = context.user;
        context.user_value = _5[i1];
        scope.user_value = context.user_value;
        const nodeKey6 = context['user'].id;
        let c7 = [], p7 = {key:nodeKey6};
        var vn7 = h('li', p7, c7);
        c2.push(vn7);
        //COMPONENT
        let templateId9 = \`__10__\` + nodeKey6;
        let w9 = templateId9 in parent.__owl__.cmap ? parent.__owl__.children[parent.__owl__.cmap[templateId9]] : false;
        let props9 = {to:'/user/'+context['user'].id};
        if (w9 && w9.__owl__.currentFiber && !w9.__owl__.vnode) {
            w9.destroy();
            w9 = false;
        }
        if (w9) {
            w9.__updateProps(props9, extra.fiber, Object.assign({}, scope), undefined, sibling);
            let pvnode = w9.__owl__.pvnode;
            c7.push(pvnode);
        } else {
            let componentKey9 = \`Link\`;
            let W9 = context.constructor.components[componentKey9] || QWeb.components[componentKey9]|| context['Link'];
            if (!W9) {throw new Error('Cannot find the definition of component \\"' + componentKey9 + '\\"')}
            w9 = new W9(parent, props9);
            parent.__owl__.cmap[templateId9] = w9.__owl__.id;
            w9.__owl__.slotId = 1;
            let def8 = w9.__prepare(extra.fiber, Object.assign({}, scope), undefined, sibling);
            let pvnode = h('dummy', {key: templateId9, hook: {insert(vn) { let nvn=w9.__mount(fiber, pvnode.elm);pvnode.elm=nvn.elm;},remove() {},destroy(vn) {w9.destroy();}}});
            const fiber = w9.__owl__.currentFiber;
            def8.then(function () {if (fiber.isCancelled) {return;} const vnode = fiber.vnode; pvnode.sel = vnode.sel; });
            c7.push(pvnode);
            w9.__owl__.pvnode = pvnode;
        }
        sibling = w9.__owl__.currentFiber || sibling;
    }
    return vn1;
}"
`;

exports[`t-slot directive slots are rendered with proper context, part 2 3`] = `
"function anonymous(context,extra
) {
    let sibling = null;
    var h = this.h;
    let c7 = extra.parentNode;
        Object.assign(context, extra.fiber.scope);
    c7.push({text: \`User \`});
    var _12 = context['user'].name;
    if (_12 || _12 === 0) {
        c7.push({text: _12});
    }
}"
`;

exports[`t-slot directive slots are rendered with proper context, part 3 1`] = `
"function anonymous(context,extra
) {
    let owner = context;
    let sibling = null;
    var h = this.h;
    var _1 = context['props'].to;
    let c2 = [], p2 = {key:2,attrs:{href: _1}};
    var vn2 = h('a', p2, c2);
    const slot3 = this.constructor.slots[context.__owl__.slotId + '_' + 'default'];
    if (slot3) {
        slot3.call(this, context.__owl__.parent, Object.assign({}, extra, {parentNode: c2, vars: extra.vars, parent: owner}));
    }
    return vn2;
}"
`;

exports[`t-slot directive slots are rendered with proper context, part 3 2`] = `
"function anonymous(context,extra
) {
    let utils = this.constructor.utils;
    let QWeb = this.constructor;
    let parent = context;
    let owner = context;
    let sibling = null;
    context = Object.create(context);
    const scope = Object.create(null);
    var h = this.h;
    let c1 = [], p1 = {key:1};
    var vn1 = h('div', p1, c1);
    let c2 = [], p2 = {key:2};
    var vn2 = h('u', p2, c2);
    c1.push(vn2);
    var _3 = context['state'].users;
    if (!_3) { throw new Error('QWeb error: Invalid loop expression')}
    var _4 = _5 = _3;
    if (!(_3 instanceof Array)) {
        _4 = Object.keys(_3);
        _5 = Object.values(_3);
    }
    var _length4 = _4.length;
    for (let i1 = 0; i1 < _length4; i1++) {
        context.user_first = i1 === 0;
        scope.user_first = context.user_first;
        context.user_last = i1 === _length4 - 1;
        scope.user_last = context.user_last;
        context.user_index = i1;
        scope.user_index = context.user_index;
        context.user = _4[i1];
        scope.user = context.user;
        context.user_value = _5[i1];
        scope.user_value = context.user_value;
        const nodeKey6 = context['user'].id;
        let c7 = [], p7 = {key:nodeKey6};
        var vn7 = h('li', p7, c7);
        c2.push(vn7);
        var _8 = 'User '+context['user'].name;
        //COMPONENT
        let templateId10 = \`__11__\` + nodeKey6;
        let w10 = templateId10 in parent.__owl__.cmap ? parent.__owl__.children[parent.__owl__.cmap[templateId10]] : false;
        let props10 = {to:'/user/'+context['user'].id};
        if (w10 && w10.__owl__.currentFiber && !w10.__owl__.vnode) {
            w10.destroy();
            w10 = false;
        }
        if (w10) {
            w10.__updateProps(props10, extra.fiber, Object.assign({}, scope), {_8}, sibling);
            let pvnode = w10.__owl__.pvnode;
            c7.push(pvnode);
        } else {
            let componentKey10 = \`Link\`;
            let W10 = context.constructor.components[componentKey10] || QWeb.components[componentKey10]|| context['Link'];
            if (!W10) {throw new Error('Cannot find the definition of component \\"' + componentKey10 + '\\"')}
            w10 = new W10(parent, props10);
            parent.__owl__.cmap[templateId10] = w10.__owl__.id;
            w10.__owl__.slotId = 1;
            let def9 = w10.__prepare(extra.fiber, Object.assign({}, scope), {_8}, sibling);
            let pvnode = h('dummy', {key: templateId10, hook: {insert(vn) { let nvn=w10.__mount(fiber, pvnode.elm);pvnode.elm=nvn.elm;},remove() {},destroy(vn) {w10.destroy();}}});
            const fiber = w10.__owl__.currentFiber;
            def9.then(function () {if (fiber.isCancelled) {return;} const vnode = fiber.vnode; pvnode.sel = vnode.sel; });
            c7.push(pvnode);
            w10.__owl__.pvnode = pvnode;
        }
        sibling = w10.__owl__.currentFiber || sibling;
    }
    return vn1;
}"
`;

exports[`t-slot directive slots are rendered with proper context, part 3 3`] = `
"function anonymous(context,extra
) {
    let sibling = null;
    var h = this.h;
    let c7 = extra.parentNode;
    let _8 = extra.fiber.vars._8
        Object.assign(context, extra.fiber.scope);
    if (_8 || _8 === 0) {
        c7.push({text: _8});
    }
}"
`;

exports[`t-slot directive slots are rendered with proper context, part 4 1`] = `
"function anonymous(context,extra
) {
    let utils = this.constructor.utils;
    let QWeb = this.constructor;
    let parent = context;
    let owner = context;
    let sibling = null;
    var h = this.h;
    let c1 = [], p1 = {key:1};
    var vn1 = h('div', p1, c1);
    var _2 = 'User '+context['state'].user.name;
    //COMPONENT
    let templateId4 = \`__5__\`;
    let w4 = templateId4 in parent.__owl__.cmap ? parent.__owl__.children[parent.__owl__.cmap[templateId4]] : false;
    let props4 = {to:'/user/'+context['state'].user.id};
    if (w4 && w4.__owl__.currentFiber && !w4.__owl__.vnode) {
        w4.destroy();
        w4 = false;
    }
    if (w4) {
        w4.__updateProps(props4, extra.fiber, {}, {_2}, sibling);
        let pvnode = w4.__owl__.pvnode;
        c1.push(pvnode);
    } else {
        let componentKey4 = \`Link\`;
        let W4 = context.constructor.components[componentKey4] || QWeb.components[componentKey4]|| context['Link'];
        if (!W4) {throw new Error('Cannot find the definition of component \\"' + componentKey4 + '\\"')}
        w4 = new W4(parent, props4);
        parent.__owl__.cmap[templateId4] = w4.__owl__.id;
        w4.__owl__.slotId = 1;
        let def3 = w4.__prepare(extra.fiber, {}, {_2}, sibling);
        let pvnode = h('dummy', {key: templateId4, hook: {insert(vn) { let nvn=w4.__mount(fiber, pvnode.elm);pvnode.elm=nvn.elm;},remove() {},destroy(vn) {w4.destroy();}}});
        const fiber = w4.__owl__.currentFiber;
        def3.then(function () {if (fiber.isCancelled) {return;} const vnode = fiber.vnode; pvnode.sel = vnode.sel; });
        c1.push(pvnode);
        w4.__owl__.pvnode = pvnode;
    }
    sibling = w4.__owl__.currentFiber || sibling;
    return vn1;
}"
`;

exports[`t-slot directive slots are rendered with proper context, part 4 2`] = `
"function anonymous(context,extra
) {
    let sibling = null;
    var h = this.h;
    let c1 = extra.parentNode;
    let _2 = extra.fiber.vars._2
        Object.assign(context, extra.fiber.scope);
    if (_2 || _2 === 0) {
        c1.push({text: _2});
    }
}"
`;

exports[`t-slot directive template can just return a slot 1`] = `
"function anonymous(context,extra
) {
    let utils = this.constructor.utils;
    let owner = context;
    let sibling = null;
    let result;
    var h = this.h;
    const slot1 = this.constructor.slots[context.__owl__.slotId + '_' + 'default'];
    if (slot1) {
        let children2= []
        result = {}
        slot1.call(this, context.__owl__.parent, Object.assign({}, extra, {parentNode: children2, vars: extra.vars, parent: owner}));
        utils.defineProxy(result, children2[0]);
    }
    return result;
}"
`;

exports[`top level sub widgets basic use 1`] = `
"function anonymous(context,extra
) {
    let utils = this.constructor.utils;
    let QWeb = this.constructor;
    let parent = context;
    let owner = context;
    let sibling = null;
    let result;
    var h = this.h;
    //COMPONENT
    let templateId2 = \`__3__\`;
    let w2 = templateId2 in parent.__owl__.cmap ? parent.__owl__.children[parent.__owl__.cmap[templateId2]] : false;
    let vn4 = {};
    result = vn4;
    let props2 = {p:1};
    if (w2 && w2.__owl__.currentFiber && !w2.__owl__.vnode) {
        w2.destroy();
        w2 = false;
    }
    if (w2) {
        w2.__updateProps(props2, extra.fiber, undefined, undefined, sibling);
        let pvnode = w2.__owl__.pvnode;
        utils.defineProxy(vn4, pvnode);
    } else {
        let componentKey2 = \`Child\`;
        let W2 = context.constructor.components[componentKey2] || QWeb.components[componentKey2]|| context['Child'];
        if (!W2) {throw new Error('Cannot find the definition of component \\"' + componentKey2 + '\\"')}
        w2 = new W2(parent, props2);
        parent.__owl__.cmap[templateId2] = w2.__owl__.id;
        let def1 = w2.__prepare(extra.fiber, undefined, undefined, sibling);
        let pvnode = h('dummy', {key: templateId2, hook: {insert(vn) { let nvn=w2.__mount(fiber, pvnode.elm);pvnode.elm=nvn.elm;},remove() {},destroy(vn) {w2.destroy();}}});
        const fiber = w2.__owl__.currentFiber;
        def1.then(function () {if (fiber.isCancelled) {return;} const vnode = fiber.vnode; pvnode.sel = vnode.sel; });
        utils.defineProxy(vn4, pvnode);
        w2.__owl__.pvnode = pvnode;
    }
    sibling = w2.__owl__.currentFiber || sibling;
    return result;
}"
`;

exports[`top level sub widgets can select a sub widget  1`] = `
"function anonymous(context,extra
) {
    let utils = this.constructor.utils;
    let QWeb = this.constructor;
    let parent = context;
    let owner = context;
    let sibling = null;
    let result;
    var h = this.h;
    if (context['env'].flag) {
        //COMPONENT
        let templateId2 = \`__3__\`;
        let w2 = templateId2 in parent.__owl__.cmap ? parent.__owl__.children[parent.__owl__.cmap[templateId2]] : false;
        let vn4 = {};
        result = vn4;
        let props2 = {};
        if (w2 && w2.__owl__.currentFiber && !w2.__owl__.vnode) {
            w2.destroy();
            w2 = false;
        }
        if (w2) {
            w2.__updateProps(props2, extra.fiber, undefined, undefined, sibling);
            let pvnode = w2.__owl__.pvnode;
            utils.defineProxy(vn4, pvnode);
        } else {
            let componentKey2 = \`Child\`;
            let W2 = context.constructor.components[componentKey2] || QWeb.components[componentKey2]|| context['Child'];
            if (!W2) {throw new Error('Cannot find the definition of component \\"' + componentKey2 + '\\"')}
            w2 = new W2(parent, props2);
            parent.__owl__.cmap[templateId2] = w2.__owl__.id;
            let def1 = w2.__prepare(extra.fiber, undefined, undefined, sibling);
            let pvnode = h('dummy', {key: templateId2, hook: {insert(vn) { let nvn=w2.__mount(fiber, pvnode.elm);pvnode.elm=nvn.elm;},remove() {},destroy(vn) {w2.destroy();}}});
            const fiber = w2.__owl__.currentFiber;
            def1.then(function () {if (fiber.isCancelled) {return;} const vnode = fiber.vnode; pvnode.sel = vnode.sel; });
            utils.defineProxy(vn4, pvnode);
            w2.__owl__.pvnode = pvnode;
        }
        sibling = w2.__owl__.currentFiber || sibling;
    }
    if (!context['env'].flag) {
        //COMPONENT
        let templateId6 = \`__7__\`;
        let w6 = templateId6 in parent.__owl__.cmap ? parent.__owl__.children[parent.__owl__.cmap[templateId6]] : false;
        let vn8 = {};
        result = vn8;
        let props6 = {};
        if (w6 && w6.__owl__.currentFiber && !w6.__owl__.vnode) {
            w6.destroy();
            w6 = false;
        }
        if (w6) {
            w6.__updateProps(props6, extra.fiber, undefined, undefined, sibling);
            let pvnode = w6.__owl__.pvnode;
            utils.defineProxy(vn8, pvnode);
        } else {
            let componentKey6 = \`OtherChild\`;
            let W6 = context.constructor.components[componentKey6] || QWeb.components[componentKey6]|| context['OtherChild'];
            if (!W6) {throw new Error('Cannot find the definition of component \\"' + componentKey6 + '\\"')}
            w6 = new W6(parent, props6);
            parent.__owl__.cmap[templateId6] = w6.__owl__.id;
            let def5 = w6.__prepare(extra.fiber, undefined, undefined, sibling);
            let pvnode = h('dummy', {key: templateId6, hook: {insert(vn) { let nvn=w6.__mount(fiber, pvnode.elm);pvnode.elm=nvn.elm;},remove() {},destroy(vn) {w6.destroy();}}});
            const fiber = w6.__owl__.currentFiber;
            def5.then(function () {if (fiber.isCancelled) {return;} const vnode = fiber.vnode; pvnode.sel = vnode.sel; });
            utils.defineProxy(vn8, pvnode);
            w6.__owl__.pvnode = pvnode;
        }
        sibling = w6.__owl__.currentFiber || sibling;
    }
    return result;
}"
`;
