sku-pg
Version:
Skulpt is a Javascript implementation of Python 2.x. Python that runs in your browser!
165 lines (133 loc) • 4.93 kB
HTML
<html>
<!--
Copyright 2006 The Closure Library Authors. All Rights Reserved.
Use of this source code is governed by an Apache 2.0 License.
See the COPYING file for details.
-->
<!--
Author: zachlloyd@google.com (Zachary Lloyd)
-->
<head>
<title>Closure Unit Tests - goog.net.ImageLoader</title>
<script src="../base.js"></script>
<script>
goog.require('goog.events');
goog.require('goog.net.ImageLoader');
goog.require('goog.structs.Map');
goog.require('goog.testing.jsunit');
</script>
</head>
<body>
<script>
var TEST_IMAGES = new goog.structs.Map();
// TEST_IMAGES.set(FileName, Expected Size (width, height), Expected event)
var EVENT_TYPE_LOAD = goog.events.EventType.LOAD;
TEST_IMAGES.set('imageloader_testimg1.gif', [20, 20, EVENT_TYPE_LOAD]);
TEST_IMAGES.set('imageloader_testimg2.gif', [20, 20, EVENT_TYPE_LOAD]);
TEST_IMAGES.set('imageloader_testimg3.gif', [32, 32, EVENT_TYPE_LOAD]);
var EVENT_TYPE_ERROR = goog.net.EventType.ERROR;
TEST_IMAGES.set('this-is-not-image-1.gif', [0, 0, EVENT_TYPE_ERROR]);
TEST_IMAGES.set('this-is-not-image-2.gif', [0, 0, EVENT_TYPE_ERROR]);
var TIMEOUT = 5000;
// in milleseconds
// Create a new test case.
var imageLoaderTestCase = new goog.testing.TestCase(document.title);
var setUpPageStatus;
// Keep track of time so we can timeout if the images don't load.
imageLoaderTestCase.elapsedTime_ = 0;
imageLoaderTestCase.results_ = new goog.structs.Map();
/** True once the test environment is set up. */
imageLoaderTestCase.isSetUp = false;
/** True once the page is ready for the test to be run. */
imageLoaderTestCase.isReady = false;
/** Sets up the test environment, adds tests and sets up the worker pools. */
imageLoaderTestCase.setUpTests = function() {
this.log('Setting tests up');
this.add(new goog.testing.TestCase.Test('testCompleteResults',
this.testCompleteResults, this));
this.isSetUp = true;
var imageLoader = new goog.net.ImageLoader();
var keys = TEST_IMAGES.getKeys();
for (var i = 0; i < keys.length; i++) {
this.log('Adding image: ' + keys[i]);
imageLoader.addImage('img_' + i, keys[i]);
}
goog.events.listen(imageLoader, goog.events.EventType.LOAD, this);
goog.events.listen(imageLoader, goog.net.EventType.COMPLETE, this);
goog.events.listen(imageLoader, goog.net.EventType.ERROR, this);
imageLoader.start();
};
/** Handles any events fired on the imageLoader */
imageLoaderTestCase.handleEvent = function(e) {
this.log('handleEvent, type: ' + e.type);
switch (e.type) {
case goog.events.EventType.LOAD:
var image = e.target;
this.results_.set(image.src.substring(image.src.lastIndexOf('/') + 1),
[image.naturalWidth, image.naturalHeight, e.type]);
break;
case goog.net.EventType.ERROR:
var image = e.target;
this.results_.set(image.src.substring(image.src.lastIndexOf('/') + 1),
[image.naturalWidth, image.naturalHeight, e.type]);
break;
case goog.net.EventType.COMPLETE:
setUpPageStatus = 'complete';
this.isReady = true;
break;
}
};
/** Tests the results. */
imageLoaderTestCase.testCompleteResults = function() {
var keys = TEST_IMAGES.getKeys();
for (var i = 0; i < keys.length; i++) {
var key = keys[i];
this.log(key);
// Check if fires the COMPLETE event.
assertTrue('Image is not loaded completely',
this.results_.containsKey(key));
// Chcekc size.
assertTrue('Image size is not correct',
this.results_.get(key)[0] == TEST_IMAGES.get(key)[0] &&
this.results_.get(key)[1] == TEST_IMAGES.get(key)[1]);
// Check if fired the correct event.
assertTrue('Event *' + TEST_IMAGES.get(key)[2] + '* must be fired',
this.results_.get(key)[2] == TEST_IMAGES.get(key)[2]);
}
};
/** Waits until the tests are ready to begin, before running them. */
imageLoaderTestCase.runTests = function() {
if (!this.isSetUp) {
this.setUpTests();
}
if (this.isReady) {
this.execute();
} else {
if (this.elapsedTime_ > TIMEOUT) {
this.log('timed out');
setUpPageStatus = 'complete';
this.isReady = true;
return;
}
this.log('Not ready, waiting');
this.elapsedTime_ += 100;
// Try again in 100ms
setTimeout('imageLoaderTestCase.runTests()', 100);
}
};
/** Used by the JsUnit test runner. */
function testCompleteResults() {
imageLoaderTestCase.testCompleteResults();
}
/** Used by the JsUnit test runner. */
function setUpPage() {
imageLoaderTestCase.runTests();
}
/** Standalone Closure Test Runner. */
if (typeof G_testRunner != 'undefined') {
G_testRunner.initialize(imageLoaderTestCase);
}
</script>
</body>
</html>