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

exports[`t-slot directive can define and call slots 1`] = `
"function anonymous(context, extra
) {
    // Template name: \\"Parent\\"
    let utils = this.constructor.utils;
    let QWeb = this.constructor;
    let parent = context;
    let scope = Object.create(context);
    let h = this.h;
    let c1 = [], p1 = {key:1};
    let vn1 = h('div', p1, c1);
    // Component 'Dialog'
    let w2 = '__3__' in parent.__owl__.cmap ? parent.__owl__.children[parent.__owl__.cmap['__3__']] : false;
    let props2 = {};
    if (w2 && w2.__owl__.currentFiber && !w2.__owl__.vnode) {
        w2.destroy();
        w2 = false;
    }
    if (w2) {
        w2.__updateProps(props2, extra.fiber, Object.assign(Object.create(context), scope));
        let pvnode = w2.__owl__.pvnode;
        c1.push(pvnode);
    } else {
        let componentKey2 = \`Dialog\`;
        let W2 = context.constructor.components[componentKey2] || QWeb.components[componentKey2]|| scope['Dialog'];
        if (!W2) {throw new Error('Cannot find the definition of component \\"' + componentKey2 + '\\"')}
        w2 = new W2(parent, props2);
        parent.__owl__.cmap['__3__'] = w2.__owl__.id;
        w2.__owl__.slotId = 1;
        let fiber = w2.__prepare(extra.fiber, Object.assign(Object.create(context), scope), () => { const vnode = fiber.vnode; pvnode.sel = vnode.sel; });
        let pvnode = h('dummy', {key: '__3__', hook: {remove() {},destroy(vn) {w2.destroy();}}});
        c1.push(pvnode);
        w2.__owl__.pvnode = pvnode;
    }
    w2.__owl__.parentLastFiberId = extra.fiber.id;
    return vn1;
}"
`;

exports[`t-slot directive can define and call slots 2`] = `
"function anonymous(context, extra
) {
    // Template name: \\"Dialog\\"
    let h = this.h;
    let c9 = [], p9 = {key:9};
    let vn9 = h('div', p9, c9);
    let c10 = [], p10 = {key:10};
    let vn10 = h('div', p10, c10);
    c9.push(vn10);
    const slot11 = this.constructor.slots[context.__owl__.slotId + '_' + 'header'];
    if (slot11) {
        slot11.call(this, context.__owl__.scope, Object.assign({}, extra, {parentNode: c10, parent: extra.parent || context}));
    }
    let c12 = [], p12 = {key:12};
    let vn12 = h('div', p12, c12);
    c9.push(vn12);
    const slot13 = this.constructor.slots[context.__owl__.slotId + '_' + 'footer'];
    if (slot13) {
        slot13.call(this, context.__owl__.scope, Object.assign({}, extra, {parentNode: c12, parent: extra.parent || context}));
    }
    return vn9;
}"
`;

exports[`t-slot directive can define and call slots 3`] = `
"function anonymous(context, extra
) {
    // Template name: \\"slot_header_template\\"
    let h = this.h;
    let c4 = extra.parentNode;
    let c5 = [], p5 = {key:5};
    let vn5 = h('span', p5, c5);
    c4.push(vn5);
    c5.push({text: \`header\`});
}"
`;

exports[`t-slot directive can define and call slots 4`] = `
"function anonymous(context, extra
) {
    // Template name: \\"slot_footer_template\\"
    let h = this.h;
    let c6 = extra.parentNode;
    let c7 = [], p7 = {key:7};
    let vn7 = h('span', p7, c7);
    c6.push(vn7);
    c7.push({text: \`footer\`});
}"
`;

