64 lines
2.1 KiB
JavaScript
64 lines
2.1 KiB
JavaScript
import assert from 'node:assert/strict';
|
|
import fs from 'node:fs/promises';
|
|
import path from 'node:path';
|
|
import test from 'node:test';
|
|
import vm from 'node:vm';
|
|
|
|
const root = path.resolve(import.meta.dirname, '..');
|
|
|
|
async function source() {
|
|
return fs.readFile(path.join(root, 'public/js/vibration.js'), 'utf8');
|
|
}
|
|
|
|
test('legacy vibration patterns are exposed as immutable constants', async () => {
|
|
const calls = [];
|
|
const context = {
|
|
navigator: { vibrate: pattern => { calls.push(pattern); return true; } },
|
|
Wegwichtel: {}
|
|
};
|
|
|
|
vm.runInNewContext(await source(), context);
|
|
const vibration = context.Wegwichtel.Vibration;
|
|
|
|
assert.equal(vibration.Patterns.MICRO, 50);
|
|
assert.equal(vibration.Patterns.MINI, 100);
|
|
assert.equal(vibration.Patterns.SHORT, 200);
|
|
assert.equal(vibration.Patterns.LONG, 2000);
|
|
assert.deepEqual(Array.from(vibration.Patterns.ALARM), [100, 50, 100]);
|
|
assert.deepEqual(Array.from(vibration.Patterns.POI), [2000, 200, 2000]);
|
|
assert.deepEqual(Array.from(vibration.Patterns.ACTIVE_POI), [500, 300, 500]);
|
|
assert.equal(Object.isFrozen(vibration.Patterns), true);
|
|
});
|
|
|
|
test('vibration wrapper starts named patterns and can cancel them', async () => {
|
|
const calls = [];
|
|
const context = {
|
|
navigator: { vibrate: pattern => { calls.push(pattern); return true; } },
|
|
Wegwichtel: {}
|
|
};
|
|
|
|
vm.runInNewContext(await source(), context);
|
|
const vibration = context.Wegwichtel.Vibration;
|
|
|
|
assert.equal(vibration.start(vibration.Patterns.ACTIVE_POI), true);
|
|
assert.equal(vibration.start(vibration.Patterns.SHORT), true);
|
|
assert.equal(vibration.stop(), true);
|
|
assert.deepEqual(Array.from(calls[0]), [500, 300, 500]);
|
|
assert.deepEqual(Array.from(calls[1]), [200]);
|
|
assert.equal(calls[2], 0);
|
|
});
|
|
|
|
test('vibration wrapper fails harmlessly when the browser API is unavailable', async () => {
|
|
const context = {
|
|
navigator: {},
|
|
Wegwichtel: {}
|
|
};
|
|
|
|
vm.runInNewContext(await source(), context);
|
|
const vibration = context.Wegwichtel.Vibration;
|
|
|
|
assert.equal(vibration.isSupported(), false);
|
|
assert.equal(vibration.start(vibration.Patterns.SHORT), false);
|
|
assert.equal(vibration.stop(), false);
|
|
});
|