spiegel-keyman/common/predictive-text/unit_tests/headless/worker-predict.js

76 lines
2 KiB
JavaScript

var assert = require('chai').assert;
var sinon = require('sinon');
let LMLayerWorker = require('../../build/intermediate');
describe('LMLayerWorker', function () {
describe('#predict()', function () {
it('should send back suggestions', function () {
var suggestion = {
transform: {
insert: 'I ',
deleteLeft: 0
},
displayAs: 'I'
};
// Initialize the worker with a model that will produce one suggestion.
var fakePostMessage = sinon.fake();
var filteredFakePostMessage = function(event) {
if(event.message == 'suggestions') {
let suggestions = event.suggestions;
// Strip any IDs set by the model compositor.
suggestions.forEach(function(suggestion) {
delete suggestion.id;
});
}
fakePostMessage(event);
}
var context = {
postMessage: filteredFakePostMessage
};
context.importScripts = importScriptsWith(context);
var worker = LMLayerWorker.install(context);
configWorker(worker);
worker.onMessage(createMessageEventWithData({
message: 'load',
source: {
type: 'file',
file: "./unit_tests/in_browser/resources/models/simple-dummy.js"
}
}));
sinon.assert.calledWithMatch(fakePostMessage.lastCall, {
message: 'ready',
});
var token = randomToken();
// Now predict! We should get the suggestions back.
worker.onMessage(createMessageEventWithData({
message: 'predict',
token: token,
transform: zeroTransform(),
context: emptyContext()
}));
// Retrieve the internal 'dummy' suggestions for comparison.
var hazel = iGotDistractedByHazel();
sinon.assert.calledWithMatch(fakePostMessage.lastCall, {
message: 'suggestions',
token: token,
suggestions: hazel[0]
});
});
afterEach(function () {
// Restore all fakes.
sinon.restore();
});
});
});