Skip to content

Commit d6f10c5

Browse files
authored
add more legacy tests (#10881)
* add more legacy tests * add more tests * ts
1 parent b6c7956 commit d6f10c5

File tree

33 files changed

+810
-0
lines changed

33 files changed

+810
-0
lines changed
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
<script>
2+
import { afterUpdate, onDestroy } from "svelte";
3+
4+
export let id;
5+
export let items;
6+
7+
let item = $items[id];
8+
let selected = true;
9+
10+
function onClick() {
11+
selected = !selected;
12+
items.set({});
13+
}
14+
15+
onDestroy(() => {
16+
console.log("onDestroy");
17+
});
18+
19+
afterUpdate(() => {
20+
console.log("afterUpdate");
21+
});
22+
</script>
23+
24+
<button on:click="{onClick}">Click Me</button>
25+
{#if selected}
26+
<div>{item.id}</div>
27+
{/if}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
import { flushSync } from 'svelte';
2+
import { test } from '../../test';
3+
4+
export default test({
5+
skip: true, // TODO: needs fixing
6+
7+
html: `
8+
<button>Click Me</button>
9+
<div>1</div>
10+
`,
11+
async test({ assert, target, window }) {
12+
const button = target.querySelector('button');
13+
const event = new window.MouseEvent('click');
14+
/**
15+
* @type {any[]}
16+
*/
17+
const messages = [];
18+
const log = console.log;
19+
console.log = (msg) => messages.push(msg);
20+
21+
flushSync(() => {
22+
// @ts-ignore
23+
button.dispatchEvent(event);
24+
});
25+
26+
console.log = log;
27+
assert.deepEqual(messages, ['afterUpdate', 'onDestroy']);
28+
}
29+
});
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<script>
2+
import { writable } from 'svelte/store';
3+
import Component from "./Component.svelte";
4+
5+
let items = writable({ 1: { id: 1 } });
6+
</script>
7+
8+
{#each Object.values($items) as item (item.id)}
9+
<Component id="{item.id}" {items} />
10+
{/each}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import { test } from '../../test';
2+
3+
export default test({
4+
skip_if_ssr: true,
5+
6+
get props() {
7+
return { value: 'hello!' };
8+
},
9+
10+
html: `
11+
<p>hello!</p>
12+
<p>hello!</p>
13+
`,
14+
15+
test({ assert, component, target }) {
16+
component.value = 'goodbye!';
17+
assert.htmlEqual(
18+
target.innerHTML,
19+
`
20+
<p>goodbye!</p>
21+
<p>goodbye!</p>
22+
`
23+
);
24+
}
25+
});
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
<script>
2+
import { afterUpdate } from 'svelte';
3+
4+
export let value;
5+
let mirror;
6+
7+
afterUpdate(() => {
8+
mirror = value;
9+
});
10+
</script>
11+
12+
<p>{value}</p>
13+
<p>{mirror}</p>
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import { test } from '../../test';
2+
3+
export default test({
4+
skip_if_ssr: true,
5+
6+
get props() {
7+
return { value: 'hello!' };
8+
},
9+
10+
html: `
11+
<p>hello!</p>
12+
<p>hello!</p>
13+
`,
14+
15+
test({ assert, component, target }) {
16+
component.value = 'goodbye!';
17+
assert.htmlEqual(
18+
target.innerHTML,
19+
`
20+
<p>goodbye!</p>
21+
<p>goodbye!</p>
22+
`
23+
);
24+
}
25+
});
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
<script>
2+
import { afterUpdate } from 'svelte';
3+
4+
export let a;
5+
export let b;
6+
7+
export let value;
8+
9+
afterUpdate(() => {
10+
b.textContent = a.textContent;
11+
});
12+
</script>
13+
14+
<p bind:this={a}>{value}</p>
15+
<p bind:this={b}></p>
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
// @ts-nocheck
2+
import { test } from '../../test';
3+
4+
export default test({
5+
skip: true, // TODO: needs fixing
6+
7+
get props() {
8+
return {
9+
things: [
10+
{ id: 1, name: 'a' },
11+
{ id: 2, name: 'b' },
12+
{ id: 3, name: 'c' },
13+
{ id: 4, name: 'd' },
14+
{ id: 5, name: 'e' }
15+
]
16+
};
17+
},
18+
19+
html: `
20+
<div>a</div>
21+
<div>b</div>
22+
<div>c</div>
23+
<div>d</div>
24+
<div>e</div>
25+
`,
26+
27+
test({ assert, component, target, raf }) {
28+
let divs = target.querySelectorAll('div');
29+
divs.forEach((div) => {
30+
div.getBoundingClientRect = function () {
31+
const index = [...this.parentNode.children].indexOf(this);
32+
const top = index * 30;
33+
34+
return {
35+
left: 0,
36+
right: 100,
37+
top,
38+
bottom: top + 20
39+
};
40+
};
41+
});
42+
43+
component.things = [
44+
{ id: 5, name: 'e' },
45+
{ id: 2, name: 'b' },
46+
{ id: 3, name: 'c' },
47+
{ id: 4, name: 'd' },
48+
{ id: 1, name: 'a' }
49+
];
50+
51+
divs = target.querySelectorAll('div');
52+
assert.ok(~divs[0].style.animation.indexOf('__svelte'));
53+
assert.equal(divs[1].style.animation, '');
54+
assert.equal(divs[2].style.animation, '');
55+
assert.equal(divs[3].style.animation, '');
56+
assert.ok(~divs[4].style.animation.indexOf('__svelte'));
57+
58+
raf.tick(100);
59+
assert.deepEqual([divs[0].style.animation, divs[4].style.animation], ['', '']);
60+
}
61+
});
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<script>
2+
export let things;
3+
4+
function flip(node, animation, params) {
5+
const dx = animation.from.left - animation.to.left;
6+
const dy = animation.from.top - animation.to.top;
7+
8+
return {
9+
duration: 100,
10+
css: (t, u) => `transform: translate(${u + dx}px, ${u * dy}px)`
11+
};
12+
}
13+
</script>
14+
15+
{#each things as thing (thing.id)}
16+
<div animate:flip>{thing.name}</div>
17+
{/each}
Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
// @ts-nocheck
2+
import { ok, test } from '../../test';
3+
4+
export default test({
5+
skip: true, // TODO: needs fixing
6+
7+
get props() {
8+
return {
9+
things: [
10+
{ id: 1, name: 'a' },
11+
{ id: 2, name: 'b' },
12+
{ id: 3, name: 'c' },
13+
{ id: 4, name: 'd' },
14+
{ id: 5, name: 'e' }
15+
]
16+
};
17+
},
18+
19+
html: `
20+
<div>a</div>
21+
<div>b</div>
22+
<div>c</div>
23+
<div>d</div>
24+
<div>e</div>
25+
`,
26+
27+
test({ assert, component, window, raf }) {
28+
let divs = window.document.querySelectorAll('div');
29+
divs.forEach((div) => {
30+
div.getBoundingClientRect = function () {
31+
const index = [...this.parentNode.children].indexOf(this);
32+
const top = index * 30;
33+
34+
return {
35+
left: 0,
36+
right: 100,
37+
top,
38+
bottom: top + 20
39+
};
40+
};
41+
});
42+
43+
component.things = [
44+
{ id: 5, name: 'e' },
45+
{ id: 2, name: 'b' },
46+
{ id: 3, name: 'c' },
47+
{ id: 4, name: 'd' },
48+
{ id: 1, name: 'a' }
49+
];
50+
51+
divs = window.document.querySelectorAll('div');
52+
assert.equal(divs[0].dy, 120);
53+
assert.equal(divs[4].dy, -120);
54+
55+
raf.tick(50);
56+
assert.equal(divs[0].dy, 108);
57+
assert.equal(divs[4].dy, -60);
58+
59+
raf.tick(100);
60+
assert.equal(divs[0].dy, 48);
61+
assert.equal(divs[4].dy, 0);
62+
63+
raf.tick(150);
64+
assert.equal(divs[0].dy, 0);
65+
assert.equal(divs[4].dy, 0);
66+
67+
component.things = [
68+
{ id: 1, name: 'a' },
69+
{ id: 2, name: 'b' },
70+
{ id: 3, name: 'c' },
71+
{ id: 4, name: 'd' },
72+
{ id: 5, name: 'e' }
73+
];
74+
75+
divs = document.querySelectorAll('div');
76+
assert.equal(divs[0].dy, 120);
77+
assert.equal(divs[4].dy, -120);
78+
79+
raf.tick(200);
80+
assert.equal(divs[0].dy, 108);
81+
assert.equal(divs[4].dy, -60);
82+
83+
raf.tick(250);
84+
assert.equal(divs[0].dy, 48);
85+
assert.equal(divs[4].dy, 0);
86+
87+
raf.tick(300);
88+
assert.equal(divs[0].dy, 0);
89+
assert.equal(divs[4].dy, 0);
90+
}
91+
});
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
<script>
2+
export let things;
3+
4+
function flip(node, animation, params) {
5+
const dx = animation.from.left - animation.to.left;
6+
const dy = animation.from.top - animation.to.top;
7+
8+
return {
9+
delay: params.delay,
10+
duration: 100,
11+
tick: (t, u) => {
12+
node.dx = u * dx;
13+
node.dy = u * dy;
14+
}
15+
};
16+
}
17+
</script>
18+
19+
{#each things as thing, i (thing.id)}
20+
<div animate:flip="{{delay: i * 10}}">{thing.name}</div>
21+
{/each}

0 commit comments

Comments
 (0)