Skip to content

Commit d2a520c

Browse files
authored
(chore) Add basic samples to svelte2tsx sourcemapping tests
1 parent 567236a commit d2a520c

File tree

31 files changed

+1062
-8
lines changed

31 files changed

+1062
-8
lines changed

packages/svelte2tsx/test/helpers.ts

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,17 @@ export class Sample {
165165
throw new Error(`Tried to generate ${this.name} dependencies`);
166166
}
167167
all_tests_skipped = true;
168-
it.only(`${this.name} dependencies`, () => fn(this.generate.bind(this)));
168+
169+
const sample = this;
170+
171+
it.only(`${this.name} dependencies`, function () {
172+
try {
173+
fn(sample.generate.bind(sample));
174+
} catch (err) {
175+
this.test.title = sample.cmd('');
176+
throw err;
177+
}
178+
});
169179
}
170180

171181
private generate(file: string, content: string, skip = true) {

packages/svelte2tsx/test/sourcemaps/helpers.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,3 +131,17 @@ export function hash(str: string): string {
131131
while (i--) hash = ((hash << 5) - hash) ^ str.charCodeAt(i);
132132
return (hash >>> 0).toString(36);
133133
}
134+
135+
export function debug_print(start: Position, end: Position) {
136+
const underline_length =
137+
Math.min(
138+
fromLineCharToOffset(end) - fromLineCharToOffset(start),
139+
start.line.length - start.character
140+
) + 1;
141+
const info = `${start.line.index + 1}`;
142+
const fill = ' '.repeat(info.length);
143+
return (
144+
`> ${info} | ${start.line.print()}\n` +
145+
` ${fill} ${' '.repeat(start.character)}${'^'.repeat(underline_length)}\n`
146+
);
147+
}

packages/svelte2tsx/test/sourcemaps/parser.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -226,6 +226,10 @@ export class GeneratedLine extends Line {
226226
return this.lineMap[i];
227227
}
228228

229+
hasExactMappingFor(charIndex: number) {
230+
return this.getMappingFor(charIndex)?.[0] === charIndex;
231+
}
232+
229233
getOriginalPosition(charIndex: number) {
230234
const char = this.getMappingFor(charIndex);
231235
if (!char) return { line: null, character: -1 };

packages/svelte2tsx/test/sourcemaps/process.ts

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { ComposeHelper, compose_file } from './composer';
22
import {
3+
debug_print,
34
each_exec,
45
fromLineCharToOffset,
56
get_extra_indent,
@@ -468,13 +469,27 @@ function parse_edit_file(edit_file: string, { generated }: ParsedSource) {
468469
const range = { start: generated.at(raw.start), end: generated.at(raw.end) };
469470
const original = range_for('original', range);
470471
const { start, end } = range_for('generated', range);
471-
const ogStart = original.start.line ? fromLineCharToOffset(original.start) : 0;
472-
const ogLength = original.end.line ? fromLineCharToOffset(original.end) - ogStart + 1 : 0;
473-
return [
474-
ogStart,
475-
ogLength,
476-
generated.text.slice(fromLineCharToOffset(start), fromLineCharToOffset(end) + 1)
477-
];
472+
const text = generated.text.slice(
473+
fromLineCharToOffset(start),
474+
fromLineCharToOffset(end) + 1
475+
);
476+
477+
if (
478+
!original.start.line ||
479+
!original.end.line ||
480+
(original.start.line === original.end.line &&
481+
original.start.character === original.end.character &&
482+
!start.line.hasExactMappingFor(start.character))
483+
) {
484+
throw new Error(
485+
`Failed to generate mapping test, selected range has no mappings.\n\n` +
486+
debug_print(start, end)
487+
);
488+
}
489+
490+
const ogStart = fromLineCharToOffset(original.start);
491+
const ogLength = fromLineCharToOffset(original.end) - ogStart + 1;
492+
return [ogStart, ogLength, text];
478493
});
479494
}
480495

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
<element use:action/>
2+
3+
<element
4+
use:action
5+
/>
6+
7+
<element use:action.nested.method={foo}/>
8+
9+
<element
10+
use:action={$foo}
11+
/>
12+
13+
<element
14+
use:action={{ foo }}
15+
/>
16+
17+
<element
18+
use:action={{
19+
...leet,
20+
foo: $bar
21+
}}
22+
/>
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
///<reference types="svelte" />
2+
<></>;function render() { {/**
3+
------------------------------------------------------------------------------------------------------------------------------------------------------ */}
4+
<><element {...__sveltets_ensureAction(action(__sveltets_mapElementTag('element')))}/> {/**
5+
=# Originless mappings
6+
<><element•{...__sveltets_ensureAction(action(__sveltets_mapElementTag('element')))}/>↲ [generated] line 3
7+
<element•u action />↲
8+
<element•u action/>↲
9+
<element•use:action/>↲ [original] line 1
10+
------------------------------------------------------------------------------------------------------------------------------------------------------ */}
11+
12+
<element {/**
13+
------------------------------------------------------------------------------------------------------------------------------------------------------ */}
14+
{...__sveltets_ensureAction(action(__sveltets_mapElementTag('element')))} {/**
15+
╚{...__sveltets_ensureAction(action(__sveltets_mapElementTag('element')))}•↲ [generated] line 6
16+
╚u action •↲
17+
╚u action•↲
18+
╚use:action•↲ [original] line 4
19+
------------------------------------------------------------------------------------------------------------------------------------------------------ */}
20+
/>
21+
{/**
22+
------------------------------------------------------------------------------------------------------------------------------------------------------ */}
23+
<element {...__sveltets_ensureAction(action.nested.method(__sveltets_mapElementTag('element'),(foo)))}/> {/**
24+
<element•{...__sveltets_ensureAction(action.nested.method(__sveltets_mapElementTag('element'),(foo)))}/>↲ [generated] line 9
25+
<element•u action.nested.method= foo }/>↲
26+
<element•u action.nested.method= foo}/>↲
27+
<element•use:action.nested.method={foo}/>↲ [original] line 7
28+
------------------------------------------------------------------------------------------------------------------------------------------------------ */}
29+
30+
<element {/**
31+
------------------------------------------------------------------------------------------------------------------------------------------------------ */}
32+
{...__sveltets_ensureAction(action(__sveltets_mapElementTag('element'),((__sveltets_store_get(foo), $foo))))} {/**
33+
╚{...__sveltets_ensureAction(action(__sveltets_mapElementTag('element'),((__sveltets_store_get(foo),•$foo))))}↲ [generated] line 12
34+
╚u action= $ foo }↲
35+
╚u action= $foo}↲
36+
╚use:action={$foo}↲ [original] line 10
37+
------------------------------------------------------------------------------------------------------------------------------------------------------ */}
38+
/>
39+
40+
<element {/**
41+
------------------------------------------------------------------------------------------------------------------------------------------------------ */}
42+
{...__sveltets_ensureAction(action(__sveltets_mapElementTag('element'),({ foo })))} {/**
43+
╚{...__sveltets_ensureAction(action(__sveltets_mapElementTag('element'),({•foo•})))}↲ [generated] line 16
44+
╚u action= {•foo•} }↲
45+
╚u action= {•foo•}}↲
46+
╚use:action={{•foo•}}↲ [original] line 14
47+
------------------------------------------------------------------------------------------------------------------------------------------------------ */}
48+
/>
49+
50+
<element {/**
51+
------------------------------------------------------------------------------------------------------------------------------------------------------ */}
52+
{...__sveltets_ensureAction(action(__sveltets_mapElementTag('element'),({ {/**
53+
╚{...__sveltets_ensureAction(action(__sveltets_mapElementTag('element'),({•↲ [generated] line 20
54+
╚u action= {•↲
55+
╚u action= {•↲
56+
╚use:action={{•↲ [original] line 18
57+
------------------------------------------------------------------------------------------------------------------------------------------------------ */}
58+
...leet, {/**
59+
------------------------------------------------------------------------------------------------------------------------------------------------------ */}
60+
foo: (__sveltets_store_get(bar), $bar) {/**
61+
╚╚foo:•(__sveltets_store_get(bar),•$bar)↲ [generated] line 22
62+
╚╚foo:•$ bar ↲
63+
╚╚foo:•$bar↲ [original] line 20
64+
------------------------------------------------------------------------------------------------------------------------------------------------------ */}
65+
})))} {/**
66+
╚})))}↲ [generated] line 23
67+
╚} }↲
68+
╚}}↲ [original] line 21
69+
------------------------------------------------------------------------------------------------------------------------------------------------------ */}
70+
/></> {/**
71+
/></>↲ [generated] line 24
72+
/> [original] line 22
73+
------------------------------------------------------------------------------------------------------------------------------------------------------ */}
74+
return { props: {}, slots: {}, getters: {}, events: {} }}
75+
76+
export default class Input__SvelteComponent_ extends createSvelte2TsxComponent(__sveltets_partial(__sveltets_with_any_event(render))) {
77+
}

0 commit comments

Comments
 (0)