sproutcore 1.5.0.pre.4 → 1.5.0.pre.4.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (174) hide show
  1. data/CHANGELOG +6 -0
  2. data/VERSION.yml +1 -1
  3. data/lib/Buildfile +1 -1
  4. data/lib/buildtasks/build.rake +14 -6
  5. data/lib/buildtasks/manifest.rake +171 -72
  6. data/lib/frameworks/sproutcore/Buildfile +3 -5
  7. data/lib/frameworks/sproutcore/CHANGELOG.md +9 -0
  8. data/lib/frameworks/sproutcore/apps/test_controls/resources/main_page.js +2 -1
  9. data/lib/frameworks/sproutcore/apps/test_controls/resources/progress_page.js +7 -17
  10. data/lib/frameworks/sproutcore/frameworks/bootstrap/system/browser.js +7 -1
  11. data/lib/frameworks/sproutcore/frameworks/bootstrap/system/loader.js +14 -1
  12. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/browser.js +0 -2
  13. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/event.js +1 -1
  14. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/root_responder.js +14 -3
  15. data/lib/frameworks/sproutcore/frameworks/core_foundation/views/template/collection.js +1 -1
  16. data/lib/frameworks/sproutcore/frameworks/datastore/models/record.js +2 -2
  17. data/lib/frameworks/sproutcore/frameworks/datastore/models/record_attribute.js +6 -0
  18. data/lib/frameworks/sproutcore/frameworks/datastore/system/store.js +1 -1
  19. data/lib/frameworks/sproutcore/frameworks/desktop/mixins/scrollable.js +1 -1
  20. data/lib/frameworks/sproutcore/frameworks/desktop/panes/alert.js +49 -4
  21. data/lib/frameworks/sproutcore/frameworks/desktop/panes/menu.js +8 -0
  22. data/lib/frameworks/sproutcore/frameworks/desktop/panes/panel.js +46 -1
  23. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/button.js +32 -5
  24. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/checkbox.js +32 -6
  25. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/disclosure.js +31 -3
  26. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/progress.js +15 -3
  27. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/radio.js +28 -7
  28. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/segmented.js +1 -1
  29. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/slider.js +20 -1
  30. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/well.js +2 -4
  31. data/lib/frameworks/sproutcore/frameworks/desktop/tests/panes/alert/ui.js +40 -34
  32. data/lib/frameworks/sproutcore/frameworks/desktop/tests/panes/menu/ui.js +35 -0
  33. data/lib/frameworks/sproutcore/frameworks/desktop/tests/panes/panel/ui.js +43 -0
  34. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/button/ui.js +47 -0
  35. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/checkbox/methods.js +6 -16
  36. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/checkbox/ui.js +21 -0
  37. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/disclosure/ui.js +41 -1
  38. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/progress/ui.js +128 -0
  39. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/radio/ui.js +93 -3
  40. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/scroll/ui.js +13 -1
  41. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/scroller.js +28 -0
  42. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/segmented/methods.js +47 -0
  43. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/segmented/ui.js +51 -0
  44. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/toolbar/method.js +33 -0
  45. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/toolbar/ui.js +29 -0
  46. data/lib/frameworks/sproutcore/frameworks/desktop/views/checkbox.js +28 -0
  47. data/lib/frameworks/sproutcore/frameworks/desktop/views/disclosure.js +9 -1
  48. data/lib/frameworks/sproutcore/frameworks/desktop/views/list_item.js +148 -134
  49. data/lib/frameworks/sproutcore/frameworks/desktop/views/menu_item.js +18 -0
  50. data/lib/frameworks/sproutcore/frameworks/desktop/views/menu_scroll.js +30 -3
  51. data/lib/frameworks/sproutcore/frameworks/desktop/views/progress.js +9 -0
  52. data/lib/frameworks/sproutcore/frameworks/desktop/views/radio.js +52 -4
  53. data/lib/frameworks/sproutcore/frameworks/desktop/views/scroll.js +2 -1
  54. data/lib/frameworks/sproutcore/frameworks/desktop/views/scroller.js +36 -3
  55. data/lib/frameworks/sproutcore/frameworks/desktop/views/segmented.js +1 -1
  56. data/lib/frameworks/sproutcore/frameworks/desktop/views/slider.js +9 -1
  57. data/lib/frameworks/sproutcore/frameworks/desktop/views/split.js +15 -4
  58. data/lib/frameworks/sproutcore/frameworks/desktop/views/split_divider.js +1 -6
  59. data/lib/frameworks/sproutcore/frameworks/desktop/views/tab.js +4 -2
  60. data/lib/frameworks/sproutcore/frameworks/desktop/views/toolbar.js +7 -0
  61. data/lib/frameworks/sproutcore/frameworks/desktop/views/well.js +1 -2
  62. data/lib/frameworks/sproutcore/frameworks/forms/views/form.js +3 -1
  63. data/lib/frameworks/sproutcore/frameworks/foundation/english.lproj/bootstrap.rhtml +1 -1
  64. data/lib/frameworks/sproutcore/frameworks/foundation/mixins/auto_resize.js +0 -9
  65. data/lib/frameworks/sproutcore/frameworks/foundation/mixins/editable.js +1 -1
  66. data/lib/frameworks/sproutcore/frameworks/foundation/mixins/flowed_layout.js +2 -0
  67. data/lib/frameworks/sproutcore/frameworks/foundation/render_delegates/canvas_image.js +1 -1
  68. data/lib/frameworks/sproutcore/frameworks/foundation/render_delegates/label.js +25 -1
  69. data/lib/frameworks/sproutcore/frameworks/foundation/system/chance.js +64 -0
  70. data/lib/frameworks/sproutcore/frameworks/foundation/system/module.js +34 -27
  71. data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/editable/ui.js +42 -0
  72. data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/inline_text_field/ui.js +62 -0
  73. data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/image/ui.js +0 -8
  74. data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/label/ui.js +12 -0
  75. data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/text_field/ui.js +48 -1
  76. data/lib/frameworks/sproutcore/frameworks/foundation/views/field.js +19 -0
  77. data/lib/frameworks/sproutcore/frameworks/foundation/views/image.js +2 -0
  78. data/lib/frameworks/sproutcore/frameworks/foundation/views/label.js +11 -5
  79. data/lib/frameworks/sproutcore/frameworks/foundation/views/text_field.js +152 -74
  80. data/lib/frameworks/sproutcore/frameworks/runtime/private/observer_queue.js +12 -9
  81. data/lib/frameworks/sproutcore/frameworks/runtime/system/logger.js +1476 -176
  82. data/lib/frameworks/sproutcore/frameworks/runtime/system/run_loop.js +0 -2
  83. data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/logger.js +227 -32
  84. data/lib/frameworks/sproutcore/frameworks/statechart/system/state.js +11 -11
  85. data/lib/frameworks/sproutcore/frameworks/statechart/system/statechart.js +1 -1
  86. data/lib/frameworks/sproutcore/frameworks/testing/system/runner.js +10 -0
  87. data/lib/frameworks/sproutcore/lib/index.rhtml +30 -8
  88. data/lib/frameworks/sproutcore/themes/ace/resources/segmented/18px/segmented.css +4 -4
  89. data/lib/frameworks/sproutcore/themes/ace/resources/segmented/24px/segmented.css +4 -4
  90. data/lib/frameworks/sproutcore/themes/ace/resources/segmented/30px/segmented.css +4 -4
  91. data/lib/frameworks/sproutcore/themes/ace/resources/segmented/44px/segmented.css +4 -4
  92. data/lib/frameworks/sproutcore/themes/ace/resources/segmented/segmented.css +4 -0
  93. data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/slider.css +5 -1
  94. data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/slider.js +11 -3
  95. data/lib/frameworks/sproutcore/themes/ace/resources/well/well.css +7 -8
  96. data/lib/frameworks/sproutcore/themes/ace/resources/well/well.js +2 -4
  97. data/lib/gen/app/templates/apps/@target_name@/Buildfile +14 -0
  98. data/lib/gen/app/templates/apps/@target_name@/theme.js +27 -0
  99. data/lib/gen/html_app/templates/apps/@target_name@/resources/stylesheets/@target_name@.css +4 -0
  100. data/lib/gen/project/templates/@filename@/Buildfile +7 -2
  101. data/lib/gen/theme/templates/themes/@target_name@/Buildfile +3 -0
  102. data/lib/gen/theme/templates/themes/@target_name@/theme.js +23 -0
  103. data/lib/sproutcore/builders.rb +2 -0
  104. data/lib/sproutcore/builders/chance.rb +64 -0
  105. data/lib/sproutcore/builders/chance_file.rb +59 -0
  106. data/lib/sproutcore/builders/combine.rb +0 -45
  107. data/lib/sproutcore/builders/html.rb +1 -1
  108. data/lib/sproutcore/builders/minify.rb +5 -17
  109. data/lib/sproutcore/builders/module.rb +2 -2
  110. data/lib/sproutcore/builders/string_wrapper.rb +13 -15
  111. data/lib/sproutcore/helpers.rb +1 -1
  112. data/lib/sproutcore/helpers/minifier.rb +56 -0
  113. data/lib/sproutcore/helpers/static_helper.rb +86 -40
  114. data/lib/sproutcore/models/generator.rb +16 -0
  115. data/lib/sproutcore/models/manifest_entry.rb +8 -1
  116. data/lib/sproutcore/models/target.rb +101 -33
  117. data/lib/sproutcore/tools.rb +0 -7
  118. data/lib/sproutcore/tools/build.rb +2 -37
  119. data/spec/buildtasks/manifest/prepare_build_tasks/chance_spec.rb +100 -0
  120. data/spec/buildtasks/manifest/prepare_build_tasks/combine_spec.rb +86 -9
  121. data/spec/buildtasks/manifest/prepare_build_tasks/css_spec.rb +1 -1
  122. data/spec/buildtasks/manifest/prepare_build_tasks/minify_spec.rb +1 -1
  123. data/spec/buildtasks/manifest/prepare_build_tasks/module_info_spec.rb +96 -0
  124. data/spec/buildtasks/manifest/prepare_build_tasks/module_spec.rb +83 -0
  125. data/spec/buildtasks/manifest/prepare_build_tasks/packed_spec.rb +37 -4
  126. data/spec/buildtasks/manifest/spec_helper.rb +4 -0
  127. data/spec/fixtures/builder_tests/Buildfile +11 -9
  128. data/spec/fixtures/builder_tests/apps/chance_test/Buildfile +14 -0
  129. data/spec/fixtures/builder_tests/apps/chance_test/core.js +27 -0
  130. data/spec/fixtures/builder_tests/apps/chance_test/main.js +30 -0
  131. data/spec/fixtures/builder_tests/apps/chance_test/resources/demo.css +6 -0
  132. data/spec/fixtures/builder_tests/apps/chance_test/resources/last_file.css +7 -0
  133. data/spec/fixtures/builder_tests/apps/chance_test/resources/loading.rhtml +9 -0
  134. data/spec/fixtures/builder_tests/apps/chance_test/resources/main_page.js +24 -0
  135. data/spec/fixtures/builder_tests/apps/chance_test/resources/z_first_file.css +6 -0
  136. data/spec/fixtures/builder_tests/apps/chance_test/theme.js +27 -0
  137. data/spec/fixtures/builder_tests/apps/module_test/module.js +1 -0
  138. data/spec/fixtures/builder_tests/apps/module_test/modules/deferred_module/english.lproj/req_style_2.css +0 -0
  139. data/spec/fixtures/builder_tests/apps/module_test/modules/deferred_module/english.lproj/test.rhtml +1 -0
  140. data/spec/fixtures/builder_tests/apps/module_test/modules/deferred_module/javascript.js +1 -0
  141. data/spec/fixtures/builder_tests/apps/module_test/modules/deferred_module/lib/alt_layout.rhtml +0 -0
  142. data/spec/fixtures/builder_tests/apps/module_test/modules/deferred_module/req_js_2.js +0 -0
  143. data/spec/fixtures/builder_tests/apps/module_test/modules/dynamic_req_target_1/dynamic_req_js_1.js +0 -0
  144. data/spec/fixtures/builder_tests/apps/module_test/modules/dynamic_req_target_1/english.lproj/dynamic_req_style_1.css +0 -0
  145. data/spec/fixtures/builder_tests/apps/module_test/modules/inlined_module/README +0 -0
  146. data/spec/fixtures/builder_tests/apps/module_test/modules/required_target/english.lproj/req_style_1.css +0 -0
  147. data/spec/fixtures/builder_tests/apps/module_test/modules/required_target/english.lproj/strings.js +4 -0
  148. data/spec/fixtures/builder_tests/apps/module_test/modules/required_target/english.lproj/test.rhtml +1 -0
  149. data/spec/fixtures/builder_tests/apps/module_test/modules/required_target/req_js_1.js +0 -0
  150. data/spec/fixtures/helper_tests/apps/minifier_test/core.js +8 -0
  151. data/spec/fixtures/real_world/Buildfile +11 -1
  152. data/spec/fixtures/real_world/apps/account/modules/preferences/README +0 -0
  153. data/spec/fixtures/real_world/apps/calendar/modules/preferences/README +0 -0
  154. data/spec/fixtures/real_world/apps/contacts/modules/preferences/README +0 -0
  155. data/spec/fixtures/real_world/apps/contacts/modules/printing/README +0 -0
  156. data/spec/fixtures/real_world/apps/mail/modules/preferences/README +0 -0
  157. data/spec/fixtures/real_world/apps/mail/modules/printing/README +0 -0
  158. data/spec/fixtures/real_world/apps/photos/modules/email/README +0 -0
  159. data/spec/fixtures/real_world/apps/photos/modules/preferences/README +0 -0
  160. data/spec/lib/builders/chance_file_spec.rb +63 -0
  161. data/spec/lib/builders/chance_spec.rb +81 -0
  162. data/spec/lib/builders/module_spec.rb +133 -0
  163. data/spec/lib/helpers/minifier.rb +31 -0
  164. data/spec/lib/models/project/find_targets_for_spec.rb +1 -1
  165. data/vendor/chance/lib/chance/imagers/data_url.rb +68 -17
  166. data/vendor/chance/lib/chance/instance.rb +55 -30
  167. data/vendor/chance/lib/chance/parser.rb +1 -1
  168. data/vendor/chance/lib/chance/slicing.rb +39 -3
  169. metadata +52 -7
  170. data/lib/frameworks/sproutcore/frameworks/foundation/system/logger.js +0 -163
  171. data/lib/frameworks/sproutcore/frameworks/foundation/tests/system/logger.js +0 -44
  172. data/spec/buildtasks/manifest/prepare_build_tasks/bundle_spec.rb +0 -254
  173. data/spec/fixtures/builder_tests/apps/bundle_test/bundle.js +0 -1
  174. data/spec/lib/builders/bundle_spec.rb +0 -295
