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.
Files changed (45) hide show
  1. checksums.yaml +8 -8
  2. data/VERSION.yml +1 -1
  3. data/lib/frameworks/sproutcore/CHANGELOG.md +14 -0
  4. data/lib/frameworks/sproutcore/frameworks/core_foundation/controllers/array.js +9 -1
  5. data/lib/frameworks/sproutcore/frameworks/core_foundation/panes/pane_statechart.js +7 -0
  6. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/controllers/array/array_case.js +14 -0
  7. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/layout.js +103 -0
  8. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/layoutChildViews.js +4 -4
  9. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/layoutDidChange.js +4 -1
  10. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/viewDidResize.js +5 -5
  11. data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/layout.js +17 -6
  12. data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/statechart.js +62 -8
  13. data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view.js +14 -2
  14. data/lib/frameworks/sproutcore/frameworks/datastore/system/store.js +26 -5
  15. data/lib/frameworks/sproutcore/frameworks/datastore/tests/integration/many_array.js +9 -1
  16. data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/nested_records/data_store.js +6 -2
  17. data/lib/frameworks/sproutcore/frameworks/desktop/mixins/split_child.js +1 -1
  18. data/lib/frameworks/sproutcore/frameworks/desktop/panes/picker.js +0 -2
  19. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/list/render.js +56 -54
  20. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/scroll/methods.js +221 -171
  21. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/split/methods.js +261 -315
  22. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/split/split_child.js +137 -122
  23. data/lib/frameworks/sproutcore/frameworks/desktop/views/collection.js +1 -1
  24. data/lib/frameworks/sproutcore/frameworks/desktop/views/scroll.js +10 -7
  25. data/lib/frameworks/sproutcore/frameworks/desktop/views/split.js +5 -4
  26. data/lib/frameworks/sproutcore/frameworks/foundation/mixins/content_display.js +14 -14
  27. data/lib/frameworks/sproutcore/frameworks/foundation/mixins/content_value_support.js +123 -98
  28. data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/content_display.js +18 -6
  29. data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/inline_text_field/api.js +9 -11
  30. data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/container/transition_test.js +2 -2
  31. data/lib/frameworks/sproutcore/frameworks/foundation/views/container.js +15 -16
  32. data/lib/frameworks/sproutcore/frameworks/foundation/views/inline_text_field.js +11 -0
  33. data/lib/frameworks/sproutcore/frameworks/runtime/mixins/enumerable.js +1 -1
  34. data/lib/frameworks/sproutcore/frameworks/runtime/system/binding.js +3 -3
  35. data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/binding.js +170 -153
  36. data/lib/frameworks/sproutcore/frameworks/table/views/table.js +105 -101
  37. data/lib/frameworks/sproutcore/frameworks/table/views/table_head.js +0 -7
  38. data/lib/frameworks/sproutcore/frameworks/table/views/table_header.js +46 -56
  39. data/lib/frameworks/sproutcore/frameworks/table/views/table_row.js +0 -6
  40. data/lib/frameworks/sproutcore/frameworks/template_view/tests/views/template/collection.js +12 -4
  41. data/lib/frameworks/sproutcore/frameworks/template_view/views/bindable_span.js +3 -2
  42. data/lib/frameworks/sproutcore/frameworks/template_view/views/template_collection.js +11 -8
  43. data/lib/frameworks/sproutcore/tests/phantomjs_runner.phantomjs +0 -1
  44. metadata +3 -3
  45. data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/inline_text_field/beginEditing.js +0 -235
@@ -4,6 +4,7 @@
4
4
  // portions copyright ©2011 Apple Inc.
5
5
  // License: Licensed under MIT license (see license.js)
6
6
  // ==========================================================================
7
+ /*global equals, module, test */
7
8
 
