238 lines
6.7 KiB
JavaScript
238 lines
6.7 KiB
JavaScript
// 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() {
|
|
}
|