| 
									
										
										
										
											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
 | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-22 14:36:49 +02:00
										 |  |  | import {IterableChangeRecord, IterableChanges} from '@angular/core/src/change_detection/differs/iterable_differs'; | 
					
						
							| 
									
										
										
										
											2017-06-15 15:29:02 +02:00
										 |  |  | import {KeyValueChangeRecord, KeyValueChanges} from '@angular/core/src/change_detection/differs/keyvalue_differs'; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-01-09 13:49:16 -08:00
										 |  |  | import {looseIdentical} from '../../src/util/comparison'; | 
					
						
							|  |  |  | import {stringify} from '../../src/util/stringify'; | 
					
						
							| 
									
										
										
										
											2016-09-30 09:26:53 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-22 14:36:49 +02:00
										 |  |  | export function iterableDifferToString<V>(iterableChanges: IterableChanges<V>) { | 
					
						
							|  |  |  |   const collection: string[] = []; | 
					
						
							|  |  |  |   iterableChanges.forEachItem( | 
					
						
							|  |  |  |       (record: IterableChangeRecord<V>) => collection.push(icrAsString(record))); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   const previous: string[] = []; | 
					
						
							|  |  |  |   iterableChanges.forEachPreviousItem( | 
					
						
							|  |  |  |       (record: IterableChangeRecord<V>) => previous.push(icrAsString(record))); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   const additions: string[] = []; | 
					
						
							|  |  |  |   iterableChanges.forEachAddedItem( | 
					
						
							|  |  |  |       (record: IterableChangeRecord<V>) => additions.push(icrAsString(record))); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   const moves: string[] = []; | 
					
						
							|  |  |  |   iterableChanges.forEachMovedItem( | 
					
						
							|  |  |  |       (record: IterableChangeRecord<V>) => moves.push(icrAsString(record))); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   const removals: string[] = []; | 
					
						
							|  |  |  |   iterableChanges.forEachRemovedItem( | 
					
						
							|  |  |  |       (record: IterableChangeRecord<V>) => removals.push(icrAsString(record))); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   const identityChanges: string[] = []; | 
					
						
							|  |  |  |   iterableChanges.forEachIdentityChange( | 
					
						
							|  |  |  |       (record: IterableChangeRecord<V>) => identityChanges.push(icrAsString(record))); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return iterableChangesAsString( | 
					
						
							|  |  |  |       {collection, previous, additions, moves, removals, identityChanges}); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function icrAsString<V>(icr: IterableChangeRecord<V>): string { | 
					
						
							|  |  |  |   return icr.previousIndex === icr.currentIndex ? stringify(icr.item) : | 
					
						
							|  |  |  |                                                   stringify(icr.item) + '[' + | 
					
						
							|  |  |  |           stringify(icr.previousIndex) + '->' + stringify(icr.currentIndex) + ']'; | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2015-05-26 17:12:38 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-02-05 16:32:24 -08:00
										 |  |  | export function iterableChangesAsString( | 
					
						
							| 
									
										
										
										
											2016-07-30 19:18:14 -07:00
										 |  |  |     {collection = [] as any, previous = [] as any, additions = [] as any, moves = [] as any, | 
					
						
							|  |  |  |      removals = [] as any, identityChanges = [] as any}): string { | 
					
						
							| 
									
										
										
										
											2016-06-08 16:38:52 -07:00
										 |  |  |   return 'collection: ' + collection.join(', ') + '\n' + | 
					
						
							|  |  |  |       'previous: ' + previous.join(', ') + '\n' + | 
					
						
							|  |  |  |       'additions: ' + additions.join(', ') + '\n' + | 
					
						
							|  |  |  |       'moves: ' + moves.join(', ') + '\n' + | 
					
						
							|  |  |  |       'removals: ' + removals.join(', ') + '\n' + | 
					
						
							|  |  |  |       'identityChanges: ' + identityChanges.join(', ') + '\n'; | 
					
						
							| 
									
										
										
										
											2015-05-26 17:12:38 -07:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-15 15:29:02 +02:00
										 |  |  | function kvcrAsString(kvcr: KeyValueChangeRecord<string, any>) { | 
					
						
							|  |  |  |   return looseIdentical(kvcr.previousValue, kvcr.currentValue) ? | 
					
						
							|  |  |  |       stringify(kvcr.key) : | 
					
						
							|  |  |  |       (stringify(kvcr.key) + '[' + stringify(kvcr.previousValue) + '->' + | 
					
						
							|  |  |  |        stringify(kvcr.currentValue) + ']'); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | export function kvChangesAsString(kvChanges: KeyValueChanges<string, any>) { | 
					
						
							|  |  |  |   const map: string[] = []; | 
					
						
							|  |  |  |   const previous: string[] = []; | 
					
						
							|  |  |  |   const changes: string[] = []; | 
					
						
							|  |  |  |   const additions: string[] = []; | 
					
						
							|  |  |  |   const removals: string[] = []; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   kvChanges.forEachItem(r => map.push(kvcrAsString(r))); | 
					
						
							|  |  |  |   kvChanges.forEachPreviousItem(r => previous.push(kvcrAsString(r))); | 
					
						
							|  |  |  |   kvChanges.forEachChangedItem(r => changes.push(kvcrAsString(r))); | 
					
						
							|  |  |  |   kvChanges.forEachAddedItem(r => additions.push(kvcrAsString(r))); | 
					
						
							|  |  |  |   kvChanges.forEachRemovedItem(r => removals.push(kvcrAsString(r))); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return testChangesAsString({map, previous, additions, changes, removals}); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | export function testChangesAsString( | 
					
						
							| 
									
										
										
										
											2015-08-28 11:29:19 -07:00
										 |  |  |     {map, previous, additions, changes, removals}: | 
					
						
							|  |  |  |         {map?: any[], previous?: any[], additions?: any[], changes?: any[], removals?: any[]}): | 
					
						
							|  |  |  |     string { | 
					
						
							| 
									
										
										
										
											2016-09-30 09:26:53 -07:00
										 |  |  |   if (!map) map = []; | 
					
						
							|  |  |  |   if (!previous) previous = []; | 
					
						
							|  |  |  |   if (!additions) additions = []; | 
					
						
							|  |  |  |   if (!changes) changes = []; | 
					
						
							|  |  |  |   if (!removals) removals = []; | 
					
						
							| 
									
										
										
										
											2015-05-26 17:12:38 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-08 16:38:52 -07:00
										 |  |  |   return 'map: ' + map.join(', ') + '\n' + | 
					
						
							|  |  |  |       'previous: ' + previous.join(', ') + '\n' + | 
					
						
							|  |  |  |       'additions: ' + additions.join(', ') + '\n' + | 
					
						
							|  |  |  |       'changes: ' + changes.join(', ') + '\n' + | 
					
						
							|  |  |  |       'removals: ' + removals.join(', ') + '\n'; | 
					
						
							| 
									
										
										
										
											2015-05-26 17:12:38 -07:00
										 |  |  | } |