112 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
		
		
			
		
	
	
			112 lines
		
	
	
		
			3.1 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 {writeFileSync} from 'fs'; | ||
|  | import {join} from 'path'; | ||
|  | import {SourceMapGenerator} from 'source-map'; | ||
|  | 
 | ||
|  | import {SizeTracker} from './size_tracker'; | ||
|  | 
 | ||
|  | const testTempDir = process.env['TEST_TMPDIR'] !; | ||
|  | 
 | ||
|  | describe('size tracking', () => { | ||
|  |   let generator: SourceMapGenerator; | ||
|  | 
 | ||
|  |   beforeEach(() => { generator = new SourceMapGenerator(); }); | ||
|  | 
 | ||
|  |   function writeFile(filePath: string, content: string): string { | ||
|  |     const tmpFilePath = join(testTempDir, filePath); | ||
|  |     writeFileSync(tmpFilePath, content); | ||
|  |     return tmpFilePath; | ||
|  |   } | ||
|  | 
 | ||
|  |   it('should keep track of unmapped bytes in the file', () => { | ||
|  |     generator.addMapping({ | ||
|  |       generated: {line: 1, column: 1}, | ||
|  |       original: {line: 1, column: 1}, | ||
|  |       source: './origin-a.ts', | ||
|  |     }); | ||
|  | 
 | ||
|  |     // A => origin-a (2 bytes), U => unmapped (1 byte)
 | ||
|  |     const mapPath = writeFile('/test.map', generator.toString()); | ||
|  |     const inputPath = writeFile('/test.js', `UAA`); | ||
|  | 
 | ||
|  |     const {sizeResult} = new SizeTracker(inputPath, mapPath); | ||
|  | 
 | ||
|  |     expect(sizeResult.unmapped).toBe(1); | ||
|  |     expect(sizeResult.files).toEqual({ | ||
|  |       size: 3, | ||
|  |       'origin-a.ts': 2, | ||
|  |     }); | ||
|  |   }); | ||
|  | 
 | ||
|  |   it('should properly combine mapped characters from same source', () => { | ||
|  |     generator.addMapping( | ||
|  |         {generated: {line: 1, column: 0}, original: {line: 1, column: 0}, source: './origin-a.ts'}); | ||
|  | 
 | ||
|  |     generator.addMapping( | ||
|  |         {generated: {line: 1, column: 1}, original: {line: 1, column: 0}, source: './origin-b.ts'}); | ||
|  | 
 | ||
|  |     generator.addMapping({ | ||
|  |       generated: {line: 1, column: 2}, | ||
|  |       original: {line: 10, column: 0}, | ||
|  |       source: './origin-a.ts' | ||
|  |     }); | ||
|  | 
 | ||
|  |     // A => origin-a (1 byte), B => origin-b (two bytes)
 | ||
|  |     const mapPath = writeFile('/test.map', generator.toString()); | ||
|  |     const inputPath = writeFile('/test.js', `ABB`); | ||
|  | 
 | ||
|  |     const {sizeResult} = new SizeTracker(inputPath, mapPath); | ||
|  | 
 | ||
|  |     expect(sizeResult.unmapped).toBe(0); | ||
|  |     expect(sizeResult.files).toEqual({ | ||
|  |       size: 3, | ||
|  |       'origin-a.ts': 2, | ||
|  |       'origin-b.ts': 1, | ||
|  |     }); | ||
|  |   }); | ||
|  | 
 | ||
|  |   it('should keep track of summed-up byte sizes for directories', () => { | ||
|  |     generator.addMapping({ | ||
|  |       generated: {line: 1, column: 0}, | ||
|  |       original: {line: 1, column: 0}, | ||
|  |       source: '@angular/core/render3/a.ts' | ||
|  |     }); | ||
|  | 
 | ||
|  |     generator.addMapping({ | ||
|  |       generated: {line: 1, column: 2}, | ||
|  |       original: {line: 1, column: 0}, | ||
|  |       source: '@angular/core/render3/b.ts' | ||
|  |     }); | ||
|  | 
 | ||
|  |     generator.addMapping({ | ||
|  |       generated: {line: 1, column: 3}, | ||
|  |       original: {line: 1, column: 0}, | ||
|  |       source: '@angular/core/c.ts' | ||
|  |     }); | ||
|  | 
 | ||
|  |     // A => render3/a.ts (2 bytes), B => render3/b.ts (1 byte), C => c.ts (1 byte)
 | ||
|  |     const mapPath = writeFile('/test.map', generator.toString()); | ||
|  |     const inputPath = writeFile('/test.js', `AABC`); | ||
|  | 
 | ||
|  |     const {sizeResult} = new SizeTracker(inputPath, mapPath); | ||
|  | 
 | ||
|  |     expect(sizeResult.unmapped).toBe(0); | ||
|  |     expect(sizeResult.files).toEqual({ | ||
|  |       size: 4, | ||
|  |       'render3/': { | ||
|  |         size: 3, | ||
|  |         'a.ts': 2, | ||
|  |         'b.ts': 1, | ||
|  |       }, | ||
|  |       'c.ts': 1, | ||
|  |     }); | ||
|  |   }); | ||
|  | }); |