exports[`t-slot directive can define and call slots using old t-set keyword 1`] = `
"function anonymous(context, extra
) {
    // Template name: \\"__template__2\\"
    let utils = this.constructor.utils;
    let QWeb = this.constructor;
    let parent = context;
    let scope = Object.create(context);
    let h = this.h;
    let c1 = [], p1 = {key:1};
    let vn1 = h('div', p1, c1);
    // Component 'Dialog'
    let w2 = '__3__' in parent.__owl__.cmap ? parent.__owl__.children[parent.__owl__.cmap['__3__']] : false;
    let props2 = {};
    if (w2 && w2.__owl__.currentFiber && !w2.__owl__.vnode) {
        w2.destroy();
        w2 = false;
    }
    if (w2) {
        w2.__updateProps(props2, extra.fiber, Object.assign(Object.create(context), scope));
        let pvnode = w2.__owl__.pvnode;
        c1.push(pvnode);
    } else {
        let componentKey2 = \`Dialog\`;
        let W2 = context.constructor.components[componentKey2] || QWeb.components[componentKey2]|| scope['Dialog'];
        if (!W2) {throw new Error('Cannot find the definition of component \\"' + componentKey2 + '\\"')}
        w2 = new W2(parent, props2);
        parent.__owl__.cmap['__3__'] = w2.__owl__.id;
        w2.__owl__.slotId = 1;
        let fiber = w2.__prepare(extra.fiber, Object.assign(Object.create(context), scope), () => { const vnode = fiber.vnode; pvnode.sel = vnode.sel; });
        let pvnode = h('dummy', {key: '__3__', hook: {remove() {},destroy(vn) {w2.destroy();}}});
        c1.push(pvnode);
        w2.__owl__.pvnode = pvnode;
    }
    w2.__owl__.parentLastFiberId = extra.fiber.id;
    return vn1;
}"
`;

exports[`t-slot directive can define and call slots using old t-set keyword 2`] = `
"function anonymous(context, extra
) {
    // Template name: \\"__template__1\\"
    let h = this.h;
    let c9 = [], p9 = {key:9};
    let vn9 = h('div', p9, c9);
    let c10 = [], p10 = {key:10};
    let vn10 = h('div', p10, c10);
    c9.push(vn10);
    const slot11 = this.constructor.slots[context.__owl__.slotId + '_' + 'header'];
    if (slot11) {
        slot11.call(this, context.__owl__.scope, Object.assign({}, extra, {parentNode: c10, parent: extra.parent || context}));
    }
    let c12 = [], p12 = {key:12};
    let vn12 = h('div', p12, c12);
    c9.push(vn12);
    const slot13 = this.constructor.slots[context.__owl__.slotId + '_' + 'footer'];
    if (slot13) {
        slot13.call(this, context.__owl__.scope, Object.assign({}, extra, {parentNode: c12, parent: extra.parent || context}));
    }
    return vn9;
}"
`;

exports[`t-slot directive can define and call slots using old t-set keyword 3`] = `
"function anonymous(context, extra
) {
    // Template name: \\"slot_header_template\\"
    let h = this.h;
    let c4 = extra.parentNode;
    let c5 = [], p5 = {key:5};
    let vn5 = h('span', p5, c5);
    c4.push(vn5);
    c5.push({text: \`header\`});
}"
`;

exports[`t-slot directive can define and call slots using old t-set keyword 4`] = `
"function anonymous(context, extra
) {
    // Template name: \\"slot_footer_template\\"
    let h = this.h;
    let c6 = extra.parentNode;
    let c7 = [], p7 = {key:7};
    let vn7 = h('span', p7, c7);
    c6.push(vn7);
    c7.push({text: \`footer\`});
}"
`;

exports[`t-slot directive content is the default slot 1`] = `
"function anonymous(context, extra
) {
    // Template name: \\"slot_default_template\\"
    let h = this.h;
    let c4 = extra.parentNode;
    let c5 = [], p5 = {key:5};
    let vn5 = h('span', p5, c5);
    c4.push(vn5);
    c5.push({text: \`sts rocks\`});
}"
`;

exports[`t-slot directive dafault slots can define a default content 1`] = `
"function anonymous(context, extra
) {
    // Template name: \\"__template__1\\"
    let h = this.h;
    let c4 = [], p4 = {key:4};
    let vn4 = h('span', p4, c4);
    const slot5 = this.constructor.slots[context.__owl__.slotId + '_' + 'default'];
    if (slot5) {
        slot5.call(this, context.__owl__.scope, Object.assign({}, extra, {parentNode: c4, parent: extra.parent || context}));
    } else {
        c4.push({text: \`default content\`});
    }
    return vn4;
}"
`;

