Skip to content

Commit 7071ce8

Browse files
committed
add tests
1 parent ac287ed commit 7071ce8

File tree

12 files changed

+130
-14
lines changed

12 files changed

+130
-14
lines changed

src/compile/render-dom/wrappers/Head.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,6 @@ export default class HeadWrapper extends Wrapper {
3030
}
3131

3232
render(block: Block, parent_node: string, parent_nodes: string) {
33-
this.fragment.render(block, 'document.head', null);
33+
this.fragment.render(block, 'document.head', 'nodes');
3434
}
35-
}
35+
}

src/compile/render-dom/wrappers/IfBlock.ts

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -154,16 +154,18 @@ export default class IfBlockWrapper extends Wrapper {
154154

155155
const vars = { name, anchor, if_name, has_else, has_transitions };
156156

157+
const detaching = (parent_node && parent_node !== 'document.head') ? '' : 'detaching';
158+
157159
if (this.node.else) {
158160
if (has_outros) {
159-
this.render_compound_with_outros(block, parent_node, parent_nodes, dynamic, vars);
161+
this.render_compound_with_outros(block, parent_node, parent_nodes, dynamic, vars, detaching);
160162

161163
block.builders.outro.add_line(`if (${name}) ${name}.o();`);
162164
} else {
163-
this.render_compound(block, parent_node, parent_nodes, dynamic, vars);
165+
this.render_compound(block, parent_node, parent_nodes, dynamic, vars, detaching);
164166
}
165167
} else {
166-
this.render_simple(block, parent_node, parent_nodes, dynamic, vars);
168+
this.render_simple(block, parent_node, parent_nodes, dynamic, vars, detaching);
167169

168170
if (has_outros) {
169171
block.builders.outro.add_line(`if (${name}) ${name}.o();`);
@@ -201,7 +203,8 @@ export default class IfBlockWrapper extends Wrapper {
201203
parent_node: string,
202204
parent_nodes: string,
203205
dynamic,
204-
{ name, anchor, has_else, if_name, has_transitions }
206+
{ name, anchor, has_else, if_name, has_transitions },
207+
detaching
205208
) {
206209
const select_block_type = this.renderer.component.get_unique_name(`select_block_type`);
207210
const current_block_type = block.get_unique_name(`current_block_type`);
@@ -254,7 +257,7 @@ export default class IfBlockWrapper extends Wrapper {
254257
`);
255258
}
256259

257-
block.builders.destroy.add_line(`${if_name}${name}.d(${parent_node ? '' : 'detaching'});`);
260+
block.builders.destroy.add_line(`${if_name}${name}.d(${detaching});`);
258261
}
259262

260263
// if any of the siblings have outros, we need to keep references to the blocks
@@ -264,7 +267,8 @@ export default class IfBlockWrapper extends Wrapper {
264267
parent_node: string,
265268
parent_nodes: string,
266269
dynamic,
267-
{ name, anchor, has_else, has_transitions }
270+
{ name, anchor, has_else, has_transitions },
271+
detaching
268272
) {
269273
const select_block_type = this.renderer.component.get_unique_name(`select_block_type`);
270274
const current_block_type_index = block.get_unique_name(`current_block_type_index`);
@@ -375,7 +379,7 @@ export default class IfBlockWrapper extends Wrapper {
375379
}
376380

377381
block.builders.destroy.add_line(deindent`
378-
${if_current_block_type_index}${if_blocks}[${current_block_type_index}].d(${parent_node ? '' : 'detaching'});
382+
${if_current_block_type_index}${if_blocks}[${current_block_type_index}].d(${detaching});
379383
`);
380384
}
381385

@@ -384,7 +388,8 @@ export default class IfBlockWrapper extends Wrapper {
384388
parent_node: string,
385389
parent_nodes: string,
386390
dynamic,
387-
{ name, anchor, if_name, has_transitions }
391+
{ name, anchor, if_name, has_transitions },
392+
detaching
388393
) {
389394
const branch = this.branches[0];
390395

@@ -450,6 +455,6 @@ export default class IfBlockWrapper extends Wrapper {
450455
}
451456
`);
452457

453-
block.builders.destroy.add_line(`${if_name}${name}.d(${parent_node ? '' : 'detaching'});`);
458+
block.builders.destroy.add_line(`${if_name}${name}.d(${detaching});`);
454459
}
455-
}
460+
}

test/runtime/samples/head-if-block/_config.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,4 @@ export default {
99
component.condition = true;
1010
assert.equal(window.document.title, 'woo!!!');
1111
}
12-
};
12+
};

