Updated Jasmine link.
[deck.js.git] / test / spec.goto.js
blob014f3fa2de18109304905fd8646ee85950a2b194
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     });
27     it('should set aria-hidden to false', function() {
28       var $gotoForm = $(defaults.selectors.gotoForm);
29       $.deck('showGoTo');
30       expect($gotoForm).toHaveAttr('aria-hidden', 'false');
31     });
32   });
34   describe('hideGoTo()', function() {
35     beforeEach(function() {
36       $.deck('showGoTo');
37       $.deck('hideGoTo');
38     });
40     it('should hide the go-to helper', function() {
41       expect($(defaults.selectors.container)).not.toHaveClass(defaults.classes.goto);
42     });
44     it('should blur the go-to input', function() {
45       expect($(defaults.selectors.gotoInput)[0]).not.toEqual(document.activeElement);
46     });
48     it('should set aria-hidden to true', function() {
49       var $gotoForm = $(defaults.selectors.gotoForm);
50       $.deck('hideGoTo');
51       expect($gotoForm).toHaveAttr('aria-hidden', 'true');
52     });
53   });
55   describe('toggleGoTo()', function() {
56     it('should toggle the go-to helper on and off', function() {
57       expect($(defaults.selectors.container)).not.toHaveClass(defaults.classes.goto);
58       $.deck('toggleGoTo');
59       expect($(defaults.selectors.container)).toHaveClass(defaults.classes.goto);
60       $.deck('toggleGoTo');
61       expect($(defaults.selectors.container)).not.toHaveClass(defaults.classes.goto);
62     });
63   });
65   describe('Go-To submit', function() {
66     beforeEach(function() {
67       $.deck('showGoTo');
68     });
70     it('should hide the go-to helper', function() {
71       $(defaults.selectors.gotoInput).val('3');
72       $(defaults.selectors.gotoForm).submit();
73       expect($(defaults.selectors.container)).not.toHaveClass(defaults.classes.goto);
74     });
76     it('should go to the slide number entered', function() {
77       $(defaults.selectors.gotoInput).val('3');
78       $(defaults.selectors.gotoForm).submit();
79       expect($.deck('getSlide')).toEqual($.deck('getSlide'), 2);
80     });
82     it('should go to the slide id entered', function() {
83       $(defaults.selectors.gotoInput).val('custom-id');
84       $(defaults.selectors.gotoForm).submit();
85       expect($.deck('getSlide')).toEqual($.deck('getSlide'), 1);
86     });
88     it('should go nowhere if the number is negative', function() {
89       $(defaults.selectors.gotoInput).val('-2');
90       $(defaults.selectors.gotoForm).submit();
91       expect($.deck('getSlide')).toEqual($.deck('getSlide'), 0);
92     });
94     it('should go nowhere if the number is greater than the number of slides', function() {
95       $(defaults.selectors.gotoInput).val('9');
96       $(defaults.selectors.gotoForm).submit();
97       expect($.deck('getSlide')).toEqual($.deck('getSlide'), 0);
98     });
100     it('should go nowhere if the id does not exist', function() {
101       $(defaults.selectors.gotoInput).val('do-not-exist');
102       $(defaults.selectors.gotoForm).submit();
103       expect($.deck('getSlide')).toEqual($.deck('getSlide'), 0);
104     });
105   });
107   describe('Datalist population', function() {
108     it('should fill in options with all the slide ids', function() {
109       var $dataOptions = $(defaults.selectors.gotoDatalist).find('option');
110       expect($dataOptions.length).toEqual(5);
111       expect($dataOptions.eq(0).attr('value')).toEqual('slide-0');
112       expect($dataOptions.eq(1).attr('value')).toEqual('custom-id');
113     });
114   });
116   describe('key bindings', function() {
117     var e;
119     beforeEach(function() {
120       e = jQuery.Event('keydown.deckgoto');
121     });
123     it('should toggle the go-to helper if the specified key is pressed', function() {
124       e.which = 71; // g
125       $d.trigger(e);
126       expect($(defaults.selectors.container)).toHaveClass(defaults.classes.goto);
127       $d.trigger(e);
128       expect($(defaults.selectors.container)).not.toHaveClass(defaults.classes.goto);
129     });
130   });
132   describe('countNested false', function() {
133     beforeEach(function() {
134       loadFixtures('nesteds.html');
135       $.deck('.slide', {
136         countNested: false
137       });
138       $.deck('showGoTo');
139     });
141     it('should ignore nested slides when given a slide number', function() {
142       $(defaults.selectors.gotoInput).val('4');
143       $(defaults.selectors.gotoForm).submit();
144       expect($.deck('getSlide')).toHaveId('after');
145     });
147     it('should respect top side of new slide range', function() {
148       $.deck('go', 0);
149       $(defaults.selectors.gotoInput).val('6');
150       $(defaults.selectors.gotoForm).submit();
151       expect($.deck('getSlide')).toHaveId('slide-0');
152     });
153   });