added Tom Marble's slides
[lp17-speaker-slides.git] / Tom-Marble / deck.js / test / spec.menu.js
diff --git a/Tom-Marble/deck.js/test/spec.menu.js b/Tom-Marble/deck.js/test/spec.menu.js
new file mode 100644 (file)
index 0000000..3abca9f
--- /dev/null
@@ -0,0 +1,83 @@
+describe('Deck JS Menu', function() {
+  var $d = $(document);
+  var dsc = defaults.selectors.container;
+
+  beforeEach(function() {
+    loadFixtures('standard.html');
+    if (Modernizr.history) {
+      history.replaceState({}, "", "#")
+    }
+    else {
+      window.location.hash = '#';
+    }
+    $.deck('.slide');
+  });
+
+  describe('showMenu()', function() {
+    it('should show the menu', function() {
+      expect($(dsc)).not.toHaveClass(defaults.classes.menu);
+      $.deck('showMenu');
+      expect($(dsc)).toHaveClass(defaults.classes.menu);
+    });
+
+    it('should do nothing if menu is already showing', function() {
+      if (Modernizr.csstransforms) {
+        $.deck('showMenu');
+        $.deck('showMenu');
+        $.deck('hideMenu');
+        expect($('.slide').attr('style')).toBeFalsy();
+      }
+    });
+  });
+
+  describe('hideMenu()', function() {
+    it('should hide the menu', function() {
+      $.deck('showMenu');
+      $.deck('hideMenu');
+      expect($(dsc)).not.toHaveClass(defaults.classes.menu);
+    });
+  });
+
+  describe('toggleMenu()', function() {
+    it('should toggle menu on and off', function() {
+      expect($(dsc)).not.toHaveClass(defaults.classes.menu);
+      $.deck('toggleMenu');
+      expect($(dsc)).toHaveClass(defaults.classes.menu);
+      $.deck('toggleMenu');
+      expect($(dsc)).not.toHaveClass(defaults.classes.menu);
+    });
+  });
+
+  describe('key bindings', function() {
+    var e;
+
+    beforeEach(function() {
+      e = jQuery.Event('keydown.deckmenu');
+    });
+
+    it('should toggle the menu if the specified key is pressed', function() {
+      e.which = 77; // m
+      $d.trigger(e);
+      expect($(dsc)).toHaveClass(defaults.classes.menu);
+      $d.trigger(e);
+      expect($(dsc)).not.toHaveClass(defaults.classes.menu);
+    });
+  });
+
+  describe('touch bindings', function() {
+    var estart, eend;
+
+    beforeEach(function() {
+      estart = jQuery.Event('touchstart.deckmenu');
+      eend  = jQuery.Event('touchend.deckmenu');
+    });
+
+    it('should toggle the menu if the screen is touched', function() {
+      $.deck('getOptions').touch.doubletapWindow = Date.now() + 100000;
+      $.deck('getContainer').trigger(estart);
+      $.deck('getContainer').trigger(eend);
+      expect($(dsc)).toHaveClass(defaults.classes.menu);
+    });
+  });
+
+});