| 
									
										
										
										
											2016-07-21 13:56:58 -07:00
										 |  |  | /** | 
					
						
							|  |  |  |  * @license | 
					
						
							| 
									
										
										
										
											2020-05-19 12:08:49 -07:00
										 |  |  |  * Copyright Google LLC All Rights Reserved. | 
					
						
							| 
									
										
										
										
											2016-07-21 13:56:58 -07:00
										 |  |  |  * | 
					
						
							|  |  |  |  * Use of this source code is governed by an MIT-style license that can be | 
					
						
							|  |  |  |  * found in the LICENSE file at https://angular.io/license
 | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-30 15:50:59 -07:00
										 |  |  | import {HtmlParser} from '@angular/compiler/src/ml_parser/html_parser'; | 
					
						
							| 
									
										
										
										
											2018-11-27 12:32:14 -08:00
										 |  |  | import {serializeNodes} from './util/util'; | 
					
						
							| 
									
										
										
										
											2016-07-01 17:30:09 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-16 14:42:55 -08:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2016-08-01 14:43:20 -07:00
										 |  |  |   describe('Node serializer', () => { | 
					
						
							| 
									
										
										
										
											2016-11-12 14:08:58 +01:00
										 |  |  |     let parser: HtmlParser; | 
					
						
							| 
									
										
										
										
											2016-07-01 17:30:09 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-04-08 10:14:18 -07:00
										 |  |  |     beforeEach(() => { | 
					
						
							|  |  |  |       parser = new HtmlParser(); | 
					
						
							|  |  |  |     }); | 
					
						
							| 
									
										
										
										
											2016-07-01 17:30:09 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |     it('should support element', () => { | 
					
						
							|  |  |  |       const html = '<p></p>'; | 
					
						
							|  |  |  |       const ast = parser.parse(html, 'url'); | 
					
						
							| 
									
										
										
										
											2016-08-01 14:43:20 -07:00
										 |  |  |       expect(serializeNodes(ast.rootNodes)).toEqual([html]); | 
					
						
							| 
									
										
										
										
											2016-07-01 17:30:09 -07:00
										 |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     it('should support attributes', () => { | 
					
						
							|  |  |  |       const html = '<p k="value"></p>'; | 
					
						
							|  |  |  |       const ast = parser.parse(html, 'url'); | 
					
						
							| 
									
										
										
										
											2016-08-01 14:43:20 -07:00
										 |  |  |       expect(serializeNodes(ast.rootNodes)).toEqual([html]); | 
					
						
							| 
									
										
										
										
											2016-07-01 17:30:09 -07:00
										 |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     it('should support text', () => { | 
					
						
							|  |  |  |       const html = 'some text'; | 
					
						
							|  |  |  |       const ast = parser.parse(html, 'url'); | 
					
						
							| 
									
										
										
										
											2016-08-01 14:43:20 -07:00
										 |  |  |       expect(serializeNodes(ast.rootNodes)).toEqual([html]); | 
					
						
							| 
									
										
										
										
											2016-07-01 17:30:09 -07:00
										 |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     it('should support expansion', () => { | 
					
						
							|  |  |  |       const html = '{number, plural, =0 {none} =1 {one} other {many}}'; | 
					
						
							| 
									
										
										
										
											2019-02-08 22:10:19 +00:00
										 |  |  |       const ast = parser.parse(html, 'url', {tokenizeExpansionForms: true}); | 
					
						
							| 
									
										
										
										
											2016-08-01 14:43:20 -07:00
										 |  |  |       expect(serializeNodes(ast.rootNodes)).toEqual([html]); | 
					
						
							| 
									
										
										
										
											2016-07-01 17:30:09 -07:00
										 |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     it('should support comment', () => { | 
					
						
							|  |  |  |       const html = '<!--comment-->'; | 
					
						
							| 
									
										
										
										
											2019-02-08 22:10:19 +00:00
										 |  |  |       const ast = parser.parse(html, 'url', {tokenizeExpansionForms: true}); | 
					
						
							| 
									
										
										
										
											2016-08-01 14:43:20 -07:00
										 |  |  |       expect(serializeNodes(ast.rootNodes)).toEqual([html]); | 
					
						
							| 
									
										
										
										
											2016-07-01 17:30:09 -07:00
										 |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     it('should support nesting', () => { | 
					
						
							|  |  |  |       const html = `<div i18n="meaning|desc">
 | 
					
						
							|  |  |  |         <span>{{ interpolation }}</span> | 
					
						
							|  |  |  |         <!--comment--> | 
					
						
							|  |  |  |         <p expansion="true"> | 
					
						
							| 
									
										
										
										
											2016-11-04 15:10:19 -07:00
										 |  |  |           {number, plural, =0 {{sex, select, other {<b>?</b>}}}} | 
					
						
							| 
									
										
										
										
											2019-02-08 22:10:19 +00:00
										 |  |  |         </p> | 
					
						
							| 
									
										
										
										
											2016-07-01 17:30:09 -07:00
										 |  |  |       </div>`;
 | 
					
						
							| 
									
										
										
										
											2019-02-08 22:10:19 +00:00
										 |  |  |       const ast = parser.parse(html, 'url', {tokenizeExpansionForms: true}); | 
					
						
							| 
									
										
										
										
											2016-08-01 14:43:20 -07:00
										 |  |  |       expect(serializeNodes(ast.rootNodes)).toEqual([html]); | 
					
						
							| 
									
										
										
										
											2016-07-01 17:30:09 -07:00
										 |  |  |     }); | 
					
						
							|  |  |  |   }); | 
					
						
							|  |  |  | } |