Wegwichtel/test/vibration.test.js
Florian Zumpe 32f161483d
Some checks failed
Sonarqube Scanner / Build and analyze (push) Failing after 1m27s
simplify application and remove window references
2026-06-17 16:08:01 +02:00

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);
});