var el, hammer, pressPeriod = 200, pressThreshold = 20, pressCount = 0, panStartCount = 0, swipeCount = 0; module('Require Failure ( Swipe & Press )', { setup: function() { el = utils.createHitArea(); hammer = new Hammer(el, {recognizers: []}); var swipe = new Hammer.Swipe({threshold: 1}); var press = new Hammer.Press({time: pressPeriod, threshold: pressThreshold}); hammer.add(swipe); hammer.add(press); swipe.recognizeWith(press); press.requireFailure(swipe); pressCount = 0; swipeCount = 0; hammer.on('press', function() { pressCount++; }); hammer.on('swipe', function() { swipeCount++; }); }, teardown: function() { hammer.destroy(); } }); asyncTest('When swipe does not recognize the gesture, a press gesture can be fired', function() { expect(1); utils.dispatchTouchEvent(el, 'start', 50, 50); setTimeout(function() { start(); equal(pressCount, 1); }, pressPeriod + 100); }); asyncTest('When swipe does recognize the gesture, a press gesture cannot be fired', function() { expect(2); Simulator.gestures.swipe(el, null, function() { start(); ok(swipeCount > 0, 'swipe gesture should be recognizing'); equal(pressCount, 0, 'press gesture should not be recognized because swipe gesture is recognizing'); }); }); module('Require Failure ( Pan & Press )', { setup: function() { el = document.createElement('div'); document.body.appendChild(el); hammer = new Hammer(el, {recognizers: []}); var pan = new Hammer.Pan({threshold: 1}); var press = new Hammer.Press({time: pressPeriod, threshold: pressThreshold}); hammer.add([pan, press]); pan.recognizeWith(press); press.requireFailure(pan); pressCount = 0; panStartCount = 0; hammer.on('press', function() { pressCount++; }); hammer.on('panstart', function() { panStartCount++; }); }, teardown: function() { document.body.removeChild(el); hammer.destroy(); } }); asyncTest('When pan does not recognize the gesture, a press gesture can be fired', function() { expect(1); utils.dispatchTouchEvent(el, 'start', 50, 50); setTimeout(function() { start(); equal(pressCount, 1); }, pressPeriod + 100); }); asyncTest('When pan recognizes the gesture, a press gesture cannot be fired', function() { expect(2); utils.dispatchTouchEvent(el, 'start', 50, 50); utils.dispatchTouchEvent(el, 'move', 50 + pressThreshold / 4, 50); setTimeout(function() { start(); ok(panStartCount > 0, 'pan gesture should be recognizing'); equal(pressCount, 0, 'press gesture should not be recognized because pan gesture is recognizing'); }, pressPeriod + 100); });