test/runtime/samples/head-if-block/main.svelte

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,4 @@
66
{#if condition}
77
<title>woo!!!</title>
88
{/if}
9-
</svelte:head>
9+
</svelte:head>
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
export default {
2+
props: {
3+
condition: false
4+
},
5+
6+
test({ assert, component, target, window }) {
7+
assert.equal(window.document.title, '');
8+
assert.equal(Boolean(window.document.getElementById('meta')), true);
9+
10+
component.condition = true;
11+
assert.equal(window.document.title, 'woo!!!');
12+
assert.equal(window.document.getElementById('meta'), null);
13+
}
14+
};
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<script>
2+
export let condition;
3+
</script>
4+
5+
<svelte:head>
6+
{#if condition}
7+
<title>woo!!!</title>
8+
{:else}
9+
<meta id="meta" name="title" content="woo!!!"/>
10+
{/if}
11+
</svelte:head>
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
const foo = '<script type="application/json">{ "foo": "true" }</script>';
2+
const bar = '<script type="application/json">{ "bar": "true" }</script>';
3+
4+
export default {
5+
props: {
6+
condition: false,
7+
foo,
8+
bar
9+
},
10+
11+
test({ assert, component, window }) {
12+
assert.equal(window.document.head.innerHTML.includes(foo), false);
13+
assert.equal(window.document.head.innerHTML.includes(bar), true);
14+
15+
component.condition = true;
16+
assert.equal(window.document.head.innerHTML.includes(foo), true);
17+
assert.equal(window.document.head.innerHTML.includes(bar), false);
18+
}
19+
};
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<script>
2+
export let condition, foo, bar;
3+
</script>
4+
5+
<svelte:head>
6+
{#if condition}
7+
{@html foo}
8+
{:else}
9+
{@html bar}
10+
{/if}
11+
</svelte:head>
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<script>
2+
export let bar;
3+
</script>
4+
5+
<svelte:head>
6+
<meta id="meta" name="title" content="bar!!!"/>
7+
{#if true}
8+
{@html bar}
9+
{/if}
10+
<title>bar!!!</title>
11+
</svelte:head>
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
<script>
2+
export let foo;
3+
</script>
4+
5+
<svelte:head>
6+
{@html foo}
7+
</svelte:head>
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
const foo = '<script type="application/json">{ "foo": "true" }</script>';
2+
const bar = '<script type="application/json">{ "bar": "true" }</script>';
3+
4+
export default {
5+
props: {
6+
condition: 1,
7+
foo,
8+
bar
9+
},
10+
11+
test({ assert, component, window }) {
12+
assert.equal(window.document.head.innerHTML.includes(foo), true);
13+
14+
component.condition = false;
15+
assert.equal(window.document.head.innerHTML.includes(foo), false);
16+
17+
component.condition = 2;
18+
assert.equal(window.document.title, 'bar!!!');
19+
assert.equal(window.document.head.innerHTML.includes(bar), true);
20+
assert.equal(Boolean(window.document.getElementById('meta')), true);
21+
22+
component.condition = false;
23+
assert.equal(window.document.head.innerHTML.includes(bar), false);
24+
assert.equal(window.document.getElementById('meta'), null);
25+
}
26+
};
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<script>
2+
import Foo from './Foo.svelte';
3+
import Bar from './Bar.svelte';
4+
5+
export let condition, foo, bar;
6+
</script>
7+
8+
{#if condition === 1}
9+
<Foo {foo} />
10+
{:else if condition === 2}
11+
<Bar {bar} />
12+
{/if}

0 commit comments

Comments
 (0)