123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233 |
- // Copyright 2006 The Closure Library Authors. All Rights Reserved.
- //
- // Licensed under the Apache License, Version 2.0 (the "License");
- // you may not use this file except in compliance with the License.
- // You may obtain a copy of the License at
- //
- // http://www.apache.org/licenses/LICENSE-2.0
- //
- // Unless required by applicable law or agreed to in writing, software
- // distributed under the License is distributed on an "AS-IS" BASIS,
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- // See the License for the specific language governing permissions and
- // limitations under the License.
- goog.provide('goog.net.NetworkTesterTest');
- goog.setTestOnly('goog.net.NetworkTesterTest');
- goog.require('goog.Uri');
- goog.require('goog.net.NetworkTester');
- goog.require('goog.testing.MockClock');
- goog.require('goog.testing.jsunit');
- var clock;
- function setUp() {
- clock = new goog.testing.MockClock(true);
- }
- function tearDown() {
- clock.dispose();
- }
- function testSuccess() {
- // set up the tster
- var handler = new Handler();
- var tester = new goog.net.NetworkTester(handler.callback, handler);
- assertFalse(tester.isRunning());
- tester.start();
- assertTrue(handler.isEmpty());
- assertTrue(tester.isRunning());
- // simulate the image load and verify
- var image = tester.image_;
- assertEquals(String(tester.getUri()), image.src);
- assertTrue(handler.isEmpty());
- image.onload.call(null);
- assertTrue(handler.dequeue());
- assertFalse(tester.isRunning());
- }
- function testFailure() {
- // set up the tester
- var handler = new Handler();
- var tester = new goog.net.NetworkTester(handler.callback, handler);
- assertFalse(tester.isRunning());
- tester.start();
- assertTrue(handler.isEmpty());
- assertTrue(tester.isRunning());
- // simulate the image failure and verify
- var image = tester.image_;
- assertEquals(String(tester.getUri()), image.src);
- assertTrue(handler.isEmpty());
- image.onerror.call(null);
- assertFalse(handler.dequeue());
- assertFalse(tester.isRunning());
- }
- function testAbort() {
- // set up the tester
- var handler = new Handler();
- var tester = new goog.net.NetworkTester(handler.callback, handler);
- assertFalse(tester.isRunning());
- tester.start();
- assertTrue(handler.isEmpty());
- assertTrue(tester.isRunning());
- // simulate the image abort and verify
- var image = tester.image_;
- assertEquals(String(tester.getUri()), image.src);
- assertTrue(handler.isEmpty());
- image.onabort.call(null);
- assertFalse(handler.dequeue());
- assertFalse(tester.isRunning());
- }
- function testTimeout() {
- // set up the tester
- var handler = new Handler();
- var tester = new goog.net.NetworkTester(handler.callback, handler);
- assertFalse(tester.isRunning());
- tester.start();
- assertTrue(handler.isEmpty());
- assertTrue(tester.isRunning());
- // simulate the image timeout and verify
- var image = tester.image_;
- assertEquals(String(tester.getUri()), image.src);
- assertTrue(handler.isEmpty());
- clock.tick(10000);
- assertFalse(handler.dequeue());
- assertFalse(tester.isRunning());
- }
- function testRetries() {
- // set up the tester
- var handler = new Handler();
- var tester = new goog.net.NetworkTester(handler.callback, handler);
- tester.setNumRetries(1);
- assertEquals(tester.getAttemptCount(), 0);
- assertFalse(tester.isRunning());
- tester.start();
- assertTrue(handler.isEmpty());
- assertTrue(tester.isRunning());
- assertEquals(tester.getAttemptCount(), 1);
- // try number 1 fails
- var image = tester.image_;
- assertEquals(String(tester.getUri()), image.src);
- assertTrue(handler.isEmpty());
- image.onerror.call(null);
- assertTrue(handler.isEmpty());
- assertTrue(tester.isRunning());
- assertEquals(tester.getAttemptCount(), 2);
- // try number 2 succeeds
- image = tester.image_;
- assertEquals(String(tester.getUri()), image.src);
- assertTrue(handler.isEmpty());
- image.onload.call(null);
- assertTrue(handler.dequeue());
- assertFalse(tester.isRunning());
- assertEquals(tester.getAttemptCount(), 2);
- }
- function testPauseBetweenRetries() {
- // set up the tester
- var handler = new Handler();
- var tester = new goog.net.NetworkTester(handler.callback, handler);
- tester.setNumRetries(1);
- tester.setPauseBetweenRetries(1000);
- assertFalse(tester.isRunning());
- tester.start();
- assertTrue(handler.isEmpty());
- assertTrue(tester.isRunning());
- // try number 1 fails
- var image = tester.image_;
- assertEquals(String(tester.getUri()), image.src);
- assertTrue(handler.isEmpty());
- image.onerror.call(null);
- assertTrue(handler.isEmpty());
- assertTrue(tester.isRunning());
- // need to pause 1000 ms for the second attempt
- assertNull(tester.image_);
- clock.tick(1000);
- // try number 2 succeeds
- image = tester.image_;
- assertEquals(String(tester.getUri()), image.src);
- assertTrue(handler.isEmpty());
- image.onload.call(null);
- assertTrue(handler.dequeue());
- assertFalse(tester.isRunning());
- }
- function testNonDefaultUri() {
- var handler = new Handler();
- var newUri = new goog.Uri('//www.google.com/images/cleardot2.gif');
- var tester = new goog.net.NetworkTester(handler.callback, handler, newUri);
- var testerUri = tester.getUri();
- assertTrue(testerUri.toString().indexOf('cleardot2') > -1);
- }
- function testOffline() {
- // set up the tester
- var handler = new Handler();
- var tester = new goog.net.NetworkTester(handler.callback, handler);
- var orgGetNavigatorOffline = goog.net.NetworkTester.getNavigatorOffline_;
- goog.net.NetworkTester.getNavigatorOffline_ = function() { return true; };
- try {
- assertFalse(tester.isRunning());
- tester.start();
- assertTrue(handler.isEmpty());
- assertTrue(tester.isRunning());
- // the call is done async
- clock.tick(1);
- assertFalse(handler.dequeue());
- assertFalse(tester.isRunning());
- } finally {
- // Clean up!
- goog.net.NetworkTester.getNavigatorOffline_ = orgGetNavigatorOffline;
- }
- }
- // Handler object for verifying callback
- function Handler() {
- this.events_ = [];
- }
- function testGetAttemptCount() {
- // set up the tester
- var handler = new Handler();
- var tester = new goog.net.NetworkTester(handler.callback, handler);
- assertEquals(tester.getAttemptCount(), 0);
- assertTrue(tester.attempt_ === tester.getAttemptCount());
- assertFalse(tester.isRunning());
- tester.start();
- assertTrue(tester.isRunning());
- assertTrue(tester.attempt_ === tester.getAttemptCount());
- }
- Handler.prototype.callback = function(result) {
- this.events_.push(result);
- };
- Handler.prototype.isEmpty = function() {
- return this.events_.length == 0;
- };
- Handler.prototype.dequeue = function() {
- if (this.isEmpty()) {
- throw Error('Handler is empty');
- }
- return this.events_.shift();
- };
- // override image constructor for test - can't use a real image due to
- // async load of images - have to simulate it
- function Image() {}
|