| 
									
										
										
										
											2016-06-23 09:47:54 -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
 | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-08 16:38:52 -07:00
										 |  |  | import {ddescribe, describe, it, iit, xit, expect, beforeEach, afterEach, inject,} from '@angular/core/testing/testing_internal'; | 
					
						
							| 
									
										
										
										
											2016-04-28 17:50:03 -07:00
										 |  |  | import {AsyncTestCompleter} from '@angular/core/testing/testing_internal'; | 
					
						
							| 
									
										
										
										
											2016-06-17 10:57:32 -07:00
										 |  |  | import {TestComponentBuilder} from '@angular/compiler/testing'; | 
					
						
							|  |  |  | import {Json, StringWrapper} from '../../src/facade/lang'; | 
					
						
							| 
									
										
										
										
											2015-05-26 17:12:38 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-28 17:50:03 -07:00
										 |  |  | import {Component} from '@angular/core'; | 
					
						
							|  |  |  | import {JsonPipe} from '@angular/common'; | 
					
						
							| 
									
										
										
										
											2015-05-26 17:12:38 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | export function main() { | 
					
						
							| 
									
										
										
										
											2016-06-08 16:38:52 -07:00
										 |  |  |   describe('JsonPipe', () => { | 
					
						
							| 
									
										
										
										
											2015-05-26 17:12:38 -07:00
										 |  |  |     var regNewLine = '\n'; | 
					
						
							| 
									
										
										
										
											2016-06-17 10:57:32 -07:00
										 |  |  |     var inceptionObj: any; | 
					
						
							|  |  |  |     var inceptionObjString: string; | 
					
						
							|  |  |  |     var pipe: JsonPipe; | 
					
						
							| 
									
										
										
										
											2015-05-26 17:12:38 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |     function normalize(obj: string): string { return StringWrapper.replace(obj, regNewLine, ''); } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     beforeEach(() => { | 
					
						
							| 
									
										
										
										
											2015-06-12 07:50:45 -07:00
										 |  |  |       inceptionObj = {dream: {dream: {dream: 'Limbo'}}}; | 
					
						
							| 
									
										
										
										
											2016-06-08 16:38:52 -07:00
										 |  |  |       inceptionObjString = '{\n' + | 
					
						
							|  |  |  |           '  "dream": {\n' + | 
					
						
							|  |  |  |           '    "dream": {\n' + | 
					
						
							|  |  |  |           '      "dream": "Limbo"\n' + | 
					
						
							|  |  |  |           '    }\n' + | 
					
						
							|  |  |  |           '  }\n' + | 
					
						
							|  |  |  |           '}'; | 
					
						
							| 
									
										
										
										
											2015-05-26 17:12:38 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       pipe = new JsonPipe(); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-08 16:38:52 -07:00
										 |  |  |     describe('transform', () => { | 
					
						
							|  |  |  |       it('should return JSON-formatted string', | 
					
						
							| 
									
										
										
										
											2015-05-26 17:12:38 -07:00
										 |  |  |          () => { expect(pipe.transform(inceptionObj)).toEqual(inceptionObjString); }); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-08 16:38:52 -07:00
										 |  |  |       it('should return JSON-formatted string even when normalized', () => { | 
					
						
							| 
									
										
										
										
											2015-05-26 17:12:38 -07:00
										 |  |  |         var dream1 = normalize(pipe.transform(inceptionObj)); | 
					
						
							|  |  |  |         var dream2 = normalize(inceptionObjString); | 
					
						
							|  |  |  |         expect(dream1).toEqual(dream2); | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-08 16:38:52 -07:00
										 |  |  |       it('should return JSON-formatted string similar to Json.stringify', () => { | 
					
						
							| 
									
										
										
										
											2015-05-26 17:12:38 -07:00
										 |  |  |         var dream1 = normalize(pipe.transform(inceptionObj)); | 
					
						
							|  |  |  |         var dream2 = normalize(Json.stringify(inceptionObj)); | 
					
						
							|  |  |  |         expect(dream1).toEqual(dream2); | 
					
						
							|  |  |  |       }); | 
					
						
							| 
									
										
										
										
											2015-10-27 12:43:34 -07:00
										 |  |  |     }); | 
					
						
							| 
									
										
										
										
											2015-05-26 17:12:38 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-10-27 12:43:34 -07:00
										 |  |  |     describe('integration', () => { | 
					
						
							|  |  |  |       it('should work with mutable objects', | 
					
						
							| 
									
										
										
										
											2016-06-08 16:38:52 -07:00
										 |  |  |          inject( | 
					
						
							|  |  |  |              [TestComponentBuilder, AsyncTestCompleter], | 
					
						
							|  |  |  |              (tcb: TestComponentBuilder, async: AsyncTestCompleter) => { | 
					
						
							|  |  |  |                tcb.createAsync(TestComp).then((fixture) => { | 
					
						
							|  |  |  |                  let mutable: number[] = [1]; | 
					
						
							|  |  |  |                  fixture.debugElement.componentInstance.data = mutable; | 
					
						
							|  |  |  |                  fixture.detectChanges(); | 
					
						
							|  |  |  |                  expect(fixture.debugElement.nativeElement).toHaveText('[\n  1\n]'); | 
					
						
							| 
									
										
										
										
											2015-10-27 12:43:34 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-08 16:38:52 -07:00
										 |  |  |                  mutable.push(2); | 
					
						
							|  |  |  |                  fixture.detectChanges(); | 
					
						
							|  |  |  |                  expect(fixture.debugElement.nativeElement).toHaveText('[\n  1,\n  2\n]'); | 
					
						
							| 
									
										
										
										
											2015-10-27 12:43:34 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-08 16:38:52 -07:00
										 |  |  |                  async.done(); | 
					
						
							|  |  |  |                }); | 
					
						
							|  |  |  |              })); | 
					
						
							| 
									
										
										
										
											2015-05-26 17:12:38 -07:00
										 |  |  |     }); | 
					
						
							|  |  |  |   }); | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2015-10-27 12:43:34 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | @Component({selector: 'test-comp', template: '{{data | json}}', pipes: [JsonPipe]}) | 
					
						
							|  |  |  | class TestComp { | 
					
						
							|  |  |  |   data: any; | 
					
						
							|  |  |  | } |