1 | "use strict";
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
11 |
|
12 |
|
13 |
|
14 |
|
15 |
|
16 |
|
17 | var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
18 | var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
19 | if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
20 | else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
21 | return c > 3 && r && Object.defineProperty(target, key, r), r;
|
22 | };
|
23 | Object.defineProperty(exports, "__esModule", { value: true });
|
24 | const assert = require("assert");
|
25 | const inversify_1 = require("inversify");
|
26 | const tree_test_container_1 = require("./test/tree-test-container");
|
27 | const tree_1 = require("./tree");
|
28 | const tree_model_1 = require("./tree-model");
|
29 | const tree_label_provider_1 = require("./tree-label-provider");
|
30 | let ConsistencyTestTree = class ConsistencyTestTree extends tree_1.TreeImpl {
|
31 | constructor() {
|
32 | super(...arguments);
|
33 | this.resolveCounter = 0;
|
34 | }
|
35 | async resolveChildren(parent) {
|
36 | if (parent.id === 'expandable') {
|
37 | const step = async () => {
|
38 |
|
39 |
|
40 | if (this.root && this.root !== parent.parent) {
|
41 | this.resolveCounter++;
|
42 | return [];
|
43 | }
|
44 | else {
|
45 | await new Promise(resolve => setTimeout(resolve, 10));
|
46 | return step();
|
47 | }
|
48 | };
|
49 | return step();
|
50 | }
|
51 | return super.resolveChildren(parent);
|
52 | }
|
53 | };
|
54 | ConsistencyTestTree = __decorate([
|
55 | (0, inversify_1.injectable)()
|
56 | ], ConsistencyTestTree);
|
57 |
|
58 |
|
59 |
|
60 | function createConsistencyTestRoot(rootName) {
|
61 | const children = [];
|
62 | const root = {
|
63 | id: 'root',
|
64 | name: rootName,
|
65 | parent: undefined,
|
66 | children
|
67 | };
|
68 | const parent = {
|
69 | id: 'expandable',
|
70 | name: 'expandable',
|
71 | parent: root,
|
72 | expanded: true,
|
73 | children: []
|
74 | };
|
75 | children.push(parent);
|
76 | return root;
|
77 | }
|
78 | describe('Tree Consistency', () => {
|
79 | it('setting different tree roots should finish', async () => {
|
80 | const container = (0, tree_test_container_1.createTreeTestContainer)();
|
81 | container.bind(tree_label_provider_1.TreeLabelProvider).toSelf().inSingletonScope();
|
82 | const labelProvider = container.get(tree_label_provider_1.TreeLabelProvider);
|
83 | container.bind(ConsistencyTestTree).toSelf();
|
84 | container.rebind(tree_1.TreeImpl).toService(ConsistencyTestTree);
|
85 | const tree = container.get(ConsistencyTestTree);
|
86 | const model = container.get(tree_model_1.TreeModel);
|
87 | model.root = createConsistencyTestRoot('Foo');
|
88 | await new Promise(resolve => setTimeout(resolve, 50));
|
89 | model.root = createConsistencyTestRoot('Bar');
|
90 | await new Promise(resolve => setTimeout(resolve, 50));
|
91 | let resolveCounter = tree.resolveCounter;
|
92 | assert.deepStrictEqual(tree.resolveCounter, 1);
|
93 | for (let i = 0; i < 10; i++) {
|
94 | await new Promise(resolve => setTimeout(resolve, 50));
|
95 | if (resolveCounter === tree.resolveCounter) {
|
96 | assert.deepStrictEqual(tree.resolveCounter, 1);
|
97 | assert.deepStrictEqual(labelProvider.getName(model.root), 'Bar');
|
98 | return;
|
99 | }
|
100 | resolveCounter = tree.resolveCounter;
|
101 | }
|
102 | assert.ok(false, 'Resolving does not stop, attempts: ' + tree.resolveCounter);
|
103 | });
|
104 | });
|
105 |
|
\ | No newline at end of file |