Skip to content

Commit fe7c45b

Browse files
authored
Add more tests (#10882)
* Add more tests * ts
1 parent d6f10c5 commit fe7c45b

File tree

38 files changed

+449
-0
lines changed

38 files changed

+449
-0
lines changed
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
<p>does nothing</p>
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import { test } from '../../test';
2+
// @ts-nocheck
3+
4+
export default test({
5+
test({ assert, component }) {
6+
let count = 0;
7+
8+
// @ts-ignore
9+
component.$on('state', ({ changed }) => {
10+
if (changed.bar) count += 1;
11+
});
12+
13+
component.x = true;
14+
assert.equal(count, 0);
15+
}
16+
});
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<script>
2+
import Widget from './Widget.svelte';
3+
4+
export let x = false;
5+
export let bar = {
6+
baz: 42
7+
};
8+
</script>
9+
10+
{#if x}
11+
<Widget bind:foo={bar.baz}/>
12+
{/if}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
<script>
2+
import Level2 from './Level2.svelte';
3+
import Level3 from './Level3.svelte';
4+
</script>
5+
6+
<Level2>
7+
<Level3 />
8+
</Level2>
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
<script>
2+
import Level3 from './Level3.svelte';
3+
</script>
4+
5+
<span>level 2</span>
6+
<slot></slot>
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
<span>level 3</span>
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
import { test } from '../../test';
2+
import { unmount } from 'svelte';
3+
4+
export default test({
5+
test({ component }) {
6+
unmount(component.l1);
7+
}
8+
});
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
<script>
2+
import Level1 from './Level1.svelte';
3+
4+
export let l1;
5+
</script>
6+
7+
<Level1 bind:this={l1} />
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
<script>
2+
import { getContext } from 'svelte';
3+
const value = getContext('foo');
4+
</script>
5+
6+
<div>Value in child component: {value}</div>
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
import { test } from '../../test';
2+
3+
export default test({
4+
skip_if_ssr: true,
5+
html: `
6+
<div><div>Value in child component: </div></div>
7+
`
8+
});
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
<script>
2+
import { setContext, mount } from 'svelte';
3+
import ChildComponent from './ChildComponent.svelte';
4+
5+
setContext('foo', true);
6+
7+
function render(node) {
8+
mount(ChildComponent, {
9+
target: node,
10+
context: new Map()
11+
});
12+
}
13+
</script>
14+
15+
<div use:render />
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import { test } from '../../test';
2+
import { unmount } from 'svelte';
3+
4+
export default test({
5+
test({ component }) {
6+
unmount(component);
7+
unmount(component);
8+
}
9+
});
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
<div/>
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import { test } from '../../test';
2+
3+
export default test({
4+
skip: true, // TODO: needs fixing
5+
6+
compileOptions: {
7+
dev: true
8+
},
9+
error: '{#each} only works with iterable values.'
10+
});
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
{#each {} as item}
2+
<div>{item}</div>
3+
{/each}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import { test } from '../../test';
2+
3+
export default test({
4+
skip: true, // TODO: needs fixing, error message is wrong
5+
6+
compileOptions: {
7+
dev: true
8+
},
9+
10+
get props() {
11+
return { a: 42 };
12+
},
13+
14+
test({ assert, component }) {
15+
try {
16+
component.foo = 1;
17+
throw new Error('Expected an error');
18+
} catch (err) {
19+
// @ts-ignore
20+
assert.equal(err.message, "<Main>: Cannot set read-only property 'foo'");
21+
}
22+
}
23+
});
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
<script>
2+
export let a;
3+
4+
export function foo() {
5+
return a + 1;
6+
}
7+
</script>
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
<script>
2+
export let value;
3+
</script>
4+
5+
<p>value(1) = {value}</p>
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
<script>
2+
export let value;
3+
</script>
4+
5+
<p>value(2) = {value}</p>
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
import { test } from '../../test';
2+
3+
export default test({
4+
html: `
5+
<p>value(1) = 1</p>
6+
<button>Toggle Component</button>
7+
`,
8+
9+
async test({ assert, component, window, target }) {
10+
const button = target.querySelector('button');
11+
// @ts-ignore
12+
await button.dispatchEvent(new window.Event('click'));
13+
assert.htmlEqual(
14+
target.innerHTML,
15+
`
16+
<p>value(2) = 2</p>
17+
<button>Toggle Component</button>
18+
`
19+
);
20+
assert.equal(component.n, 2);
21+
// @ts-ignore
22+
await button.dispatchEvent(new window.Event('click'));
23+
assert.htmlEqual(
24+
target.innerHTML,
25+
`
26+
<p>value(1) = 3</p>
27+
<button>Toggle Component</button>
28+
`
29+
);
30+
assert.equal(component.n, 3);
31+
}
32+
});
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<script>
2+
import Comp1 from './Comp1.svelte';
3+
import Comp2 from './Comp2.svelte';
4+
5+
export let n = 0;
6+
let view = { comp: Comp1, fn: () => ++n };
7+
</script>
8+
9+
<svelte:component this={view.comp} value={view.fn()}/>
10+
11+
<button on:click={e => view.comp = view.comp === Comp1 ? Comp2 : Comp1}>Toggle Component</button>
12+
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
<script>
2+
export let value;
3+
export let foo;
4+
export let cb;
5+
</script>
6+
7+
<p>value(1) = {value}</p>
8+
<p>foo={foo}</p>
9+
<p>typeof cb={typeof cb}</p>
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
<script>
2+
export let value;
3+
export let foo;
4+
export let cb;
5+
</script>
6+
7+
<p>value(2) = {value}</p>
8+
<p>foo={foo}</p>
9+
<p>typeof cb={typeof cb}</p>
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
import { test } from '../../test';
2+
3+
export default test({
4+
html: `
5+
<p>value(1) = 1</p>
6+
<p>foo=bar</p>
7+
<p>typeof cb=function</p>
8+
<button>Toggle Component</button>
9+
`,
10+
11+
async test({ assert, window, target }) {
12+
const button = target.querySelector('button');
13+
// @ts-ignore
14+
await button.dispatchEvent(new window.Event('click'));
15+
assert.htmlEqual(
16+
target.innerHTML,
17+
`
18+
<p>value(2) = 2</p>
19+
<p>foo=bar</p>
20+
<p>typeof cb=function</p>
21+
<button>Toggle Component</button>
22+
`
23+
);
24+
// @ts-ignore
25+
await button.dispatchEvent(new window.Event('click'));
26+
assert.htmlEqual(
27+
target.innerHTML,
28+
`
29+
<p>value(1) = 1</p>
30+
<p>foo=bar</p>
31+
<p>typeof cb=function</p>
32+
<button>Toggle Component</button>
33+
`
34+
);
35+
}
36+
});
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
<script>
2+
import Comp1 from './Comp1.svelte';
3+
import Comp2 from './Comp2.svelte';
4+
5+
let view = Comp1;
6+
7+
$: props = view === Comp1 ? { value: 1 } : { value: 2 };
8+
const bar = "bar";
9+
function cb() {}
10+
</script>
11+
12+
<svelte:component this={view} {...props} foo={bar} {cb} />
13+
14+
<button on:click={(e) => (view = view === Comp1 ? Comp2 : Comp1)}>Toggle Component</button>
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
2+
<script>
3+
import { onDestroy } from 'svelte';
4+
5+
onDestroy(() => {
6+
console.log('destroy');
7+
});
8+
</script>
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
import { test } from '../../test';
2+
3+
/**
4+
* @type {{ (...data: any[]): void; (message?: any, ...optionalParams: any[]): void; (...data: any[]): void; (message?: any, ...optionalParams: any[]): void; }}
5+
*/
6+
let log;
7+
8+
export default test({
9+
html: `
10+
<button>destroy component</button>
11+
`,
12+
13+
before_test() {
14+
log = console.log;
15+
},
16+
after_test() {
17+
console.log = log;
18+
},
19+
20+
async test({ assert, target, window }) {
21+
const button = target.querySelector('button');
22+
const event = new window.MouseEvent('click');
23+
/**
24+
* @type {any[]}
25+
*/
26+
const messages = [];
27+
console.log = (msg) => messages.push(msg);
28+
// @ts-ignore
29+
await button.dispatchEvent(event);
30+
assert.htmlEqual(
31+
target.innerHTML,
32+
`
33+
<button>destroy component</button>
34+
`
35+
);
36+
assert.deepEqual(messages, ['destroy']);
37+
}
38+
});
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
<script>
2+
import Empty from './Empty.svelte';
3+
let active = true;
4+
</script>
5+
6+
<button on:click='{() => active = false }'>destroy component</button>
7+
8+
<svelte:component this={active ? Empty : null} />
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
import { test } from '../../test';
2+
3+
export default test({
4+
get props() {
5+
return { items: ['foo', 'bar', 'baz'] };
6+
},
7+
8+
html: `
9+
<button>foo</button>
10+
<button>bar</button>
11+
<button>baz</button>
12+
`,
13+
14+
test({ assert, component, target, window }) {
15+
const buttons = target.querySelectorAll('button');
16+
const event = new window.MouseEvent('click');
17+
18+
/**
19+
* @type {any[]}
20+
*/
21+
const clicked = [];
22+
23+
component.$on('clicked', (/** @type {{ detail: { node: any; }; }} */ event) => {
24+
clicked.push(event.detail.node);
25+
});
26+
27+
buttons[1].dispatchEvent(event);
28+
29+
assert.equal(clicked.length, 1);
30+
assert.equal(clicked[0].nodeName, 'BUTTON');
31+
assert.equal(clicked[0].textContent, 'bar');
32+
}
33+
});
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<script>
2+
import { createEventDispatcher } from 'svelte';
3+
4+
export let items;
5+
6+
const dispatch = createEventDispatcher();
7+
</script>
8+
9+
{#each items as item}
10+
<button on:click='{e => dispatch("clicked", { node: e.target })}'>{item}</button>
11+
{/each}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
<script>
2+
import { createEventDispatcher } from 'svelte';
3+
4+
const dispatch = createEventDispatcher();
5+
</script>
6+
7+
<button on:click='{() => dispatch("foo", { answer: 42 })}'>click me</button>

0 commit comments

Comments
 (0)