/ext/modern/modern/test/local/cmd.js

https://gitlab.com/knax/extjs · JavaScript · 184 lines · 151 code · 29 blank · 4 comment · 11 complexity · 52c766dcfad1dd43860be2c39cc8334b MD5 · raw file

  1. if (top.location.search.indexOf("cmd-test=true") > 0) {
  2. var Cmd = {
  3. sendMessage: function(message, callback) {
  4. if (typeof message != 'object') {
  5. message = {
  6. type: message
  7. };
  8. }
  9. message.seq = ++Cmd._seq;
  10. if (callback) {
  11. Cmd._callbacks[message.seq] = callback;
  12. message.callback = true;
  13. }
  14. Cmd._messages.push(message);
  15. Cmd._notifyWebDriver();
  16. },
  17. native: {
  18. getWindowHandle: function(callback) {
  19. Cmd.sendMessage({
  20. type: 'getWindowHandle'
  21. }, callback);
  22. },
  23. getWindowHandles: function(callback) {
  24. Cmd.sendMessage({
  25. type: 'getWindowHandles'
  26. }, callback);
  27. },
  28. switchTo: function(options, callback) {
  29. options.type = 'switchTo';
  30. Cmd.sendMessage(options, callback);
  31. },
  32. close: function(callback) {
  33. Cmd.sendMessage({
  34. type: 'close'
  35. }, callback);
  36. },
  37. screenshot: function(name, callback) {
  38. Cmd.sendMessage({
  39. type: 'screenshot',
  40. name: name
  41. }, callback);
  42. },
  43. click: function(domElement, callback) {
  44. Cmd.sendMessage({
  45. type: 'click',
  46. elementId: domElement.id
  47. }, callback);
  48. },
  49. sendKeys: function(domElement, keys, callback) {
  50. Cmd.sendMessage({
  51. type: 'sendKeys',
  52. elementId: domElement.id,
  53. keys: keys
  54. }, callback);
  55. }
  56. },
  57. // ----------------------------------------------------------------------------
  58. // Internal API used by test runners to report results and progress
  59. status: {
  60. runStarted: function(callback) {
  61. Cmd.sendMessage('testRunnerStarted', callback);
  62. },
  63. runFinished: function(callback) {
  64. Cmd.sendMessage('testRunnerFinished', callback);
  65. },
  66. suiteStarted: function(name, callback) {
  67. Cmd.sendMessage({
  68. type: 'testSuiteStarted',
  69. name: name
  70. }, callback);
  71. },
  72. suiteFinished: function(name, callback) {
  73. Cmd.sendMessage({
  74. type: 'testSuiteFinished',
  75. name: name
  76. }, callback);
  77. },
  78. testStarted: function(name, callback) {
  79. Cmd.sendMessage({
  80. type: 'testStarted',
  81. name: name
  82. }, callback);
  83. },
  84. testFinished: function(name, callback) {
  85. Cmd.sendMessage({
  86. type: 'testFinished',
  87. name: name
  88. }, callback);
  89. },
  90. testFailed: function(name, error, details, callback) {
  91. Cmd.sendMessage({
  92. type: 'testFailed',
  93. name: name,
  94. error: error,
  95. details: details
  96. }, callback);
  97. },
  98. getCurrentChunk: function(array) {
  99. var cmdTestSplit = Cmd._getParam('cmd-test-split'),
  100. cmdTestChunk, cmdTestChunks;
  101. if (cmdTestSplit) {
  102. cmdTestChunk = cmdTestSplit.split("/")[0];
  103. cmdTestChunks = cmdTestSplit.split("/")[1];
  104. return Cmd._split(array, cmdTestChunks)[cmdTestChunk];
  105. } else {
  106. return array;
  107. }
  108. }
  109. },
  110. // ----------------------------------------------------------------------------
  111. // Private API
  112. _messages: [],
  113. _seq: 0,
  114. _callbacks: {},
  115. _callback: function(seq, result) {
  116. var fn = Cmd._callbacks[seq];
  117. delete Cmd._callbacks[seq];
  118. fn(result);
  119. },
  120. _purgeMessages: function(count) {
  121. Cmd._messages = Cmd._messages.slice(count, Cmd._messages.length);
  122. },
  123. _notifyWebDriver: function() {
  124. if (Cmd._pendingNotifier) {
  125. return;
  126. }
  127. var notifier = function() {
  128. var messages,
  129. webDriverCallback = Cmd._webDriverCallback;
  130. if (webDriverCallback) {
  131. messages = JSON.stringify(Cmd._messages);
  132. Cmd._webDriverCallback = null;
  133. Cmd._pendingNotifier = null;
  134. webDriverCallback(messages);
  135. } else {
  136. Cmd._pendingNotifier = notifier;
  137. }
  138. };
  139. notifier();
  140. },
  141. _split: function(a, n) {
  142. var len = a.length,out = [], i = 0;
  143. while (i < len) {
  144. var size = Math.ceil((len - i) / n--);
  145. out.push(a.slice(i, i += size));
  146. }
  147. return out;
  148. },
  149. _getParam: function(name) {
  150. if (name=(new RegExp('[?&]'+encodeURIComponent(name)+'=([^&]*)')).exec(top.location.search)) {
  151. return decodeURIComponent(name[1]);
  152. }
  153. }
  154. };
  155. }