exports[`t-slot directive default slot work with text nodes 1`] = `
"function anonymous(context, extra
) {
    // Template name: \\"slot_default_template\\"
    let h = this.h;
    let c4 = extra.parentNode;
    c4.push({text: \`sts rocks\`});
}"
`;

exports[`t-slot directive dynamic t-slot call 1`] = `
"function anonymous(context, extra
) {
    // Template name: \\"__template__1\\"
    let utils = this.constructor.utils;
    let scope = Object.create(context);
    let h = this.h;
    let c10 = [], p10 = {key:10,on:{}};
    let vn10 = h('button', p10, c10);
    extra.handlers['click__11__'] = extra.handlers['click__11__'] || function (e) {if (context.__owl__.status === 5){return}utils.getComponent(context)['toggle'](e);};
    p10.on['click'] = extra.handlers['click__11__'];
    const slot12 = this.constructor.slots[context.__owl__.slotId + '_' + (scope['current'].slot)];
    if (slot12) {
        slot12.call(this, context.__owl__.scope, Object.assign({}, extra, {parentNode: c10, parent: extra.parent || context}));
    }
    return vn10;
}"
`;

exports[`t-slot directive multiple roots are allowed in a default slot 1`] = `
"function anonymous(context, extra
) {
    // Template name: \\"slot_default_template\\"
    let h = this.h;
    let c4 = extra.parentNode;
    let c5 = [], p5 = {key:5};
    let vn5 = h('span', p5, c5);
    c4.push(vn5);
    c5.push({text: \`sts\`});
    let c6 = [], p6 = {key:6};
    let vn6 = h('span', p6, c6);
    c4.push(vn6);
    c6.push({text: \`rocks\`});
}"
`;

exports[`t-slot directive multiple roots are allowed in a named slot 1`] = `
"function anonymous(context, extra
) {
    // Template name: \\"slot_content_template\\"
    let h = this.h;
    let c4 = extra.parentNode;
    let c5 = [], p5 = {key:5};
    let vn5 = h('span', p5, c5);
    c4.push(vn5);
    c5.push({text: \`sts\`});
    let c6 = [], p6 = {key:6};
    let vn6 = h('span', p6, c6);
    c4.push(vn6);
    c6.push({text: \`rocks\`});
}"
`;

exports[`t-slot directive named slots can define a default content 1`] = `
"function anonymous(context, extra
) {
    // Template name: \\"__template__1\\"
    let h = this.h;
    let c4 = [], p4 = {key:4};
    let vn4 = h('span', p4, c4);
    const slot5 = this.constructor.slots[context.__owl__.slotId + '_' + 'header'];
    if (slot5) {
        slot5.call(this, context.__owl__.scope, Object.assign({}, extra, {parentNode: c4, parent: extra.parent || context}));
    } else {
        c4.push({text: \`default content\`});
    }
    return vn4;
}"
`;

exports[`t-slot directive refs are properly bound in slots 1`] = `
"function anonymous(context, extra
) {
    // Template name: \\"slot_footer_template\\"
    let utils = this.constructor.utils;
    context.__owl__.refs = context.__owl__.refs || {};
    let h = this.h;
    let c8 = extra.parentNode;
    let c9 = [], p9 = {key:9,on:{}};
    let vn9 = h('button', p9, c9);
    c8.push(vn9);
    extra.handlers['click__10__'] = extra.handlers['click__10__'] || function (e) {if (context.__owl__.status === 5){return}utils.getComponent(context)['doSomething'](e);};
    p9.on['click'] = extra.handlers['click__10__'];
    const ref11 = \`myButton\`;
    p9.hook = {
      create: (_, n) => {
        context.__owl__.refs[ref11] = n.elm;
      },
      destroy: () => {
        delete context.__owl__.refs[ref11];
      },
    };
    c9.push({text: \`do something\`});
}"
`;

