Therapeutic refactoring, make interwebs angry
[deck.js.git] / test / spec.goto.js
blob91edd191eac8bf13f2911ea0f4f35317c1528d20
1 describe('Deck JS Quick Go-To', function() {
2   var $d = $(document);
4   beforeEach(function() {
5     loadFixtures('standard.html');
6     if (Modernizr.history) {
7       history.replaceState({}, "", "#")
8     }
9     else {
10       window.location.hash = '#';
11     }
12     $.deck('.slide');
13   });
15   describe('showGoTo()', function() {
16     it('should show the go-to helper', function() {
17       expect($(defaults.selectors.container)).not.toHaveClass(defaults.classes.goto);
18       $.deck('showGoTo');
19       expect($(defaults.selectors.container)).toHaveClass(defaults.classes.goto);
20     });
22     it('should focus the go-to input', function() {
23       $.deck('showGoTo');
24       expect($(defaults.selectors.gotoInput)[0]).toEqual(document.activeElement);
25     });
26   });
28   describe('hideGoTo()', function() {
29     beforeEach(function() {
30       $.deck('showGoTo');
31       $.deck('hideGoTo');
32     });
34     it('should hide the go-to helper', function() {
35       expect($(defaults.selectors.container)).not.toHaveClass(defaults.classes.goto);
36     });
38     it('should blur the go-to input', function() {
39       expect($(defaults.selectors.gotoInput)[0]).not.toEqual(document.activeElement);
40     });
41   });
43   describe('toggleGoTo()', function() {
44     it('should toggle the go-to helper on and off', function() {
45       expect($(defaults.selectors.container)).not.toHaveClass(defaults.classes.goto);
46       $.deck('toggleGoTo');
47       expect($(defaults.selectors.container)).toHaveClass(defaults.classes.goto);
48       $.deck('toggleGoTo');
49       expect($(defaults.selectors.container)).not.toHaveClass(defaults.classes.goto);
50     });
51   });
53   describe('Go-To submit', function() {
54     beforeEach(function() {
55       $.deck('showGoTo');
56     });
58     it('should hide the go-to helper', function() {
59       $(defaults.selectors.gotoInput).val('3');
60       $(defaults.selectors.gotoForm).submit();
61       expect($(defaults.selectors.container)).not.toHaveClass(defaults.classes.goto);
62     });
64     it('should go to the slide number entered', function() {
65       $(defaults.selectors.gotoInput).val('3');
66       $(defaults.selectors.gotoForm).submit();
67       expect($.deck('getSlide')).toEqual($.deck('getSlide'), 2);
68     });
70     it('should go to the slide id entered', function() {
71       $(defaults.selectors.gotoInput).val('custom-id');
72       $(defaults.selectors.gotoForm).submit();
73       expect($.deck('getSlide')).toEqual($.deck('getSlide'), 1);
74     });
76     it('should go nowhere if the number is negative', function() {
77       $(defaults.selectors.gotoInput).val('-2');
78       $(defaults.selectors.gotoForm).submit();
79       expect($.deck('getSlide')).toEqual($.deck('getSlide'), 0);
80     });
82     it('should go nowhere if the number is greater than the number of slides', function() {
83       $(defaults.selectors.gotoInput).val('9');
84       $(defaults.selectors.gotoForm).submit();
85       expect($.deck('getSlide')).toEqual($.deck('getSlide'), 0);
86     });
88     it('should go nowhere if the id does not exist', function() {
89       $(defaults.selectors.gotoInput).val('do-not-exist');
90       $(defaults.selectors.gotoForm).submit();
91       expect($.deck('getSlide')).toEqual($.deck('getSlide'), 0);
92     });
93   });
95   describe('Datalist population', function() {
96     it('should fill in options with all the slide ids', function() {
97       var $dataOptions = $(defaults.selectors.gotoDatalist).find('option');
98       expect($dataOptions.length).toEqual(5);
99       expect($dataOptions.eq(0).attr('value')).toEqual('slide-0');
100       expect($dataOptions.eq(1).attr('value')).toEqual('custom-id');
101     });
102   });
104   describe('key bindings', function() {
105     var e;
107     beforeEach(function() {
108       e = jQuery.Event('keydown.deckgoto');
109     });
111     it('should toggle the go-to helper if the specified key is pressed', function() {
112       e.which = 71; // g
113       $d.trigger(e);
114       expect($(defaults.selectors.container)).toHaveClass(defaults.classes.goto);
115       $d.trigger(e);
116       expect($(defaults.selectors.container)).not.toHaveClass(defaults.classes.goto);
117     });
118   });
120   describe('countNested false', function() {
121     beforeEach(function() {
122       loadFixtures('nesteds.html');
123       $.deck('.slide', {
124         countNested: false
125       });
126       $.deck('showGoTo');
127     });
129     it('should ignore nested slides when given a slide number', function() {
130       $(defaults.selectors.gotoInput).val('4');
131       $(defaults.selectors.gotoForm).submit();
132       expect($.deck('getSlide')).toHaveId('after');
133     });
135     it('should respect top side of new slide range', function() {
136       $.deck('go', 0);
137       $(defaults.selectors.gotoInput).val('6');
138       $(defaults.selectors.gotoForm).submit();
139       expect($.deck('getSlide')).toHaveId('slide-0');
140     });
141   });