mirror of https://github.com/sveltejs/svelte
commit
5f1bbd6cdf
@ -1,3 +0,0 @@
|
||||
useTabs: true
|
||||
singleQuote: true
|
||||
trailingComma: es5
|
@ -0,0 +1,30 @@
|
||||
import { TemplateNode } from '../../interfaces';
|
||||
|
||||
export function to_string(node: TemplateNode) {
|
||||
switch (node.type) {
|
||||
case 'IfBlock':
|
||||
return '{#if} block';
|
||||
case 'ThenBlock':
|
||||
return '{:then} block';
|
||||
case 'ElseBlock':
|
||||
return '{:else} block';
|
||||
case 'PendingBlock':
|
||||
case 'AwaitBlock':
|
||||
return '{#await} block';
|
||||
case 'CatchBlock':
|
||||
return '{:catch} block';
|
||||
case 'EachBlock':
|
||||
return '{#each} block';
|
||||
case 'RawMustacheTag':
|
||||
return '{@html} block';
|
||||
case 'DebugTag':
|
||||
return '{@debug} block';
|
||||
case 'Element':
|
||||
case 'InlineComponent':
|
||||
case 'Slot':
|
||||
case 'Title':
|
||||
return `<${node.name}> tag`;
|
||||
default:
|
||||
return node.type;
|
||||
}
|
||||
}
|
@ -1 +0,0 @@
|
||||
<div class={class}></div>
|
@ -1,37 +0,0 @@
|
||||
{
|
||||
"html": {
|
||||
"start": 0,
|
||||
"end": 25,
|
||||
"type": "Fragment",
|
||||
"children": [
|
||||
{
|
||||
"start": 0,
|
||||
"end": 25,
|
||||
"type": "Element",
|
||||
"name": "div",
|
||||
"attributes": [
|
||||
{
|
||||
"start": 5,
|
||||
"end": 18,
|
||||
"type": "Attribute",
|
||||
"name": "class",
|
||||
"value": [
|
||||
{
|
||||
"start": 11,
|
||||
"end": 18,
|
||||
"type": "MustacheTag",
|
||||
"expression": {
|
||||
"type": "Identifier",
|
||||
"start": 12,
|
||||
"end": 17,
|
||||
"name": "class"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"children": []
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
@ -0,0 +1,6 @@
|
||||
{
|
||||
"code": "invalid-catch-placement",
|
||||
"message": "Expected to close {#each} block before seeing {:catch} block",
|
||||
"start": { "line": 3, "column": 7, "character": 41 },
|
||||
"pos": 41
|
||||
}
|
@ -0,0 +1,4 @@
|
||||
{#await true}
|
||||
{#each foo as bar}
|
||||
{:catch f}
|
||||
{/await}
|
@ -0,0 +1,6 @@
|
||||
{
|
||||
"code": "invalid-else-placement",
|
||||
"message": "Expected to close {#await} block before seeing {:else} block",
|
||||
"start": { "line": 3, "column": 6, "character": 29 },
|
||||
"pos": 29
|
||||
}
|
@ -0,0 +1,4 @@
|
||||
{#if true}
|
||||
{#await p}
|
||||
{:else}
|
||||
{/if}
|
@ -0,0 +1,6 @@
|
||||
{
|
||||
"code": "invalid-else-placement",
|
||||
"message": "Cannot have an {:else} block outside an {#if ...} or {#each ...} block",
|
||||
"start": { "line": 2, "column": 6, "character": 11 },
|
||||
"pos": 11
|
||||
}
|
@ -0,0 +1,2 @@
|
||||
<li>
|
||||
{:else}
|
@ -0,0 +1,6 @@
|
||||
{
|
||||
"code": "invalid-else-placement",
|
||||
"message": "Expected to close <li> tag before seeing {:else} block",
|
||||
"start": { "line": 3, "column": 6, "character": 23 },
|
||||
"pos": 23
|
||||
}
|
@ -0,0 +1,4 @@
|
||||
{#if true}
|
||||
<li>
|
||||
{:else}
|
||||
{/if}
|
@ -0,0 +1,6 @@
|
||||
{
|
||||
"code": "invalid-elseif-placement",
|
||||
"message": "Expected to close <p> tag before seeing {:else if ...} block",
|
||||
"start": { "line": 3, "column": 9, "character": 25 },
|
||||
"pos": 25
|
||||
}
|
@ -0,0 +1,4 @@
|
||||
{#if true}
|
||||
<p>
|
||||
{:else if false}
|
||||
{/if}
|
@ -0,0 +1,6 @@
|
||||
{
|
||||
"code": "invalid-elseif-placement",
|
||||
"message": "Expected to close {#await} block before seeing {:else if ...} block",
|
||||
"start": { "line": 3, "column": 9, "character": 34 },
|
||||
"pos": 34
|
||||
}
|
@ -0,0 +1,4 @@
|
||||
{#if true}
|
||||
{#await foo}
|
||||
{:else if false}
|
||||
{/if}
|
@ -0,0 +1,6 @@
|
||||
{
|
||||
"code": "invalid-elseif-placement",
|
||||
"message": "Cannot have an {:else if ...} block outside an {#if ...} block",
|
||||
"start": { "line": 3, "column": 10, "character": 35 },
|
||||
"pos": 35
|
||||
}
|
@ -0,0 +1,4 @@
|
||||
{#await foo}
|
||||
{:then bar}
|
||||
{:else if}
|
||||
{/await}
|
@ -0,0 +1,6 @@
|
||||
{
|
||||
"code": "invalid-then-placement",
|
||||
"message": "Expected to close <li> tag before seeing {:then} block",
|
||||
"start": { "line": 3, "column": 6, "character": 26 },
|
||||
"pos": 26
|
||||
}
|
@ -0,0 +1,4 @@
|
||||
{#await true}
|
||||
<li>
|
||||
{:then f}
|
||||
{/await}
|
@ -0,0 +1,19 @@
|
||||
{#if true}
|
||||
<input>
|
||||
{:else}
|
||||
{/if}
|
||||
|
||||
{#if true}
|
||||
<br>
|
||||
{:else}
|
||||
{/if}
|
||||
|
||||
{#await true}
|
||||
<input>
|
||||
{:then f}
|
||||
{/await}
|
||||
|
||||
{#await true}
|
||||
<br>
|
||||
{:then f}
|
||||
{/await}
|
@ -0,0 +1,258 @@
|
||||
{
|
||||
"html": {
|
||||
"start": 0,
|
||||
"end": 148,
|
||||
"type": "Fragment",
|
||||
"children": [
|
||||
{
|
||||
"start": 0,
|
||||
"end": 33,
|
||||
"type": "IfBlock",
|
||||
"expression": {
|
||||
"type": "Literal",
|
||||
"start": 5,
|
||||
"end": 9,
|
||||
"loc": {
|
||||
"start": {
|
||||
"line": 1,
|
||||
"column": 5
|
||||
},
|
||||
"end": {
|
||||
"line": 1,
|
||||
"column": 9
|
||||
}
|
||||
},
|
||||
"value": true,
|
||||
"raw": "true"
|
||||
},
|
||||
"children": [
|
||||
{
|
||||
"start": 12,
|
||||
"end": 19,
|
||||
"type": "Element",
|
||||
"name": "input",
|
||||
"attributes": [],
|
||||
"children": []
|
||||
}
|
||||
],
|
||||
"else": {
|
||||
"start": 27,
|
||||
"end": 28,
|
||||
"type": "ElseBlock",
|
||||
"children": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"start": 33,
|
||||
"end": 35,
|
||||
"type": "Text",
|
||||
"raw": "\n\n",
|
||||
"data": "\n\n"
|
||||
},
|
||||
{
|
||||
"start": 35,
|
||||
"end": 65,
|
||||
"type": "IfBlock",
|
||||
"expression": {
|
||||
"type": "Literal",
|
||||
"start": 40,
|
||||
"end": 44,
|
||||
"loc": {
|
||||
"start": {
|
||||
"line": 6,
|
||||
"column": 5
|
||||
},
|
||||
"end": {
|
||||
"line": 6,
|
||||
"column": 9
|
||||
}
|
||||
},
|
||||
"value": true,
|
||||
"raw": "true"
|
||||
},
|
||||
"children": [
|
||||
{
|
||||
"start": 47,
|
||||
"end": 51,
|
||||
"type": "Element",
|
||||
"name": "br",
|
||||
"attributes": [],
|
||||
"children": []
|
||||
}
|
||||
],
|
||||
"else": {
|
||||
"start": 59,
|
||||
"end": 60,
|
||||
"type": "ElseBlock",
|
||||
"children": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"start": 65,
|
||||
"end": 67,
|
||||
"type": "Text",
|
||||
"raw": "\n\n",
|
||||
"data": "\n\n"
|
||||
},
|
||||
{
|
||||
"start": 67,
|
||||
"end": 108,
|
||||
"type": "AwaitBlock",
|
||||
"expression": {
|
||||
"type": "Literal",
|
||||
"start": 75,
|
||||
"end": 79,
|
||||
"loc": {
|
||||
"start": {
|
||||
"line": 11,
|
||||
"column": 8
|
||||
},
|
||||
"end": {
|
||||
"line": 11,
|
||||
"column": 12
|
||||
}
|
||||
},
|
||||
"value": true,
|
||||
"raw": "true"
|
||||
},
|
||||
"value": "f",
|
||||
"error": null,
|
||||
"pending": {
|
||||
"start": 80,
|
||||
"end": 90,
|
||||
"type": "PendingBlock",
|
||||
"children": [
|
||||
{
|
||||
"start": 80,
|
||||
"end": 82,
|
||||
"type": "Text",
|
||||
"raw": "\n\t",
|
||||
"data": "\n\t"
|
||||
},
|
||||
{
|
||||
"start": 82,
|
||||
"end": 89,
|
||||
"type": "Element",
|
||||
"name": "input",
|
||||
"attributes": [],
|
||||
"children": []
|
||||
},
|
||||
{
|
||||
"start": 89,
|
||||
"end": 90,
|
||||
"type": "Text",
|
||||
"raw": "\n",
|
||||
"data": "\n"
|
||||
}
|
||||
],
|
||||
"skip": false
|
||||
},
|
||||
"then": {
|
||||
"start": 90,
|
||||
"end": 100,
|
||||
"type": "ThenBlock",
|
||||
"children": [
|
||||
{
|
||||
"start": 99,
|
||||
"end": 100,
|
||||
"type": "Text",
|
||||
"raw": "\n",
|
||||
"data": "\n"
|
||||
}
|
||||
],
|
||||
"skip": false
|
||||
},
|
||||
"catch": {
|
||||
"start": null,
|
||||
"end": null,
|
||||
"type": "CatchBlock",
|
||||
"children": [],
|
||||
"skip": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"start": 108,
|
||||
"end": 110,
|
||||
"type": "Text",
|
||||
"raw": "\n\n",
|
||||
"data": "\n\n"
|
||||
},
|
||||
{
|
||||
"start": 110,
|
||||
"end": 148,
|
||||
"type": "AwaitBlock",
|
||||
"expression": {
|
||||
"type": "Literal",
|
||||
"start": 118,
|
||||
"end": 122,
|
||||
"loc": {
|
||||
"start": {
|
||||
"line": 16,
|
||||
"column": 8
|
||||
},
|
||||
"end": {
|
||||
"line": 16,
|
||||
"column": 12
|
||||
}
|
||||
},
|
||||
"value": true,
|
||||
"raw": "true"
|
||||
},
|
||||
"value": "f",
|
||||
"error": null,
|
||||
"pending": {
|
||||
"start": 123,
|
||||
"end": 130,
|
||||
"type": "PendingBlock",
|
||||
"children": [
|
||||
{
|
||||
"start": 123,
|
||||
"end": 125,
|
||||
"type": "Text",
|
||||
"raw": "\n\t",
|
||||
"data": "\n\t"
|
||||
},
|
||||
{
|
||||
"start": 125,
|
||||
"end": 129,
|
||||
"type": "Element",
|
||||
"name": "br",
|
||||
"attributes": [],
|
||||
"children": []
|
||||
},
|
||||
{
|
||||
"start": 129,
|
||||
"end": 130,
|
||||
"type": "Text",
|
||||
"raw": "\n",
|
||||
"data": "\n"
|
||||
}
|
||||
],
|
||||
"skip": false
|
||||
},
|
||||
"then": {
|
||||
"start": 130,
|
||||
"end": 140,
|
||||
"type": "ThenBlock",
|
||||
"children": [
|
||||
{
|
||||
"start": 139,
|
||||
"end": 140,
|
||||
"type": "Text",
|
||||
"raw": "\n",
|
||||
"data": "\n"
|
||||
}
|
||||
],
|
||||
"skip": false
|
||||
},
|
||||
"catch": {
|
||||
"start": null,
|
||||
"end": null,
|
||||
"type": "CatchBlock",
|
||||
"children": [],
|
||||
"skip": true
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
@ -1 +0,0 @@
|
||||
{yield}
|
@ -1,20 +0,0 @@
|
||||
{
|
||||
"html": {
|
||||
"start": 0,
|
||||
"end": 7,
|
||||
"type": "Fragment",
|
||||
"children": [
|
||||
{
|
||||
"start": 0,
|
||||
"end": 7,
|
||||
"type": "MustacheTag",
|
||||
"expression": {
|
||||
"type": "Identifier",
|
||||
"start": 1,
|
||||
"end": 6,
|
||||
"name": "yield"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
@ -0,0 +1,5 @@
|
||||
export default {
|
||||
html: `
|
||||
<p>bar</p>
|
||||
`
|
||||
};
|
@ -0,0 +1,7 @@
|
||||
<script>
|
||||
const foo = [{ in: 'bar' }];
|
||||
</script>
|
||||
|
||||
{#each foo as { in: bar }}
|
||||
<p>{bar}</p>
|
||||
{/each}
|
@ -0,0 +1,33 @@
|
||||
export default {
|
||||
html: `
|
||||
<button>toggle</button>
|
||||
<p>0</p>
|
||||
<button>handler_a</button>
|
||||
<button>handler_b</button>
|
||||
`,
|
||||
|
||||
async test({ assert, target, window }) {
|
||||
const [toggle, handler_a, handler_b] = target.querySelectorAll('button');
|
||||
const p = target.querySelector('p');
|
||||
|
||||
const event = new window.MouseEvent('click');
|
||||
|
||||
await handler_a.dispatchEvent(event);
|
||||
assert.equal(p.innerHTML, '1');
|
||||
|
||||
await toggle.dispatchEvent(event);
|
||||
|
||||
await handler_a.dispatchEvent(event);
|
||||
assert.equal(p.innerHTML, '2');
|
||||
|
||||
await toggle.dispatchEvent(event);
|
||||
|
||||
await handler_b.dispatchEvent(event);
|
||||
assert.equal(p.innerHTML, '1');
|
||||
|
||||
await toggle.dispatchEvent(event);
|
||||
|
||||
await handler_b.dispatchEvent(event);
|
||||
assert.equal(p.innerHTML, '2');
|
||||
},
|
||||
};
|
@ -0,0 +1,20 @@
|
||||
<script>
|
||||
import { writable } from 'svelte/store';
|
||||
|
||||
let number = 0;
|
||||
const handler_1 = () => number = 1;
|
||||
const handler_2 = () => number = 2;
|
||||
|
||||
let flag = true;
|
||||
|
||||
$: handler_a = flag ? handler_1 : handler_2;
|
||||
const handler_b = writable();
|
||||
$: handler_b.set(flag ? handler_1 : handler_2);
|
||||
</script>
|
||||
|
||||
<button on:click={() => flag = !flag}>toggle</button>
|
||||
|
||||
<p>{number}</p>
|
||||
|
||||
<button on:click={handler_a}>handler_a</button>
|
||||
<button on:click={$handler_b}>handler_b</button>
|
@ -0,0 +1,31 @@
|
||||
export default {
|
||||
html: `
|
||||
<p>0</p>
|
||||
<button>foo++</button>
|
||||
<button>++foo</button>
|
||||
<p>0</p>
|
||||
<button>bar.bar++</button>
|
||||
<button>++bar.bar</button>
|
||||
`,
|
||||
async test({ assert, target, window }) {
|
||||
const [foo, bar] = target.querySelectorAll('p');
|
||||
const [button1, button2, button3, button4] = target.querySelectorAll('button');
|
||||
const event = new window.MouseEvent('click');
|
||||
|
||||
await button1.dispatchEvent(event);
|
||||
assert.equal(foo.innerHTML, '1');
|
||||
assert.equal(bar.innerHTML, '0');
|
||||
|
||||
await button2.dispatchEvent(event);
|
||||
assert.equal(foo.innerHTML, '2');
|
||||
assert.equal(bar.innerHTML, '0');
|
||||
|
||||
await button3.dispatchEvent(event);
|
||||
assert.equal(foo.innerHTML, '2');
|
||||
assert.equal(bar.innerHTML, '1');
|
||||
|
||||
await button4.dispatchEvent(event);
|
||||
assert.equal(foo.innerHTML, '2');
|
||||
assert.equal(bar.innerHTML, '2');
|
||||
}
|
||||
};
|
@ -0,0 +1,14 @@
|
||||
<script>
|
||||
let foo = 0;
|
||||
let bar = { bar: 0 };
|
||||
</script>
|
||||
|
||||
<p>{foo}</p>
|
||||
|
||||
<button on:click={() => foo++}>foo++</button>
|
||||
<button on:click={() => ++foo}>++foo</button>
|
||||
|
||||
<p>{bar.bar}</p>
|
||||
|
||||
<button on:click={() => bar.bar++}>bar.bar++</button>
|
||||
<button on:click={() => ++bar.bar}>++bar.bar</button>
|
@ -0,0 +1,15 @@
|
||||
[{
|
||||
"code": "unexpected-reserved-word",
|
||||
"message": "'case' is a reserved word in JavaScript and cannot be used here",
|
||||
"start": {
|
||||
"line": 1,
|
||||
"column": 18,
|
||||
"character": 18
|
||||
},
|
||||
"end": {
|
||||
"line": 1,
|
||||
"column": 18,
|
||||
"character": 18
|
||||
},
|
||||
"pos": 18
|
||||
}]
|
@ -0,0 +1,3 @@
|
||||
{#each cases as { case }}
|
||||
{case.title}
|
||||
{/each}
|
Loading…
Reference in new issue