2016-06-23 12:47:54 -04:00
|
|
|
/**
|
|
|
|
* @license
|
2020-05-19 15:08:49 -04:00
|
|
|
* Copyright Google LLC All Rights Reserved.
|
2016-06-23 12:47:54 -04:00
|
|
|
*
|
|
|
|
* 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 08:36:49 -04:00
|
|
|
import {IterableChangeRecord, IterableChanges} from '@angular/core/src/change_detection/differs/iterable_differs';
|
2017-06-15 09:29:02 -04:00
|
|
|
import {KeyValueChangeRecord, KeyValueChanges} from '@angular/core/src/change_detection/differs/keyvalue_differs';
|
|
|
|
|
2019-01-09 16:49:16 -05:00
|
|
|
import {stringify} from '../../src/util/stringify';
|
2016-09-30 12:26:53 -04:00
|
|
|
|
2017-06-22 08:36:49 -04: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 20:12:38 -04:00
|
|
|
|
2020-04-13 19:40:21 -04:00
|
|
|
export function iterableChangesAsString({
|
|
|
|
collection = [] as any,
|
|
|
|
previous = [] as any,
|
|
|
|
additions = [] as any,
|
|
|
|
moves = [] as any,
|
|
|
|
removals = [] as any,
|
|
|
|
identityChanges = [] as any
|
|
|
|
}): string {
|
2016-06-08 19:38:52 -04: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 20:12:38 -04:00
|
|
|
}
|
|
|
|
|
2017-06-15 09:29:02 -04:00
|
|
|
function kvcrAsString(kvcr: KeyValueChangeRecord<string, any>) {
|
2020-05-18 14:08:23 -04:00
|
|
|
return Object.is(kvcr.previousValue, kvcr.currentValue) ?
|
2017-06-15 09:29:02 -04:00
|
|
|
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 14:29:19 -04:00
|
|
|
{map, previous, additions, changes, removals}:
|
|
|
|
{map?: any[], previous?: any[], additions?: any[], changes?: any[], removals?: any[]}):
|
|
|
|
string {
|
2016-09-30 12:26:53 -04:00
|
|
|
if (!map) map = [];
|
|
|
|
if (!previous) previous = [];
|
|
|
|
if (!additions) additions = [];
|
|
|
|
if (!changes) changes = [];
|
|
|
|
if (!removals) removals = [];
|
2015-05-26 20:12:38 -04:00
|
|
|
|
2016-06-08 19:38:52 -04: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 20:12:38 -04:00
|
|
|
}
|