8
9
  /*
9
10
  Tests SplitView methods; specifically, the API that users of SplitView use
@@ -23,344 +24,289 @@
23
24
 
24
25
  function setupTestSuite(layoutDirection) {
25
26
 
26
- var splitView, left, right, middleLeft, middleRight;
27
+ var splitView, left, right, middleLeft, middleRight;
27
28
 
28
- module("Old SC.SplitView",{
29
- setup: function() {
30
- SC.RunLoop.begin();
31
- pane = SC.MainPane.create({
32
- childViews: [ SC.SplitView.extend() ]
29
+ module(
30
+ "SplitView " +
31
+ (layoutDirection === SC.HORIZONTAL_LAYOUT ? "Horizontal" : "Vertical") +
32
+ " - Methods",
33
+ {
34
+ setup: function () {
35
+ SC.RunLoop.begin();
36
+ // we test with no split divider because we want to easily calculate layout.
37
+ splitView = SC.SplitView.create({
38
+ childViews: [
39
+ SC.View.create(SC.SplitChild, { canCollapse: YES, collapseAtSize: 50 }),
40
+ SC.View.create(SC.SplitChild, { canCollapse: YES, collapseAtSize: 50 })
41
+ ],
42
+
43
+ layout: { left: 0, top: 0, width: 500, height: 500 },
44
+
45
+ layoutDirection: layoutDirection,
46
+
47
+ splitDividerView: null
48
+ });
49
+
50
+ SC.RunLoop.end();
51
+
52
+ left = splitView.childViews[0];
53
+ right = splitView.childViews[1];
54
+ },
55
+
56
+ teardown: function () {
57
+
58
+ }
59
+ });
60
+
61
+ test("Initial positions are correct", function () {
62
+ equals(splitView.childViews.length, 2, "SplitView has 2 children");
63
+ equals(splitView.getPositionForChild(left), 0, "Left should always be at 0");
64
+ equals(splitView.getPositionForChild(right), 250, "Right should be at 1/2: 50");
65
+ });
66
+
67
+ test("Can adjust position for a child", function () {
68
+ var result = splitView.adjustPositionForChild(right, 100);
69
+ equals(result, 100, "Result of adjustPositionForChild(right, 100)");
70
+ equals(left.get('position'), 0, "Left position (should always be 0)");
71
+ equals(left.get('size'), 100, "Left size");
72
+ equals(right.get('position'), 100, "Right position");
73
+ equals(right.get('size'), 400, "Right size");
74
+ });
75
+
76
+
77
+ test("SplitView - Methods: Minimum and Maximum widths and heights", function () {
78
+ // first, test with the built-in minimum size
79
+ var result = splitView.adjustPositionForChild(right, 80);
80
+ equals(result, 100, "Result of adjustPositionForChild(right, 80)");
81
+ equals(left.get('position'), 0, "Left position (should always be 0)");
82
+ equals(left.get('size'), 100, "Left size");
83
+ equals(right.get('position'), 100, "Right position");
84
+ equals(right.get('size'), 400, "Right size");
85
+
86
+ // now, add a max and test that
87
+ left.set('maximumSize', 150);
88
+
89
+ result = splitView.adjustPositionForChild(right, 180);
90
+ equals(result, 150, "Result of adjustPositionForChild(right, 180) when left's max size = 150");
91
+ equals(left.get('position'), 0, "Left position (should always be 0)");
92
+ equals(left.get('size'), 150, "Left size");
93
+ equals(right.get('position'), 150, "Right position");
94
+ equals(right.get('size'), 350, "Right size");
95
+
96
+ // and now go back to middle
97
+ result = splitView.adjustPositionForChild(right, 130);
98
+ equals(result, 130, "Result of adjustPositionForChild(right, 130) when left's max size = 150");
99
+ equals(left.get('position'), 0, "Left position (should always be 0)");
100
+ equals(left.get('size'), 130, "Left size");
101
+ equals(right.get('position'), 130, "Right position");
102
+ equals(right.get('size'), 370, "Right size");
103
+ });
104
+
105
+ test("SplitView - Methods: Collapsing a child", function () {
106
+ var result = splitView.adjustPositionForChild(right, 40);
107
+
108
+ // first was collapsed, so position of seconds is now at 0.
109
+ equals(result, 0, "Result of adjustPositionForChild(right, 40)");
110
+ equals(left.get('position'), 0, "Left position (should always be 0)");
111
+ equals(left.get('size'), 0, "Left size after collapsing");
112
+ equals(right.get('position'), 0, "Right position");
113
+ equals(right.get('size'), 500, "Right size");
33
114
  });
34
- pane.append(); // make sure there is a layer...
35
- SC.RunLoop.end();
36
115
 
37
- splitView = pane.childViews[0];
38
- },
39
116
 
40
- teardown: function() {
41
- pane.remove();
42
- pane.destroy
43
- pane = splitView = null ;
117
+ module(
118
+ "SplitView 4-pane " +
119
+ (layoutDirection === SC.HORIZONTAL_LAYOUT ? "Horizontal" : "Vertical") +
120
+ " - Methods",
121
+ {
122
+ setup: function () {
123
+ SC.RunLoop.begin();
124
+ // we test with no split divider because we want to easily calculate layout.
125
+ splitView = SC.SplitView.create({
126
+ childViews: [
127
+ SC.View.create(SC.SplitChild, { canCollapse: YES, collapseAtSize: 50, autoResizeStyle: SC.RESIZE_MANUAL }),
128
+ SC.View.create(SC.SplitChild, { autoResizeStyle: SC.RESIZE_AUTOMATIC }),
129
+ SC.View.create(SC.SplitChild, { autoResizeStyle: SC.RESIZE_AUTOMATIC }),
130
+ SC.View.create(SC.SplitChild, { autoResizeStyle: SC.FIXED_SIZE, canCollapse: YES, collapseAtSize: 50 })
131
+ ],
132
+
133
+ layout: { left: 0, top: 0, width: 800, height: 800 },
134
+
135
+ layoutDirection: layoutDirection,
136
+
137
+ splitDividerView: null
138
+ });
139
+
140
+ SC.RunLoop.end();
141
+
142
+ left = splitView.childViews[0];
143
+ middleLeft = splitView.childViews[1];
144
+ middleRight = splitView.childViews[2];
145
+ right = splitView.childViews[3];
146
+ }
147
+ });
148
+
149
+ function confirmPositions() {
150
+ for (var i = 0; i < arguments.length; i++) {
151
+ equals(splitView.childViews[i].get('position'), arguments[i]);
152
+ }
44
153
  }
45
- });
46
-
47
- // These internal methods are no longer used.
48
- test("the views are collapsible", function() {
49
- equals(YES,splitView.canCollapseView(splitView.get('topLeftView')),'the top left view is collapsable');
50
- equals(YES,splitView.canCollapseView(splitView.get('bottomRightView')),'the bottom right view is collapsable');
51
- equals(YES,splitView.splitViewCanCollapse(splitView,splitView.get('topLeftView')),'should return true');
52
- splitView.set('canCollapseViews','NO');
53
- });
54
-
55
- test("the thickness of the views",function(){
56
- ok(splitView.thicknessForView(splitView.get('topLeftView')),'thickness of the topLeftView');
57
- ok(splitView.thicknessForView(splitView.get('bottomRightView')),'thickness of the bottomRightView');
58
- });
59
-
60
- test("Layout direction is Horizontal",function() {
61
- splitView.set('layoutDirection', SC.LAYOUT_HORIZONTAL) ;
62
- equals(splitView.getPath('thumbViewCursor.cursorStyle'),"ew-resize",'The Cursor is');
63
- });
64
-
65
- test("Layout direction is Vertical",function() {
66
- splitView.set('layoutDirection', SC.LAYOUT_VERTICAL) ;
67
- equals(splitView.getPath('thumbViewCursor.cursorStyle'),"ns-resize",'The Cursor is');
68
- });
69
-
70
- test("Cursor remains correct after drag", function() {
71
- splitView.set('layoutDirection', SC.LAYOUT_HORIZONTAL) ;
72
- equals(splitView.getPath('thumbViewCursor.cursorStyle'), "ew-resize", 'The Cursor is');
73
-
74
- // Trigger the action
75
- var elem = splitView.getPath('dividerView.layer');
76
- SC.Event.trigger(elem, 'mousedown');
77
- SC.Event.trigger(elem, 'mouseup');
78
-
79
- equals(splitView.getPath('thumbViewCursor.cursorStyle'), "ew-resize",'The Cursor is');
80
- });
81
-
82
-
83
- module(
84
- "SplitView " +
85
- (layoutDirection === SC.HORIZONTAL_LAYOUT ? "Horizontal" : "Vertical") +
86
- " - Methods",
87
- {
88
- setup: function() {
154
+
155
+ test("Initial positions are correct", function () {
156
+ // the left and right sides do not resize unless forced to; as such, they
157
+ // stay at 100.
158
+ confirmPositions(0, 100, 400, 700);
159
+ });
160
+
161
+ test("Repositioning handles indirectness", function () {
162
+ var result;
163
+
164
+ // moving within available space works
165
+ result = splitView.adjustPositionForChild(middleLeft, 200);
166
+ equals(result, 200, "Moved to target position successfully.");
167
+ confirmPositions(0, 200, 400, 700);
168
+
169
+ // indirect being turned off for the next view, moving past min size
170
+ // for middleLeft should still work because it is an immediate sibling
171
+ result = splitView.adjustPositionForChild(middleLeft, 400);
172
+ equals(result, 400, "Moved to 400");
173
+ confirmPositions(0, 400, 500, 700);
174
+
175
+ // moving so far as to move the fourth view, however, should not work (it is fixed size)
176
+ result = splitView.adjustPositionForChild(middleLeft, 700);
177
+ equals(result, 500, "Limited to 500 due to minimum sizes and because last cannot move.");
178
+ confirmPositions(0, 500, 600, 700);
179
+
180
+ // changing last from fixed should not allow it through if indirect is not allowed
181
+ right.set('autoResizeStyle', SC.RESIZE_AUTOMATIC);
182
+ right.set('allowsIndirectAdjustments', NO);
183
+
184
+ result = splitView.adjustPositionForChild(middleLeft, 700);
185
+ equals(result, 500, "Limited to 500 due to minimum sizes and because last cannot move.");
186
+ confirmPositions(0, 500, 600, 700);
187
+
188
+ // but it should work if indirect _is_ allowed (rightmost should collapse)
189
+ right.set('allowsIndirectAdjustments', YES);
190
+
191
+ result = splitView.adjustPositionForChild(middleLeft, 700);
192
+ equals(result, 600, "Limited to 600 due to minimum sizes and because last collapses.");
193
+ confirmPositions(0, 600, 700, 800);
194
+ });
195
+
196
+ test("Repositioning without compensation", function () {
197
+ // first, disable all compensation
198
+ left.set('compensatesForMovement', NO);
199
+ middleLeft.set('compensatesForMovement', NO);
200
+ middleRight.set('compensatesForMovement', NO);
201
+ right.set('compensatesForMovement', NO);
202
+
203
+ var result;
204
+
205
+ // repositioning middle-left should fail because rightmost can't move.
206
+ result = splitView.adjustPositionForChild(middleLeft, 800);
207
+ equals(result, 100, "Failed to move to target because compensation is off.");
208
+ confirmPositions(0, 100, 400, 700);
209
+
210
+ // turning compensation on for second-to-right makes _it_ move to max
211
+ middleRight.set('compensatesForMovement', YES);
212
+ result = splitView.adjustPositionForChild(middleLeft, 800);
213
+ equals(result, 300, "Moved to min width of middleRight");
214
+ confirmPositions(0, 300, 600, 700);
215
+ });
216
+
217
+ test("Resizing split view", function () {
89
218
  SC.RunLoop.begin();
90
- // we test with no split divider because we want to easily calculate layout.
91
- splitView = SC.SplitView.create({
92
- childViews: [
93
- SC.View.create(SC.SplitChild, { canCollapse: YES, collapseAtSize: 50 }),
94
- SC.View.create(SC.SplitChild, { canCollapse: YES, collapseAtSize: 50 })
95
- ],
219
+ // note: we test both horizontal and vertical
220
+ splitView.adjust('width', 1600);
221
+ splitView.adjust('height', 1600);
222
+ SC.RunLoop.end();
96
223
 
97
- layout: { left: 0, top: 0, width: 500, height: 500 },
224
+ // should have resized the auto resizable parts
225
+ confirmPositions(0, 100, 800, 1500);
98
226
 
99
- layoutDirection: layoutDirection,
227
+ // manually resize left part; we're going to test that, when it gets small enough,
228
+ // even the RESIZE_MANUAL will change sizes
229
+ splitView.adjustPositionForChild(middleLeft, 300);
100
230
 
101
- splitDividerView: null
102
- });
231
+ // so now, just to be clear, the positions should be:
232
+ confirmPositions(0, 300, 800, 1500);
103
233
 
234
+ // so, if we now resize to _really really tiny_
235
+ SC.RunLoop.begin();
236
+ splitView.adjust('width', 400);
237
+ splitView.adjust('height', 400);
104
238
  SC.RunLoop.end();
105
239
 
106
- left = splitView.childViews[0];
107
- right = splitView.childViews[1];
108
- },
240
+ // we should see that even the RESIZE_MANUAL has resized.
241
+ confirmPositions(0, 100, 200, 300);
109
242
 
110
- teardown: function() {
243
+ // and if we shrink further still...
244
+ SC.RunLoop.begin();
245
+ splitView.adjust('width', 300);
246
+ splitView.adjust('height', 300);
247
+ SC.RunLoop.end();
111
248
 
112
- }
113
- });
114
-
115
- test("Initial positions are correct", function() {
116
- equals(splitView.childViews.length, 2, "SplitView has 2 children");
117
- equals(splitView.getPositionForChild(left), 0, "Left should always be at 0");
118
- equals(splitView.getPositionForChild(right), 250, "Right should be at 1/2: 50");
119
- });
120
-
121
- test("Can adjust position for a child", function() {
122
- var result = splitView.adjustPositionForChild(right, 100);
123
- equals(result, 100, "Result of adjustPositionForChild(right, 100)");
124
- equals(left.get('position'), 0, "Left position (should always be 0)");
125
- equals(left.get('size'), 100, "Left size");
126
- equals(right.get('position'), 100, "Right position");
127
- equals(right.get('size'), 400, "Right size");
128
- });
129
-
130
-
131
- test("SplitView - Methods: Minimum and Maximum widths and heights", function() {
132
- // first, test with the built-in minimum size
133
- var result = splitView.adjustPositionForChild(right, 80);
134
- equals(result, 100, "Result of adjustPositionForChild(right, 80)");
135
- equals(left.get('position'), 0, "Left position (should always be 0)");
136
- equals(left.get('size'), 100, "Left size");
137
- equals(right.get('position'), 100, "Right position");
138
- equals(right.get('size'), 400, "Right size");
139
-
140
- // now, add a max and test that
141
- left.set('maximumSize', 150);
142
-
143
- result = splitView.adjustPositionForChild(right, 180);
144
- equals(result, 150, "Result of adjustPositionForChild(right, 180) when left's max size = 150");
145
- equals(left.get('position'), 0, "Left position (should always be 0)");
146
- equals(left.get('size'), 150, "Left size");
147
- equals(right.get('position'), 150, "Right position");
148
- equals(right.get('size'), 350, "Right size");
149
-
150
- // and now go back to middle
151
- result = splitView.adjustPositionForChild(right, 130);
152
- equals(result, 130, "Result of adjustPositionForChild(right, 130) when left's max size = 150");
153
- equals(left.get('position'), 0, "Left position (should always be 0)");
154
- equals(left.get('size'), 130, "Left size");
155
- equals(right.get('position'), 130, "Right position");
156
- equals(right.get('size'), 370, "Right size");
157
- });
158
-
159
- test("SplitView - Methods: Collapsing a child", function() {
160
- var result = splitView.adjustPositionForChild(right, 40);
161
-
162
- // first was collapsed, so position of seconds is now at 0.
163
- equals(result, 0, "Result of adjustPositionForChild(right, 40)");
164
- equals(left.get('position'), 0, "Left position (should always be 0)");
165
- equals(left.get('size'), 0, "Left size after collapsing");
166
- equals(right.get('position'), 0, "Right position");
167
- equals(right.get('size'), 500, "Right size");
168
- });
169
-
170
-
171
- module(
172
- "SplitView 4-pane " +
173
- (layoutDirection === SC.HORIZONTAL_LAYOUT ? "Horizontal" : "Vertical") +
174
- " - Methods",
175
- {
176
- setup: function() {
249
+ // there should be change, because the left side collapses.
250
+ confirmPositions(0, 0, 100, 200);
251
+
252
+ // and if we shrink further still...
177
253
  SC.RunLoop.begin();
178
- // we test with no split divider because we want to easily calculate layout.
179
- splitView = SC.SplitView.create({
180
- childViews: [
181
- SC.View.create(SC.SplitChild, { canCollapse: YES, collapseAtSize: 50, autoResizeStyle: SC.RESIZE_MANUAL }),
182
- SC.View.create(SC.SplitChild, { autoResizeStyle: SC.RESIZE_AUTOMATIC }),
183
- SC.View.create(SC.SplitChild, { autoResizeStyle: SC.RESIZE_AUTOMATIC }),
184
- SC.View.create(SC.SplitChild, { autoResizeStyle: SC.FIXED_SIZE, canCollapse: YES, collapseAtSize: 50 })
185
- ],
254
+ splitView.adjust('width', 200);
255
+ splitView.adjust('height', 200);
256
+ SC.RunLoop.end();
186
257
 
187
- layout: { left: 0, top: 0, width: 800, height: 800 },
258
+ // there should be no change
259
+ confirmPositions(0, 0, 100, 200);
188
260
 
189
- layoutDirection: layoutDirection,
261
+ // and if we shrink further still, way beyond the smallest it can get...
262
+ SC.RunLoop.begin();
263
+ splitView.adjust('width', 100);
264
+ splitView.adjust('height', 100);
265
+ SC.RunLoop.end();
266
+
267
+ // there should be no change
268
+ confirmPositions(0, 0, 100, 200);
269
+ });
190
270
 
191
- splitDividerView: null
192
- });
271
+ test("Fitting to fill disabled", function () {
272
+ splitView.set('shouldResizeChildrenToFit', NO);
193
273
 
274
+ // so, first thing: Resize, and ensure things are where they started.
275
+ SC.RunLoop.begin();
276
+ // note: we test both horizontal and vertical
277
+ splitView.adjust('width', 1600);
278
+ splitView.adjust('height', 1600);
194
279
  SC.RunLoop.end();
195
280
 
196
- left = splitView.childViews[0];
197
- middleLeft = splitView.childViews[1];
198
- middleRight = splitView.childViews[2];
199
- right = splitView.childViews[3];
200
- }
201
- });
281
+ confirmPositions(0, 100, 400, 700);
202
282
 
203
- function confirmPositions() {
204
- for (var i = 0; i < arguments.length; i++) {
205
- equals(splitView.childViews[i].get('position'), arguments[i]);
206
- }
207
- }
283
+ // now, move one, and see that compensation, etc. still works properly
284
+ splitView.adjustPositionForChild(middleLeft, 500);
285
+ confirmPositions(0, 500, 600, 700);
208
286
 
209
- test("Initial positions are correct", function() {
210
- // the left and right sides do not resize unless forced to; as such, they
211
- // stay at 100.
212
- confirmPositions(0, 100, 400, 700);
213
- });
214
-
215
- test("Repositioning handles indirectness", function() {
216
- var result;
217
-
218
- // moving within available space works
219
- result = splitView.adjustPositionForChild(middleLeft, 200);
220
- equals(result, 200, "Moved to target position successfully.");
221
- confirmPositions(0, 200, 400, 700);
222
-
223
- // indirect being turned off for the next view, moving past min size
224
- // for middleLeft should still work because it is an immediate sibling
225
- result = splitView.adjustPositionForChild(middleLeft, 400);
226
- equals(result, 400, "Moved to 400");
227
- confirmPositions(0, 400, 500, 700);
228
-
229
- // moving so far as to move the fourth view, however, should not work (it is fixed size)
230
- result = splitView.adjustPositionForChild(middleLeft, 700);
231
- equals(result, 500, "Limited to 500 due to minimum sizes and because last cannot move.");
232
- confirmPositions(0, 500, 600, 700);
233
-
234
- // changing last from fixed should not allow it through if indirect is not allowed
235
- right.set('autoResizeStyle', SC.RESIZE_AUTOMATIC);
236
- right.set('allowsIndirectAdjustments', NO);
237
-
238
- result = splitView.adjustPositionForChild(middleLeft, 700);
239
- equals(result, 500, "Limited to 500 due to minimum sizes and because last cannot move.");
240
- confirmPositions(0, 500, 600, 700);
241
-
242
- // but it should work if indirect _is_ allowed (rightmost should collapse)
243
- right.set('allowsIndirectAdjustments', YES);
244
-
245
- result = splitView.adjustPositionForChild(middleLeft, 700);
246
- equals(result, 600, "Limited to 600 due to minimum sizes and because last collapses.");
247
- confirmPositions(0, 600, 700, 800);
248
- });
249
-
250
- test("Repositioning without compensation", function() {
251
- // first, disable all compensation
252
- left.set('compensatesForMovement', NO);
253
- middleLeft.set('compensatesForMovement', NO);
254
- middleRight.set('compensatesForMovement', NO);
255
- right.set('compensatesForMovement', NO);
256
-
257
- var result;
258
-
259
- // repositioning middle-left should fail because rightmost can't move.
260
- result = splitView.adjustPositionForChild(middleLeft, 800);
261
- equals(result, 100, "Failed to move to target because compensation is off.");
262
- confirmPositions(0, 100, 400, 700);
263
-
264
- // turning compensation on for second-to-right makes _it_ move to max
265
- middleRight.set('compensatesForMovement', YES);
266
- result = splitView.adjustPositionForChild(middleLeft, 800);
267
- equals(result, 300, "Moved to min width of middleRight");
268
- confirmPositions(0, 300, 600, 700);
269
- });
270
-
271
- test("Resizing split view", function() {
272
- SC.RunLoop.begin();
273
- // note: we test both horizontal and vertical
274
- splitView.adjust('width', 1600);
275
- splitView.adjust('height', 1600);
276
- SC.RunLoop.end();
277
-
278
- // should have resized the auto resizable parts
279
- confirmPositions(0, 100, 800, 1500);
280
-
281
- // manually resize left part; we're going to test that, when it gets small enough,
282
- // even the RESIZE_MANUAL will change sizes
283
- splitView.adjustPositionForChild(middleLeft, 300);
284
-
285
- // so now, just to be clear, the positions should be:
286
- confirmPositions(0, 300, 800, 1500);
287
-
288
- // so, if we now resize to _really really tiny_
289
- SC.RunLoop.begin();
290
- splitView.adjust('width', 400);
291
- splitView.adjust('height', 400);
292
- SC.RunLoop.end();
293
-
294
- // we should see that even the RESIZE_MANUAL has resized.
295
- confirmPositions(0, 100, 200, 300);
296
-
297
- // and if we shrink further still...
298
- SC.RunLoop.begin();
299
- splitView.adjust('width', 300);
300
- splitView.adjust('height', 300);
301
- SC.RunLoop.end();
302
-
303
- // there should be change, because the left side collapses.
304
- confirmPositions(0, 0, 100, 200);
305
-
306
- // and if we shrink further still...
307
- SC.RunLoop.begin();
308
- splitView.adjust('width', 200);
309
- splitView.adjust('height', 200);
310
- SC.RunLoop.end();
311
-
312
- // there should be no change
313
- confirmPositions(0, 0, 100, 200);
314
-
315
- // and if we shrink further still, way beyond the smallest it can get...
316
- SC.RunLoop.begin();
317
- splitView.adjust('width', 100);
318
- splitView.adjust('height', 100);
319
- SC.RunLoop.end();
320
-
321
- // there should be no change
322
- confirmPositions(0, 0, 100, 200);
323
- });
324
-
325
- test("Fitting to fill disabled", function() {
326
- splitView.set('shouldResizeChildrenToFit', NO);
327
-
328
- // so, first thing: Resize, and ensure things are where they started.
329
- SC.RunLoop.begin();
330
- // note: we test both horizontal and vertical
331
- splitView.adjust('width', 1600);
332
- splitView.adjust('height', 1600);
333
- SC.RunLoop.end();
334
-
335
- confirmPositions(0, 100, 400, 700);
336
-
337
- // now, move one, and see that compensation, etc. still works properly
338
- splitView.adjustPositionForChild(middleLeft, 500);
339
- confirmPositions(0, 500, 600, 700);
340
-
341
- // move back, and make sure compensation still took effect
342
- splitView.adjustPositionForChild(middleLeft, 100);
343
- confirmPositions(0, 100, 600, 700);
344
-
345
- // disable compensation and move again
346
- middleLeft.set('compensatesForMovement', NO);
347
- middleRight.set('compensatesForMovement', NO);
348
- right.set('compensatesForMovement', NO);
349
-
350
- splitView.adjustPositionForChild(middleLeft, 500);
351
- confirmPositions(0, 500, 1000, 1100);
352
-
353
- // disable indirect for last item and check that movement cannot occur
354
- right.set('allowsIndirectAdjustments', NO);
355
-
356
- var result = splitView.adjustPositionForChild(middleLeft, 700);
357
- equals(result, 500, "Should not be able to move (last does not allow indirect adjustments)");
358
- confirmPositions(0, 500, 1000, 1100);
359
-
360
- result = splitView.adjustPositionForChild(middleLeft, 200);
361
- equals(result, 500, "Should not be able to move (last does not allow indirect adjustments)");
362
- confirmPositions(0, 500, 1000, 1100);
363
- });
287
+ // move back, and make sure compensation still took effect
288
+ splitView.adjustPositionForChild(middleLeft, 100);
289
+ confirmPositions(0, 100, 600, 700);
290
+
291
+ // disable compensation and move again
292
+ middleLeft.set('compensatesForMovement', NO);
293
+ middleRight.set('compensatesForMovement', NO);
294
+ right.set('compensatesForMovement', NO);
295
+
296
+ splitView.adjustPositionForChild(middleLeft, 500);
297
+ confirmPositions(0, 500, 1000, 1100);
298
+
299
+ // disable indirect for last item and check that movement cannot occur
300
+ right.set('allowsIndirectAdjustments', NO);
301
+
302
+ var result = splitView.adjustPositionForChild(middleLeft, 700);
303
+ equals(result, 500, "Should not be able to move (last does not allow indirect adjustments)");
304
+ confirmPositions(0, 500, 1000, 1100);
305
+
306
+ result = splitView.adjustPositionForChild(middleLeft, 200);
307
+ equals(result, 500, "Should not be able to move (last does not allow indirect adjustments)");
308
+ confirmPositions(0, 500, 1000, 1100);
309
+ });
364
310
 
365
311
  }
366
312