@@ -42,6 +42,22 @@ var pane = SC.ControlTestPane.design({height:24})
42
42
  .add("title,toolTip", SC.ButtonView, {
43
43
  title: "Hello World", toolTip: 'Hello World is my tool tip'
44
44
  })
45
+
46
+ .add("aria-role", SC.ButtonView, {
47
+ title: 'aria-role',
48
+ ariaRole: 'button'
49
+ })
50
+
51
+ .add("aria-pressed", SC.ButtonView, {
52
+ title: 'aria-pressed',
53
+ ariaRole: 'button'
54
+ })
55
+
56
+ .add("aria-haspopup",SC.PopupButtonView, {
57
+ title: 'aria-haspopup',
58
+ ariaRole: 'button',
59
+ menu: ['a','b']
60
+ });
45
61
  //
46
62
  // .add("autocontrolsize", SC.ButtonView, {
47
63
  // controlSize: SC.AUTO_CONTROL_SIZE,
@@ -67,6 +83,9 @@ test("Check that all button are visible", function() {
67
83
  ok(pane.view('title,icon,default').get('isVisibleInWindow'), 'title,icon,default.isVisibleInWindow should be YES');
68
84
  ok(pane.view('title,icon,selected').get('isVisibleInWindow'), 'title.icon,selected.isVisibleInWindow should be YES');
69
85
  ok(pane.view('title,toolTip').get('isVisibleInWindow'), 'title,toolTip.isVisibleInWindow should be YES');
86
+ ok(pane.view('aria-role').get('isVisibleInWindow'), 'aria-role.isVisibleInWindow should be YES');
87
+ ok(pane.view('aria-pressed').get('isVisibleInWindow'), 'aria-pressed.isVisibleInWindow should be YES');
88
+ ok(pane.view('aria-haspopup').get('isVisibleInWindow'), 'aria-haspopup.isVisibleInWindow should be YES');
70
89
  });
