1
// copied this from event-key-test.js to add tests for changing value by keyboard
2
Y.Node.prototype.key = function (keyCode, charCode, mods, type) {
3
var simulate = Y.Event.simulate,
5
config = Y.merge(mods || {});
8
if (type === 'keypress') {
9
config.charCode = config.keyCode = config.which = charCode || keyCode;
11
config.keyCode = config.which = keyCode;
13
simulate(el, type, config);
15
config.keyCode = config.which = keyCode;
16
simulate(el, 'keydown', config);
17
simulate(el, 'keyup', config);
19
config.charCode = config.keyCode = config.which = charCode || keyCode;
20
simulate(el, 'keypress', config);
23
// END copied this from event-key-test.js to add tests for changing value by keyboard
25
var suite = new Y.Test.Suite("Y.Slider");
27
suite.add( new Y.Test.Case({
31
Y.one("body").append('<div id="testbed"></div>');
34
tearDown: function () {
35
Y.one("#testbed").remove(true);
38
"test default construction": function () {
39
Y.Assert.isInstanceOf( Y.Slider, new Y.Slider() );
42
"test SliderBase construction": function () {
43
Y.Assert.isInstanceOf( Y.SliderBase, new Y.SliderBase() );
46
"test render(selector)": function () {
47
Y.one("#testbed").setContent(
48
"<div></div>" + // block element
49
'<div class="floated" style="float:left"></div>' + // float
50
"<p></p>" + // limited block element
51
"<span></span>"); // inline element
53
(new Y.Slider().render("#testbed > div"));
54
(new Y.Slider().render("#testbed > div.floated"));
55
(new Y.Slider().render("#testbed > p"));
56
(new Y.Slider().render("#testbed > span"));
58
var div = Y.one("#testbed > div"),
59
fl = Y.one("#testbed > div.floated"),
60
p = Y.one("#testbed > p"),
61
span = Y.one("#testbed > span");
63
Y.assert( (div.get("offsetHeight") > 0) );
64
Y.assert( (fl.get("offsetHeight") > 0) );
65
Y.assert( (p.get("offsetHeight") > 0) );
66
Y.assert( (span.get("offsetHeight") > 0) );
68
Y.assert( (fl.get("offsetWidth") > 0) );
69
Y.assert( (span.get("offsetWidth") > 0) );
71
Y.Assert.areEqual( 8, div.all("span,img").size() );
72
Y.Assert.areEqual( 8, fl.all("span,img").size() );
73
Y.Assert.areEqual( 8, p.all("span,img").size() );
74
Y.Assert.areEqual( 8, span.all("span,img").size() );
77
"test render( node )": function () {
78
Y.one("#testbed").setContent(
79
"<div></div>" + // block element
80
'<div class="floated" style="float:left"></div>' + // float
81
"<p></p>" + // limited block element
82
"<span></span>"); // inline element
84
var div = Y.one("#testbed > div"),
85
fl = Y.one("#testbed > div.floated"),
86
p = Y.one("#testbed > p"),
87
span = Y.one("#testbed > span");
89
(new Y.Slider().render(div));
90
(new Y.Slider().render(fl));
91
(new Y.Slider().render(p));
92
(new Y.Slider().render(span));
94
Y.assert( (div.get("offsetHeight") > 0) );
95
Y.assert( (fl.get("offsetHeight") > 0) );
96
Y.assert( (p.get("offsetHeight") > 0) );
97
Y.assert( (span.get("offsetHeight") > 0) );
99
Y.assert( (fl.get("offsetWidth") > 0) );
100
Y.assert( (span.get("offsetWidth") > 0) );
102
Y.Assert.areEqual( 8, div.all("span,img").size() );
103
Y.Assert.areEqual( 8, fl.all("span,img").size() );
104
Y.Assert.areEqual( 8, p.all("span,img").size() );
105
Y.Assert.areEqual( 8, span.all("span,img").size() );
108
"test render: selector attrib in constructor": function () {
109
Y.one("#testbed").setContent(
110
"<div></div>" + // block element
111
'<div class="floated" style="float:left"></div>' + // float
112
"<p></p>" + // limited block element
113
"<span></span>"); // inline element
115
(new Y.Slider({ render: "#testbed > div" }));
116
(new Y.Slider({ render: "#testbed > div.floated" }));
117
(new Y.Slider({ render: "#testbed > p" }));
118
(new Y.Slider({ render: "#testbed > span" }));
120
var div = Y.one("#testbed > div"),
121
fl = Y.one("#testbed > div.floated"),
122
p = Y.one("#testbed > p"),
123
span = Y.one("#testbed > span");
125
Y.assert( (div.get("offsetHeight") > 0) );
126
Y.assert( (fl.get("offsetHeight") > 0) );
127
Y.assert( (p.get("offsetHeight") > 0) );
128
Y.assert( (span.get("offsetHeight") > 0) );
130
Y.assert( (fl.get("offsetWidth") > 0) );
131
Y.assert( (span.get("offsetWidth") > 0) );
133
Y.Assert.areEqual( 8, div.all("span,img").size() );
134
Y.Assert.areEqual( 8, fl.all("span,img").size() );
135
Y.Assert.areEqual( 8, p.all("span,img").size() );
136
Y.Assert.areEqual( 8, span.all("span,img").size() );
139
"test render: node attrib in constructor": function () {
140
Y.one("#testbed").setContent(
141
"<div></div>" + // block element
142
'<div class="floated" style="float:left"></div>' + // float
143
"<p></p>" + // limited block element
144
"<span></span>"); // inline element
146
var div = Y.one("#testbed > div"),
147
fl = Y.one("#testbed > div.floated"),
148
p = Y.one("#testbed > p"),
149
span = Y.one("#testbed > span");
151
(new Y.Slider({ render: div }));
152
(new Y.Slider({ render: fl }));
153
(new Y.Slider({ render: p }));
154
(new Y.Slider({ render: span }));
156
Y.assert( (div.get("offsetHeight") > 0) );
157
Y.assert( (fl.get("offsetHeight") > 0) );
158
Y.assert( (p.get("offsetHeight") > 0) );
159
Y.assert( (span.get("offsetHeight") > 0) );
161
Y.assert( (fl.get("offsetWidth") > 0) );
162
Y.assert( (span.get("offsetWidth") > 0) );
164
Y.Assert.areEqual( 8, div.all("span,img").size() );
165
Y.Assert.areEqual( 8, fl.all("span,img").size() );
166
Y.Assert.areEqual( 8, p.all("span,img").size() );
167
Y.Assert.areEqual( 8, span.all("span,img").size() );
170
"test render off DOM": function () {
171
var container = Y.Node.create("<div></div>");
173
(new Y.Slider().render(container));
175
Y.Assert.areEqual( 8, container.all("span,img").size() );
178
"test destroy() before render": function () {
179
var slider = new Y.Slider();
183
Y.Assert.isTrue( slider.get("destroyed") );
186
"test destroy() after render off DOM": function () {
187
var container = Y.Node.create("<div></div>"),
188
slider = new Y.Slider();
190
slider.render( container );
194
Y.Assert.isTrue( slider.get("destroyed") );
196
Y.Assert.isNull( container.get("firstChild") );
199
"test destroy() after render to DOM": function () {
200
var slider = new Y.Slider();
202
slider.render( "#testbed" );
206
Y.Assert.isTrue( slider.get("destroyed") );
208
Y.Assert.isNull( Y.one("#testbed").get("firstChild") );
212
suite.add( new Y.Test.Case({
216
Y.one('body').append('<div id="testbed"></div>');
218
this.slider = new Y.Slider();
221
tearDown: function () {
222
this.slider.destroy();
224
Y.one('#testbed').remove(true);
227
"test getValue() and setValue(v) before render": function () {
230
Y.Assert.areEqual( 0, s.getValue() );
233
Y.Assert.areEqual( 50, s.getValue() );
236
Y.Assert.areEqual( 3, s.getValue() );
238
// out of range constrained by setter
240
Y.Assert.areEqual( 0, s.getValue() );
243
Y.Assert.areEqual( 100, s.getValue() );
244
Y.Assert.areEqual( s.get('value'), s.getValue() );
246
s.set('value', 6.66666);
247
Y.Assert.areEqual( 7, s.getValue() );
248
Y.Assert.areEqual( s.get('value'), s.getValue() );
251
"test getValue() and setValue(v) after render() to hidden container": function () {
252
var container = Y.Node.create('<div></div>'),
255
s.render( container );
257
Y.Assert.areEqual( 0, s.getValue() );
260
Y.Assert.areEqual( 50, s.getValue() );
263
Y.Assert.areEqual( 3, s.getValue() );
266
Y.Assert.areEqual( 0, s.getValue() );
269
Y.Assert.areEqual( 100, s.getValue() );
270
Y.Assert.areEqual( s.get('value'), s.getValue() );
272
s.set('value', 6.66666);
273
Y.Assert.areEqual( 7, s.getValue() );
274
Y.Assert.areEqual( s.get('value'), s.getValue() );
277
"test getValue() and setValue(v) after render() to DOM": function () {
280
s.render('#testbed');
282
Y.Assert.areEqual( 0, s.getValue() );
285
Y.Assert.areEqual( 50, s.getValue() );
288
Y.Assert.areEqual( 3, s.getValue() );
291
Y.Assert.areEqual( 0, s.getValue() );
294
Y.Assert.areEqual( 100, s.getValue() );
295
Y.Assert.areEqual( s.get('value'), s.getValue() );
297
s.set('value', 6.66666);
298
Y.Assert.areEqual( 7, s.getValue() );
299
Y.Assert.areEqual( s.get('value'), s.getValue() );
302
"setValue(v) then render() should position thumb": function () {
306
s.render("#testbed");
308
Y.Assert.areEqual( 27, parseInt(s.thumb.getStyle("left"),10) );
311
"setValue(v) after render() should move the thumb": function () {
314
s.render('#testbed');
316
Y.Assert.areEqual( 0, parseInt(s.thumb.getStyle('left'),10) );
319
Y.Assert.areEqual( 27, parseInt(s.thumb.getStyle('left'),10) );
322
Y.Assert.areEqual( 0, s.getValue() );
323
Y.Assert.areEqual( 0, parseInt(s.thumb.getStyle('left'),10) );
326
Y.Assert.areEqual( 100, s.getValue() );
327
Y.Assert.areEqual( 135, parseInt(s.thumb.getStyle('left'),10) );
330
"setValue(v) when hidden should still move the thumb": function () {
333
Y.one('#testbed').setStyle('display','none');
335
s.render('#testbed');
337
Y.Assert.areEqual( 0, parseInt(s.thumb.getStyle('left'),10) );
340
Y.Assert.areEqual( 27, parseInt(s.thumb.getStyle('left'),10) );
343
Y.one('#testbed').setStyle('display','');
344
Y.Assert.areEqual( 27, parseInt(s.thumb.getStyle('left'),10) );
348
suite.add( new Y.Test.Case({
353
// TODO This is a bug. invalid construction value should fallback
354
// to specified attribute default
355
"axis should only accept 'x', 'X', 'y', and 'Y'": true
360
Y.one('body').append('<span id="testbed"></span>');
363
tearDown: function () {
364
Y.one('#testbed').remove(true);
367
"test axis": function () {
368
var testbed = Y.one('#testbed'),
369
slider = new Y.Slider({ axis: 'x' }).render( testbed ),
370
bb = testbed.get("firstChild");
372
Y.assert( (bb.get("offsetWidth") > 100), "offsetWidth > 100" );
373
Y.assert( (bb.get("offsetHeight") < 50), "offsetHeight < 50" );
377
slider = new Y.Slider({ axis: 'y' }).render( testbed );
378
bb = testbed.get("firstChild");
380
Y.assert( (bb.get("offsetHeight") > 100), "offsetHeight > 100" );
381
Y.assert( (bb.get("offsetWidth") < 50), "offsetWidth < 50" );
386
"axis should be writeOnce": function () {
387
var slider = new Y.Slider();
389
Y.Assert.areEqual("x", slider.get("axis"));
391
slider.set('axis', 'y');
392
Y.Assert.areEqual("x", slider.get("axis"));
396
slider = new Y.Slider({ axis: 'y' });
397
Y.Assert.areEqual("y", slider.get("axis"));
399
slider.set('axis', 'x');
400
Y.Assert.areEqual("y", slider.get("axis"));
403
"axis should only accept 'x', 'X', 'y', and 'Y'": function () {
404
var attempts = "a b c 1 2 3 yx yy YX YY vertical vert eks".split(/ /);
406
Y.each( attempts, function ( axis ) {
407
var slider = new Y.Slider({ axis: axis });
408
Y.Assert.areEqual("x", slider.get("axis"));
412
attempts = ['y', 'Y'];
413
Y.each( attempts, function ( axis ) {
414
var slider = new Y.Slider({ axis: axis });
415
Y.Assert.areEqual("y", slider.get("axis"));
420
"test length": function () {
421
Y.one('#testbed').append('<div id="slider"></div><div id="ref"></div>');
423
var testbed = Y.one("#slider"),
427
slider = new Y.Slider().render( testbed );
428
bb = testbed.get('firstChild');
430
delta = bb.get('offsetWidth') - parseInt(slider.get('length'), 10);
434
slider = new Y.Slider({ length: 50 }).render( testbed );
435
bb = testbed.get('firstChild');
437
Y.Assert.areEqual( (50 + delta), bb.get('offsetWidth') );
439
slider.set('length', 300);
440
Y.Assert.areEqual( (300 + delta), bb.get('offsetWidth') );
442
slider.set('length', "-140px");
443
Y.Assert.areEqual( (300 + delta), bb.get('offsetWidth') );
445
ref.setStyle("width", "23.5em");
446
slider.set('length', '23.5em');
447
Y.Assert.areEqual( (ref.get('offsetWidth') + delta), bb.get('offsetWidth') );
451
slider = new Y.Slider({ axis: 'y' }).render( testbed );
452
bb = testbed.get('firstChild');
454
delta = bb.get('offsetHeight') - parseInt(slider.get('length'), 10);
458
slider = new Y.Slider({ axis: 'y', length: 50 }).render( testbed );
459
bb = testbed.get('firstChild');
461
Y.Assert.areEqual( (50 + delta), bb.get('offsetHeight') );
463
slider.set('length', 300);
464
Y.Assert.areEqual( (300 + delta), bb.get('offsetHeight') );
466
slider.set('length', "-140px");
467
Y.Assert.areEqual( (300 + delta), bb.get('offsetHeight') );
469
ref.setStyle("height", "23.5em");
470
slider.set('length', '23.5em');
471
Y.Assert.areEqual( (ref.get('offsetHeight') + delta), bb.get('offsetHeight') );
474
"thumbUrl should default at render()": function () {
475
var slider = new Y.Slider();
477
Y.Assert.isNull( slider.get('thumbUrl') );
479
slider.render('#testbed');
481
Y.Assert.isString( slider.get('thumbUrl') );
486
"thumbUrl should default to sam skin": function () {
487
var slider = new Y.Slider().render("#testbed");
489
Y.Assert.areEqual( Y.config.base + 'slider-base/assets/skins/sam/thumb-x.png', slider.get('thumbUrl') );
494
"thumbUrl should default from the current skin": function () {
495
var testbed = Y.one("#testbed"),
496
slider = new Y.Slider();
498
testbed.addClass("yui3-skin-foo");
500
slider.render( testbed );
502
Y.Assert.areEqual( Y.config.base + 'slider-base/assets/skins/foo/thumb-x.png', slider.get('thumbUrl') );
507
"test clickableRail": function () {
511
"test min": function () {
514
"test max": function () {
517
"test value": function () {
522
suite.add( new Y.Test.Case({
526
Y.one("body").append('<div id="testbed"></div>');
529
tearDown: function () {
530
Y.one("#testbed").remove(true);
533
"test keyboard input": function () {
534
var slider = new Y.Slider({
541
slider.render( "#testbed" );
542
Y.Assert.areEqual( 50, slider.get('value') );
543
var thumb = slider.thumb;
544
thumb.key(33); // pageUp // .key() method is at top of this file
545
Y.Assert.areEqual(60, slider.get('value'));
547
Y.Assert.areEqual(61, slider.get('value'));
548
thumb.key(39); // right
549
Y.Assert.areEqual(62, slider.get('value'));
550
thumb.key(33); // pageUp
551
Y.Assert.areEqual(72, slider.get('value'));
552
thumb.key(40); // down
553
Y.Assert.areEqual(71, slider.get('value'));
554
thumb.key(34); // pageDown
555
Y.Assert.areEqual(61, slider.get('value'));
556
thumb.key(37); // left
557
thumb.key(37); // left
558
Y.Assert.areEqual(59, slider.get('value'));
559
thumb.key(36); // home
560
Y.Assert.areEqual(0, slider.get('value'));
561
thumb.key(35); // end
562
Y.Assert.areEqual(100, slider.get('value'));
564
thumb.key(33); // pageUp
565
Y.Assert.areEqual(100, slider.get('value'));
567
Y.Assert.areEqual(100, slider.get('value'));
568
thumb.key(39); // right
569
Y.Assert.areEqual(100, slider.get('value'));
572
slider.set('value', 0);
573
thumb.key(34); // pageDown
574
Y.Assert.areEqual(0, slider.get('value'), "= pageDown at min");
575
thumb.key(40); // down
576
Y.Assert.areEqual(0, slider.get('value'));
577
thumb.key(37); // left
578
Y.Assert.areEqual(0, slider.get('value'));
585
* This tests changing the value by one unit
586
* that would not move the slider a full pixel
587
* and because of ticket #2531498, was
588
* changing the value back to previous value
589
* to match the thumb position
591
"test keyboard input and resultant value change, when Slider length is less than max - min": function () {
592
var slider = new Y.Slider({
593
length: '30px', // length less than max - min
599
slider.render( "#testbed" );
600
Y.Assert.areEqual( 0, slider.get('value') );
601
var thumb = slider.thumb;
602
thumb.key(38); // up // .key() method is at top of this file
603
Y.Assert.areEqual(1, slider.get('value'), "** init at 0, then keyUp");
609
"test ARIA attributes while values change by keyboard input": function () {
610
var slider = new Y.Slider({
611
length: '300px', // length less than max - min
617
slider.render( "#testbed" );
618
Y.Assert.areEqual( 50, slider.get('value') );
619
var thumb = slider.thumb;
620
Y.Assert.areEqual(0, thumb.getAttribute('aria-valuemin'));
621
Y.Assert.areEqual(100, thumb.getAttribute('aria-valuemax'));
622
thumb.key(38); // up // .key() method is at top of this file
623
Y.Assert.areEqual(51, thumb.getAttribute('aria-valuenow'));
624
Y.Assert.areEqual(51, thumb.getAttribute('aria-valuetext'));
625
thumb.key(33); // pageUp
626
Y.Assert.areEqual(61, thumb.getAttribute('aria-valuenow'));
627
Y.Assert.areEqual(61, thumb.getAttribute('aria-valuetext'));
634
suite.add( new Y.Test.Case({
635
name: "Runtime expectations",
640
tearDown: function () {
643
"test ": function () {
648
suite.add( new Y.Test.Case({
654
tearDown: function () {
657
"test ": function () {
662
Y.Test.Runner.add( suite );