exports[`t-slot directive slots are rendered with proper context 1`] = `
"function anonymous(context, extra
) {
    // Template name: \\"slot_footer_template\\"
    let utils = this.constructor.utils;
    let h = this.h;
    let c8 = extra.parentNode;
    let c9 = [], p9 = {key:9,on:{}};
    let vn9 = h('button', p9, c9);
    c8.push(vn9);
    extra.handlers['click__10__'] = extra.handlers['click__10__'] || function (e) {if (context.__owl__.status === 5){return}utils.getComponent(context)['doSomething'](e);};
    p9.on['click'] = extra.handlers['click__10__'];
    c9.push({text: \`do something\`});
}"
`;

exports[`t-slot directive slots are rendered with proper context, part 2 1`] = `
"function anonymous(context, extra
) {
    // Template name: \\"Link\\"
    let scope = Object.create(context);
    let h = this.h;
    let _12 = scope['props'].to;
    let c13 = [], p13 = {key:13,attrs:{href: _12}};
    let vn13 = h('a', p13, c13);
    const slot14 = this.constructor.slots[context.__owl__.slotId + '_' + 'default'];
    if (slot14) {
        slot14.call(this, context.__owl__.scope, Object.assign({}, extra, {parentNode: c13, parent: extra.parent || context}));
    }
    return vn13;
}"
`;

exports[`t-slot directive slots are rendered with proper context, part 2 2`] = `
"function anonymous(context, extra
) {
    // Template name: \\"App\\"
    let utils = this.constructor.utils;
    let QWeb = this.constructor;
    let parent = context;
    let scope = Object.create(context);
    let h = this.h;
    let c1 = [], p1 = {key:1};
    let vn1 = h('div', p1, c1);
    let c2 = [], p2 = {key:2};
    let vn2 = h('u', p2, c2);
    c1.push(vn2);
    let _3 = scope['state'].users;
    if (!_3) { throw new Error('QWeb error: Invalid loop expression')}
    let _4 = _5 = _3;
    if (!(_3 instanceof Array)) {
        _4 = Object.keys(_3);
        _5 = Object.values(_3);
    }
    let _length4 = _4.length;
    let _origScope6 = scope;
    scope = Object.create(scope);
    for (let i1 = 0; i1 < _length4; i1++) {
        scope.user_first = i1 === 0
        scope.user_last = i1 === _length4 - 1
        scope.user_index = i1
        scope.user = _4[i1]
        scope.user_value = _5[i1]
        let key1 = scope['user'].id;
        let c7 = [], p7 = {key:\`\${key1}_7\`};
        let vn7 = h('li', p7, c7);
        c2.push(vn7);
        // Component 'Link'
        let k9 = \`__9__\${key1}__\`;
        let w8 = k9 in parent.__owl__.cmap ? parent.__owl__.children[parent.__owl__.cmap[k9]] : false;
        let props8 = {to:'/user/'+scope['user'].id};
        if (w8 && w8.__owl__.currentFiber && !w8.__owl__.vnode) {
            w8.destroy();
            w8 = false;
        }
        if (w8) {
            w8.__updateProps(props8, extra.fiber, Object.assign(Object.create(context), scope));
            let pvnode = w8.__owl__.pvnode;
            c7.push(pvnode);
        } else {
            let componentKey8 = \`Link\`;
            let W8 = context.constructor.components[componentKey8] || QWeb.components[componentKey8]|| scope['Link'];
            if (!W8) {throw new Error('Cannot find the definition of component \\"' + componentKey8 + '\\"')}
            w8 = new W8(parent, props8);
            parent.__owl__.cmap[k9] = w8.__owl__.id;
            w8.__owl__.slotId = 1;
            let fiber = w8.__prepare(extra.fiber, Object.assign(Object.create(context), scope), () => { const vnode = fiber.vnode; pvnode.sel = vnode.sel; });
            let pvnode = h('dummy', {key: k9, hook: {remove() {},destroy(vn) {w8.destroy();}}});
            c7.push(pvnode);
            w8.__owl__.pvnode = pvnode;
        }
        w8.__owl__.parentLastFiberId = extra.fiber.id;
    }
    scope = _origScope6;
    return vn1;
}"
`;

