| 
									
										
										
										
											2017-09-28 16:18:12 -07:00
										 |  |  | /** | 
					
						
							|  |  |  |  * @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 {Generator} from '../src/generator'; | 
					
						
							|  |  |  | import {MockFilesystem} from '../testing/mock'; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-16 14:42:55 -08:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2017-09-28 16:18:12 -07:00
										 |  |  |   describe('Generator', () => { | 
					
						
							|  |  |  |     it('generates a correct config', (done: DoneFn) => { | 
					
						
							|  |  |  |       const fs = new MockFilesystem({ | 
					
						
							|  |  |  |         '/index.html': 'This is a test', | 
					
						
							| 
									
										
										
										
											2017-10-20 13:11:43 -07:00
										 |  |  |         '/test.txt': 'Another test', | 
					
						
							| 
									
										
										
										
											2017-09-28 16:18:12 -07:00
										 |  |  |         '/foo/test.html': 'Another test', | 
					
						
							|  |  |  |         '/ignored/x.html': 'should be ignored', | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  |       const gen = new Generator(fs, '/test'); | 
					
						
							|  |  |  |       const res = gen.process({ | 
					
						
							|  |  |  |         index: '/index.html', | 
					
						
							|  |  |  |         appData: { | 
					
						
							|  |  |  |           test: true, | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |         assetGroups: [{ | 
					
						
							|  |  |  |           name: 'test', | 
					
						
							|  |  |  |           resources: { | 
					
						
							|  |  |  |             files: [ | 
					
						
							|  |  |  |               '/**/*.html', '!/ignored/**', | 
					
						
							|  |  |  |               //                '/*.html',
 | 
					
						
							|  |  |  |             ], | 
					
						
							| 
									
										
										
										
											2017-10-20 13:11:43 -07:00
										 |  |  |             versionedFiles: [ | 
					
						
							|  |  |  |               '/**/*.txt', | 
					
						
							|  |  |  |             ], | 
					
						
							| 
									
										
										
										
											2017-09-28 16:18:12 -07:00
										 |  |  |             urls: [ | 
					
						
							|  |  |  |               '/absolute/**', | 
					
						
							| 
									
										
										
										
											2017-10-02 15:59:57 -07:00
										 |  |  |               '/some/url?with+escaped+chars', | 
					
						
							| 
									
										
										
										
											2017-09-28 16:18:12 -07:00
										 |  |  |               'relative/*.txt', | 
					
						
							|  |  |  |             ] | 
					
						
							|  |  |  |           } | 
					
						
							|  |  |  |         }], | 
					
						
							|  |  |  |         dataGroups: [{ | 
					
						
							|  |  |  |           name: 'other', | 
					
						
							|  |  |  |           urls: [ | 
					
						
							|  |  |  |             '/api/**', | 
					
						
							|  |  |  |             'relapi/**', | 
					
						
							|  |  |  |           ], | 
					
						
							|  |  |  |           cacheConfig: { | 
					
						
							|  |  |  |             maxSize: 100, | 
					
						
							|  |  |  |             maxAge: '3d', | 
					
						
							|  |  |  |             timeout: '1m', | 
					
						
							|  |  |  |           } | 
					
						
							|  |  |  |         }] | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  |       res.then(config => { | 
					
						
							|  |  |  |            expect(config).toEqual({ | 
					
						
							|  |  |  |              'configVersion': 1, | 
					
						
							|  |  |  |              'index': '/test/index.html', | 
					
						
							|  |  |  |              'appData': { | 
					
						
							|  |  |  |                'test': true, | 
					
						
							|  |  |  |              }, | 
					
						
							|  |  |  |              'assetGroups': [{ | 
					
						
							|  |  |  |                'name': 'test', | 
					
						
							|  |  |  |                'installMode': 'prefetch', | 
					
						
							|  |  |  |                'updateMode': 'prefetch', | 
					
						
							| 
									
										
										
										
											2017-10-20 13:11:43 -07:00
										 |  |  |                'urls': [ | 
					
						
							|  |  |  |                  '/test/index.html', | 
					
						
							|  |  |  |                  '/test/foo/test.html', | 
					
						
							|  |  |  |                  '/test/test.txt', | 
					
						
							|  |  |  |                ], | 
					
						
							| 
									
										
										
										
											2017-10-02 15:59:57 -07:00
										 |  |  |                'patterns': [ | 
					
						
							|  |  |  |                  '\\/absolute\\/.*', | 
					
						
							|  |  |  |                  '\\/some\\/url\\?with\\+escaped\\+chars', | 
					
						
							|  |  |  |                  '\\/test\\/relative\\/[^\\/]+\\.txt', | 
					
						
							|  |  |  |                ] | 
					
						
							| 
									
										
										
										
											2017-09-28 16:18:12 -07:00
										 |  |  |              }], | 
					
						
							|  |  |  |              'dataGroups': [{ | 
					
						
							|  |  |  |                'name': 'other', | 
					
						
							|  |  |  |                'patterns': ['\\/api\\/.*', '\\/test\\/relapi\\/.*'], | 
					
						
							|  |  |  |                'strategy': 'performance', | 
					
						
							|  |  |  |                'maxSize': 100, | 
					
						
							|  |  |  |                'maxAge': 259200000, | 
					
						
							|  |  |  |                'timeoutMs': 60000, | 
					
						
							|  |  |  |                'version': 1, | 
					
						
							|  |  |  |              }], | 
					
						
							|  |  |  |              'hashTable': { | 
					
						
							| 
									
										
										
										
											2017-10-20 13:11:43 -07:00
										 |  |  |                '/test/test.txt': '18f6f8eb7b1c23d2bb61bff028b83d867a9e4643', | 
					
						
							| 
									
										
										
										
											2017-09-28 16:18:12 -07:00
										 |  |  |                '/test/index.html': 'a54d88e06612d820bc3be72877c74f257b561b19', | 
					
						
							|  |  |  |                '/test/foo/test.html': '18f6f8eb7b1c23d2bb61bff028b83d867a9e4643' | 
					
						
							|  |  |  |              } | 
					
						
							|  |  |  |            }); | 
					
						
							|  |  |  |            done(); | 
					
						
							|  |  |  |          }) | 
					
						
							|  |  |  |           .catch(err => done.fail(err)); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  |   }); | 
					
						
							|  |  |  | } |