71
90
 
72
91
 
@@ -170,6 +189,34 @@ test("Check if title,toolTip has the tool tip set", function() {
170
189
  ok(viewElem.attr("title") == 'Hello World is my tool tip', 'title,toolTip has the expected tool tip set.');
171
190
  });
172
191
 
192
+ test("Check if aria role is set to button", function() {
193
+ var viewElem=pane.view('aria-role').$();
194
+ ok(viewElem.attr("role") == 'button', 'aria-role is set to button.');
195
+ });
196
+
197
+ test("Check if aria haspopup is set to button", function() {
198
+ var viewElem=pane.view('aria-haspopup').$();
199
+ ok(viewElem.attr("aria-haspopup") == 'true', 'aria-haspopup should be true.');
200
+ });
201
+
202
+ test("aria-pressed attribute to be false by default", function(){
203
+ var b = pane.view('aria-pressed').$();
204
+ equals(b.attr("aria-pressed") , "false", "should have false by default");
205
+ });
206
+
207
+ test("mouseDown and then mouseUp anywhere in the button should toggle the aria-pressed", function() {
208
+ var b = pane.view('aria-pressed');
209
+ var elem = b.get('layer');
210
+
211
+ SC.Event.trigger(elem, 'mousedown');
212
+ equals(b.$().attr('aria-pressed'), 'true', 'aria-pressed should be true when mousedown');
213
+
214
+ SC.Event.trigger(elem,'mouseup');
215
+ equals(b.$().attr('aria-pressed'), 'false', 'aria-pressed should be false when mouseup');
216
+
217
+ elem = null ;
218
+ });
219
+
173
220
  // test("Check if AUTO_CONTROL_SIZE button automatically calculated the correct controlSize", function() {
