var el, el2, hammer, hammer2; module('Tests', { setup: function() { el = utils.createHitArea(); el2 = utils.createHitArea(); }, teardown: function() { if (hammer) { hammer.destroy(); hammer = null; } if (hammer2) { hammer2.destroy(); hammer2 = null; } } }); test('hammer shortcut', function() { expect(2); Hammer.defaults.touchAction = 'pan-y'; hammer = Hammer(el); ok(hammer instanceof Hammer.Manager, 'returns an instance of Manager'); ok(hammer.touchAction.actions == Hammer.defaults.touchAction, 'set the default touchAction'); }); test('hammer shortcut with options', function() { expect(2); hammer = Hammer(el, { touchAction: 'none' }); ok(hammer instanceof Hammer.Manager, 'returns an instance of Manager'); ok(hammer.touchAction.actions == 'none', 'set the default touchAction'); }); /* Creating a hammer instance does not work on the same way * when using Hammer or Hammer.Manager. * * This can confuse developers who read tests to use the library when doc is missing. */ test('Hammer and Hammer.Manager constructors work exactly on the same way.', function() { expect(2); hammer = new Hammer(el, {}); equal(Hammer.defaults.preset.length, hammer.recognizers.length); hammer2 = new Hammer.Manager(el, {}); equal(0, hammer2.recognizers.length); }); /* DOC to disable default recognizers should be added. * * - Hammer(el). IMO: Currently, well done. * - Hammer(el, {}) . IMO: should disable default recognizers * - Hammer(el, {recognizers: null}). IMO: now, it fails. * - Hammer(el, {recognizers: []}). It works, but it is likely not intuitive. */ test('A Hammer instance can be setup to not having default recognizers.', function() { expect(1); hammer = new Hammer(el, { recognizers: false }); equal(0, hammer.recognizers.length); }); /* The case was when I added a custom tap event which was added to the default * recognizers, and my custom tap gesture wasn't working (I do not know exactly the reason), * but removing the default recognizers solved the issue. */ test('Adding the same recognizer type should remove the old recognizer', function() { expect(4); hammer = new Hammer(el); ok(!!hammer.get('tap')); equal(7, hammer.recognizers.length); var newTap = new Hammer.Tap({time: 1337}); hammer.add(newTap); equal(7, hammer.recognizers.length); equal(1337, hammer.get('tap').options.time); }); /* * Swipe gesture: * - in this tests, it does not update input.velocity ( always 0) * - does not fire swipeleft or swiperight events */ asyncTest('Swiping to the left should fire swipeleft event', function() { expect(2); hammer = new Hammer(el, {recognizers: []}); hammer.add(new Hammer.Swipe()); hammer.on('swipe swipeleft', function() { ok(true); }); Simulator.gestures.swipe(el, {pos: [300, 300], deltaY: 0, deltaX: -200}, function() { start(); }); }); /* * Input target change */ asyncTest('Should detect input while on other element', function() { expect(1); hammer = new Hammer(el, { inputTarget: document.body }); hammer.on('tap', function() { ok(true); }); Simulator.gestures.tap(document.body, null, function() { start(); }); }); /* Hammer.Manager constructor accepts a "recognizers" option in which each * element is an array representation of a Recognizer. */ test('Hammer.Manager accepts recognizers as arrays.', function() { expect(4); hammer = new Hammer.Manager(el, { recognizers: [ [Hammer.Swipe], [Hammer.Pinch], [Hammer.Rotate], [Hammer.Pan, { direction: Hammer.DIRECTION_UP }, ['swipe', 'pinch'], ['rotate']] ] }); equal(4, hammer.recognizers.length); var recognizerActual = hammer.recognizers[3]; equal(recognizerActual.options.direction, Hammer.DIRECTION_UP); equal(2, Object.keys(recognizerActual.simultaneous).length); equal(1, recognizerActual.requireFail.length); }); /* * Removing a recognizer which cannot be found would errantly remove the last recognizer in the * manager's list. */ test('Remove non-existent recognizer.', function() { expect(1); hammer = new Hammer(el, {recognizers: []}); hammer.add(new Hammer.Swipe()); hammer.remove('tap'); equal(1, hammer.recognizers.length); }); test('check whether Hammer.defaults.cssProps is restored', function() { var beforeCssProps = { userSelect: 'text', touchSelect: 'grippers', touchCallout: 'default', contentZooming: 'chained', userDrag: 'element', tapHighlightColor: 'rgba(0, 1, 0, 0)' }; var prop; Hammer.each(Hammer.defaults.cssProps, function(value, name) { prop = Hammer.prefixed(el.style, name); if (prop) { el.style[prop] = beforeCssProps[name]; } }); hammer = Hammer(el); hammer.destroy(); hammer = null; Hammer.each(Hammer.defaults.cssProps, function(value, name) { prop = Hammer.prefixed(el.style, name); if (prop) { equal(el.style[prop], beforeCssProps[name], "check if " + name + " is restored"); } }); });