exports[`t-slot directive slots are rendered with proper context, part 2 3`] = `
"function anonymous(context, extra
) {
    // Template name: \\"slot_default_template\\"
    let scope = Object.create(context);
    let h = this.h;
    let c10 = extra.parentNode;
    c10.push({text: \`User \`});
    let _11 = scope['user'].name;
    if (_11 != null) {
        c10.push({text: _11});
    }
}"
`;

exports[`t-slot directive slots are rendered with proper context, part 3 1`] = `
"function anonymous(context, extra
) {
    // Template name: \\"Link\\"
    let scope = Object.create(context);
    let h = this.h;
    let _12 = scope['props'].to;
    let c13 = [], p13 = {key:13,attrs:{href: _12}};
    let vn13 = h('a', p13, c13);
    const slot14 = this.constructor.slots[context.__owl__.slotId + '_' + 'default'];
    if (slot14) {
        slot14.call(this, context.__owl__.scope, Object.assign({}, extra, {parentNode: c13, parent: extra.parent || context}));
    }
    return vn13;
}"
`;

exports[`t-slot directive slots are rendered with proper context, part 3 2`] = `
"function anonymous(context, extra
) {
    // Template name: \\"App\\"
    let utils = this.constructor.utils;
    let QWeb = this.constructor;
    let parent = context;
    let scope = Object.create(context);
    let h = this.h;
    let c1 = [], p1 = {key:1};
    let vn1 = h('div', p1, c1);
    let c2 = [], p2 = {key:2};
    let vn2 = h('u', p2, c2);
    c1.push(vn2);
    let _3 = scope['state'].users;
    if (!_3) { throw new Error('QWeb error: Invalid loop expression')}
    let _4 = _5 = _3;
    if (!(_3 instanceof Array)) {
        _4 = Object.keys(_3);
        _5 = Object.values(_3);
    }
    let _length4 = _4.length;
    let _origScope6 = scope;
    scope = Object.create(scope);
    for (let i1 = 0; i1 < _length4; i1++) {
        scope.user_first = i1 === 0
        scope.user_last = i1 === _length4 - 1
        scope.user_index = i1
        scope.user = _4[i1]
        scope.user_value = _5[i1]
        let key1 = scope['user'].id;
        let c7 = [], p7 = {key:\`\${key1}_7\`};
        let vn7 = h('li', p7, c7);
        c2.push(vn7);
        utils.getScope(scope, 'userdescr').userdescr = 'User '+scope['user'].name;
        // Component 'Link'
        let k9 = \`__9__\${key1}__\`;
        let w8 = k9 in parent.__owl__.cmap ? parent.__owl__.children[parent.__owl__.cmap[k9]] : false;
        let props8 = {to:'/user/'+scope['user'].id};
        if (w8 && w8.__owl__.currentFiber && !w8.__owl__.vnode) {
            w8.destroy();
            w8 = false;
        }
        if (w8) {
            w8.__updateProps(props8, extra.fiber, Object.assign(Object.create(context), scope));
            let pvnode = w8.__owl__.pvnode;
            c7.push(pvnode);
        } else {
            let componentKey8 = \`Link\`;
            let W8 = context.constructor.components[componentKey8] || QWeb.components[componentKey8]|| scope['Link'];
            if (!W8) {throw new Error('Cannot find the definition of component \\"' + componentKey8 + '\\"')}
            w8 = new W8(parent, props8);
            parent.__owl__.cmap[k9] = w8.__owl__.id;
            w8.__owl__.slotId = 1;
            let fiber = w8.__prepare(extra.fiber, Object.assign(Object.create(context), scope), () => { const vnode = fiber.vnode; pvnode.sel = vnode.sel; });
            let pvnode = h('dummy', {key: k9, hook: {remove() {},destroy(vn) {w8.destroy();}}});
            c7.push(pvnode);
            w8.__owl__.pvnode = pvnode;
        }
        w8.__owl__.parentLastFiberId = extra.fiber.id;
    }
    scope = _origScope6;
    return vn1;
}"
`;

