mirror of
https://github.com/keymanapp/keyman.git
synced 2026-08-06 08:55:34 +00:00
139 lines
3.4 KiB
JavaScript
139 lines
3.4 KiB
JavaScript
/**
|
|
* @file helpers
|
|
*
|
|
* Globally-defined helper functions for use in in Mocha tests.
|
|
*/
|
|
|
|
var fs = require("fs");
|
|
var vm = require("vm");
|
|
|
|
// Choose the appropriate global object. Either `global` in
|
|
// Node, or `window` in browsers.
|
|
var _ = global || window;
|
|
|
|
/**
|
|
* Creates a MessageEvent (for inter-worker communication), with the given data payload.
|
|
*
|
|
* @param {*} data
|
|
*/
|
|
_.createMessageEventWithData = function createMessageEventWithData(data) {
|
|
return { data };
|
|
}
|
|
|
|
/**
|
|
* Creates a simple, default capabilities object for standard-case LMLayer init.
|
|
*/
|
|
_.capabilities = function capabilities() {
|
|
return {
|
|
maxLeftContextCodePoints: 64
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Mimics a message from the outer LMLayer shell with a simple, default config object.
|
|
* Used for Worker tests.
|
|
*/
|
|
_.configWorker = function configWorker(worker) {
|
|
worker.onMessage(createMessageEventWithData({
|
|
message: 'config',
|
|
capabilities: _.capabilities()
|
|
}));
|
|
}
|
|
|
|
/**
|
|
* A valid model that suggests exactly what you want it to suggest.
|
|
*
|
|
* @returns {ModelDescription}
|
|
*/
|
|
_.dummyModel = function dummyModel(futureSuggestions) {
|
|
return {
|
|
type: 'dummy',
|
|
futureSuggestions: futureSuggestions || []
|
|
};
|
|
}
|
|
/**
|
|
* Capabilities of a keyboard that will ONLY send left-sided capabilities.
|
|
* The keyboard does not support deleting to the right.
|
|
*
|
|
* @returns {Capabilities}
|
|
*/
|
|
_.defaultCapabilities = function defaultCapabilities() {
|
|
return {
|
|
maxLeftContextCodeUnits: 64
|
|
};
|
|
}
|
|
|
|
/**
|
|
* Returns the Context of an empty buffer; no text, at both the start and
|
|
* end of the buffer.
|
|
*
|
|
* @returns {Context}
|
|
*/
|
|
_.emptyContext = function emptyContext() {
|
|
return {
|
|
left: '',
|
|
startOfBuffer: true,
|
|
endOfBuffer: true
|
|
};
|
|
}
|
|
|
|
/**
|
|
* Returns a Transform that, when applied, makes no changes to the buffer.
|
|
*
|
|
* @returns {Transform}
|
|
*/
|
|
_.zeroTransform = function zeroTransform() {
|
|
return {
|
|
insert: '',
|
|
deleteLeft: 0,
|
|
};
|
|
}
|
|
|
|
/**
|
|
* Returns a random token. NOT guaranteed to be unique.
|
|
*
|
|
* @returns {Token}
|
|
*/
|
|
_.randomToken = function randomToken() {
|
|
var range = Number.MAX_SAFE_INTEGER - Number.MIN_SAFE_INTEGER;
|
|
return Math.random() * range + Number.MIN_SAFE_INTEGER;
|
|
}
|
|
|
|
// Use fixtures used in browser tests IN NODE!
|
|
if (typeof require === 'function') {
|
|
_.iGotDistractedByHazel = function () {
|
|
return jsonFixture('future_suggestions/i_got_distracted_by_hazel');
|
|
}
|
|
|
|
/**
|
|
* Return a JSON fixture
|
|
*/
|
|
_.jsonFixture = function (name) {
|
|
// Assuming this file structure:
|
|
// .
|
|
// ├── helpers.js
|
|
// └── in_browser
|
|
// └── json
|
|
// ├── future_suggestions
|
|
// │ └── ...
|
|
// └── wordlists
|
|
// └── ...
|
|
return require('./in_browser/json/' + name);
|
|
}
|
|
|
|
// This worker-global function does not exist by default in Node!
|
|
_.importScriptsWith = function(context) {
|
|
return function() { // the constructed context's importScripts method.
|
|
|
|
/* Use of vm.createContext and script.runInContext allow us to avoid
|
|
* polluting the global scope with imports. When we throw away the
|
|
* context object, imported scripts will be automatically GC'd.
|
|
*/
|
|
for(var i=0; i < arguments.length; i++) {
|
|
context = vm.createContext(context);
|
|
var script = new vm.Script(fs.readFileSync(arguments[i]));
|
|
script.runInContext(context);
|
|
}
|
|
}
|
|
}
|
|
}
|