1
YUI.add('slider-base-tests', function(Y) {
3
// copied this from event-key-test.js to add tests for changing value by keyboard
4
Y.Node.prototype.key = function (keyCode, charCode, mods, type) {
5
var simulate = Y.Event.simulate,
7
config = Y.merge(mods || {});
10
if (type === 'keypress') {
11
config.charCode = config.keyCode = config.which = charCode || keyCode;
13
config.keyCode = config.which = keyCode;
15
simulate(el, type, config);
17
config.keyCode = config.which = keyCode;
18
simulate(el, 'keydown', config);
19
simulate(el, 'keyup', config);
21
config.charCode = config.keyCode = config.which = charCode || keyCode;
22
simulate(el, 'keypress', config);
25
// END copied this from event-key-test.js to add tests for changing value by keyboard
27
var suite = new Y.Test.Suite("Y.Slider");
29
suite.add( new Y.Test.Case({
33
Y.one("body").append('<div id="testbed"></div>');
36
tearDown: function () {
37
Y.one("#testbed").remove(true);
40
"test default construction": function () {
41
Y.Assert.isInstanceOf( Y.Slider, new Y.Slider() );
44
"test SliderBase construction": function () {
45
Y.Assert.isInstanceOf( Y.SliderBase, new Y.SliderBase() );
48
"test render(selector)": function () {
49
Y.one("#testbed").setContent(
50
"<div></div>" + // block element
51
'<div class="floated" style="float:left"></div>' + // float
52
"<p></p>" + // limited block element
53
"<span></span>"); // inline element
55
(new Y.Slider().render("#testbed > div"));
56
(new Y.Slider().render("#testbed > div.floated"));
57
(new Y.Slider().render("#testbed > p"));
58
(new Y.Slider().render("#testbed > span"));
60
var div = Y.one("#testbed > div"),
61
fl = Y.one("#testbed > div.floated"),
62
p = Y.one("#testbed > p"),
63
span = Y.one("#testbed > span");
65
Y.assert( (div.get("offsetHeight") > 0) );
66
Y.assert( (fl.get("offsetHeight") > 0) );
67
Y.assert( (p.get("offsetHeight") > 0) );
68
Y.assert( (span.get("offsetHeight") > 0) );
70
Y.assert( (fl.get("offsetWidth") > 0) );
71
Y.assert( (span.get("offsetWidth") > 0) );
73
Y.Assert.areEqual( 8, div.all("span,img").size() );
74
Y.Assert.areEqual( 8, fl.all("span,img").size() );
75
Y.Assert.areEqual( 8, p.all("span,img").size() );
76
Y.Assert.areEqual( 8, span.all("span,img").size() );
79
"test render( node )": function () {
80
Y.one("#testbed").setContent(
81
"<div></div>" + // block element
82
'<div class="floated" style="float:left"></div>' + // float
83
"<p></p>" + // limited block element
84
"<span></span>"); // inline element
86
var div = Y.one("#testbed > div"),
87
fl = Y.one("#testbed > div.floated"),
88
p = Y.one("#testbed > p"),
89
span = Y.one("#testbed > span");
91
(new Y.Slider().render(div));
92
(new Y.Slider().render(fl));
93
(new Y.Slider().render(p));
94
(new Y.Slider().render(span));
96
Y.assert( (div.get("offsetHeight") > 0) );
97
Y.assert( (fl.get("offsetHeight") > 0) );
98
Y.assert( (p.get("offsetHeight") > 0) );
99
Y.assert( (span.get("offsetHeight") > 0) );
101
Y.assert( (fl.get("offsetWidth") > 0) );
102
Y.assert( (span.get("offsetWidth") > 0) );
104
Y.Assert.areEqual( 8, div.all("span,img").size() );
105
Y.Assert.areEqual( 8, fl.all("span,img").size() );
106
Y.Assert.areEqual( 8, p.all("span,img").size() );
107
Y.Assert.areEqual( 8, span.all("span,img").size() );
110
"test render: selector attrib in constructor": function () {
111
Y.one("#testbed").setContent(
112
"<div></div>" + // block element
113
'<div class="floated" style="float:left"></div>' + // float
114
"<p></p>" + // limited block element
115
"<span></span>"); // inline element
117
(new Y.Slider({ render: "#testbed > div" }));
118
(new Y.Slider({ render: "#testbed > div.floated" }));
119
(new Y.Slider({ render: "#testbed > p" }));
120
(new Y.Slider({ render: "#testbed > span" }));
122
var div = Y.one("#testbed > div"),
123
fl = Y.one("#testbed > div.floated"),
124
p = Y.one("#testbed > p"),
125
span = Y.one("#testbed > span");
127
Y.assert( (div.get("offsetHeight") > 0) );
128
Y.assert( (fl.get("offsetHeight") > 0) );
129
Y.assert( (p.get("offsetHeight") > 0) );
130
Y.assert( (span.get("offsetHeight") > 0) );
132
Y.assert( (fl.get("offsetWidth") > 0) );
133
Y.assert( (span.get("offsetWidth") > 0) );
135
Y.Assert.areEqual( 8, div.all("span,img").size() );
136
Y.Assert.areEqual( 8, fl.all("span,img").size() );
137
Y.Assert.areEqual( 8, p.all("span,img").size() );
138
Y.Assert.areEqual( 8, span.all("span,img").size() );
141
"test render: node attrib in constructor": function () {
142
Y.one("#testbed").setContent(
143
"<div></div>" + // block element
144
'<div class="floated" style="float:left"></div>' + // float
145
"<p></p>" + // limited block element
146
"<span></span>"); // inline element
148
var div = Y.one("#testbed > div"),
149
fl = Y.one("#testbed > div.floated"),
150
p = Y.one("#testbed > p"),
151
span = Y.one("#testbed > span");
153
(new Y.Slider({ render: div }));
154
(new Y.Slider({ render: fl }));
155
(new Y.Slider({ render: p }));
156
(new Y.Slider({ render: span }));
158
Y.assert( (div.get("offsetHeight") > 0) );
159
Y.assert( (fl.get("offsetHeight") > 0) );
160
Y.assert( (p.get("offsetHeight") > 0) );
161
Y.assert( (span.get("offsetHeight") > 0) );
163
Y.assert( (fl.get("offsetWidth") > 0) );
164
Y.assert( (span.get("offsetWidth") > 0) );
166
Y.Assert.areEqual( 8, div.all("span,img").size() );
167
Y.Assert.areEqual( 8, fl.all("span,img").size() );
168
Y.Assert.areEqual( 8, p.all("span,img").size() );
169
Y.Assert.areEqual( 8, span.all("span,img").size() );
172
"test render off DOM": function () {
173
var container = Y.Node.create("<div></div>");
175
(new Y.Slider().render(container));
177
Y.Assert.areEqual( 8, container.all("span,img").size() );
180
"test destroy() before render": function () {
181
var slider = new Y.Slider();
185
Y.Assert.isTrue( slider.get("destroyed") );
188
"test destroy() after render off DOM": function () {
189
var container = Y.Node.create("<div></div>"),
190
slider = new Y.Slider();
192
slider.render( container );
196
Y.Assert.isTrue( slider.get("destroyed") );
198
Y.Assert.isNull( container.get("firstChild") );
201
"test destroy() after render to DOM": function () {
202
var slider = new Y.Slider();
204
slider.render( "#testbed" );
208
Y.Assert.isTrue( slider.get("destroyed") );
210
Y.Assert.isNull( Y.one("#testbed").get("firstChild") );
214
suite.add( new Y.Test.Case({
218
Y.one('body').append('<div id="testbed"></div>');
220
this.slider = new Y.Slider();
223
tearDown: function () {
224
this.slider.destroy();
226
Y.one('#testbed').remove(true);
229
"test getValue() and setValue(v) before render": function () {
232
Y.Assert.areEqual( 0, s.getValue() );
235
Y.Assert.areEqual( 50, s.getValue() );
238
Y.Assert.areEqual( 3, s.getValue() );
240
// out of range constrained by setter
242
Y.Assert.areEqual( 0, s.getValue() );
245
Y.Assert.areEqual( 100, s.getValue() );
246
Y.Assert.areEqual( s.get('value'), s.getValue() );
248
s.set('value', 6.66666);
249
Y.Assert.areEqual( 7, s.getValue() );
250
Y.Assert.areEqual( s.get('value'), s.getValue() );
253
"test getValue() and setValue(v) after render() to hidden container": function () {
254
var container = Y.Node.create('<div></div>'),
257
s.render( container );
259
Y.Assert.areEqual( 0, s.getValue() );
262
Y.Assert.areEqual( 50, s.getValue() );
265
Y.Assert.areEqual( 3, s.getValue() );
268
Y.Assert.areEqual( 0, s.getValue() );
271
Y.Assert.areEqual( 100, s.getValue() );
272
Y.Assert.areEqual( s.get('value'), s.getValue() );
274
s.set('value', 6.66666);
275
Y.Assert.areEqual( 7, s.getValue() );
276
Y.Assert.areEqual( s.get('value'), s.getValue() );
279
"test getValue() and setValue(v) after render() to DOM": function () {
282
s.render('#testbed');
284
Y.Assert.areEqual( 0, s.getValue() );
287
Y.Assert.areEqual( 50, s.getValue() );
290
Y.Assert.areEqual( 3, s.getValue() );
293
Y.Assert.areEqual( 0, s.getValue() );
296
Y.Assert.areEqual( 100, s.getValue() );
297
Y.Assert.areEqual( s.get('value'), s.getValue() );
299
s.set('value', 6.66666);
300
Y.Assert.areEqual( 7, s.getValue() );
301
Y.Assert.areEqual( s.get('value'), s.getValue() );
304
"setValue(v) then render() should position thumb": function () {
308
s.render("#testbed");
310
Y.Assert.areEqual( 27, parseInt(s.thumb.getStyle("left"),10) );
313
"setValue(v) after render() should move the thumb": function () {
316
s.render('#testbed');
318
Y.Assert.areEqual( 0, parseInt(s.thumb.getStyle('left'),10) );
321
Y.Assert.areEqual( 27, parseInt(s.thumb.getStyle('left'),10) );
324
Y.Assert.areEqual( 0, s.getValue() );
325
Y.Assert.areEqual( 0, parseInt(s.thumb.getStyle('left'),10) );
328
Y.Assert.areEqual( 100, s.getValue() );
329
Y.Assert.areEqual( 135, parseInt(s.thumb.getStyle('left'),10) );
332
"setValue(v) when hidden should still move the thumb": function () {
335
Y.one('#testbed').setStyle('display','none');
337
s.render('#testbed');
339
Y.Assert.areEqual( 0, parseInt(s.thumb.getStyle('left'),10) );
342
Y.Assert.areEqual( 27, parseInt(s.thumb.getStyle('left'),10) );
345
Y.one('#testbed').setStyle('display','');
346
Y.Assert.areEqual( 27, parseInt(s.thumb.getStyle('left'),10) );
350
suite.add( new Y.Test.Case({
355
// TODO This is a bug. invalid construction value should fallback
356
// to specified attribute default
357
"axis should only accept 'x', 'X', 'y', and 'Y'": true
362
Y.one('body').append('<span id="testbed"></span>');
365
tearDown: function () {
366
Y.one('#testbed').remove(true);
369
"test axis": function () {
370
var testbed = Y.one('#testbed'),
371
slider = new Y.Slider({ axis: 'x' }).render( testbed ),
372
bb = testbed.get("firstChild");
374
Y.assert( (bb.get("offsetWidth") > 100), "offsetWidth > 100" );
375
Y.assert( (bb.get("offsetHeight") < 50), "offsetHeight < 50" );
379
slider = new Y.Slider({ axis: 'y' }).render( testbed );
380
bb = testbed.get("firstChild");
382
Y.assert( (bb.get("offsetHeight") > 100), "offsetHeight > 100" );
383
Y.assert( (bb.get("offsetWidth") < 50), "offsetWidth < 50" );
388
"axis should be writeOnce": function () {
389
var slider = new Y.Slider();
391
Y.Assert.areEqual("x", slider.get("axis"));
393
slider.set('axis', 'y');
394
Y.Assert.areEqual("x", slider.get("axis"));
398
slider = new Y.Slider({ axis: 'y' });
399
Y.Assert.areEqual("y", slider.get("axis"));
401
slider.set('axis', 'x');
402
Y.Assert.areEqual("y", slider.get("axis"));
405
"axis should only accept 'x', 'X', 'y', and 'Y'": function () {
406
var attempts = "a b c 1 2 3 yx yy YX YY vertical vert eks".split(/ /);
408
Y.each( attempts, function ( axis ) {
409
var slider = new Y.Slider({ axis: axis });
410
Y.Assert.areEqual("x", slider.get("axis"));
414
attempts = ['y', 'Y'];
415
Y.each( attempts, function ( axis ) {
416
var slider = new Y.Slider({ axis: axis });
417
Y.Assert.areEqual("y", slider.get("axis"));
422
"test length": function () {
423
Y.one('#testbed').append('<div id="slider"></div><div id="ref"></div>');
425
var testbed = Y.one("#slider"),
429
slider = new Y.Slider().render( testbed );
430
bb = testbed.get('firstChild');
432
delta = bb.get('offsetWidth') - parseInt(slider.get('length'), 10);
436
slider = new Y.Slider({ length: 50 }).render( testbed );
437
bb = testbed.get('firstChild');
439
Y.Assert.areEqual( (50 + delta), bb.get('offsetWidth') );
441
slider.set('length', 300);
442
Y.Assert.areEqual( (300 + delta), bb.get('offsetWidth') );
444
slider.set('length', "-140px");
445
Y.Assert.areEqual( (300 + delta), bb.get('offsetWidth') );
447
ref.setStyle("width", "23.5em");
448
slider.set('length', '23.5em');
449
Y.Assert.areEqual( (ref.get('offsetWidth') + delta), bb.get('offsetWidth') );
453
slider = new Y.Slider({ axis: 'y' }).render( testbed );
454
bb = testbed.get('firstChild');
456
delta = bb.get('offsetHeight') - parseInt(slider.get('length'), 10);
460
slider = new Y.Slider({ axis: 'y', length: 50 }).render( testbed );
461
bb = testbed.get('firstChild');
463
Y.Assert.areEqual( (50 + delta), bb.get('offsetHeight') );
465
slider.set('length', 300);
466
Y.Assert.areEqual( (300 + delta), bb.get('offsetHeight') );
468
slider.set('length', "-140px");
469
Y.Assert.areEqual( (300 + delta), bb.get('offsetHeight') );
471
ref.setStyle("height", "23.5em");
472
slider.set('length', '23.5em');
473
Y.Assert.areEqual( (ref.get('offsetHeight') + delta), bb.get('offsetHeight') );
476
"thumbUrl should default at render()": function () {
477
var slider = new Y.Slider();
479
Y.Assert.isNull( slider.get('thumbUrl') );
481
slider.render('#testbed');
483
Y.Assert.isString( slider.get('thumbUrl') );
488
"thumbUrl should default to sam skin": function () {
489
var slider = new Y.Slider().render("#testbed");
491
Y.Assert.areEqual( Y.config.base + 'slider-base/assets/skins/sam/thumb-x.png', slider.get('thumbUrl') );
496
"thumbUrl should default from the current skin": function () {
497
var testbed = Y.one("#testbed"),
498
slider = new Y.Slider();
500
testbed.addClass("yui3-skin-foo");
502
slider.render( testbed );
504
Y.Assert.areEqual( Y.config.base + 'slider-base/assets/skins/foo/thumb-x.png', slider.get('thumbUrl') );
509
"test clickableRail": function () {
513
"test min": function () {
516
"test max": function () {
519
"test value": function () {
524
suite.add( new Y.Test.Case({
529
"test keyboard input and resultant value change, when Slider length is less than max - min": 2531498
534
Y.one("body").append('<div id="testbed"></div>');
537
tearDown: function () {
538
Y.one("#testbed").remove(true);
541
"test keyboard input": function () {
542
var slider = new Y.Slider({
549
slider.render( "#testbed" );
550
Y.Assert.areEqual( 50, slider.get('value') );
551
var thumb = slider.thumb;
552
thumb.key(33); // pageUp // .key() method is at top of this file
553
Y.Assert.areEqual(60, slider.get('value'));
555
Y.Assert.areEqual(61, slider.get('value'));
556
thumb.key(39); // right
557
Y.Assert.areEqual(62, slider.get('value'));
558
thumb.key(33); // pageUp
559
Y.Assert.areEqual(72, slider.get('value'));
560
thumb.key(40); // down
561
Y.Assert.areEqual(71, slider.get('value'));
562
thumb.key(34); // pageDown
563
Y.Assert.areEqual(61, slider.get('value'));
564
thumb.key(37); // left
565
thumb.key(37); // left
566
Y.Assert.areEqual(59, slider.get('value'));
567
thumb.key(36); // home
568
Y.Assert.areEqual(0, slider.get('value'));
569
thumb.key(35); // end
570
Y.Assert.areEqual(100, slider.get('value'));
572
thumb.key(33); // pageUp
573
Y.Assert.areEqual(100, slider.get('value'));
575
Y.Assert.areEqual(100, slider.get('value'));
576
thumb.key(39); // right
577
Y.Assert.areEqual(100, slider.get('value'));
580
slider.set('value', 0);
581
thumb.key(34); // pageDown
582
Y.Assert.areEqual(0, slider.get('value'), "= pageDown at min");
583
thumb.key(40); // down
584
Y.Assert.areEqual(0, slider.get('value'));
585
thumb.key(37); // left
586
Y.Assert.areEqual(0, slider.get('value'));
593
* This tests changing the value by one unit
594
* that would not move the slider a full pixel
595
* and because of ticket #2531498, was
596
* changing the value back to previous value
597
* to match the thumb position
599
"test keyboard input and resultant value change, when Slider length is less than max - min": function () {
600
var slider = new Y.Slider({
601
length: '30px', // length less than max - min
607
slider.render( "#testbed" );
608
Y.Assert.areEqual( 0, slider.get('value') );
609
var thumb = slider.thumb;
610
thumb.key(38); // up // .key() method is at top of this file
611
Y.Assert.areEqual(1, slider.get('value'), "** init at 0, then keyUp");
617
"test ARIA attributes while values change by keyboard input": function () {
618
var slider = new Y.Slider({
619
length: '300px', // length less than max - min
625
slider.render( "#testbed" );
626
Y.Assert.areEqual( 50, slider.get('value') );
627
var thumb = slider.thumb;
628
Y.Assert.areEqual(0, thumb.getAttribute('aria-valuemin'));
629
Y.Assert.areEqual(100, thumb.getAttribute('aria-valuemax'));
630
thumb.key(38); // up // .key() method is at top of this file
631
Y.Assert.areEqual(51, thumb.getAttribute('aria-valuenow'));
632
Y.Assert.areEqual(51, thumb.getAttribute('aria-valuetext'));
633
thumb.key(33); // pageUp
634
Y.Assert.areEqual(61, thumb.getAttribute('aria-valuenow'));
635
Y.Assert.areEqual(61, thumb.getAttribute('aria-valuetext'));
642
suite.add( new Y.Test.Case({
643
name: "Runtime expectations",
648
tearDown: function () {
651
"test ": function () {
656
suite.add( new Y.Test.Case({
662
tearDown: function () {
665
"test ": function () {
670
Y.Test.Runner.add( suite );
673
}, '@VERSION@' ,{requires:['slider-base', 'test']});