sproutcore 1.10.0.rc.2 → 1.10.0.rc.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +8 -8
- data/VERSION.yml +1 -1
- data/lib/frameworks/sproutcore/CHANGELOG.md +14 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/controllers/array.js +9 -1
- data/lib/frameworks/sproutcore/frameworks/core_foundation/panes/pane_statechart.js +7 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/controllers/array/array_case.js +14 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/layout.js +103 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/layoutChildViews.js +4 -4
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/layoutDidChange.js +4 -1
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/viewDidResize.js +5 -5
- data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/layout.js +17 -6
- data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/statechart.js +62 -8
- data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view.js +14 -2
- data/lib/frameworks/sproutcore/frameworks/datastore/system/store.js +26 -5
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/integration/many_array.js +9 -1
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/nested_records/data_store.js +6 -2
- data/lib/frameworks/sproutcore/frameworks/desktop/mixins/split_child.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/desktop/panes/picker.js +0 -2
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/list/render.js +56 -54
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/scroll/methods.js +221 -171
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/split/methods.js +261 -315
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/split/split_child.js +137 -122
- data/lib/frameworks/sproutcore/frameworks/desktop/views/collection.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/desktop/views/scroll.js +10 -7
- data/lib/frameworks/sproutcore/frameworks/desktop/views/split.js +5 -4
- data/lib/frameworks/sproutcore/frameworks/foundation/mixins/content_display.js +14 -14
- data/lib/frameworks/sproutcore/frameworks/foundation/mixins/content_value_support.js +123 -98
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/content_display.js +18 -6
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/inline_text_field/api.js +9 -11
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/container/transition_test.js +2 -2
- data/lib/frameworks/sproutcore/frameworks/foundation/views/container.js +15 -16
- data/lib/frameworks/sproutcore/frameworks/foundation/views/inline_text_field.js +11 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/mixins/enumerable.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/runtime/system/binding.js +3 -3
- data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/binding.js +170 -153
- data/lib/frameworks/sproutcore/frameworks/table/views/table.js +105 -101
- data/lib/frameworks/sproutcore/frameworks/table/views/table_head.js +0 -7
- data/lib/frameworks/sproutcore/frameworks/table/views/table_header.js +46 -56
- data/lib/frameworks/sproutcore/frameworks/table/views/table_row.js +0 -6
- data/lib/frameworks/sproutcore/frameworks/template_view/tests/views/template/collection.js +12 -4
- data/lib/frameworks/sproutcore/frameworks/template_view/views/bindable_span.js +3 -2
- data/lib/frameworks/sproutcore/frameworks/template_view/views/template_collection.js +11 -8
- data/lib/frameworks/sproutcore/tests/phantomjs_runner.phantomjs +0 -1
- metadata +3 -3
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/inline_text_field/beginEditing.js +0 -235
@@ -7,19 +7,19 @@
|
|
7
7
|
// ========================================================================
|
8
8
|
// SC.Binding Tests
|
9
9
|
// ========================================================================
|
10
|
-
/*globals module test ok isObj equals expects */
|
10
|
+
/*globals module, test, ok, isObj, equals, expects */
|
11
11
|
|
12
|
-
var fromObject, toObject, binding, Bon1, bon2
|
12
|
+
var fromObject, midObject, toObject, binding, Bon1, bon2, first, second, third, binding1, binding2;
|
13
13
|
|
14
14
|
module("basic object binding", {
|
15
15
|
|
16
16
|
setup: function () {
|
17
|
-
fromObject = SC.Object.create({ value: 'start' })
|
17
|
+
fromObject = SC.Object.create({ value: 'start' });
|
18
18
|
midObject = SC.Object.create({ value: 'middle' });
|
19
|
-
toObject = SC.Object.create({ value: 'end' })
|
20
|
-
binding1 = SC.Binding.from("value", fromObject).to("value", midObject).connect()
|
19
|
+
toObject = SC.Object.create({ value: 'end' });
|
20
|
+
binding1 = SC.Binding.from("value", fromObject).to("value", midObject).connect();
|
21
21
|
binding2 = SC.Binding.from("value", midObject).to("value", toObject).connect();
|
22
|
-
SC.Binding.flushPendingChanges()
|
22
|
+
SC.Binding.flushPendingChanges(); // actually sets up up the connection
|
23
23
|
},
|
24
24
|
|
25
25
|
teardown: function () {
|
@@ -30,56 +30,56 @@ module("basic object binding", {
|
|
30
30
|
}
|
31
31
|
});
|
32
32
|
|
33
|
-
test("binding is connected", function() {
|
34
|
-
equals(binding1.isConnected, YES, "binding1.isConnected")
|
35
|
-
equals(binding2.isConnected, YES, "binding2.isConnected")
|
33
|
+
test("binding is connected", function () {
|
34
|
+
equals(binding1.isConnected, YES, "binding1.isConnected");
|
35
|
+
equals(binding2.isConnected, YES, "binding2.isConnected");
|
36
36
|
});
|
37
37
|
|
38
|
-
test("binding has actually been setup", function() {
|
39
|
-
equals(binding1._connectionPending, NO, "binding1._connectionPending")
|
40
|
-
equals(binding2._connectionPending, NO, "binding2._connectionPending")
|
38
|
+
test("binding has actually been setup", function () {
|
39
|
+
equals(binding1._connectionPending, NO, "binding1._connectionPending");
|
40
|
+
equals(binding2._connectionPending, NO, "binding2._connectionPending");
|
41
41
|
});
|
42
42
|
|
43
|
-
test("binding should have synced on connect", function() {
|
43
|
+
test("binding should have synced on connect", function () {
|
44
44
|
equals(toObject.get("value"), "start", "toObject.value should match fromObject.value");
|
45
45
|
equals(midObject.get("value"), "start", "midObject.value should match fromObject.value");
|
46
46
|
});
|
47
47
|
|
48
|
-
test("changing fromObject should mark binding as dirty", function() {
|
49
|
-
fromObject.set("value", "change")
|
48
|
+
test("changing fromObject should mark binding as dirty", function () {
|
49
|
+
fromObject.set("value", "change");
|
50
50
|
ok(SC.Binding._changeQueue.contains(binding1), "the binding should be in the _changeQueue");
|
51
|
-
SC.Binding.flushPendingChanges()
|
51
|
+
SC.Binding.flushPendingChanges();
|
52
52
|
ok(SC.Binding._changeQueue.contains(binding2), "the binding should be in the _changeQueue");
|
53
53
|
});
|
54
54
|
|
55
|
-
test("fromObject change should propogate to toObject only after flush", function() {
|
56
|
-
fromObject.set("value", "change")
|
57
|
-
equals(midObject.get("value"), "start")
|
58
|
-
equals(toObject.get("value"), "start")
|
59
|
-
SC.Binding.flushPendingChanges()
|
60
|
-
equals(midObject.get("value"), "change")
|
61
|
-
SC.Binding.flushPendingChanges()
|
62
|
-
equals(toObject.get("value"), "change")
|
55
|
+
test("fromObject change should propogate to toObject only after flush", function () {
|
56
|
+
fromObject.set("value", "change");
|
57
|
+
equals(midObject.get("value"), "start");
|
58
|
+
equals(toObject.get("value"), "start");
|
59
|
+
SC.Binding.flushPendingChanges();
|
60
|
+
equals(midObject.get("value"), "change");
|
61
|
+
SC.Binding.flushPendingChanges();
|
62
|
+
equals(toObject.get("value"), "change");
|
63
63
|
});
|
64
64
|
|
65
|
-
test("changing toObject should mark binding as dirty", function() {
|
66
|
-
toObject.set("value", "change")
|
65
|
+
test("changing toObject should mark binding as dirty", function () {
|
66
|
+
toObject.set("value", "change");
|
67
67
|
ok(SC.Binding._changeQueue.contains(binding2), "the binding should be in the _changeQueue");
|
68
|
-
SC.Binding.flushPendingChanges()
|
68
|
+
SC.Binding.flushPendingChanges();
|
69
69
|
ok(SC.Binding._changeQueue.contains(binding1), "the binding should be in the _changeQueue");
|
70
70
|
});
|
71
71
|
|
72
|
-
test("toObject change should propogate to fromObject only after flush", function() {
|
73
|
-
toObject.set("value", "change")
|
74
|
-
equals(midObject.get("value"), "start")
|
75
|
-
equals(fromObject.get("value"), "start")
|
76
|
-
SC.Binding.flushPendingChanges()
|
77
|
-
equals(midObject.get("value"), "change")
|
78
|
-
SC.Binding.flushPendingChanges()
|
79
|
-
equals(fromObject.get("value"), "change")
|
72
|
+
test("toObject change should propogate to fromObject only after flush", function () {
|
73
|
+
toObject.set("value", "change");
|
74
|
+
equals(midObject.get("value"), "start");
|
75
|
+
equals(fromObject.get("value"), "start");
|
76
|
+
SC.Binding.flushPendingChanges();
|
77
|
+
equals(midObject.get("value"), "change");
|
78
|
+
SC.Binding.flushPendingChanges();
|
79
|
+
equals(fromObject.get("value"), "change");
|
80
80
|
});
|
81
81
|
|
82
|
-
test("suspended observing during bindings", function() {
|
82
|
+
test("suspended observing during bindings", function () {
|
83
83
|
|
84
84
|
// setup special binding
|
85
85
|
fromObject = SC.Object.create({
|
@@ -93,7 +93,7 @@ test("suspended observing during bindings", function() {
|
|
93
93
|
|
94
94
|
callCount: 0,
|
95
95
|
|
96
|
-
observer: function() {
|
96
|
+
observer: function () {
|
97
97
|
equals(this.get('value1'), 'CHANGED', 'value1 when observer fires');
|
98
98
|
equals(this.get('value2'), 'CHANGED', 'value2 when observer fires');
|
99
99
|
this.callCount++;
|
@@ -111,12 +111,12 @@ test("suspended observing during bindings", function() {
|
|
111
111
|
equals(toObject.callCount, 2, 'should call observer twice');
|
112
112
|
});
|
113
113
|
|
114
|
-
test("binding will disconnect", function() {
|
114
|
+
test("binding will disconnect", function () {
|
115
115
|
binding1.disconnect();
|
116
116
|
equals(binding1.isConnected, NO, "binding1.isConnected");
|
117
117
|
});
|
118
118
|
|
119
|
-
test("binding disconnection actually works", function() {
|
119
|
+
test("binding disconnection actually works", function () {
|
120
120
|
binding1.disconnect();
|
121
121
|
fromObject.set('value', 'change');
|
122
122
|
SC.Binding.flushPendingChanges();
|
@@ -131,15 +131,15 @@ test("binding disconnection actually works", function() {
|
|
131
131
|
equals(toObject.get('value'), 'change');
|
132
132
|
});
|
133
133
|
|
134
|
-
test("binding destruction actually works", function() {
|
135
|
-
binding1.destroy()
|
134
|
+
test("binding destruction actually works", function () {
|
135
|
+
binding1.destroy();
|
136
136
|
ok(binding1.isDestroyed, "binding marks itself as destroyed.");
|
137
137
|
ok(!binding1._fromTarget && !binding1._toTarget, "binding destruction removes binding targets.");
|
138
138
|
});
|
139
139
|
|
140
140
|
module("bindings on classes");
|
141
141
|
|
142
|
-
test("should connect when multiple instances of class are created", function() {
|
142
|
+
test("should connect when multiple instances of class are created", function () {
|
143
143
|
window.TestNamespace = {};
|
144
144
|
window.TestNamespace.stubController = SC.Object.create({
|
145
145
|
name: 'How to Be Happy'
|
@@ -152,14 +152,14 @@ test("should connect when multiple instances of class are created", function() {
|
|
152
152
|
|
153
153
|
var myFirstObj;
|
154
154
|
|
155
|
-
SC.run(function() { myFirstObj = myClass.create(); });
|
155
|
+
SC.run(function () { myFirstObj = myClass.create(); });
|
156
156
|
equals(myFirstObj.get('foo'), "How to Be Happy");
|
157
157
|
|
158
158
|
var mySecondObj;
|
159
|
-
SC.run(function() { mySecondObj = myClass.create() });
|
159
|
+
SC.run(function () { mySecondObj = myClass.create(); });
|
160
160
|
equals(mySecondObj.get('foo'), "How to Be Happy");
|
161
161
|
|
162
|
-
SC.run(function() { myFirstObj.destroy(); })
|
162
|
+
SC.run(function () { myFirstObj.destroy(); });
|
163
163
|
ok(myFirstObj.fooBinding.isDestroyed, "destroying an object destroys its class bindings.");
|
164
164
|
|
165
165
|
} finally {
|
@@ -168,146 +168,163 @@ test("should connect when multiple instances of class are created", function() {
|
|
168
168
|
});
|
169
169
|
|
170
170
|
module("one way binding", {
|
171
|
-
setup: function() {
|
172
|
-
fromObject = SC.Object.create({ value: 'start' })
|
173
|
-
toObject = SC.Object.create({ value: 'end' })
|
174
|
-
binding = SC.Binding.from("value", fromObject).to("value", toObject).oneWay().connect()
|
175
|
-
SC.Binding.flushPendingChanges()
|
171
|
+
setup: function () {
|
172
|
+
fromObject = SC.Object.create({ value: 'start' });
|
173
|
+
toObject = SC.Object.create({ value: 'end' });
|
174
|
+
binding = SC.Binding.from("value", fromObject).to("value", toObject).oneWay().connect();
|
175
|
+
SC.Binding.flushPendingChanges(); // actually sets up up the connection
|
176
176
|
}
|
177
177
|
|
178
178
|
});
|
179
179
|
|
180
|
-
test("changing fromObject should mark binding as dirty", function() {
|
181
|
-
fromObject.set("value", "change")
|
180
|
+
test("changing fromObject should mark binding as dirty", function () {
|
181
|
+
fromObject.set("value", "change");
|
182
182
|
ok(SC.Binding._changeQueue.contains(binding), "the binding should be in the _changeQueue");
|
183
183
|
});
|
184
184
|
|
185
|
-
test("fromObject change should propogate after flush", function() {
|
186
|
-
fromObject.set("value", "change")
|
187
|
-
equals(toObject.get("value"), "start")
|
188
|
-
SC.Binding.flushPendingChanges()
|
189
|
-
equals(toObject.get("value"), "change")
|
185
|
+
test("fromObject change should propogate after flush", function () {
|
186
|
+
fromObject.set("value", "change");
|
187
|
+
equals(toObject.get("value"), "start");
|
188
|
+
SC.Binding.flushPendingChanges();
|
189
|
+
equals(toObject.get("value"), "change");
|
190
190
|
});
|
191
191
|
|
192
|
-
test("changing toObject should not make binding dirty", function() {
|
193
|
-
toObject.set("value", "change")
|
192
|
+
test("changing toObject should not make binding dirty", function () {
|
193
|
+
toObject.set("value", "change");
|
194
194
|
ok(!SC.Binding._changeQueue.contains(binding), "the binding should not be in the _changeQueue");
|
195
195
|
});
|
196
196
|
|
197
|
-
test("toObject change should NOT propogate", function() {
|
198
|
-
toObject.set("value", "change")
|
199
|
-
equals(fromObject.get("value"), "start")
|
200
|
-
SC.Binding.flushPendingChanges()
|
201
|
-
equals(fromObject.get("value"), "start")
|
197
|
+
test("toObject change should NOT propogate", function () {
|
198
|
+
toObject.set("value", "change");
|
199
|
+
equals(fromObject.get("value"), "start");
|
200
|
+
SC.Binding.flushPendingChanges();
|
201
|
+
equals(fromObject.get("value"), "start");
|
202
202
|
});
|
203
203
|
|
204
|
-
var first, second, third, binding1, binding2 ; // global variables
|
205
|
-
|
206
204
|
module("chained binding", {
|
207
205
|
|
208
|
-
setup: function() {
|
209
|
-
first = SC.Object.create({ output: 'first' })
|
206
|
+
setup: function () {
|
207
|
+
first = SC.Object.create({ output: 'first' });
|
210
208
|
|
211
209
|
second = SC.Object.create({
|
212
210
|
input: 'second',
|
213
211
|
output: 'second',
|
214
212
|
|
215
|
-
inputDidChange: function() {
|
216
|
-
this.set("output", this.get("input"))
|
213
|
+
inputDidChange: function () {
|
214
|
+
this.set("output", this.get("input"));
|
217
215
|
}.observes("input")
|
218
|
-
})
|
216
|
+
});
|
219
217
|
|
220
|
-
third = SC.Object.create({ input: "third" })
|
218
|
+
third = SC.Object.create({ input: "third" });
|
221
219
|
|
222
|
-
binding1 = SC.Binding.from("output", first).to("input", second).connect()
|
223
|
-
binding2 = SC.Binding.from("output", second).to("input", third).connect()
|
224
|
-
SC.Binding.flushPendingChanges()
|
220
|
+
binding1 = SC.Binding.from("output", first).to("input", second).connect();
|
221
|
+
binding2 = SC.Binding.from("output", second).to("input", third).connect();
|
222
|
+
SC.Binding.flushPendingChanges(); // actually sets up up the connection
|
225
223
|
}
|
226
224
|
|
227
225
|
});
|
228
226
|
|
229
|
-
test("changing first output should propagate to third after flush", function() {
|
230
|
-
first.set("output", "change")
|
231
|
-
equals("change", first.get("output"), "first.output")
|
232
|
-
ok("change" !== third.get("input"), "third.input")
|
227
|
+
test("changing first output should propagate to third after flush", function () {
|
228
|
+
first.set("output", "change");
|
229
|
+
equals("change", first.get("output"), "first.output");
|
230
|
+
ok("change" !== third.get("input"), "third.input");
|
233
231
|
|
234
232
|
var didChange = YES;
|
235
|
-
while(didChange) didChange = SC.Binding.flushPendingChanges()
|
233
|
+
while (didChange) { didChange = SC.Binding.flushPendingChanges(); }
|
236
234
|
|
237
235
|
// bindings should not have bending changes
|
238
236
|
ok(!SC.Binding._changeQueue.contains(binding1), "the binding should not be in the _changeQueue");
|
239
237
|
ok(!SC.Binding._changeQueue.contains(binding2), "the binding should not be in the _changeQueue");
|
240
238
|
|
241
|
-
equals("change", first.get("output"), "first.output")
|
242
|
-
equals("change", second.get("input"), "second.input")
|
243
|
-
equals("change", second.get("output"), "second.output")
|
244
|
-
equals("change", third.get("input"), "third.input")
|
239
|
+
equals("change", first.get("output"), "first.output");
|
240
|
+
equals("change", second.get("input"), "second.input");
|
241
|
+
equals("change", second.get("output"), "second.output");
|
242
|
+
equals("change", third.get("input"), "third.input");
|
245
243
|
});
|
246
244
|
|
247
245
|
module("Custom Binding", {
|
248
246
|
|
249
|
-
setup: function() {
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
247
|
+
setup: function () {
|
248
|
+
Bon1 = SC.Object.extend({
|
249
|
+
value1: "hi",
|
250
|
+
value2: 83,
|
251
|
+
array1: []
|
252
|
+
});
|
255
253
|
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
254
|
+
bon2 = SC.Object.create({
|
255
|
+
val1: "hello",
|
256
|
+
val2: 25,
|
257
|
+
arr: [1, 2, 3, 4]
|
258
|
+
});
|
261
259
|
|
262
|
-
|
260
|
+
window.TestNamespace = {
|
263
261
|
bon2: bon2,
|
264
262
|
Bon1: Bon1
|
265
|
-
}
|
263
|
+
};
|
266
264
|
},
|
267
265
|
|
268
|
-
teardown: function() {
|
266
|
+
teardown: function () {
|
269
267
|
bon2.destroy();
|
270
268
|
}
|
271
269
|
});
|
272
270
|
|
273
|
-
test("Binding value1 such that it will receive only single values", function() {
|
274
|
-
|
275
|
-
|
276
|
-
|
277
|
-
|
278
|
-
|
279
|
-
|
280
|
-
|
281
|
-
|
282
|
-
|
283
|
-
|
284
|
-
|
285
|
-
|
286
|
-
});
|
287
|
-
|
288
|
-
test("Single binding using notEmpty function.", function() {
|
289
|
-
|
290
|
-
|
291
|
-
|
292
|
-
|
293
|
-
|
294
|
-
|
295
|
-
|
296
|
-
});
|
297
|
-
|
298
|
-
test("Binding with transforms, function to check the type of value", function() {
|
299
|
-
|
300
|
-
|
301
|
-
|
302
|
-
|
303
|
-
|
304
|
-
|
305
|
-
|
306
|
-
|
307
|
-
|
308
|
-
});
|
309
|
-
|
310
|
-
test("
|
271
|
+
test("Binding value1 such that it will receive only single values", function () {
|
272
|
+
var bon1 = Bon1.create({
|
273
|
+
value1Binding: SC.Binding.single("TestNamespace.bon2.val1"),
|
274
|
+
array1Binding: SC.Binding.single("TestNamespace.bon2.arr")
|
275
|
+
});
|
276
|
+
SC.Binding.flushPendingChanges();
|
277
|
+
var a = [23, 31, 12, 21];
|
278
|
+
bon2.set("arr", a);
|
279
|
+
bon2.set("val1", "changed");
|
280
|
+
SC.Binding.flushPendingChanges();
|
281
|
+
equals(bon2.get("val1"), bon1.get("value1"));
|
282
|
+
equals("@@MULT@@", bon1.get("array1"));
|
283
|
+
bon1.destroy();
|
284
|
+
});
|
285
|
+
|
286
|
+
test("Single binding using notEmpty function.", function () {
|
287
|
+
var bond = Bon1.create({
|
288
|
+
array1Binding: SC.Binding.single("TestNamespace.bon2.arr").notEmpty(null, '(EMPTY)')
|
289
|
+
});
|
290
|
+
SC.Binding.flushPendingChanges();
|
291
|
+
bon2.set("arr", []);
|
292
|
+
SC.Binding.flushPendingChanges();
|
293
|
+
equals("(EMPTY)", bond.get("array1"));
|
294
|
+
});
|
295
|
+
|
296
|
+
test("Binding with transforms, function to check the type of value", function () {
|
297
|
+
var jon = Bon1.create({
|
298
|
+
value1Binding: SC.Binding.transform(function (val1) {
|
299
|
+
return (SC.typeOf(val1) == SC.T_STRING) ? val1 : "";
|
300
|
+
}).from("TestNamespace.bon2.val1")
|
301
|
+
});
|
302
|
+
SC.Binding.flushPendingChanges();
|
303
|
+
bon2.set("val1", "changed");
|
304
|
+
SC.Binding.flushPendingChanges();
|
305
|
+
equals(jon.get("value1"), bon2.get("val1"));
|
306
|
+
});
|
307
|
+
|
308
|
+
test("Adding transform does not affect parent binding", function () {
|
309
|
+
var A,
|
310
|
+
a,
|
311
|
+
b;
|
312
|
+
|
313
|
+
A = SC.Object.extend({
|
314
|
+
isEnabledBindingDefault: SC.Binding.oneWay().bool()
|
315
|
+
});
|
316
|
+
|
317
|
+
b = SC.Object.create({
|
318
|
+
isEnabled: YES
|
319
|
+
});
|
320
|
+
|
321
|
+
a = A.create();
|
322
|
+
a.bind('isEnabled', b, 'isEnabled').not();
|
323
|
+
|
324
|
+
ok(A.prototype.isEnabledBindingDefault._transforms !== a.bindings[0]._transforms, "transforms array not shared with parent binding");
|
325
|
+
});
|
326
|
+
|
327
|
+
test("two bindings to the same value should sync in the order they are initialized", function () {
|
311
328
|
|
312
329
|
SC.LOG_BINDINGS = YES;
|
313
330
|
|
@@ -328,7 +345,7 @@ test("two bindings to the same value should sync in the order they are initializ
|
|
328
345
|
fooBinding: "*owner.foo"
|
329
346
|
}),
|
330
347
|
|
331
|
-
init: function() {
|
348
|
+
init: function () {
|
332
349
|
sc_super();
|
333
350
|
this.set('c', this.C.create({ owner: this }));
|
334
351
|
}
|
@@ -345,13 +362,13 @@ test("two bindings to the same value should sync in the order they are initializ
|
|
345
362
|
equals(b.get('foo'), "bar", 'a.foo should propogate up to b.foo');
|
346
363
|
equals(b.c.get('foo'), "bar", 'a.foo should propogate up to b.c.foo');
|
347
364
|
|
348
|
-
window.a = window.b = null
|
365
|
+
window.a = window.b = null;
|
349
366
|
|
350
367
|
});
|
351
368
|
|
352
369
|
module("AND binding", {
|
353
370
|
|
354
|
-
setup: function() {
|
371
|
+
setup: function () {
|
355
372
|
// temporarily set up two source objects in the SC namespace so we can
|
356
373
|
// use property paths to access them
|
357
374
|
SC.testControllerA = SC.Object.create({ value: NO });
|
@@ -363,14 +380,14 @@ module("AND binding", {
|
|
363
380
|
});
|
364
381
|
},
|
365
382
|
|
366
|
-
teardown: function() {
|
383
|
+
teardown: function () {
|
367
384
|
SC.testControllerA.destroy();
|
368
385
|
SC.testControllerB.destroy();
|
369
386
|
}
|
370
387
|
|
371
388
|
});
|
372
389
|
|
373
|
-
test("toObject.value should be YES if both sources are YES", function() {
|
390
|
+
test("toObject.value should be YES if both sources are YES", function () {
|
374
391
|
SC.RunLoop.begin();
|
375
392
|
SC.testControllerA.set('value', YES);
|
376
393
|
SC.testControllerB.set('value', YES);
|
@@ -380,7 +397,7 @@ test("toObject.value should be YES if both sources are YES", function() {
|
|
380
397
|
equals(toObject.get('value'), YES);
|
381
398
|
});
|
382
399
|
|
383
|
-
test("toObject.value should be NO if either source is NO", function() {
|
400
|
+
test("toObject.value should be NO if either source is NO", function () {
|
384
401
|
SC.RunLoop.begin();
|
385
402
|
SC.testControllerA.set('value', YES);
|
386
403
|
SC.testControllerB.set('value', NO);
|
@@ -408,7 +425,7 @@ test("toObject.value should be NO if either source is NO", function() {
|
|
408
425
|
|
409
426
|
module("OR binding", {
|
410
427
|
|
411
|
-
setup: function() {
|
428
|
+
setup: function () {
|
412
429
|
// temporarily set up two source objects in the SC namespace so we can
|
413
430
|
// use property paths to access them
|
414
431
|
SC.testControllerA = SC.Object.create({ value: NO });
|
@@ -420,14 +437,14 @@ module("OR binding", {
|
|
420
437
|
});
|
421
438
|
},
|
422
439
|
|
423
|
-
teardown: function() {
|
440
|
+
teardown: function () {
|
424
441
|
SC.testControllerA.destroy();
|
425
442
|
SC.testControllerB.destroy();
|
426
443
|
}
|
427
444
|
|
428
445
|
});
|
429
446
|
|
430
|
-
test("toObject.value should be first value if first value is truthy", function() {
|
447
|
+
test("toObject.value should be first value if first value is truthy", function () {
|
431
448
|
SC.RunLoop.begin();
|
432
449
|
SC.testControllerA.set('value', 'first value');
|
433
450
|
SC.testControllerB.set('value', 'second value');
|
@@ -437,7 +454,7 @@ test("toObject.value should be first value if first value is truthy", function()
|
|
437
454
|
equals(toObject.get('value'), 'first value');
|
438
455
|
});
|
439
456
|
|
440
|
-
test("toObject.value should be second value if first is falsy", function() {
|
457
|
+
test("toObject.value should be second value if first is falsy", function () {
|
441
458
|
SC.RunLoop.begin();
|
442
459
|
SC.testControllerA.set('value', NO);
|
443
460
|
SC.testControllerB.set('value', 'second value');
|
@@ -448,16 +465,16 @@ test("toObject.value should be second value if first is falsy", function() {
|
|
448
465
|
});
|
449
466
|
|
450
467
|
module("Binding with '[]'", {
|
451
|
-
setup: function() {
|
468
|
+
setup: function () {
|
452
469
|
fromObject = SC.Object.create({ value: [] });
|
453
470
|
toObject = SC.Object.create({ value: '' });
|
454
|
-
binding = SC.Binding.transform(function(v) {
|
471
|
+
binding = SC.Binding.transform(function (v) {
|
455
472
|
return v ? v.join(',') : '';
|
456
473
|
}).from("value.[]", fromObject).to("value", toObject).connect();
|
457
474
|
}
|
458
475
|
});
|
459
476
|
|
460
|
-
test("Binding refreshes after a couple of items have been pushed in the array", function() {
|
477
|
+
test("Binding refreshes after a couple of items have been pushed in the array", function () {
|
461
478
|
fromObject.get('value').pushObjects(['foo', 'bar']);
|
462
479
|
SC.Binding.flushPendingChanges();
|
463
480
|
equals(toObject.get('value'), 'foo,bar');
|
@@ -465,7 +482,7 @@ test("Binding refreshes after a couple of items have been pushed in the array",
|
|
465
482
|
|
466
483
|
|
467
484
|
module("propertyNameBinding with longhand", {
|
468
|
-
setup: function(){
|
485
|
+
setup: function () {
|
469
486
|
TestNamespace = {
|
470
487
|
fromObject: SC.Object.create({
|
471
488
|
value: "originalValue"
|
@@ -477,7 +494,7 @@ module("propertyNameBinding with longhand", {
|
|
477
494
|
})
|
478
495
|
};
|
479
496
|
},
|
480
|
-
teardown: function(){
|
497
|
+
teardown: function () {
|
481
498
|
TestNamespace.fromObject.destroy();
|
482
499
|
TestNamespace.toObject.destroy();
|
483
500
|
delete TestNamespace.fromObject;
|
@@ -485,7 +502,7 @@ module("propertyNameBinding with longhand", {
|
|
485
502
|
}
|
486
503
|
});
|
487
504
|
|
488
|
-
test("works with full path", function(){
|
505
|
+
test("works with full path", function () {
|
489
506
|
SC.RunLoop.begin();
|
490
507
|
TestNamespace.fromObject.set('value', "updatedValue");
|
491
508
|
SC.RunLoop.end();
|
@@ -499,7 +516,7 @@ test("works with full path", function(){
|
|
499
516
|
equals(TestNamespace.toObject.get('value'), "newerValue");
|
500
517
|
});
|
501
518
|
|
502
|
-
test("works with local path", function(){
|
519
|
+
test("works with local path", function () {
|
503
520
|
SC.RunLoop.begin();
|
504
521
|
TestNamespace.toObject.set('localValue', "updatedValue");
|
505
522
|
SC.RunLoop.end();
|