86 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
		
		
			
		
	
	
			86 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @license
							 | 
						||
| 
								 | 
							
								 * Copyright Google Inc. All Rights Reserved.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * 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
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								import {DynamicContentProjectionHelper} from '@angular/upgrade/src/dynamic/content_projection_helper';
							 | 
						||
| 
								 | 
							
								import {nodes} from './test_helpers';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								export function main() {
							 | 
						||
| 
								 | 
							
								  describe('groupNodesBySelector', () => {
							 | 
						||
| 
								 | 
							
								    let groupNodesBySelector: (ngContentSelectors: string[], nodes: Node[]) => Node[][];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    beforeEach(() => {
							 | 
						||
| 
								 | 
							
								      const projectionHelper = new DynamicContentProjectionHelper();
							 | 
						||
| 
								 | 
							
								      groupNodesBySelector = projectionHelper.groupNodesBySelector.bind(projectionHelper);
							 | 
						||
| 
								 | 
							
								    });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    it('should return an array of node collections for each selector', () => {
							 | 
						||
| 
								 | 
							
								      const contentNodes = nodes(
							 | 
						||
| 
								 | 
							
								          '<div class="x"><span>div-1 content</span></div>' +
							 | 
						||
| 
								 | 
							
								          '<input type="number" name="myNum">' +
							 | 
						||
| 
								 | 
							
								          '<input type="date" name="myDate">' +
							 | 
						||
| 
								 | 
							
								          '<span>span content</span>' +
							 | 
						||
| 
								 | 
							
								          '<div class="x"><span>div-2 content</span></div>');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      const selectors = ['input[type=date]', 'span', '.x'];
							 | 
						||
| 
								 | 
							
								      const projectableNodes = groupNodesBySelector(selectors, contentNodes);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      expect(projectableNodes[0]).toEqual(nodes('<input type="date" name="myDate">'));
							 | 
						||
| 
								 | 
							
								      expect(projectableNodes[1]).toEqual(nodes('<span>span content</span>'));
							 | 
						||
| 
								 | 
							
								      expect(projectableNodes[2])
							 | 
						||
| 
								 | 
							
								          .toEqual(nodes(
							 | 
						||
| 
								 | 
							
								              '<div class="x"><span>div-1 content</span></div>' +
							 | 
						||
| 
								 | 
							
								              '<div class="x"><span>div-2 content</span></div>'));
							 | 
						||
| 
								 | 
							
								    });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    it('should collect up unmatched nodes for the wildcard selector', () => {
							 | 
						||
| 
								 | 
							
								      const contentNodes = nodes(
							 | 
						||
| 
								 | 
							
								          '<div class="x"><span>div-1 content</span></div>' +
							 | 
						||
| 
								 | 
							
								          '<input type="number" name="myNum">' +
							 | 
						||
| 
								 | 
							
								          '<input type="date" name="myDate">' +
							 | 
						||
| 
								 | 
							
								          '<span>span content</span>' +
							 | 
						||
| 
								 | 
							
								          '<div class="x"><span>div-2 content</span></div>');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      const selectors = ['.x', '*', 'input[type=date]'];
							 | 
						||
| 
								 | 
							
								      const projectableNodes = groupNodesBySelector(selectors, contentNodes);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      expect(projectableNodes[0])
							 | 
						||
| 
								 | 
							
								          .toEqual(nodes(
							 | 
						||
| 
								 | 
							
								              '<div class="x"><span>div-1 content</span></div>' +
							 | 
						||
| 
								 | 
							
								              '<div class="x"><span>div-2 content</span></div>'));
							 | 
						||
| 
								 | 
							
								      expect(projectableNodes[1])
							 | 
						||
| 
								 | 
							
								          .toEqual(nodes(
							 | 
						||
| 
								 | 
							
								              '<input type="number" name="myNum">' +
							 | 
						||
| 
								 | 
							
								              '<span>span content</span>'));
							 | 
						||
| 
								 | 
							
								      expect(projectableNodes[2]).toEqual(nodes('<input type="date" name="myDate">'));
							 | 
						||
| 
								 | 
							
								    });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    it('should return an array of empty arrays if there are no nodes passed in', () => {
							 | 
						||
| 
								 | 
							
								      const selectors = ['.x', '*', 'input[type=date]'];
							 | 
						||
| 
								 | 
							
								      const projectableNodes = groupNodesBySelector(selectors, []);
							 | 
						||
| 
								 | 
							
								      expect(projectableNodes).toEqual([[], [], []]);
							 | 
						||
| 
								 | 
							
								    });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    it('should return an empty array for each selector that does not match', () => {
							 | 
						||
| 
								 | 
							
								      const contentNodes = nodes(
							 | 
						||
| 
								 | 
							
								          '<div class="x"><span>div-1 content</span></div>' +
							 | 
						||
| 
								 | 
							
								          '<input type="number" name="myNum">' +
							 | 
						||
| 
								 | 
							
								          '<input type="date" name="myDate">' +
							 | 
						||
| 
								 | 
							
								          '<span>span content</span>' +
							 | 
						||
| 
								 | 
							
								          '<div class="x"><span>div-2 content</span></div>');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      const noSelectorNodes = groupNodesBySelector([], contentNodes);
							 | 
						||
| 
								 | 
							
								      expect(noSelectorNodes).toEqual([]);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      const noMatchSelectorNodes = groupNodesBySelector(['.not-there'], contentNodes);
							 | 
						||
| 
								 | 
							
								      expect(noMatchSelectorNodes).toEqual([[]]);
							 | 
						||
| 
								 | 
							
								    });
							 | 
						||
| 
								 | 
							
								  });
							 | 
						||
| 
								 | 
							
								}
							 |