este-library-oldschool
Version:
Library for github.com/steida/este.git
217 lines • 7.63 kB
JavaScript
// Generated by github.com/steida/coffee2closure 900.1.18
suite('este.labs.app.LastWinUrlLoader', function() {
var LastWinUrlLoader, incrementLoadCall, load, loadCalled, loadFail, loader;
LastWinUrlLoader = este.labs.app.LastWinUrlLoader;
loader = null;
loadCalled = null;
setup(function() {
loader = new LastWinUrlLoader;
return loadCalled = {};
});
load = function(url, opt_delay) {
return loader.load(url, function() {
incrementLoadCall(url);
return new goog.Promise(function(fulfill, reject) {
if (opt_delay != null) {
return setTimeout((function() {
return fulfill(url);
}), opt_delay);
} else {
return fulfill(url);
}
});
});
};
loadFail = function(url, opt_delay) {
return loader.load(url, function() {
incrementLoadCall(url);
return new goog.Promise(function(fulfill, reject) {
if (opt_delay != null) {
return setTimeout((function() {
return reject(url);
}), opt_delay);
} else {
return reject(url);
}
});
});
};
incrementLoadCall = function(url) {
if (loadCalled[url] == null) {
loadCalled[url] = 0;
}
return loadCalled[url]++;
};
suite('load url1', function() {
return test('should call load and return its promise', function(done) {
return load('url1').then(function(value) {
assert.equal(value, 'url1');
assert.equal(loadCalled.url1, 1);
return done();
});
});
});
suite('loadFail url1', function() {
return test('should reject url1 with reason as LastWinUrlLoader.Error', function(done) {
return loadFail('url1').then(null, function(error) {
assert.instanceOf(error, este.labs.app.LastWinUrlLoader.Error);
assert.equal(error.reason, 'url1');
assert.isFalse(error.isSilent, 'url1');
assert.equal(loadCalled.url1, 1);
return done();
});
});
});
suite('load url1 then url2 before url1 is done', function() {
return test('should cancel url1 with abort message', function(done) {
var url1Reject;
url1Reject = sinon.spy();
load('url1', 20).then(null, url1Reject);
return load('url2', 10).then(function(value) {
assert.equal(url1Reject.args[0][0].message, 'abort');
return done();
});
});
});
suite('loadFail url1 then url2 before url1 is done', function() {
return test('should reject url1 as silent LastWinUrlLoader.Error', function(done) {
loadFail('url1', 20).then(null, function(error) {
assert.equal(error.message, 'abort');
return done();
});
return load('url2', 10);
});
});
suite('load url1 then url2 after url1 is done', function() {
return test('should cancel url1 with abort message', function(done) {
var url1Reject;
url1Reject = sinon.spy();
load('url1', 10).then(null, url1Reject);
return load('url2', 20).then(function(value) {
assert.equal(url1Reject.args[0][0].message, 'abort');
return done();
});
});
});
suite('loadFail url1 then url2 after url1 is done', function() {
return test('should reject url1 as silent LastWinUrlLoader.Error', function(done) {
loadFail('url1', 10).then(null, function(error) {
assert.instanceOf(error, este.labs.app.LastWinUrlLoader.Error);
assert.equal(error.reason, 'url1');
assert.isTrue(error.isSilent, 'url1');
return done();
});
return load('url2', 20);
});
});
suite('load url1 and after finish load url2', function() {
return test('should resolve both url1 and url2', function(done) {
var url1Fulfill;
url1Fulfill = sinon.spy();
load('url1', 10).then(url1Fulfill);
return setTimeout(function() {
return load('url2', 10).then(function(value) {
assert.equal(url1Fulfill.args[0], 'url1');
assert.equal(value, 'url2');
return done();
});
}, 20);
});
});
suite('loadFail url1 and after finish load url2', function() {
return test('should resolve both url1 and url2', function(done) {
var url1Fulfill;
url1Fulfill = sinon.spy();
loadFail('url1', 10).then(null, url1Fulfill);
return setTimeout(function() {
return load('url2', 10).then(function(value) {
assert.isTrue(url1Fulfill.called);
assert.equal(url1Fulfill.args[0][0].reason, 'url1');
assert.isFalse(url1Fulfill.args[0][0].isSilent);
assert.equal(value, 'url2');
return done();
});
}, 20);
});
});
suite('load url1 twice before first is done', function() {
test('should call load method just once', function() {
load('url1', 20);
load('url1', 1);
return assert.equal(loadCalled.url1, 1);
});
return test('should cancel second load with pending message', function(done) {
var url1Reject;
url1Reject = sinon.spy();
load('url1', 20).then(function(value) {
assert.equal(url1Reject.args[0][0].message, 'pending');
return done();
});
return load('url1', 1).then(null, url1Reject);
});
});
suite('load url1 twice after first is done', function() {
return test('should call load method twice', function(done) {
load('url1', 10);
return setTimeout(function() {
return load('url1').then(function(value) {
assert.equal(loadCalled.url1, 2);
return done();
});
}, 20);
});
});
suite('load url1 then url2 then url3 before url1 and url2 are finished', function() {
return test('should resolve url3 and reject url1 and url2 as cancelled with abort', function(done) {
var url1Reject, url2Reject;
url1Reject = sinon.spy();
url2Reject = sinon.spy();
load('url1').then(null, url1Reject);
load('url2').then(null, url2Reject);
return load('url3').then(function(value) {
assert.equal(url2Reject.args[0][0].message, 'abort');
assert.equal(url2Reject.args[0][0].message, 'abort');
return done();
});
});
});
suite('load url1 then loadFail url2 before url1 is done', function() {
return test('should cancel url1 with abort', function(done) {
var url1Reject;
url1Reject = sinon.spy();
load('url1', 20).then(null, url1Reject);
return loadFail('url2').then(null, function(error) {
assert.equal(url1Reject.args[0][0].message, 'abort');
return done();
});
});
});
return suite('timeout', function() {
test('should cancel everything with timeout message', function(done) {
var url1Reject, url2Reject, url3Reject;
loader.timeoutMs = 10;
url1Reject = sinon.spy();
url2Reject = sinon.spy();
url3Reject = sinon.spy();
load('url1', 40).then(null, url1Reject);
load('url2', 40).then(null, url2Reject);
load('url3', 40).then(null, url3Reject);
return setTimeout(function() {
assert.equal(url1Reject.args[0][0].message, 'timeout');
assert.equal(url2Reject.args[0][0].message, 'timeout');
assert.equal(url3Reject.args[0][0].message, 'timeout');
return done();
}, 20);
});
return test('should be clearTimeouted after load is done', function(done) {
loader.timeoutMs = 40;
load('url1', 10);
return setTimeout(function() {
return load('url1', 30).then(function(value) {
assert.equal(value, 'url1');
return done();
});
}, 20);
});
});
});