174
221
  // var viewElem=pane.view('autocontrolsize').$();
175
222
  // ok(viewElem.hasClass('sc-huge-size'), 'HUGE button has sc-huge-size class.');
@@ -98,17 +98,19 @@ test("isSelected should alter sel classname and sync with value property", funct
98
98
  test("mouseDown and then mouseUp anywhere in the checkbox should toggle the selection", function() {
99
99
 
100
100
  var elem = view.get('layer');
101
-
101
+
102
102
  SC.Event.trigger(elem, 'mousedown');
103
103
  ok(view.get('isActive'), 'view should be active');
104
104
  ok(view.get('value'), 'value should not change yet');
105
-
105
+ equals(view.$().attr('aria-checked'), 'true', 'aria-checked should be true');
106
+
106
107
  // simulate mouseUp and browser-native change to control
107
108
  SC.Event.trigger(elem,'mouseup');
108
-
109
+
109
110
  ok(!view.get('isActive'), 'view should no longer be active');
110
111
  ok(!view.get('value'), 'value should change to NO');
111
-
112
+ equals(view.$().attr('aria-checked'), 'false', 'aria-checked should be false');
113
+
112
114
  elem = null ;
113
115
  });
114
116
 
@@ -122,15 +124,3 @@ test("isEnabled=NO should add disabled attr to input", function() {
122
124
  view.mouseUp();
123
125
  ok(view.get('value'), 'value should not change when clicked');
124
126
  });
125
-
126
-
127
-
128
-
129
-
130
-
131
-
132
-
133
-
134
-
135
-
136
-
@@ -36,6 +36,16 @@ var pane = SC.ControlTestPane.design()
36
36
  useStaticLayout: YES,
37
37
  layout: { width: 'auto', right: 'auto' },
38
38
  title: 'Different Length Title'
39
+ })
40
+
41
+ .add("role", SC.CheckboxView, {
42
+ value: YES, title: "role-checkbox"
43
+ })
44
+
45
+ .add("aria-label", SC.CheckboxView, {
46
+ value: NO, title: "aria-label",
47
+ ariaLabel:'TEXT BOX',
48
+ ariaLabeledBy: 'TEXT BOX1'
39
49
  });
