async-utils.js 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. (function () {
  2. 'use strict';
  3. window.resetTestPromise = function() {
  4. if (window._deferred) {
  5. window._deferred.reject();
  6. }
  7. var deferred = m.deferred();
  8. window._deferred = deferred;
  9. window._promise = deferred.promise;
  10. window.setTimeout(function() {
  11. deferred.resolve();
  12. }, 50);
  13. };
  14. resetTestPromise();
  15. var getElement = function(selector) {
  16. var deferred = m.deferred();
  17. var _getElement = function() {
  18. window.setTimeout(function() {
  19. var $element = $('#misago-fixture ' + selector);
  20. if ($element.length >= 1) {
  21. deferred.resolve($element);
  22. } else {
  23. _getElement();
  24. }
  25. }, 50);
  26. };
  27. _getElement();
  28. return deferred.promise;
  29. };
  30. var queueAction = function(action) {
  31. window._promise.then(function() {
  32. window._promise = action();
  33. });
  34. };
  35. window.click = function(selector) {
  36. queueAction(function() {
  37. var deferred = m.deferred();
  38. getElement(selector).then(function(element) {
  39. window.setTimeout(function() {
  40. element.trigger('click');
  41. window.setTimeout(function() {
  42. deferred.resolve();
  43. }, 50);
  44. }, 50);
  45. });
  46. return deferred.promise;
  47. });
  48. };
  49. window.fillIn = function(selector, value) {
  50. queueAction(function() {
  51. var deferred = m.deferred();
  52. getElement(selector).then(function(element) {
  53. window.setTimeout(function() {
  54. element.trigger('click');
  55. element.focus();
  56. element.trigger('keyDown');
  57. element.val(value || '');
  58. element.trigger('keyUp');
  59. element.trigger('input');
  60. element.trigger('change');
  61. window.setTimeout(function() {
  62. deferred.resolve();
  63. }, 50);
  64. }, 50);
  65. });
  66. return deferred.promise;
  67. });
  68. };
  69. window.then = function(callback, timeout) {
  70. queueAction(function() {
  71. var deferred = m.deferred();
  72. window.setTimeout(function() {
  73. callback();
  74. deferred.resolve();
  75. }, timeout || 80);
  76. return deferred.promise;
  77. });
  78. };
  79. window.waitForElement = function(selector) {
  80. queueAction(function() {
  81. var deferred = m.deferred();
  82. getElement(selector).then(function() {
  83. window.setTimeout(function() {
  84. deferred.resolve();
  85. }, 50);
  86. });
  87. return deferred.promise;
  88. });
  89. };
  90. window.waitForElementRemoval = function(selector) {
  91. queueAction(function() {
  92. var deferred = m.deferred();
  93. var _testElement = function() {
  94. window.setTimeout(function() {
  95. if (!$(selector).length) {
  96. deferred.resolve();
  97. } else {
  98. _testElement();
  99. }
  100. }, 50);
  101. };
  102. _testElement();
  103. return deferred.promise;
  104. });
  105. };
  106. window.onElement = function(selector, callback) {
  107. queueAction(function() {
  108. var deferred = m.deferred();
  109. getElement(selector).then(function(element) {
  110. window.setTimeout(function() {
  111. callback(element);
  112. deferred.resolve();
  113. }, 50);
  114. });
  115. return deferred.promise;
  116. });
  117. };
  118. window.onCleanUp = function(callback) {
  119. var waitForFixtureCleanUp = function() {
  120. window.setTimeout(function() {
  121. var content = $.trim($('#misago-fixture').html());
  122. if (!content) {
  123. window.setTimeout(function() {
  124. callback();
  125. }, 250);
  126. } else {
  127. waitForFixtureCleanUp();
  128. }
  129. }, 50);
  130. };
  131. waitForFixtureCleanUp();
  132. };
  133. }());