Publish Vulpes Preview 15 sources for desktop, Android and Tundra
Share Gaia assets and adapters, keep private profiles and development documents local, and update both public READMEs.
This commit is contained in:
parent
93e3a48004
commit
b38dea0597
25901 changed files with 9982925 additions and 369 deletions
163
gaia/apps/calendar/test/unit/worker/manager_test.js
Executable file
163
gaia/apps/calendar/test/unit/worker/manager_test.js
Executable file
|
|
@ -0,0 +1,163 @@
|
|||
define(function(require) {
|
||||
'use strict';
|
||||
|
||||
var Manager = require('worker/manager');
|
||||
|
||||
/**
|
||||
* This test should cover the basics of
|
||||
* both the manager and the thread.
|
||||
*/
|
||||
suite('worker/manager', function() {
|
||||
var subject;
|
||||
|
||||
function MockWorker(handler) {
|
||||
return function WorkerLike(url) {
|
||||
this.url = url;
|
||||
this.onerror = this.onmessage = this.terminate = Math.min;
|
||||
this.sent = [];
|
||||
|
||||
this.addEventListener = function(type, func) {
|
||||
if (type == 'error') {
|
||||
this.onerror = func;
|
||||
} else if (type == 'message') {
|
||||
this.onmessage = func;
|
||||
}
|
||||
};
|
||||
|
||||
this.respond = function(message) {
|
||||
this.onmessage({data: message});
|
||||
};
|
||||
|
||||
var self = this;
|
||||
this.postMessage = function(msg) {
|
||||
setTimeout(function() {handler.call(self, msg);}, 10);
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
setup(function() {
|
||||
subject = new Manager();
|
||||
subject.Worker = MockWorker(Math.min);
|
||||
});
|
||||
|
||||
teardown(function() {
|
||||
});
|
||||
|
||||
suite('#add', function() {
|
||||
test('single role', function() {
|
||||
subject.add('test', 'foo.js');
|
||||
|
||||
var result = subject._ensureActiveWorker('test').instance;
|
||||
assert.instanceOf(result, subject.Worker);
|
||||
assert.ok(result.url);
|
||||
assert.include(result.url, 'foo.js');
|
||||
});
|
||||
|
||||
test('multi role', function() {
|
||||
subject.add(['one', 'two'], 'bar.js');
|
||||
|
||||
var resultOne = subject._ensureActiveWorker('one');
|
||||
var resultTwo = subject._ensureActiveWorker('two');
|
||||
|
||||
assert.ok(resultOne);
|
||||
assert.equal(resultOne, resultTwo);
|
||||
|
||||
assert.throws(function() {
|
||||
subject._ensureActiveWorker('three');
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
suite('worker acceptance', function() {
|
||||
function mockHandler(message) {
|
||||
/*jshint validthis:true */
|
||||
assert.equal(message[0], '_dispatch');
|
||||
var data = message[1], self = this;
|
||||
assert.equal(typeof data.id, 'number');
|
||||
|
||||
if (data.payload[0] == 'explode') {
|
||||
self.onerror(new Error('BOOM'));
|
||||
} else if (data.payload[0] == 'stream') {
|
||||
self.respond([data.id + ' stream', 'data', 'data one']);
|
||||
setTimeout(function() {
|
||||
self.respond([data.id + ' stream', 'data', 'data two']);
|
||||
setTimeout(function() {
|
||||
self.respond([data.id + ' end', 'stream finito']);
|
||||
}, 20);
|
||||
}, 20);
|
||||
} else if (data.payload[0] == 'stream/explode') {
|
||||
self.respond([data.id + ' stream', 'data', 'data one']);
|
||||
setTimeout(function() {
|
||||
self.onerror(new Error('BOOM'));
|
||||
}, 20);
|
||||
} else {
|
||||
self.respond([data.id + ' end', 'response']);
|
||||
}
|
||||
}
|
||||
var obj = {prop: 'value'};
|
||||
|
||||
setup(function() {
|
||||
subject.Worker = MockWorker(mockHandler);
|
||||
subject.add(
|
||||
'test', '/test/unit/fixtures/relay_worker.js'
|
||||
);
|
||||
});
|
||||
|
||||
test('#request', function(done) {
|
||||
subject.request('test', 'foobar', obj, function(data) {
|
||||
done(function() {
|
||||
assert.deepEqual(data, 'response');
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
test('#request /w error object', function(done) {
|
||||
subject.request('test', 'explode', function(err) {
|
||||
done(function() {
|
||||
assert.instanceOf(err, Error);
|
||||
assert.equal(err.message, 'BOOM');
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
test('#stream', function(done) {
|
||||
var stream = subject.stream('test', 'stream');
|
||||
var dataReceived = [], errorReceived = null;
|
||||
|
||||
stream.on('data', function(data) { dataReceived.push(data); });
|
||||
stream.on('error', function(error) { errorReceived = error; });
|
||||
|
||||
stream.request(function(data) {
|
||||
done(function() {
|
||||
assert.deepEqual(dataReceived, ['data one', 'data two']);
|
||||
assert.equal(data, 'stream finito');
|
||||
assert.equal(errorReceived, null);
|
||||
});
|
||||
});
|
||||
|
||||
// can only request stream once
|
||||
assert.throws(function() {
|
||||
stream.request();
|
||||
});
|
||||
});
|
||||
|
||||
test('#stream error', function(done) {
|
||||
var stream = subject.stream('test', 'stream/explode');
|
||||
var dataReceived = [], errorReceived = null;
|
||||
|
||||
stream.on('data', function(data) { dataReceived.push(data); });
|
||||
stream.on('error', function(error) { errorReceived = error; });
|
||||
|
||||
stream.request(function(error) {
|
||||
done(function() {
|
||||
assert.deepEqual(dataReceived, ['data one']);
|
||||
assert.instanceOf(error, Error);
|
||||
assert.instanceOf(errorReceived, Error);
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
Loading…
Reference in a new issue