40
50
 
41
51
  pane.show(); // add a test to show the test pane
@@ -92,4 +102,15 @@ test("disabled - selected", function() {
92
102
  var label = view.$('span.label');
93
103
  equals(label.text(), 'Hello World', 'should have label');
94
104
  });
105
+
106
+ test("role", function() {
107
+ var view = pane.view('role');
108
+ equals(view.$().attr('role'),'checkbox', 'should have role as checkbox');
109
+ });
110
+
111
+ test("aria-label", function() {
112
+ var view = pane.view('aria-label');
113
+ equals(view.$().attr('aria-label'),'TEXT BOX', 'should have ariaLabel as TEXT-BOX');
114
+ equals(view.$().attr('aria-labelledby'),'TEXT BOX1', 'should have ariaLabeledby as TEXT-BOX1');
115
+ });
95
116
  })();
@@ -20,7 +20,26 @@
20
20
  })
21
21
  .add("selected - disabled", SC.DisclosureView, {
22
22
  value: YES, isEnabled: NO
23
- });
23
+ })
24
+
25
+ .add("aria-role", SC.DisclosureView, {
26
+ value: NO, isEnabled: YES,
27
+ ariaLabel:'Disclosure'
28
+ })
29
+
30
+ .add("aria-label", SC.DisclosureView, {
31
+ value: YES, isEnabled: YES,
32
+ ariaLabel:'Disclosure'
33
+ })
34
+ .add("aria-expanded", SC.DisclosureView, {
35
+ value: YES, isEnabled: YES,
36
+ ariaLabel:'Disclosure'
37
+ })
38
+ .add("aria-expanded-disabled", SC.DisclosureView, {
39
+ value: NO, isEnabled: NO,
40
+ ariaLabel:'Disclosure'
41
+ });
42
+
24
43
  pane.show();
25
44
 
26
45
  module("TODO: Test SC.DisclosureView UI", pane.standardSetup());
@@ -61,4 +80,25 @@
61
80
  // ok(input.attr('disabled'), 'input should be disabled');
62
81
  });
63
82
 
