mirror of
https://github.com/bilawalsidhu/gods-eye-view.git
synced 2026-11-06 11:24:00 +00:00
test(voice): cover chat history Down and draft restore
Up was covered through the chat panel; Down, restoring the unsent draft, the native-key cases and resetting recall after an edit or a send were not.
This commit is contained in:
1 parent
babd55eae1
commit
0c89a87d97
2 files changed
+102
No files matched your search
@@ -1119,6 +1119,7 @@
|
|||||||
"src/voice/panel/manualPanel.test.mjs",
|
"src/voice/panel/manualPanel.test.mjs",
|
||||||
"src/voice/voiceMiniPreview.js",
|
"src/voice/voiceMiniPreview.js",
|
||||||
"src/voice/voiceMiniPreview.test.mjs",
|
"src/voice/voiceMiniPreview.test.mjs",
|
||||||
|
"src/voice/chatPreferences.test.mjs",
|
||||||
"src/voice/panel/nativeActivity.test.mjs",
|
"src/voice/panel/nativeActivity.test.mjs",
|
||||||
"src/voice/panel/inactivity.test.mjs",
|
"src/voice/panel/inactivity.test.mjs",
|
||||||
"src/voice/panel/actionObserver.test.mjs",
|
"src/voice/panel/actionObserver.test.mjs",
|
||||||
|
|||||||
@@ -0,0 +1,101 @@
|
|||||||
|
import test from 'node:test';
|
||||||
|
import assert from 'node:assert/strict';
|
||||||
|
import { bindChatPreferences } from './chatPreferences.js';
|
||||||
|
import { createTestVoiceUi } from '../testSupport/voiceUi.mjs';
|
||||||
|
|
||||||
|
// A draft field with a caret, as the chat input exposes it to the owner.
|
||||||
|
function chatInput(t) {
|
||||||
|
const field = { value: '', selectionStart: 0, selectionEnd: 0 };
|
||||||
|
const prefs = bindChatPreferences({
|
||||||
|
ui: createTestVoiceUi(),
|
||||||
|
getDraft: () => field.value,
|
||||||
|
setDraft: (text, { caret = text.length } = {}) => {
|
||||||
|
field.value = text;
|
||||||
|
field.selectionStart = field.selectionEnd = caret;
|
||||||
|
},
|
||||||
|
});
|
||||||
|
t.after(() => prefs.destroy());
|
||||||
|
const press = (key, init = {}) => {
|
||||||
|
const event = {
|
||||||
|
key,
|
||||||
|
target: field,
|
||||||
|
defaultPrevented: false,
|
||||||
|
preventDefault() {
|
||||||
|
this.defaultPrevented = true;
|
||||||
|
},
|
||||||
|
...init,
|
||||||
|
};
|
||||||
|
return { used: prefs.keydown(event), event };
|
||||||
|
};
|
||||||
|
const type = (text, caret = text.length) => {
|
||||||
|
field.value = text;
|
||||||
|
field.selectionStart = field.selectionEnd = caret;
|
||||||
|
};
|
||||||
|
return { field, prefs, press, type };
|
||||||
|
}
|
||||||
|
|
||||||
|
test('Up and Down step through sent messages and restore the unsent draft', (t) => {
|
||||||
|
const { field, prefs, press, type } = chatInput(t);
|
||||||
|
for (const text of ['Fly to Tokyo', 'Show live flights', 'Show earthquakes'])
|
||||||
|
prefs.remember(text);
|
||||||
|
type('Reset', 0);
|
||||||
|
for (const expected of [
|
||||||
|
'Show earthquakes',
|
||||||
|
'Show live flights',
|
||||||
|
'Fly to Tokyo',
|
||||||
|
'Fly to Tokyo',
|
||||||
|
]) {
|
||||||
|
const { used, event } = press('ArrowUp');
|
||||||
|
assert.equal(used, true);
|
||||||
|
assert.equal(event.defaultPrevented, true);
|
||||||
|
assert.equal(field.value, expected);
|
||||||
|
assert.equal(field.selectionStart, 0);
|
||||||
|
}
|
||||||
|
for (const expected of ['Show live flights', 'Show earthquakes']) {
|
||||||
|
assert.equal(press('ArrowDown').used, true);
|
||||||
|
assert.equal(field.value, expected);
|
||||||
|
}
|
||||||
|
// Past the newest message, Down puts back what was being typed.
|
||||||
|
assert.equal(press('ArrowDown').used, true);
|
||||||
|
assert.equal(field.value, 'Reset');
|
||||||
|
assert.equal(field.selectionStart, 'Reset'.length);
|
||||||
|
// With no recalled message, Down stays native.
|
||||||
|
type('Reset', 0);
|
||||||
|
assert.equal(press('ArrowDown').used, false);
|
||||||
|
});
|
||||||
|
|
||||||
|
test('arrow keys stay native away from the start, with modifiers or a selection', (t) => {
|
||||||
|
const { field, prefs, press, type } = chatInput(t);
|
||||||
|
assert.equal(press('ArrowUp').used, false, 'nothing sent yet');
|
||||||
|
prefs.remember('Fly to Tokyo');
|
||||||
|
type('Show', 2);
|
||||||
|
assert.equal(press('ArrowUp').used, false, 'caret inside the text');
|
||||||
|
type('Show', 0);
|
||||||
|
for (const init of [
|
||||||
|
{ shiftKey: true },
|
||||||
|
{ altKey: true },
|
||||||
|
{ ctrlKey: true },
|
||||||
|
{ metaKey: true },
|
||||||
|
{ isComposing: true },
|
||||||
|
])
|
||||||
|
assert.equal(press('ArrowUp', init).used, false, JSON.stringify(init));
|
||||||
|
field.selectionEnd = 2;
|
||||||
|
assert.equal(press('ArrowUp').used, false, 'text selected');
|
||||||
|
assert.equal(field.value, 'Show');
|
||||||
|
});
|
||||||
|
|
||||||
|
test('editing a recalled message ends recall, and sending resets it', (t) => {
|
||||||
|
const { field, prefs, press, type } = chatInput(t);
|
||||||
|
prefs.remember('Fly to Tokyo');
|
||||||
|
prefs.remember('Show live flights');
|
||||||
|
press('ArrowUp');
|
||||||
|
assert.equal(field.value, 'Show live flights');
|
||||||
|
// An edit makes the text a new draft; Down no longer recalls.
|
||||||
|
type('Show live flights now', 0);
|
||||||
|
prefs.render();
|
||||||
|
assert.equal(press('ArrowDown').used, false);
|
||||||
|
prefs.remember('Show live flights now');
|
||||||
|
type('', 0);
|
||||||
|
press('ArrowUp');
|
||||||
|
assert.equal(field.value, 'Show live flights now');
|
||||||
|
});
|
||||||
Reference in new issue
Block a user