-
Notifications
You must be signed in to change notification settings - Fork 17
Expand file tree
/
Copy pathpreprocess.test.ts
More file actions
97 lines (90 loc) · 3.26 KB
/
preprocess.test.ts
File metadata and controls
97 lines (90 loc) · 3.26 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
import { describe, expect, test } from 'vitest';
import {
codeToGlimmerAst,
preprocessTemplateRange,
} from '../../src/parse/preprocess.js';
const TEST_CASES = [
{
code: '<template>hi</template>',
expected: ['{t:`hi `}'],
},
{
code: '<template>/* hi */</template>',
expected: ['{t:`~* hi *~ `}'],
},
{
code: '<template><div>hi</div></template>',
expected: ['{t:`<div>hi<~div> `}'],
},
{
code: '<template>{{#if true}}hi{{/if}}</template>',
expected: ['{t:`{{#if true}}hi{{~if}} `}'],
},
{
code: '<template>////////////////</template>',
expected: ['{t:`~~~~~~~~~~~~~~~~ `}'],
},
{
code: '<template>💩</template>',
expected: ['{t:`💩 `}'],
},
{
code: 'const a = <template>foo</template>; const b = <template>bar</template>;',
expected: [
'const a = {t:`foo `}; const b = <template>bar</template>;',
'const a = <template>foo</template>; const b = {t:`bar `};',
],
},
{
code: `const a = <template>💩💩💩💩💩💩💩</template>; const b = <template>💩</template>`,
expected: [
'const a = {t:`💩💩💩💩💩💩💩 `}; const b = <template>💩</template>',
'const a = <template>💩💩💩💩💩💩💩</template>; const b = {t:`💩 `}',
],
},
{
code: 'class Thing { <template>hello</template> }',
expected: ['class Thing { static{t:`hello `} }'],
},
{
code: `export default <template> Explicit default export module top level component. Explicit default export module top level component. Explicit default export module top level component. Explicit default export module top level component. Explicit default export module top level component. </template>
/*AMBIGUOUS*/`,
expected: [
`export default {t:` +
'` Explicit default export module top level component. Explicit default export module top level component. Explicit default export module top level component. Explicit default export module top level component. Explicit default export module top level component. `}' +
`
/*AMBIGUOUS*/`,
],
},
{
code: `class MyComponent
extends Component {
// prettier-ignore
<template>
<h1> Class top level template. Class top level template. Class top level template. Class top level template. Class top level template. </h1>
</template>
}`,
expected: [
`class MyComponent
extends Component {
// prettier-ignore
static{t:\`
<h1> Class top level template. Class top level template. Class top level template. Class top level template. Class top level template. <~h1>
\`}
}`,
],
},
];
const FILE_NAME = 'foo.gts';
describe('preprocess', () => {
for (const testCase of TEST_CASES) {
test(`preprocessTemplateRange ${testCase.code}`, () => {
const templates = codeToGlimmerAst(testCase.code, FILE_NAME);
for (const [index, template] of templates.entries()) {
const received = preprocessTemplateRange(template, testCase.code);
expect(received).toEqual(testCase.expected[index]);
expect(received).toHaveLength(testCase.code.length);
}
});
}
});