83
+ test("aria role should be button for disclosure", function() {
84
+ var view = pane.view('aria-role');
85
+ equals(view.$().attr('role'), 'button', 'aria-role should be button');
86
+ });
87
+
88
+ test("aria label should be present", function() {
89
+ var view = pane.view('aria-label');
90
+ equals(view.$().attr('aria-label'), 'Disclosure', 'aria-label should be Disclosure');
91
+ });
92
+
93
+ test("aria pressed should be true if value is yes", function() {
94
+ var view = pane.view('aria-expanded');
95
+ equals(view.$().attr('aria-expanded'), 'true', 'aria-expanded should be true');
96
+ });
97
+
98
+ test("aria pressed should be false if value is no while the disclosure is disabled", function() {
99
+ var view = pane.view('aria-expanded-disabled');
100
+ equals(view.get('ariaLabel'), 'Disclosure', 'aria-label should be Disclosure even if it is disabled');
101
+ equals(view.$().attr('aria-expanded'), 'false', 'aria-expanded should be false');
102
+ });
103
+
64
104
  })();
@@ -42,6 +42,43 @@ var pane = SC.ControlTestPane.design()
42
42
  minimum: 0,
43
43
  maximum: 50
44
44
  })
45
+ .add("progress aria-role", SC.ProgressView, {
46
+ layout: {top:0, bottom:0, left:0, width: 250},
47
+ value: 10,
48
+ minimum: 0,
49
+ maximum: 50
50
+ })
51
+ .add("progress aria-valuemax", SC.ProgressView, {
52
+ layout: {top:0, bottom:0, left:0, width: 250},
53
+ value: 40,
54
+ minimum: 0,
55
+ maximum: 100
56
+ })
57
+ .add("progress aria-valuemin", SC.ProgressView, {
58
+ layout: {top:0, bottom:0, left:0, width: 250},
59
+ value: 20,
60
+ minimum: 0,
61
+ maximum: 100
62
+ })
63
+ .add("progress aria-valuenow", SC.ProgressView, {
64
+ layout: {top:0, bottom:0, left:0, width: 250},
65
+ value: 40,
66
+ minimum: 0,
67
+ maximum: 100
68
+ })
69
+ .add("progress aria-valuetext", SC.ProgressView, {
70
+ layout: {top:0, bottom:0, left:0, width: 250},
71
+ value: 20,
72
+ minimum: 0,
73
+ maximum: 100
74
+ })
75
+ .add("progress aria-disabled", SC.ProgressView, {
76
+ layout: {top:0, bottom:0, left:0, width: 250},
77
+ value: 50,
78
+ minimum: 0,
79
+ maximum: 100,
80
+ isEnabled: NO
81
+ })
45
82
 
46
83
  // Slider View UI
47
84
  .add("slider basic", SC.SliderView, {
@@ -69,6 +106,42 @@ var pane = SC.ControlTestPane.design()
69
106
  minimum: 0,
70
107
  maximum: 100,
71
108
  step: 20
109
+ })
110
+ .add("slider aria-role", SC.SliderView, {
111
+ layout: {top:0, bottom:0, left:0, width: 250},
112
+ value: 10,
113
+ minimum: 0,
114
+ maximum: 50
115
+ })
116
+ .add("slider aria-valuemax", SC.SliderView, {
117
+ layout: {top:0, bottom:0, left:0, width: 250},
118
+ value: 40,
119
+ minimum: 0,
120
+ maximum: 100
121
+ })
122
+ .add("slider aria-valuemin", SC.SliderView, {
123
+ layout: {top:0, bottom:0, left:0, width: 250},
124
+ value: 20,
125
+ minimum: 0,
126
+ maximum: 100
127
+ })
128
+ .add("slider aria-valuenow", SC.SliderView, {
129
+ layout: {top:0, bottom:0, left:0, width: 250},
130
+ value: 40,
131
+ minimum: 0,
132
+ maximum: 100
133
+ })
134
+ .add("slider aria-valuetext", SC.SliderView, {
135
+ layout: {top:0, bottom:0, left:0, width: 250},
136
+ value: 20,
137
+ minimum: 0,
138
+ maximum: 100
139
+ })
140
+ .add("slider aria-orientation", SC.SliderView, {
141
+ layout: {top:0, bottom:0, left:0, width: 250},
142
+ value: 50,
143
+ minimum: 0,
144
+ maximum: 100
72
145
  });
73
146
 
74
147
  pane.show(); // add a test to show the test pane
@@ -242,6 +315,31 @@ test("changing value to a string", function() {
242
315
  setTimeout(assertions, 200);
243
316
  });
244
317
 
