test_enable.js 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. var el,
  2. hammer,
  3. counter;
  4. module('Test recognizer enable', {
  5. setup: function() {
  6. el = utils.createHitArea();
  7. hammer = new Hammer.Manager(el, {recognizers: []});
  8. counter = 0;
  9. },
  10. teardown: function() {
  11. hammer && hammer.destroy();
  12. }
  13. });
  14. test('should disable a recognizer through the `enable` constructor parameter', function() {
  15. expect(1);
  16. hammer.add(new Hammer.Tap({enable: false}));
  17. hammer.on('tap', function() {
  18. counter++;
  19. });
  20. stop();
  21. utils.dispatchTouchEvent(el, 'start', 50, 50);
  22. utils.dispatchTouchEvent(el, 'end', 50, 50);
  23. setTimeout(function() {
  24. start();
  25. equal(counter, 0);
  26. }, 100);
  27. });
  28. test('should disable recognizing when the manager is disabled.', function() {
  29. expect(1);
  30. hammer.set({ enable: false });
  31. hammer.add(new Hammer.Tap());
  32. hammer.on('tap', function() {
  33. counter++;
  34. });
  35. stop();
  36. utils.dispatchTouchEvent(el, 'start', 50, 50);
  37. utils.dispatchTouchEvent(el, 'end', 50, 50);
  38. setTimeout(function() {
  39. start();
  40. equal(counter, 0);
  41. }, 100);
  42. });
  43. test('should toggle a recognizer using the `set` call to the recognizer enable property', function() {
  44. expect(2);
  45. hammer.add(new Hammer.Tap());
  46. hammer.on('tap', function() {
  47. counter++;
  48. });
  49. utils.dispatchTouchEvent(el, 'start', 50, 50);
  50. utils.dispatchTouchEvent(el, 'end', 50, 50);
  51. equal(counter, 1);
  52. hammer.get('tap').set({ enable: false });
  53. utils.dispatchTouchEvent(el, 'start', 50, 50);
  54. utils.dispatchTouchEvent(el, 'end', 50, 50);
  55. equal(counter, 1);
  56. });
  57. test('should accept the `enable` constructor parameter as function', function() {
  58. expect(2);
  59. var canRecognizeTap = false;
  60. var tap = new Hammer.Tap({
  61. enable: function() {
  62. return canRecognizeTap;
  63. }
  64. });
  65. hammer.add(tap);
  66. hammer.on('tap', function() {
  67. counter++;
  68. });
  69. stop();
  70. utils.dispatchTouchEvent(el, 'start', 50, 50);
  71. utils.dispatchTouchEvent(el, 'end', 50, 50);
  72. setTimeout(function() {
  73. start();
  74. equal(counter, 0);
  75. canRecognizeTap = true;
  76. utils.dispatchTouchEvent(el, 'start', 50, 50);
  77. utils.dispatchTouchEvent(el, 'end', 50, 50);
  78. equal(counter, 1);
  79. }, 100);
  80. });
  81. test('should accept a function parameter with `set`', function() {
  82. expect(3);
  83. hammer.add(new Hammer.Tap());
  84. hammer.on('tap', function() {
  85. counter++;
  86. });
  87. utils.dispatchTouchEvent(el, 'start', 50, 50);
  88. utils.dispatchTouchEvent(el, 'end', 50, 50);
  89. equal(counter, 1);
  90. var canRecognizeTap = false;
  91. hammer.get('tap').set({ enable: function() {
  92. return canRecognizeTap;
  93. }});
  94. utils.dispatchTouchEvent(el, 'start', 50, 50);
  95. utils.dispatchTouchEvent(el, 'end', 50, 50);
  96. equal(counter, 1);
  97. canRecognizeTap = true;
  98. utils.dispatchTouchEvent(el, 'start', 50, 50);
  99. utils.dispatchTouchEvent(el, 'end', 50, 50);
  100. equal(counter, 2);
  101. });
  102. test('should pass the recognizer and optional the input parameter to the `enable` callback', function() {
  103. expect(2);
  104. var tap;
  105. // the enable function is called initially to setup the touch-action property
  106. // at that moment there isnt any input
  107. var canEnable = function(recognizer, input) {
  108. equal(recognizer, tap);
  109. return true;
  110. };
  111. tap = new Hammer.Tap({enable: canEnable});
  112. hammer.add(tap);
  113. utils.dispatchTouchEvent(el, 'start', 50, 50);
  114. });
  115. test('should toggle based on other object method', function() {
  116. expect(2);
  117. var view = {
  118. state: 0,
  119. canRecognizeTap: function(recognizer, input) {
  120. return this.state !== 0;
  121. }
  122. };
  123. hammer.add(new Hammer.Tap({enable: function(rec, input) { return view.canRecognizeTap(rec, input); } }));
  124. hammer.on('tap', function() {
  125. counter++;
  126. });
  127. utils.dispatchTouchEvent(el, 'start', 50, 50);
  128. utils.dispatchTouchEvent(el, 'end', 50, 50);
  129. equal(counter, 0);
  130. view.state = 1;
  131. utils.dispatchTouchEvent(el, 'start', 50, 50);
  132. utils.dispatchTouchEvent(el, 'end', 50, 50);
  133. equal(counter, 1);
  134. });