In non-transformed mode the funcOrValue check was enough, but once transformed these all use the same function for getters, so we need to also check the name.
74 lines
2.7 KiB
TypeScript
74 lines
2.7 KiB
TypeScript
import {ddescribe, describe, it, iit, xit, expect, beforeEach, afterEach} from 'angular2/test_lib';
|
|
|
|
import {coalesce} from 'angular2/src/change_detection/coalesce';
|
|
import {RecordType, ProtoRecord} from 'angular2/src/change_detection/proto_record';
|
|
|
|
export function main() {
|
|
function r(funcOrValue, args, contextIndex, selfIndex, lastInBinding = false,
|
|
mode = RecordType.PROPERTY, name = "name") {
|
|
return new ProtoRecord(mode, name, funcOrValue, args, null, contextIndex, null, selfIndex, null,
|
|
null, lastInBinding, false);
|
|
}
|
|
|
|
describe("change detection - coalesce", () => {
|
|
it("should work with an empty list", () => { expect(coalesce([])).toEqual([]); });
|
|
|
|
it("should remove non-terminal duplicate records" +
|
|
" and update the context indices referencing them",
|
|
() => {
|
|
var rs = coalesce(
|
|
[r("user", [], 0, 1), r("first", [], 1, 2), r("user", [], 0, 3), r("last", [], 3, 4)]);
|
|
|
|
expect(rs).toEqual([r("user", [], 0, 1), r("first", [], 1, 2), r("last", [], 1, 3)]);
|
|
});
|
|
|
|
it("should update indices of other records", () => {
|
|
var rs = coalesce(
|
|
[r("dup", [], 0, 1), r("dup", [], 0, 2), r("user", [], 0, 3), r("first", [3], 3, 4)]);
|
|
|
|
expect(rs).toEqual([r("dup", [], 0, 1), r("user", [], 0, 2), r("first", [2], 2, 3)]);
|
|
});
|
|
|
|
it("should remove non-terminal duplicate records" +
|
|
" and update the args indices referencing them",
|
|
() => {
|
|
var rs = coalesce([
|
|
r("user1", [], 0, 1),
|
|
r("user2", [], 0, 2),
|
|
r("hi", [1], 0, 3),
|
|
r("hi", [1], 0, 4),
|
|
r("hi", [2], 0, 5)
|
|
]);
|
|
|
|
expect(rs).toEqual(
|
|
[r("user1", [], 0, 1), r("user2", [], 0, 2), r("hi", [1], 0, 3), r("hi", [2], 0, 4)]);
|
|
});
|
|
|
|
it("should replace duplicate terminal records with" + " self records", () => {
|
|
|
|
var rs = coalesce([r("user", [], 0, 1, true), r("user", [], 0, 2, true)]);
|
|
|
|
expect(rs[1]).toEqual(new ProtoRecord(RecordType.SELF, "self", null, [], null, 1, null, 2,
|
|
null, null, true, false));
|
|
});
|
|
|
|
it("should not coalesce directive lifecycle records", () => {
|
|
var rs = coalesce([
|
|
r("onCheck", [], 0, 1, true, RecordType.DIRECTIVE_LIFECYCLE),
|
|
r("onCheck", [], 0, 1, true, RecordType.DIRECTIVE_LIFECYCLE)
|
|
]);
|
|
|
|
expect(rs.length).toEqual(2);
|
|
});
|
|
|
|
it("should not coalesce protos with different names but same value", () => {
|
|
var nullFunc = () => {};
|
|
var rs = coalesce([
|
|
r(nullFunc, [], 0, 1, false, RecordType.PROPERTY, "foo"),
|
|
r(nullFunc, [], 0, 1, false, RecordType.PROPERTY, "bar"),
|
|
]);
|
|
expect(rs.length).toEqual(2);
|
|
});
|
|
});
|
|
}
|