318
+ test("Check if aria role is set to progress view", function() {
319
+ var viewElem = pane.view('progress aria-role').$();
320
+ ok(viewElem.attr('role') === 'progressbar', 'aria-role is set to the progress view');
321
+ });
322
+
323
+ test("Check if attribute aria-valuemax is set correctly", function() {
324
+ var viewElem = pane.view('progress aria-valuemax').$();
325
+ equals(viewElem.attr('aria-valuemax'), 100, 'aria-valuemax should be 100');
326
+ });
327
+
328
+ test("Check if attribute aria-valuemin is set correctly", function() {
329
+ var viewElem = pane.view('progress aria-valuemin').$();
330
+ equals(viewElem.attr('aria-valuemin'), 0, 'aria-valuemin should be 0');
331
+ });
332
+
333
+ test("Check if attribute aria-valuenow is set correctly", function() {
334
+ var viewElem = pane.view('progress aria-valuenow').$();
335
+ equals(viewElem.attr('aria-valuenow'), 0.4, 'aria-valuenow should be 0.4');
336
+ });
337
+
338
+ test("Check if attribute aria-valuetext is set correctly", function() {
339
+ var viewElem = pane.view('progress aria-valuetext').$();
340
+ equals(viewElem.attr('aria-valuetext'), 0.2, 'aria-valuetext should be 0.2');
341
+ });
342
+
245
343
 
246
344
  // ..........................................................
247
345
  // SC.SliderView
@@ -284,4 +382,34 @@ test("basic step 20", function() {
284
382
  ok(view.$('.sc-handle'), 'should have sc-handle class');
285
383
  equals(view.$('.sc-handle').css('left'), '60%', 'left of sc-handle should be 60%');
286
384
  });
385
+
386
+ test("Check if aria role is set to slider view", function() {
387
+ var viewElem = pane.view('slider aria-role').$();
388
+ ok(viewElem.attr('role') === 'slider', 'aria-role is set to the slider view');
389
+ });
390
+
391
+ test("Check if attribute aria-valuemax is set correctly", function() {
392
+ var viewElem = pane.view('slider aria-valuemax').$();
393
+ equals(viewElem.attr('aria-valuemax'), 100, 'aria-valuemax should be 100');
394
+ });
395
+
396
+ test("Check if attribute aria-valuemin is set correctly", function() {
397
+ var viewElem = pane.view('slider aria-valuemin').$();
398
+ equals(viewElem.attr('aria-valuemin'), 0, 'aria-valuemin should be 0');
399
+ });
400
+
401
+ test("Check if attribute aria-valuenow is set correctly", function() {
402
+ var viewElem = pane.view('slider aria-valuenow').$();
403
+ equals(viewElem.attr('aria-valuenow'), 40, 'aria-valuenow should be 40');
404
+ });
405
+
406
+ test("Check if attribute aria-valuetext is set correctly", function() {
407
+ var viewElem = pane.view('slider aria-valuetext').$();
408
+ equals(viewElem.attr('aria-valuetext'), 20, 'aria-valuetext should be 20');
409
+ });
410
+
411
+ test("Check if attribute aria-orientation is set correctly", function() {
412
+ var viewElem = pane.view('slider aria-orientation').$();
413
+ equals(viewElem.attr('aria-orientation'), "horizontal", 'aria-orientation should be horizontal');
414
+ });
287
415
  })();
@@ -9,8 +9,8 @@
9
9
 
10
10
  htmlbody('<style> .sc-static-layout { border: 1px red dotted; } </style>');
11
11
 
12
- var itemList = [{ title: "Red", value: "red", enabled: YES }, { title: "Green", value: "green" }, { title: "Blue", value: "blue" }],
13
- itemList2 = [{ title: "Cyan", value: "cyan", enabled: YES }, { title: "Magenta", value: "magenta" }, { title: "Yellow", value: "yellow" },{ title: "blacK", value: "black"}],
12
+ var itemList = [{ title: "Red", value: "red", enabled: YES,ariaLabeledBy: "color" }, { title: "Green", value: "green",ariaLabeledBy: "color" }, { title: "Blue", value: "blue",ariaLabeledBy: "color" }],
13
+ itemList2 = [{ title: "Cyan", value: "cyan", enabled: YES,ariaLabel: "itemList1" }, { title: "Magenta", value: "magenta",ariaLabel: "itemList1" }, { title: "Yellow", value: "yellow",ariaLabel: "itemList1" },{ title: "blacK", value: "black",ariaLabel: "itemList1" }],
14
14
  itemList3 = [{ title: "Red", value: "red", enabled: YES, width: 30 }, { title: "Green", value: "green", width: 50 }, { title: "Blue", value: "blue", width: 40 }];
