@@ -3,6 +3,7 @@ import { parseFragment, parse } from 'parse5';
3
3
import { jest } from '@jest/globals' ;
4
4
import { generateParsingTests } from 'parse5-test-utils/utils/generate-parsing-tests.js' ;
5
5
import { treeAdapters } from 'parse5-test-utils/utils/common.js' ;
6
+ import type { Element , TextNode } from '../tree-adapters/default.js' ;
6
7
7
8
generateParsingTests (
8
9
'parser' ,
@@ -110,4 +111,37 @@ describe('parser', () => {
110
111
expect ( onItemPop ) . toHaveBeenLastCalledWith ( bodyElement . childNodes [ 0 ] , bodyElement ) ;
111
112
} ) ;
112
113
} ) ;
114
+
115
+ describe ( 'rawtext parsing' , ( ) => {
116
+ it . each ( [
117
+ [ 'iframe' ] ,
118
+ [ 'noembed' ] ,
119
+ [ 'noframes' ] ,
120
+ [ 'noscript' ] ,
121
+ [ 'script' ] ,
122
+ [ 'style' ] ,
123
+ [ 'textarea' ] ,
124
+ [ 'title' ] ,
125
+ [ 'xmp' ] ,
126
+ ] ) ( '<%s>' , ( tagName ) => {
127
+ const html = `<r><${ tagName } ><math id="</${ tagName } ><b>should be outside</b>">` ;
128
+ const fragment = parseFragment ( html ) ;
129
+
130
+ expect ( fragment . childNodes . length ) . toBe ( 1 ) ;
131
+ const r = fragment . childNodes [ 0 ] as Element ;
132
+ expect ( r . nodeName ) . toBe ( 'r' ) ;
133
+ expect ( r . childNodes ) . toHaveLength ( 3 ) ;
134
+ expect ( r . childNodes . map ( ( _ ) => _ . nodeName ) ) . toEqual ( [ tagName , 'b' , '#text' ] ) ;
135
+
136
+ const target = r . childNodes [ 0 ] as Element ;
137
+ expect ( target . childNodes ) . toHaveLength ( 1 ) ;
138
+ expect ( target . childNodes [ 0 ] . nodeName ) . toBe ( '#text' ) ;
139
+ expect ( ( target . childNodes [ 0 ] as TextNode ) . value ) . toBe ( '<math id="' ) ;
140
+
141
+ const b = r . childNodes [ 1 ] as Element ;
142
+ expect ( b . childNodes ) . toHaveLength ( 1 ) ;
143
+ expect ( b . childNodes [ 0 ] . nodeName ) . toBe ( '#text' ) ;
144
+ expect ( ( b . childNodes [ 0 ] as TextNode ) . value ) . toBe ( 'should be outside' ) ;
145
+ } ) ;
146
+ } ) ;
113
147
} ) ;
0 commit comments