Skip to content

Commit f26f7b3

Browse files
committed
test: fix compiler test
1 parent c36fdd5 commit f26f7b3

File tree

5 files changed

+139
-50
lines changed

5 files changed

+139
-50
lines changed

packages/angular-html-parser/vitest.config.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ export default defineConfig({
44
test: {
55
globals: true,
66
include: [
7-
// "../compiler/test/ml_parser/*_spec.ts",
7+
"../compiler/test/ml_parser/*_spec.ts",
88
"./test/*_spec.ts",
99
],
1010
coverage: {

packages/compiler/test/ml_parser/ast_serializer_spec.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,9 @@
66
* found in the LICENSE file at https://angular.dev/license
77
*/
88

9-
import {HtmlParser} from '@angular/compiler/src/ml_parser/html_parser';
9+
// angular-html-parser: use path to import
10+
import {HtmlParser} from '../../src/ml_parser/html_parser';
11+
// import {HtmlParser} from '@angular/compiler/src/ml_parser/html_parser';
1012

1113
import {serializeNodes} from './util/util';
1214

packages/compiler/test/ml_parser/html_parser_spec.ts

Lines changed: 35 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -48,14 +48,18 @@ describe('HtmlParser', () => {
4848

4949
it('should parse CDATA', () => {
5050
expect(humanizeDom(parser.parse('<![CDATA[text]]>', 'TestComp'))).toEqual([
51-
[html.Text, 'text', 0, ['text']],
51+
// angular-html-parser: division
52+
[html.CDATA, 'text', 0, ['text']],
53+
// [html.Text, 'text', 0, ['text']],
5254
]);
5355
});
5456

5557
it('should normalize line endings within CDATA', () => {
5658
const parsed = parser.parse('<![CDATA[ line 1 \r\n line 2 ]]>', 'TestComp');
5759
expect(humanizeDom(parsed)).toEqual([
58-
[html.Text, ' line 1 \n line 2 ', 0, [' line 1 \n line 2 ']],
60+
// angular-html-parser: division
61+
[html.CDATA, ' line 1 \n line 2 ', 0, [' line 1 \n line 2 ']],
62+
// [html.Text, ' line 1 \n line 2 ', 0, [' line 1 \n line 2 ']],
5963
]);
6064
expect(parsed.errors).toEqual([]);
6165
});
@@ -180,23 +184,32 @@ describe('HtmlParser', () => {
180184
]);
181185
});
182186

183-
it('should match closing tags case sensitive', () => {
184-
const errors = parser.parse('<DiV><P></p></dIv>', 'TestComp').errors;
185-
expect(errors.length).toEqual(2);
186-
expect(humanizeErrors(errors)).toEqual([
187-
[
188-
'p',
189-
'Unexpected closing tag "p". It may happen when the tag has already been closed by another tag. For more info see https://www.w3.org/TR/html5/syntax.html#closing-elements-that-have-implied-end-tags',
190-
'0:8',
191-
],
192-
[
193-
'dIv',
194-
'Unexpected closing tag "dIv". It may happen when the tag has already been closed by another tag. For more info see https://www.w3.org/TR/html5/syntax.html#closing-elements-that-have-implied-end-tags',
195-
'0:12',
196-
],
187+
// angular-html-parser: isTagNameCaseSensitive
188+
// `isTagNameCaseSensitive: true` not implmemented
189+
it('should match closing tags incasesensitive', () => {
190+
expect(humanizeDom(parser.parse('<DiV><P></p></dIv>', 'TestComp'))).toEqual([
191+
[html.Element, 'DiV', 0],
192+
[html.Element, 'P', 1],
197193
]);
198194
});
199195

196+
// it('should match closing tags case sensitive', () => {
197+
// const errors = parser.parse('<DiV><P></p></dIv>', 'TestComp').errors;
198+
// expect(errors.length).toEqual(2);
199+
// expect(humanizeErrors(errors)).toEqual([
200+
// [
201+
// 'p',
202+
// 'Unexpected closing tag "p". It may happen when the tag has already been closed by another tag. For more info see https://www.w3.org/TR/html5/syntax.html#closing-elements-that-have-implied-end-tags',
203+
// '0:8',
204+
// ],
205+
// [
206+
// 'dIv',
207+
// 'Unexpected closing tag "dIv". It may happen when the tag has already been closed by another tag. For more info see https://www.w3.org/TR/html5/syntax.html#closing-elements-that-have-implied-end-tags',
208+
// '0:12',
209+
// ],
210+
// ]);
211+
// });
212+
200213
it('should support self closing void elements', () => {
201214
expect(humanizeDom(parser.parse('<input />', 'TestComp'))).toEqual([
202215
[html.Element, 'input', 0],
@@ -1296,11 +1309,14 @@ describe('HtmlParser', () => {
12961309
expect((ast.rootNodes[0] as html.Element).attrs[0].valueSpan).toBeUndefined();
12971310
});
12981311

1299-
it('should report a value span for an attribute with a value', () => {
1312+
it.only('should report a value span for an attribute with a value', () => {
13001313
const ast = parser.parse('<div bar="12"></div>', 'TestComp');
13011314
const attr = (ast.rootNodes[0] as html.Element).attrs[0];
1302-
expect(attr.valueSpan!.start.offset).toEqual(10);
1303-
expect(attr.valueSpan!.end.offset).toEqual(12);
1315+
// angular-html-parser: valueSpan contains quotes
1316+
expect(attr.valueSpan!.start.offset).toEqual(9);
1317+
expect(attr.valueSpan!.end.offset).toEqual(13);
1318+
// expect(attr.valueSpan!.start.offset).toEqual(10);
1319+
// expect(attr.valueSpan!.end.offset).toEqual(12);
13041320
});
13051321

13061322
it('should report a value span for an unquoted attribute value', () => {

packages/compiler/test/ml_parser/lexer_spec.ts

Lines changed: 95 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,9 @@ describe('HtmlLexer', () => {
113113

114114
it('should report <!- without -', () => {
115115
expect(tokenizeAndHumanizeErrors('<!-a')).toEqual([
116-
[TokenType.COMMENT_START, 'Unexpected character "a"', '0:3'],
116+
// angular-html-parser: different comment parse logic
117+
[TokenType.RAW_TEXT, 'Unexpected character "EOF"', '0:4'],
118+
// [TokenType.COMMENT_START, 'Unexpected character "a"', '0:3'],
117119
]);
118120
});
119121

@@ -145,21 +147,31 @@ describe('HtmlLexer', () => {
145147
describe('doctype', () => {
146148
it('should parse doctypes', () => {
147149
expect(tokenizeAndHumanizeParts('<!DOCTYPE html>')).toEqual([
148-
[TokenType.DOC_TYPE, 'DOCTYPE html'],
150+
// angular-html-parser: different docType parse
151+
[TokenType.DOC_TYPE_START],
152+
[TokenType.RAW_TEXT, " html"],
153+
[TokenType.DOC_TYPE_END],
154+
// [TokenType.DOC_TYPE, 'DOCTYPE html'],
149155
[TokenType.EOF],
150156
]);
151157
});
152158

153159
it('should store the locations', () => {
154160
expect(tokenizeAndHumanizeSourceSpans('<!DOCTYPE html>')).toEqual([
155-
[TokenType.DOC_TYPE, '<!DOCTYPE html>'],
161+
// angular-html-parser: different docType parse
162+
[TokenType.DOC_TYPE_START, '<!DOCTYPE'],
163+
[TokenType.RAW_TEXT, " html"],
164+
[TokenType.DOC_TYPE_END, '>'],
165+
// [TokenType.DOC_TYPE, '<!DOCTYPE html>'],
156166
[TokenType.EOF, ''],
157167
]);
158168
});
159169

160170
it('should report missing end doctype', () => {
161171
expect(tokenizeAndHumanizeErrors('<!')).toEqual([
162-
[TokenType.DOC_TYPE, 'Unexpected character "EOF"', '0:2'],
172+
// angular-html-parser: division
173+
[TokenType.RAW_TEXT, 'Unexpected character "EOF"', '0:2'],
174+
// [TokenType.DOC_TYPE, 'Unexpected character "EOF"', '0:2'],
163175
]);
164176
});
165177
});
@@ -185,7 +197,9 @@ describe('HtmlLexer', () => {
185197

186198
it('should report <![ without CDATA[', () => {
187199
expect(tokenizeAndHumanizeErrors('<![a')).toEqual([
188-
[TokenType.CDATA_START, 'Unexpected character "a"', '0:3'],
200+
// angular-html-parser: different docType parse
201+
[TokenType.RAW_TEXT, 'Unexpected character "EOF"', '0:4'],
202+
// [TokenType.CDATA_START, 'Unexpected character "a"', '0:3'],
189203
]);
190204
});
191205

@@ -288,7 +302,9 @@ describe('HtmlLexer', () => {
288302
expect(tokenizeAndHumanizeParts(`<title>t\ne\rs\r\nt</title>`)).toEqual([
289303
[TokenType.TAG_OPEN_START, '', 'title'],
290304
[TokenType.TAG_OPEN_END],
291-
[TokenType.ESCAPABLE_RAW_TEXT, 't\ne\ns\nt'],
305+
// angular-html-parser: division
306+
[TokenType.TEXT, 't\ne\ns\nt'],
307+
// [TokenType.ESCAPABLE_RAW_TEXT, 't\ne\ns\nt'],
292308
[TokenType.TAG_CLOSE, '', 'title'],
293309
[TokenType.EOF],
294310
]);
@@ -298,9 +314,13 @@ describe('HtmlLexer', () => {
298314
expect(tokenizeAndHumanizeParts(`<title>&amp;</title>`)).toEqual([
299315
[TokenType.TAG_OPEN_START, '', 'title'],
300316
[TokenType.TAG_OPEN_END],
301-
[TokenType.ESCAPABLE_RAW_TEXT, ''],
317+
// angular-html-parser: division
318+
[TokenType.TEXT, ''],
302319
[TokenType.ENCODED_ENTITY, '&', '&amp;'],
303-
[TokenType.ESCAPABLE_RAW_TEXT, ''],
320+
[TokenType.TEXT, ''],
321+
// [TokenType.ESCAPABLE_RAW_TEXT, ''],
322+
// [TokenType.ENCODED_ENTITY, '&', '&amp;'],
323+
// [TokenType.ESCAPABLE_RAW_TEXT, ''],
304324
[TokenType.TAG_CLOSE, '', 'title'],
305325
[TokenType.EOF],
306326
]);
@@ -310,7 +330,11 @@ describe('HtmlLexer', () => {
310330
expect(tokenizeAndHumanizeParts(`<title>a<div></title>`)).toEqual([
311331
[TokenType.TAG_OPEN_START, '', 'title'],
312332
[TokenType.TAG_OPEN_END],
313-
[TokenType.ESCAPABLE_RAW_TEXT, 'a<div>'],
333+
// angular-html-parser: division
334+
[TokenType.TEXT, 'a'],
335+
[TokenType.TAG_OPEN_START, '', 'div'],
336+
[TokenType.TAG_OPEN_END],
337+
// [TokenType.ESCAPABLE_RAW_TEXT, 'a<div>'],
314338
[TokenType.TAG_CLOSE, '', 'title'],
315339
[TokenType.EOF],
316340
]);
@@ -320,7 +344,10 @@ describe('HtmlLexer', () => {
320344
expect(tokenizeAndHumanizeParts(`<title>a</test></title>`)).toEqual([
321345
[TokenType.TAG_OPEN_START, '', 'title'],
322346
[TokenType.TAG_OPEN_END],
323-
[TokenType.ESCAPABLE_RAW_TEXT, 'a</test>'],
347+
// angular-html-parser: division
348+
[TokenType.TEXT, 'a'],
349+
[TokenType.TAG_CLOSE, '', 'test'],
350+
// [TokenType.ESCAPABLE_RAW_TEXT, 'a</test>'],
324351
[TokenType.TAG_CLOSE, '', 'title'],
325352
[TokenType.EOF],
326353
]);
@@ -330,7 +357,9 @@ describe('HtmlLexer', () => {
330357
expect(tokenizeAndHumanizeSourceSpans(`<title>a</title>`)).toEqual([
331358
[TokenType.TAG_OPEN_START, '<title'],
332359
[TokenType.TAG_OPEN_END, '>'],
333-
[TokenType.ESCAPABLE_RAW_TEXT, 'a'],
360+
// angular-html-parser: division
361+
[TokenType.TEXT, 'a'],
362+
// [TokenType.ESCAPABLE_RAW_TEXT, 'a'],
334363
[TokenType.TAG_CLOSE, '</title>'],
335364
[TokenType.EOF, ''],
336365
]);
@@ -965,7 +994,9 @@ describe('HtmlLexer', () => {
965994
).toEqual([
966995
[TokenType.TAG_OPEN_START, '', 'script'],
967996
[TokenType.TAG_OPEN_END],
968-
[TokenType.RAW_TEXT, 'abc\ndef\nghi\tjkl`\'"mno'],
997+
// angular-html-parser: division
998+
[TokenType.TEXT, 'abc\ndef\nghi\tjkl`\'"mno'],
999+
// [TokenType.RAW_TEXT, 'abc\ndef\nghi\tjkl`\'"mno'],
9691000
[TokenType.TAG_CLOSE, '', 'script'],
9701001
[TokenType.EOF],
9711002
]);
@@ -979,7 +1010,9 @@ describe('HtmlLexer', () => {
9791010
).toEqual([
9801011
[TokenType.TAG_OPEN_START, '', 'title'],
9811012
[TokenType.TAG_OPEN_END],
982-
[TokenType.ESCAPABLE_RAW_TEXT, 'abc\ndef\nghi\tjkl`\'"mno'],
1013+
// angular-html-parser: division
1014+
[TokenType.TEXT, 'abc\ndef\nghi\tjkl`\'"mno'],
1015+
// [TokenType.ESCAPABLE_RAW_TEXT, 'abc\ndef\nghi\tjkl`\'"mno'],
9831016
[TokenType.TAG_CLOSE, '', 'title'],
9841017
[TokenType.EOF],
9851018
]);
@@ -2484,7 +2517,9 @@ describe('HtmlLexer', () => {
24842517
expect(tokenizeAndHumanizeParts(`<script>t\ne\rs\r\nt</script>`)).toEqual([
24852518
[TokenType.TAG_OPEN_START, '', 'script'],
24862519
[TokenType.TAG_OPEN_END],
2487-
[TokenType.RAW_TEXT, 't\ne\ns\nt'],
2520+
// angular-html-parser: division
2521+
[TokenType.TEXT, 't\ne\ns\nt'],
2522+
// [TokenType.RAW_TEXT, 't\ne\ns\nt'],
24882523
[TokenType.TAG_CLOSE, '', 'script'],
24892524
[TokenType.EOF],
24902525
]);
@@ -2494,8 +2529,13 @@ describe('HtmlLexer', () => {
24942529
expect(tokenizeAndHumanizeParts(`<script>&amp;</SCRIPT>`)).toEqual([
24952530
[TokenType.TAG_OPEN_START, '', 'script'],
24962531
[TokenType.TAG_OPEN_END],
2497-
[TokenType.RAW_TEXT, '&amp;'],
2498-
[TokenType.TAG_CLOSE, '', 'script'],
2532+
// angular-html-parser: division
2533+
[TokenType.TEXT, ''],
2534+
[TokenType.ENCODED_ENTITY, '&', '&amp;'],
2535+
[TokenType.TEXT, ''],
2536+
[TokenType.TAG_CLOSE, '', 'SCRIPT'],
2537+
// [TokenType.RAW_TEXT, '&amp;'],
2538+
// [TokenType.TAG_CLOSE, '', 'script'],
24992539
[TokenType.EOF],
25002540
]);
25012541
});
@@ -2504,7 +2544,11 @@ describe('HtmlLexer', () => {
25042544
expect(tokenizeAndHumanizeParts(`<script>a<div></script>`)).toEqual([
25052545
[TokenType.TAG_OPEN_START, '', 'script'],
25062546
[TokenType.TAG_OPEN_END],
2507-
[TokenType.RAW_TEXT, 'a<div>'],
2547+
// angular-html-parser: division
2548+
[TokenType.TEXT, 'a'],
2549+
[TokenType.TAG_OPEN_START, '', 'div'],
2550+
[TokenType.TAG_OPEN_END],
2551+
// [TokenType.RAW_TEXT, 'a<div>'],
25082552
[TokenType.TAG_CLOSE, '', 'script'],
25092553
[TokenType.EOF],
25102554
]);
@@ -2514,7 +2558,10 @@ describe('HtmlLexer', () => {
25142558
expect(tokenizeAndHumanizeParts(`<script>a</test></script>`)).toEqual([
25152559
[TokenType.TAG_OPEN_START, '', 'script'],
25162560
[TokenType.TAG_OPEN_END],
2517-
[TokenType.RAW_TEXT, 'a</test>'],
2561+
// angular-html-parser: division
2562+
[TokenType.TEXT, 'a'],
2563+
[TokenType.TAG_CLOSE, '', 'test'],
2564+
// [TokenType.RAW_TEXT, 'a</test>'],
25182565
[TokenType.TAG_CLOSE, '', 'script'],
25192566
[TokenType.EOF],
25202567
]);
@@ -2524,7 +2571,9 @@ describe('HtmlLexer', () => {
25242571
expect(tokenizeAndHumanizeSourceSpans(`<script>a</script>`)).toEqual([
25252572
[TokenType.TAG_OPEN_START, '<script'],
25262573
[TokenType.TAG_OPEN_END, '>'],
2527-
[TokenType.RAW_TEXT, 'a'],
2574+
// angular-html-parser: division
2575+
[TokenType.TEXT, 'a'],
2576+
// [TokenType.RAW_TEXT, 'a'],
25282577
[TokenType.TAG_CLOSE, '</script>'],
25292578
[TokenType.EOF, ''],
25302579
]);
@@ -2536,7 +2585,9 @@ describe('HtmlLexer', () => {
25362585
expect(tokenizeAndHumanizeParts(`<title>t\ne\rs\r\nt</title>`)).toEqual([
25372586
[TokenType.TAG_OPEN_START, '', 'title'],
25382587
[TokenType.TAG_OPEN_END],
2539-
[TokenType.ESCAPABLE_RAW_TEXT, 't\ne\ns\nt'],
2588+
// angular-html-parser: division
2589+
[TokenType.TEXT, 't\ne\ns\nt'],
2590+
// [TokenType.ESCAPABLE_RAW_TEXT, 't\ne\ns\nt'],
25402591
[TokenType.TAG_CLOSE, '', 'title'],
25412592
[TokenType.EOF],
25422593
]);
@@ -2546,9 +2597,13 @@ describe('HtmlLexer', () => {
25462597
expect(tokenizeAndHumanizeParts(`<title>&amp;</title>`)).toEqual([
25472598
[TokenType.TAG_OPEN_START, '', 'title'],
25482599
[TokenType.TAG_OPEN_END],
2549-
[TokenType.ESCAPABLE_RAW_TEXT, ''],
2600+
// angular-html-parser: division
2601+
[TokenType.TEXT, ''],
2602+
// [TokenType.ESCAPABLE_RAW_TEXT, ''],
25502603
[TokenType.ENCODED_ENTITY, '&', '&amp;'],
2551-
[TokenType.ESCAPABLE_RAW_TEXT, ''],
2604+
// angular-html-parser: division
2605+
[TokenType.TEXT, ''],
2606+
// [TokenType.ESCAPABLE_RAW_TEXT, ''],
25522607
[TokenType.TAG_CLOSE, '', 'title'],
25532608
[TokenType.EOF],
25542609
]);
@@ -2558,7 +2613,11 @@ describe('HtmlLexer', () => {
25582613
expect(tokenizeAndHumanizeParts(`<title>a<div></title>`)).toEqual([
25592614
[TokenType.TAG_OPEN_START, '', 'title'],
25602615
[TokenType.TAG_OPEN_END],
2561-
[TokenType.ESCAPABLE_RAW_TEXT, 'a<div>'],
2616+
// angular-html-parser: division
2617+
[TokenType.TEXT, 'a'],
2618+
[TokenType.TAG_OPEN_START, '', 'div'],
2619+
[TokenType.TAG_OPEN_END],
2620+
// [TokenType.ESCAPABLE_RAW_TEXT, 'a<div>'],
25622621
[TokenType.TAG_CLOSE, '', 'title'],
25632622
[TokenType.EOF],
25642623
]);
@@ -2568,7 +2627,10 @@ describe('HtmlLexer', () => {
25682627
expect(tokenizeAndHumanizeParts(`<title>a</test></title>`)).toEqual([
25692628
[TokenType.TAG_OPEN_START, '', 'title'],
25702629
[TokenType.TAG_OPEN_END],
2571-
[TokenType.ESCAPABLE_RAW_TEXT, 'a</test>'],
2630+
// angular-html-parser: division
2631+
[TokenType.TEXT, 'a'],
2632+
[TokenType.TAG_CLOSE, '', 'test'],
2633+
// [TokenType.ESCAPABLE_RAW_TEXT, 'a</test>'],
25722634
[TokenType.TAG_CLOSE, '', 'title'],
25732635
[TokenType.EOF],
25742636
]);
@@ -2578,7 +2640,9 @@ describe('HtmlLexer', () => {
25782640
expect(tokenizeAndHumanizeSourceSpans(`<title>a</title>`)).toEqual([
25792641
[TokenType.TAG_OPEN_START, '<title'],
25802642
[TokenType.TAG_OPEN_END, '>'],
2581-
[TokenType.ESCAPABLE_RAW_TEXT, 'a'],
2643+
// angular-html-parser: division
2644+
[TokenType.TEXT, 'a'],
2645+
// [TokenType.ESCAPABLE_RAW_TEXT, 'a'],
25822646
[TokenType.TAG_CLOSE, '</title>'],
25832647
[TokenType.EOF, ''],
25842648
]);
@@ -3213,7 +3277,9 @@ describe('HtmlLexer', () => {
32133277
).toEqual([
32143278
[TokenType.TAG_OPEN_START, '', 'script'],
32153279
[TokenType.TAG_OPEN_END],
3216-
[TokenType.RAW_TEXT, 'abc\ndef\nghi\tjkl`\'"mno'],
3280+
// angular-html-parser: division
3281+
[TokenType.TEXT, 'abc\ndef\nghi\tjkl`\'"mno'],
3282+
// [TokenType.RAW_TEXT, 'abc\ndef\nghi\tjkl`\'"mno'],
32173283
[TokenType.TAG_CLOSE, '', 'script'],
32183284
[TokenType.EOF],
32193285
]);
@@ -3227,7 +3293,9 @@ describe('HtmlLexer', () => {
32273293
).toEqual([
32283294
[TokenType.TAG_OPEN_START, '', 'title'],
32293295
[TokenType.TAG_OPEN_END],
3230-
[TokenType.ESCAPABLE_RAW_TEXT, 'abc\ndef\nghi\tjkl`\'"mno'],
3296+
// angular-html-parser: division
3297+
[TokenType.TEXT, 'abc\ndef\nghi\tjkl`\'"mno'],
3298+
// [TokenType.ESCAPABLE_RAW_TEXT, 'abc\ndef\nghi\tjkl`\'"mno'],
32313299
[TokenType.TAG_CLOSE, '', 'title'],
32323300
[TokenType.EOF],
32333301
]);

0 commit comments

Comments
 (0)