15
15
 
16
16
  var pane = SC.ControlTestPane.design()
@@ -67,8 +67,45 @@ var pane = SC.ControlTestPane.design()
67
67
  itemTitleKey: 'title',
68
68
  itemValueKey: 'value',
69
69
  itemWidthKey: 'width'
70
- });
70
+ })
71
+
72
+ .add("aria-role-group", SC.RadioView, {
73
+ value: "",
74
+ isEnabled: YES,
75
+ items: itemList,
76
+ itemTitleKey: 'title',
77
+ itemValueKey: 'value',
78
+ layoutDirection: SC.LAYOUT_HORIZONTAL
79
+ })
80
+
81
+ .add("aria-role-radio", SC.RadioView, {
82
+ value: "",
83
+ isEnabled: YES,
84
+ items: itemList,
85
+ itemTitleKey: 'title',
86
+ itemValueKey: 'value',
87
+ layoutDirection: SC.LAYOUT_HORIZONTAL
88
+ })
71
89
 
90
+ .add("aria-label", SC.RadioView, {
91
+ value: "",
92
+ isEnabled: YES,
93
+ items: itemList2,
94
+ itemAriaLabelKey: 'ariaLabel',
95
+ itemTitleKey: 'title',
96
+ itemValueKey: 'value',
97
+ layoutDirection: SC.LAYOUT_HORIZONTAL
98
+ })
99
+
100
+ .add("aria-labeledBy", SC.RadioView, {
101
+ value: "",
102
+ isEnabled: YES,
103
+ items: itemList,
104
+ itemAriaLabeledByKey: 'ariaLabeledBy',
105
+ itemTitleKey: 'title',
106
+ itemValueKey: 'value',
107
+ layoutDirection: SC.LAYOUT_HORIZONTAL
108
+ });
72
109
  pane.show(); // add a test to show the test pane
73
110
 
74
111
  pane.verifyButtons = function verifyButtons(view, items) {
@@ -250,4 +287,57 @@ test("item widths", function() {
250
287
  equals(SC.$(elem).width(), widths[idx], 'radio button %@ should width specified by itemWidthKey'.fmt(idx, widths[idx]));
251
288
  idx++;
252
289
  });
290
+ });
291
+
292
+ test("aria-role-group", function() {
293
+ var radioButton = pane.view('aria-role-group');
294
+ equals(radioButton.$().attr('role'),'radiogroup', 'role should be radiogroup');
295
+ });
296
+
297
+ test("aria-role-radio", function() {
298
+ var radioButtons = pane.view('aria-role-radio').$('.sc-radio-button');
299
+
300
+ var i = 0;
301
+ radioButtons.forEach(function(radioInput) {
302
+ var theInput = SC.$(radioInput),
303
+ idx = parseInt(theInput.attr('index'),0),
304
+ buttonValue = theInput.attr('value');
305
+
306
+ equals(idx, i, 'radio button #%@ should have field value %@'.fmt(idx, i));
307
+ equals(theInput.attr('role'), 'radio', 'radio button #%@ should have role as radio'.fmt(idx));
308
+
309
+ i++;
310
+ });
311
+ });
312
+
313
+ test("aria-label", function() {
314
+ var radioButtons = pane.view('aria-label').$('.sc-radio-button');
315
+
316
+ var i = 0;
317
+ radioButtons.forEach(function(radioInput) {
318
+ var theInput = SC.$(radioInput),
319
+ idx = parseInt(theInput.attr('index'),0),
320
+ buttonValue = theInput.attr('value');
321
+
322
+ equals(idx, i, 'radio button #%@ should have field value %@'.fmt(idx, i));
323
+ equals(theInput.attr('aria-label'), 'itemList1', 'radio button #%@ should have aria-label as itemList1'.fmt(idx));
324
+
325
+ i++;
326
+ });
327
+ });
328
+
329
+ test("aria-labeledBy", function() {
330
+ var radioButtons = pane.view('aria-labeledBy').$('.sc-radio-button');
331
+
332
+ var i = 0;
333
+ radioButtons.forEach(function(radioInput) {
334
+ var theInput = SC.$(radioInput),
335
+ idx = parseInt(theInput.attr('index'),0),
336
+ buttonValue = theInput.attr('value');
337
+
338
+ equals(idx, i, 'radio button #%@ should have field value %@'.fmt(idx, i));
339
+ equals(theInput.attr('aria-labelledby'), 'color', 'radio button #%@ should have aria-labelledby as color'.fmt(idx));
340
+
341
+ i++;
342
+ });
253
343
  });