exports[`t-slot directive slots are rendered with proper context, part 3 3`] = `
"function anonymous(context, extra
) {
    // Template name: \\"slot_default_template\\"
    let scope = Object.create(context);
    let h = this.h;
    let c10 = extra.parentNode;
    let _11 = scope['userdescr'];
    if (_11 != null) {
        c10.push({text: _11});
    }
}"
`;

exports[`t-slot directive slots are rendered with proper context, part 4 1`] = `
"function anonymous(context, extra
) {
    // Template name: \\"App\\"
    let utils = this.constructor.utils;
    let QWeb = this.constructor;
    let parent = context;
    let scope = Object.create(context);
    let h = this.h;
    let c1 = [], p1 = {key:1};
    let vn1 = h('div', p1, c1);
    scope.userdescr = 'User '+scope['state'].user.name;
    // Component 'Link'
    let w2 = '__3__' in parent.__owl__.cmap ? parent.__owl__.children[parent.__owl__.cmap['__3__']] : false;
    let props2 = {to:'/user/'+scope['state'].user.id};
    if (w2 && w2.__owl__.currentFiber && !w2.__owl__.vnode) {
        w2.destroy();
        w2 = false;
    }
    if (w2) {
        w2.__updateProps(props2, extra.fiber, Object.assign(Object.create(context), scope));
        let pvnode = w2.__owl__.pvnode;
        c1.push(pvnode);
    } else {
        let componentKey2 = \`Link\`;
        let W2 = context.constructor.components[componentKey2] || QWeb.components[componentKey2]|| scope['Link'];
        if (!W2) {throw new Error('Cannot find the definition of component \\"' + componentKey2 + '\\"')}
        w2 = new W2(parent, props2);
        parent.__owl__.cmap['__3__'] = w2.__owl__.id;
        w2.__owl__.slotId = 1;
        let fiber = w2.__prepare(extra.fiber, Object.assign(Object.create(context), scope), () => { const vnode = fiber.vnode; pvnode.sel = vnode.sel; });
        let pvnode = h('dummy', {key: '__3__', hook: {remove() {},destroy(vn) {w2.destroy();}}});
        c1.push(pvnode);
        w2.__owl__.pvnode = pvnode;
    }
    w2.__owl__.parentLastFiberId = extra.fiber.id;
    return vn1;
}"
`;

exports[`t-slot directive slots are rendered with proper context, part 4 2`] = `
"function anonymous(context, extra
) {
    // Template name: \\"slot_default_template\\"
    let scope = Object.create(context);
    let h = this.h;
    let c4 = extra.parentNode;
    let _5 = scope['userdescr'];
    if (_5 != null) {
        c4.push({text: _5});
    }
}"
`;

exports[`t-slot directive t-set t-value in a slot 1`] = `
"function anonymous(context, extra
) {
    // Template name: \\"__template__1\\"
    let h = this.h;
    let c5 = [], p5 = {key:5};
    let vn5 = h('span', p5, c5);
    const slot6 = this.constructor.slots[context.__owl__.slotId + '_' + 'default'];
    if (slot6) {
        slot6.call(this, context.__owl__.scope, Object.assign({}, extra, {parentNode: c5, parent: extra.parent || context}));
    }
    return vn5;
}"
`;

exports[`t-slot directive template can just return a slot 1`] = `
"function anonymous(context, extra
) {
    // Template name: \\"__template__2\\"
    let utils = this.constructor.utils;
    let result;
    let h = this.h;
    const slot7 = this.constructor.slots[context.__owl__.slotId + '_' + 'default'];
    if (slot7) {
        let children8= []
        result = {}
        slot7.call(this, context.__owl__.scope, Object.assign({}, extra, {parentNode: children8, parent: extra.parent || context}));
        utils.defineProxy(result, children8[0]);
    }
    return result;
}"
`;
