Spaces:
Running
Running
const tap = require('tap'); | |
const Runtime = require('../../src/engine/runtime'); | |
const {Map} = require('immutable'); | |
const test = tap.test; | |
test('setFramerate emits an event', t => { | |
t.plan(1); | |
const rt = new Runtime(); | |
rt.addListener('FRAMERATE_CHANGED', framerate => { | |
if (framerate === 13) { | |
t.pass(); | |
} | |
}); | |
rt.setFramerate(13); | |
t.end(); | |
}); | |
test('setFramerate and setCompatibilityMode do not emit a stop event if not running', t => { | |
const rt = new Runtime(); | |
rt.addListener('RUNTIME_STOPPED', () => { | |
t.fail(); | |
}); | |
rt.setFramerate(13); | |
rt.setCompatibilityMode(true); | |
t.end(); | |
}); | |
test('setInterpolation emits an event', t => { | |
t.plan(1); | |
const rt = new Runtime(); | |
rt.addListener('INTERPOLATION_CHANGED', enabled => { | |
if (enabled) { | |
t.pass(); | |
} | |
}); | |
rt.setInterpolation(true); | |
t.end(); | |
}); | |
test('setInterpolation does not restart runtime if not running', t => { | |
const rt = new Runtime(); | |
let started = false; | |
let stopped = false; | |
rt.addListener('RUNTIME_STARTED', () => { | |
started = true; | |
}); | |
rt.addListener('RUNTIME_STOPPED', () => { | |
stopped = true; | |
}); | |
rt.setInterpolation(true); | |
t.equal(started, false); | |
t.equal(stopped, false); | |
t.end(); | |
}); | |
test('Stopping the runtime emits an event', t => { | |
const rt = new Runtime(); | |
rt.start(); | |
let stopped = false; | |
rt.addListener('RUNTIME_STOPPED', () => { | |
stopped = true; | |
}); | |
rt.stop(); | |
t.equal(stopped, true); | |
t.end(); | |
}); | |
test('Stop does not emit an event if already stopped', t => { | |
const rt = new Runtime(); | |
let stopped = false; | |
rt.addListener('RUNTIME_STOPPED', () => { | |
stopped = true; | |
}); | |
rt.stop(); | |
t.equal(stopped, false); | |
t.end(); | |
}); | |
test('setRuntimeOptions emits an event', t => { | |
t.plan(1); | |
const rt = new Runtime(); | |
rt.addListener('RUNTIME_OPTIONS_CHANGED', options => { | |
if (options.option === 17) { | |
t.pass(); | |
} | |
}); | |
rt.setRuntimeOptions({option: 17}); | |
t.end(); | |
}); | |
test('setRuntimeOptions supports partial updates', t => { | |
t.plan(1); | |
const rt = new Runtime(); | |
rt.setRuntimeOptions({option: 17}); | |
rt.addListener('RUNTIME_OPTIONS_CHANGED', options => { | |
if (options.option === 17) { | |
t.pass(); | |
} | |
}); | |
rt.setRuntimeOptions({otherOption: 1}); | |
t.end(); | |
}); | |
test('setCompilerOptions emits an event', t => { | |
t.plan(1); | |
const rt = new Runtime(); | |
rt.addListener('COMPILER_OPTIONS_CHANGED', options => { | |
if (options.option === 17) { | |
t.pass(); | |
} | |
}); | |
rt.setCompilerOptions({option: 17}); | |
t.end(); | |
}); | |
test('setCompilerOptions supports partial updates', t => { | |
t.plan(1); | |
const rt = new Runtime(); | |
rt.setCompilerOptions({option: 17}); | |
rt.addListener('COMPILER_OPTIONS_CHANGED', options => { | |
if (options.option === 17) { | |
t.pass(); | |
} | |
}); | |
rt.setCompilerOptions({otherOption: 1}); | |
t.end(); | |
}); | |
test('maxClones runtime option', t => { | |
const rt = new Runtime(); | |
rt.setRuntimeOptions({maxClones: 10}); | |
for (let i = 0; i < 10; i++) { | |
t.equal(rt.clonesAvailable(), true); | |
rt.changeCloneCounter(1); | |
} | |
rt.changeCloneCounter(1); | |
t.equal(rt.clonesAvailable(), false); | |
t.end(); | |
}); | |
test('stageWidth and stageHeight', t => { | |
const rt = new Runtime(); | |
t.equal(rt.stageWidth, 480); | |
t.equal(rt.stageHeight, 360); | |
t.end(); | |
}); | |
test('debug', t => { | |
const rt = new Runtime(); | |
t.equal(rt.debug, false); | |
rt.enableDebug(); | |
t.equal(rt.debug, true); | |
t.end(); | |
}); | |
test('setStageSize preserves monitor position relative to center of stage', t => { | |
const rt = new Runtime(); | |
rt.requestAddMonitor(new Map([ | |
['id', 'abc'], | |
// top right corner | |
['x', 0], | |
['y', 0] | |
])); | |
rt.setStageSize(640, 362); | |
const finalState = rt.getMonitorState().get('abc'); | |
t.equal(finalState.get('x'), 80); | |
t.equal(finalState.get('y'), 1); | |
t.end(); | |
}); | |
test('setStageSize argument range', t => { | |
const rt = new Runtime(); | |
rt.once('STAGE_SIZE_CHANGED', (width, height) => { | |
t.equal(width, 101); | |
t.equal(height, 103); | |
}); | |
rt.setStageSize(101, 103); | |
rt.once('STAGE_SIZE_CHANGED', (width, height) => { | |
t.equal(width, 1); | |
t.equal(height, 1); | |
}); | |
rt.setStageSize(-3.1, 0); | |
rt.once('STAGE_SIZE_CHANGED', (width, height) => { | |
t.equal(width, 99); | |
t.equal(height, 10000); | |
}); | |
rt.setStageSize(99.3, 10000); | |
t.end(); | |
}); | |
test('getNumberOfCloudVariables', t => { | |
const rt = new Runtime(); | |
t.equal(rt.getNumberOfCloudVariables(), 0); | |
rt.addCloudVariable(); | |
t.equal(rt.getNumberOfCloudVariables(), 1); | |
rt.addCloudVariable(); | |
t.equal(rt.getNumberOfCloudVariables(), 2); | |
rt.removeCloudVariable(); | |
t.equal(rt.getNumberOfCloudVariables(), 1); | |
rt.removeCloudVariable(); | |
t.equal(rt.getNumberOfCloudVariables(), 0); | |
rt.dispose(); | |
t.equal(rt.getNumberOfCloudVariables(), 0); | |
rt.addCloudVariable(); | |
t.equal(rt.getNumberOfCloudVariables(), 1); | |
t.end(); | |
}); | |
test('currentStepTime default value', t => { | |
const rt = new Runtime(); | |
t.type(rt.currentStepTime, 'number'); | |
t.ok(rt.currentStepTime > 0); | |
t.end(); | |
}); | |
test('convertToPackagedRuntime', t => { | |
const rt = new Runtime(); | |
t.equal(rt.isPackaged, false); | |
rt.convertToPackagedRuntime(); | |
t.equal(rt.isPackaged, true); | |
t.end(); | |
}); | |
test('convertToPackagedRuntime and attachStorage call order', t => { | |
try { | |
const rt1 = new Runtime(); | |
rt1.attachStorage({}); | |
rt1.convertToPackagedRuntime(); | |
} catch (e) { | |
t.equal(e.message, 'convertToPackagedRuntime must be called before attachStorage'); | |
} | |
const rt2 = new Runtime(); | |
rt2.convertToPackagedRuntime(); | |
rt2.attachStorage({}); | |
t.end(); | |
}); | |