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
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
|
import assert from 'node:assert/strict';
import { before, describe, it, after } from 'node:test';
import { load as cheerioLoad } from 'cheerio';
import { isWindows, loadFixture } from './test-utils.js';
describe('Special chars in component import paths', () => {
/** @type {import('./test-utils').Fixture} */
let fixture;
const componentIds = [
'caret',
'rocket',
// Not supported as import identifier in Vite
// 'percent',
'space',
'round-bracket',
'square-bracket',
];
before(async () => {
fixture = await loadFixture({
root: './fixtures/special-chars-in-component-imports/',
});
});
describe('build', () => {
before(async () => {
await fixture.build();
});
it('Build succeeds', async () => {
const html = await fixture.readFile('/index.html');
assert.equal(html.includes('<html>'), true);
});
it('Special chars in imports work from .astro files', async () => {
const html = await fixture.readFile('/index.html');
const $ = cheerioLoad(html);
// Test 1: Correct page
assert.equal($('h1').text().includes('.astro'), true);
// Test 2: All components exist
componentIds.forEach((componentId) => {
assert.equal($(`#${componentId}`).length, 1, `Component #${componentId} does not exist`);
});
// Test 3: Component contents were rendered properly
componentIds.forEach((componentId) => {
assert.equal($(`#${componentId} > div`).text(), `${componentId}: 0`);
});
// Test 4: There is an island for each component
assert.equal($('astro-island[uid]').length, componentIds.length);
});
it('Special chars in imports work from .mdx files', async () => {
const html = await fixture.readFile('/mdx/index.html');
const $ = cheerioLoad(html);
// Test 1: Correct page
assert.equal($('h1').text().includes('.mdx'), true);
// Test 2: All components exist
componentIds.forEach((componentId) => {
assert.equal($(`#${componentId}`).length, 1, `Component #${componentId} does not exist`);
});
// Test 3: Component contents were rendered properly
componentIds.forEach((componentId) => {
assert.equal($(`#${componentId} > div`).text(), `${componentId}: 0`);
});
// Test 4: There is an island for each component
assert.equal($('astro-island[uid]').length, componentIds.length);
});
});
if (isWindows) return;
describe('dev', () => {
let devServer;
before(async () => {
devServer = await fixture.startDevServer();
});
after(async () => {
await devServer.stop();
});
it('Special chars in imports work from .astro files', async () => {
const html = await fixture.fetch('/').then((res) => res.text());
const $ = cheerioLoad(html);
// Test 1: Correct page
assert.equal($('h1').text().includes('.astro'), true);
// Test 2: All components exist
componentIds.forEach((componentId) => {
assert.equal($(`#${componentId}`).length, 1, `Component #${componentId} does not exist`);
});
// Test 3: Component contents were rendered properly
componentIds.forEach((componentId) => {
assert.equal($(`#${componentId} > div`).text(), `${componentId}: 0`);
});
// Test 4: There is an island for each component
assert.equal($('astro-island[uid]').length, componentIds.length);
});
it('Special chars in imports work from .mdx files', async () => {
const html = await fixture.fetch('/mdx').then((res) => res.text());
const $ = cheerioLoad(html);
// Test 1: Correct page
assert.equal($('h1').text().includes('.mdx'), true);
// Test 2: All components exist
componentIds.forEach((componentId) => {
assert.equal($(`#${componentId}`).length, 1, `Component #${componentId} does not exist`);
});
// Test 3: Component contents were rendered properly
componentIds.forEach((componentId) => {
assert.equal($(`#${componentId} > div`).text(), `${componentId}: 0`);
});
// Test 4: There is an island for each component
assert.equal($('astro-island[uid]').length, componentIds.length);
});
});
});
|