sku-pg
Version:
Skulpt is a Javascript implementation of Python 2.x. Python that runs in your browser!
454 lines (384 loc) • 13.5 kB
HTML
<html>
<!--
Copyright 2007 The Closure Library Authors. All Rights Reserved.
Use of this source code is governed by the Apache License, Version 2.0.
See the COPYING file for details.
-->
<!--
-->
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>Closure Unit Tests - goog.gears.ManagedResourceStore</title>
<script src="../base.js"></script>
<script>
goog.require('goog.gears.ManagedResourceStore');
goog.require('goog.testing.jsunit');
goog.require('goog.testing.MockClock');
</script>
</head>
<body>
<script>
var clock;
var HAS_PROGRESS_EVENTS_VERSION = '0.3.6';
var shouldFail;
function setUp() {
clock = new goog.testing.MockClock(true);
shouldFail = false;
}
function tearDown() {
clock.dispose();
}
// Create mocks
goog.gears.hasFactory = function() {
return true;
};
var mockFactory = {
create: function(classId) {
if (classId == 'beta.timer') {
// window implements the timer interface
return window;
} else if (classId == 'beta.localserver') {
return mockLocalServer;
}
}
};
// Use this to change the mock gears factory as needed
function setGearsHasProgressEvents(gearsHasProgressEvents) {
mockFactory.version = gearsHasProgressEvents ?
HAS_PROGRESS_EVENTS_VERSION : '0.1';
}
setGearsHasProgressEvents(false);
goog.gears.getFactory = function() {
return mockFactory;
};
var mockLocalServer = {
openManagedStore: function(name, requiredCookie) {
return new MockManagedResourceStore;
},
createManagedStore: function(name, requiredCookie) {
return new MockManagedResourceStore;
},
removeManagedStore: function(name, requiredCookie) {
}
};
function MockManagedResourceStore() {}
MockManagedResourceStore.prototype = {
manifestUrl: '',
currentVersion: '',
updateStatus: 0,
enabled: true,
lastErrorMessage: '',
checkForUpdate: function() {
// Define some functions that will be used to trigger fake callbacks at
// certain times
var self = this;
function setUpdateStatus(n, t) {
window.setTimeout(function() {
self.updateStatus = n;
}, t);
}
function callOnProgress(complete, total, t) {
window.setTimeout(function() {
self.onprogress({filesComplete: complete, filesTotal: total});
}, t);
}
function callOnComplete(version, t) {
window.setTimeout(function() {
self.oncomplete({newVersion: version});
}, t);
}
function callOnError(message, t) {
window.setTimeout(function() {
self.lastErrorMessage = message;
self.onerror({message: message});
}, t);
}
var OK = goog.gears.ManagedResourceStore.UpdateStatus.OK;
var CHECKING = goog.gears.ManagedResourceStore.UpdateStatus.CHECKING;
var DOWNLOADING = goog.gears.ManagedResourceStore.UpdateStatus.DOWNLOADING;
var FAILURE = goog.gears.ManagedResourceStore.UpdateStatus.FAILURE;
this.updateStatus = CHECKING;
if (goog.gears.getFactory().version == HAS_PROGRESS_EVENTS_VERSION) {
callOnProgress(0, 0, 0);
setUpdateStatus(DOWNLOADING, 1000);
callOnProgress(0, 3, 1000);
callOnProgress(1, 3, 2000);
callOnProgress(2, 3, 2500);
if (shouldFail) {
setUpdateStatus(FAILURE, 3000);
callOnError('ERROR', 3000);
} else {
callOnProgress(3, 3, 3000);
setUpdateStatus(OK, 3000);
callOnComplete('NEW_VERSION', 3000);
}
} else {
// Use n * 1000 + 1 to make sure this happens just after a tick
setUpdateStatus(DOWNLOADING, 1001);
if (shouldFail) {
self.lastErrorMessage = 'ERROR';
setUpdateStatus(FAILURE, 2001);
} else {
setUpdateStatus(OK, 2001);
}
}
}
};
// Start the real testing
var MANIFEST_NAME = 'testName';
function testManagedResourceStore() {
var store = new goog.gears.ManagedResourceStore('tester',
'managed-resource-store-test');
store.create(MANIFEST_NAME);
assertNotNull('No managed resource store object', store);
assertTrue('Managed resource store not created', store.exists());
}
function testDoubleCreate() {
var store = new goog.gears.ManagedResourceStore('tester',
'managed-resource-store-test');
store.create(MANIFEST_NAME);
assertTrue('Managed resource store not created', store.exists());
store.create(MANIFEST_NAME);
assertTrue('Managed resource store no longer exists', store.exists());
}
function testUpdateOldSuccess() {
setGearsHasProgressEvents(false);
var progressCount = 0;
var errorCount = 0;
var completeCount = 0;
var successCount = 0;
var store = new goog.gears.ManagedResourceStore('tester',
'managed-resource-store-test');
store.create(MANIFEST_NAME);
goog.events.listen(store, goog.gears.ManagedResourceStore.EventType.PROGRESS,
function(e) {
progressCount++;
if (clock.getCurrentTime() == 0) {
assertEquals('Should be 0 complete files',
0, store.getFilesComplete());
assertEquals('Should be 1 total files',
1, store.getFilesTotal());
}
if (clock.getCurrentTime() == 2000) {
assertEquals('Should be 1 complete files',
1, store.getFilesComplete());
assertEquals('Should be 1 total files',
1, store.getFilesTotal());
}
});
goog.events.listen(store, goog.gears.ManagedResourceStore.EventType.COMPLETE,
function(e) {
completeCount++;
assertEquals('We should be complete at 2500ms', 2500,
clock.getCurrentTime());
assertTrue('Should be successful', store.isSuccess());
});
goog.events.listen(store, goog.gears.ManagedResourceStore.EventType.ERROR,
function(e) {
errorCount++;
assertEquals('ERROR', e.errorMessage);
});
goog.events.listen(store, goog.gears.ManagedResourceStore.EventType.SUCCESS,
function(e) {
successCount++;
});
store.update();
clock.tick(500);
clock.tick(500);
clock.tick(500);
clock.tick(500);
clock.tick(500);
clock.tick(500);
clock.tick(500);
assertEquals('Should have gotten 2 progress events', 2, progressCount);
assertEquals('Should have gotten 1 complete events', 1, completeCount);
assertEquals('Should have gotten 0 error events', 0, errorCount);
assertEquals('Should have gotten 1 success events', 1, successCount);
}
function testUpdateOldFailure() {
shouldFail = true;
setGearsHasProgressEvents(false);
var progressCount = 0;
var errorCount = 0;
var completeCount = 0;
var successCount = 0;
var store = new goog.gears.ManagedResourceStore('tester',
'managed-resource-store-test');
store.create(MANIFEST_NAME);
goog.events.listen(store, goog.gears.ManagedResourceStore.EventType.PROGRESS,
function(e) {
progressCount++;
if (clock.getCurrentTime() == 0) {
assertEquals('Should be 0 complete files',
0, store.getFilesComplete());
assertEquals('Should be 1 total files',
1, store.getFilesTotal());
}
if (clock.getCurrentTime() == 2000) {
assertEquals('Should be 1 complete files',
1, store.getFilesComplete());
assertEquals('Should be 1 total files',
1, store.getFilesTotal());
}
});
goog.events.listen(store, goog.gears.ManagedResourceStore.EventType.COMPLETE,
function(e) {
completeCount++;
assertEquals('We should be complete at 2500ms', 2500,
clock.getCurrentTime());
assertFalse('Should not be successful', store.isSuccess());
});
goog.events.listen(store, goog.gears.ManagedResourceStore.EventType.ERROR,
function(e) {
errorCount++;
assertEquals('ERROR', e.errorMessage);
});
store.update();
clock.tick(500);
clock.tick(500);
clock.tick(500);
clock.tick(500);
clock.tick(500);
clock.tick(500);
clock.tick(500);
assertEquals('Should have gotten 1 progress events', 1, progressCount);
assertEquals('Should have gotten 1 complete events', 1, completeCount);
assertEquals('Should have gotten 1 error events', 1, errorCount);
assertEquals('Should have gotten 0 success events', 0, successCount);
}
function testUpdateNewSuccess() {
setGearsHasProgressEvents(true);
var progressCount = 0;
var errorCount = 0;
var completeCount = 0;
var successCount = 0;
var store = new goog.gears.ManagedResourceStore('tester',
'managed-resource-store-test');
store.create(MANIFEST_NAME);
goog.events.listen(store, goog.gears.ManagedResourceStore.EventType.PROGRESS,
function(e) {
progressCount++;
if (clock.getCurrentTime() == 0) {
assertEquals('Should be 1 total files',
1, store.getFilesTotal());
assertEquals('Should be 0 complete files',
0, store.getFilesComplete());
} else {
assertEquals('Should be 3 total files',
3, store.getFilesTotal());
}
if (clock.getCurrentTime() == 2000) {
assertEquals('Should be 1 complete files',
1, store.getFilesComplete());
} else if (clock.getCurrentTime() == 2500) {
assertEquals('Should be 2 complete files',
2, store.getFilesComplete());
} else if (clock.getCurrentTime() == 3000) {
assertEquals('Should be 2 complete files',
3, store.getFilesComplete());
}
});
goog.events.listen(store, goog.gears.ManagedResourceStore.EventType.COMPLETE,
function(e) {
completeCount++;
assertEquals('We should be complete at 3000ms', 3000,
clock.getCurrentTime());
assertTrue('Should be successful', store.isSuccess());
});
goog.events.listen(store, goog.gears.ManagedResourceStore.EventType.ERROR,
function(e) {
errorCount++;
assertEquals('ERROR', e.errorMessage);
});
goog.events.listen(store, goog.gears.ManagedResourceStore.EventType.SUCCESS,
function(e) {
assertEquals('success at 3000ms', 3000,
clock.getCurrentTime());
successCount++;
});
store.update();
clock.tick(500);
clock.tick(500);
clock.tick(500);
clock.tick(500);
clock.tick(500);
clock.tick(500);
clock.tick(500);
// Starts at 0/0 so we don't get progress for that
// 0/3, 1/3, 2/3, 3/3
assertEquals('Should have gotten 4 progress events', 4, progressCount);
assertEquals('Should have gotten 1 complete events', 1, completeCount);
assertEquals('Should have gotten 0 error events', 0, errorCount);
assertEquals('Should have gotten 1 success events', 1, successCount);
}
function testUpdateNewFailure() {
shouldFail = true;
setGearsHasProgressEvents(true);
var progressCount = 0;
var errorCount = 0;
var completeCount = 0;
var successCount = 0;
var store = new goog.gears.ManagedResourceStore('tester',
'managed-resource-store-test');
store.create(MANIFEST_NAME);
goog.events.listen(store, goog.gears.ManagedResourceStore.EventType.PROGRESS,
function(e) {
progressCount++;
if (clock.getCurrentTime() == 0) {
assertEquals('Should be 1 total files',
1, store.getFilesTotal());
assertEquals('Should be 0 complete files',
0, store.getFilesComplete());
} else {
assertEquals('Should be 3 total files',
3, store.getFilesTotal());
}
if (clock.getCurrentTime() == 2000) {
assertEquals('Should be 1 complete files',
1, store.getFilesComplete());
} else if (clock.getCurrentTime() == 2500) {
assertEquals('Should be 2 complete files',
2, store.getFilesComplete());
} else if (clock.getCurrentTime() == 3000) {
assertEquals('Should be 2 complete files',
3, store.getFilesComplete());
}
});
goog.events.listen(store, goog.gears.ManagedResourceStore.EventType.COMPLETE,
function(e) {
completeCount++;
assertEquals('We should be complete at 3000ms', 3000,
clock.getCurrentTime());
assertFalse('Should not be successful', store.isSuccess());
});
goog.events.listen(store, goog.gears.ManagedResourceStore.EventType.ERROR,
function(e) {
errorCount++;
assertEquals('ERROR', e.errorMessage);
});
goog.events.listen(store, goog.gears.ManagedResourceStore.EventType.SUCCESS,
function(e) {
assertEquals('success at 3000ms', 3000,
clock.getCurrentTime());
successCount++;
});
store.update();
clock.tick(500);
clock.tick(500);
clock.tick(500);
clock.tick(500);
clock.tick(500);
clock.tick(500);
clock.tick(500);
// When we fail we don't get the third file
// Starts at 0/0 so we don't get progress for that
// 0/3, 1/3, 2/3
assertEquals('Should have gotten 3 progress events', 3, progressCount);
assertEquals('Should have gotten 1 complete events', 1, completeCount);
assertEquals('Should have gotten 1 error events', 1, errorCount);
assertEquals('Should have gotten 0 success events', 0, successCount);
}
</script>
</body>
</html>