networktester_test.js 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233
  1. // Copyright 2006 The Closure Library Authors. All Rights Reserved.
  2. //
  3. // Licensed under the Apache License, Version 2.0 (the "License");
  4. // you may not use this file except in compliance with the License.
  5. // You may obtain a copy of the License at
  6. //
  7. // http://www.apache.org/licenses/LICENSE-2.0
  8. //
  9. // Unless required by applicable law or agreed to in writing, software
  10. // distributed under the License is distributed on an "AS-IS" BASIS,
  11. // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  12. // See the License for the specific language governing permissions and
  13. // limitations under the License.
  14. goog.provide('goog.net.NetworkTesterTest');
  15. goog.setTestOnly('goog.net.NetworkTesterTest');
  16. goog.require('goog.Uri');
  17. goog.require('goog.net.NetworkTester');
  18. goog.require('goog.testing.MockClock');
  19. goog.require('goog.testing.jsunit');
  20. var clock;
  21. function setUp() {
  22. clock = new goog.testing.MockClock(true);
  23. }
  24. function tearDown() {
  25. clock.dispose();
  26. }
  27. function testSuccess() {
  28. // set up the tster
  29. var handler = new Handler();
  30. var tester = new goog.net.NetworkTester(handler.callback, handler);
  31. assertFalse(tester.isRunning());
  32. tester.start();
  33. assertTrue(handler.isEmpty());
  34. assertTrue(tester.isRunning());
  35. // simulate the image load and verify
  36. var image = tester.image_;
  37. assertEquals(String(tester.getUri()), image.src);
  38. assertTrue(handler.isEmpty());
  39. image.onload.call(null);
  40. assertTrue(handler.dequeue());
  41. assertFalse(tester.isRunning());
  42. }
  43. function testFailure() {
  44. // set up the tester
  45. var handler = new Handler();
  46. var tester = new goog.net.NetworkTester(handler.callback, handler);
  47. assertFalse(tester.isRunning());
  48. tester.start();
  49. assertTrue(handler.isEmpty());
  50. assertTrue(tester.isRunning());
  51. // simulate the image failure and verify
  52. var image = tester.image_;
  53. assertEquals(String(tester.getUri()), image.src);
  54. assertTrue(handler.isEmpty());
  55. image.onerror.call(null);
  56. assertFalse(handler.dequeue());
  57. assertFalse(tester.isRunning());
  58. }
  59. function testAbort() {
  60. // set up the tester
  61. var handler = new Handler();
  62. var tester = new goog.net.NetworkTester(handler.callback, handler);
  63. assertFalse(tester.isRunning());
  64. tester.start();
  65. assertTrue(handler.isEmpty());
  66. assertTrue(tester.isRunning());
  67. // simulate the image abort and verify
  68. var image = tester.image_;
  69. assertEquals(String(tester.getUri()), image.src);
  70. assertTrue(handler.isEmpty());
  71. image.onabort.call(null);
  72. assertFalse(handler.dequeue());
  73. assertFalse(tester.isRunning());
  74. }
  75. function testTimeout() {
  76. // set up the tester
  77. var handler = new Handler();
  78. var tester = new goog.net.NetworkTester(handler.callback, handler);
  79. assertFalse(tester.isRunning());
  80. tester.start();
  81. assertTrue(handler.isEmpty());
  82. assertTrue(tester.isRunning());
  83. // simulate the image timeout and verify
  84. var image = tester.image_;
  85. assertEquals(String(tester.getUri()), image.src);
  86. assertTrue(handler.isEmpty());
  87. clock.tick(10000);
  88. assertFalse(handler.dequeue());
  89. assertFalse(tester.isRunning());
  90. }
  91. function testRetries() {
  92. // set up the tester
  93. var handler = new Handler();
  94. var tester = new goog.net.NetworkTester(handler.callback, handler);
  95. tester.setNumRetries(1);
  96. assertEquals(tester.getAttemptCount(), 0);
  97. assertFalse(tester.isRunning());
  98. tester.start();
  99. assertTrue(handler.isEmpty());
  100. assertTrue(tester.isRunning());
  101. assertEquals(tester.getAttemptCount(), 1);
  102. // try number 1 fails
  103. var image = tester.image_;
  104. assertEquals(String(tester.getUri()), image.src);
  105. assertTrue(handler.isEmpty());
  106. image.onerror.call(null);
  107. assertTrue(handler.isEmpty());
  108. assertTrue(tester.isRunning());
  109. assertEquals(tester.getAttemptCount(), 2);
  110. // try number 2 succeeds
  111. image = tester.image_;
  112. assertEquals(String(tester.getUri()), image.src);
  113. assertTrue(handler.isEmpty());
  114. image.onload.call(null);
  115. assertTrue(handler.dequeue());
  116. assertFalse(tester.isRunning());
  117. assertEquals(tester.getAttemptCount(), 2);
  118. }
  119. function testPauseBetweenRetries() {
  120. // set up the tester
  121. var handler = new Handler();
  122. var tester = new goog.net.NetworkTester(handler.callback, handler);
  123. tester.setNumRetries(1);
  124. tester.setPauseBetweenRetries(1000);
  125. assertFalse(tester.isRunning());
  126. tester.start();
  127. assertTrue(handler.isEmpty());
  128. assertTrue(tester.isRunning());
  129. // try number 1 fails
  130. var image = tester.image_;
  131. assertEquals(String(tester.getUri()), image.src);
  132. assertTrue(handler.isEmpty());
  133. image.onerror.call(null);
  134. assertTrue(handler.isEmpty());
  135. assertTrue(tester.isRunning());
  136. // need to pause 1000 ms for the second attempt
  137. assertNull(tester.image_);
  138. clock.tick(1000);
  139. // try number 2 succeeds
  140. image = tester.image_;
  141. assertEquals(String(tester.getUri()), image.src);
  142. assertTrue(handler.isEmpty());
  143. image.onload.call(null);
  144. assertTrue(handler.dequeue());
  145. assertFalse(tester.isRunning());
  146. }
  147. function testNonDefaultUri() {
  148. var handler = new Handler();
  149. var newUri = new goog.Uri('//www.google.com/images/cleardot2.gif');
  150. var tester = new goog.net.NetworkTester(handler.callback, handler, newUri);
  151. var testerUri = tester.getUri();
  152. assertTrue(testerUri.toString().indexOf('cleardot2') > -1);
  153. }
  154. function testOffline() {
  155. // set up the tester
  156. var handler = new Handler();
  157. var tester = new goog.net.NetworkTester(handler.callback, handler);
  158. var orgGetNavigatorOffline = goog.net.NetworkTester.getNavigatorOffline_;
  159. goog.net.NetworkTester.getNavigatorOffline_ = function() { return true; };
  160. try {
  161. assertFalse(tester.isRunning());
  162. tester.start();
  163. assertTrue(handler.isEmpty());
  164. assertTrue(tester.isRunning());
  165. // the call is done async
  166. clock.tick(1);
  167. assertFalse(handler.dequeue());
  168. assertFalse(tester.isRunning());
  169. } finally {
  170. // Clean up!
  171. goog.net.NetworkTester.getNavigatorOffline_ = orgGetNavigatorOffline;
  172. }
  173. }
  174. // Handler object for verifying callback
  175. function Handler() {
  176. this.events_ = [];
  177. }
  178. function testGetAttemptCount() {
  179. // set up the tester
  180. var handler = new Handler();
  181. var tester = new goog.net.NetworkTester(handler.callback, handler);
  182. assertEquals(tester.getAttemptCount(), 0);
  183. assertTrue(tester.attempt_ === tester.getAttemptCount());
  184. assertFalse(tester.isRunning());
  185. tester.start();
  186. assertTrue(tester.isRunning());
  187. assertTrue(tester.attempt_ === tester.getAttemptCount());
  188. }
  189. Handler.prototype.callback = function(result) {
  190. this.events_.push(result);
  191. };
  192. Handler.prototype.isEmpty = function() {
  193. return this.events_.length == 0;
  194. };
  195. Handler.prototype.dequeue = function() {
  196. if (this.isEmpty()) {
  197. throw Error('Handler is empty');
  198. }
  199. return this.events_.shift();
  200. };
  201. // override image constructor for test - can't use a real image due to
  202. // async load of images - have to simulate it
  203. function Image() {}