/
dependent-key-compat-test.js
129 lines (96 loc) · 2.9 KB
/
dependent-key-compat-test.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
import EmberObject, { computed, observer } from '@ember/object';
import { tracked } from '@ember/-internals/metal';
import { dependentKeyCompat } from '@ember/object/compat';
import { moduleFor, AbstractTestCase, runLoopSettled } from 'internal-test-helpers';
moduleFor(
'dependentKeyCompat',
class extends AbstractTestCase {
'@test it works with computed properties'(assert) {
class Person {
@tracked firstName = 'Tom';
@tracked lastName = 'Dale';
@dependentKeyCompat
get givenName() {
return this.firstName;
}
@computed('givenName', 'lastName')
get fullName() {
return `${this.givenName} ${this.lastName}`;
}
}
let tom = new Person();
assert.equal(tom.fullName, 'Tom Dale');
tom.firstName = 'Thomas';
assert.equal(tom.fullName, 'Thomas Dale');
}
'@test it works with classic classes'(assert) {
let Person = EmberObject.extend({
firstName: tracked({ value: 'Tom' }),
lastName: tracked({ value: 'Dale' }),
givenName: dependentKeyCompat({
get() {
return this.firstName;
},
}),
fullName: computed('givenName', 'lastName', function () {
return `${this.givenName} ${this.lastName}`;
}),
});
let tom = Person.create();
assert.equal(tom.fullName, 'Tom Dale');
tom.firstName = 'Thomas';
assert.equal(tom.fullName, 'Thomas Dale');
}
async '@test it works with async observers'(assert) {
let count = 0;
let Person = EmberObject.extend({
firstName: tracked({ value: 'Tom' }),
lastName: tracked({ value: 'Dale' }),
givenName: dependentKeyCompat({
get() {
return this.firstName;
},
}),
givenNameObserver: observer({
dependentKeys: ['givenName'],
fn() {
count++;
},
sync: false,
}),
});
let tom = Person.create();
assert.equal(count, 0);
// check the alias, and bootstrap it
assert.equal(tom.givenName, 'Tom', 'alias works');
tom.firstName = 'Thomas';
await runLoopSettled();
assert.equal(count, 1);
tom.destroy();
}
'@test it does not work with sync observers'(assert) {
let count = 0;
let Person = EmberObject.extend({
firstName: tracked({ value: 'Tom' }),
lastName: tracked({ value: 'Dale' }),
givenName: dependentKeyCompat({
get() {
return this.firstName;
},
}),
givenNameObserver: observer({
dependentKeys: ['givenName'],
fn() {
count++;
},
sync: true,
}),
});
let tom = Person.create();
assert.equal(count, 0);
tom.firstName = 'Thomas';
assert.equal(count, 0);
tom.destroy();
}
}
);