Skip to content

Commit 0ce4e89

Browse files
committed
added tests for isCode and small changes
1 parent 5709aac commit 0ce4e89

File tree

2 files changed

+66
-15
lines changed

2 files changed

+66
-15
lines changed

src/events/keyboard.js

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,17 @@
44
* @for p5
55
* @requires core
66
*/
7+
export function isCode(input) {
8+
if (typeof input !== 'string') {
9+
return false;
10+
}
711

12+
if (input.length === 1 && /[0-9]/.test(input)) {
13+
return true;
14+
}
15+
16+
return input.length > 1;
17+
}
818
function keyboard(p5, fn){
919
/**
1020
* A `Boolean` system variable that's `true` if any key is currently pressed
@@ -814,7 +824,7 @@ function keyboard(p5, fn){
814824
* <a href="https://keycode.info" target="_blank">keycode.info</a>.
815825
*
816826
* @method keyIsDown
817-
* @param {Number || String} code key to check.
827+
* @param {Number|String} code key to check.
818828
* @return {Boolean} whether the key is down or not.
819829
*
820830
* @example
@@ -910,21 +920,17 @@ function keyboard(p5, fn){
910920
if (typeof input !== 'string') {
911921
return false;
912922
}
913-
914-
// If it's a single digit, it should be treated as a code (with "Digit" prefix)
915923
if (input.length === 1 && /[0-9]/.test(input)) {
916924
return true;
917925
}
918-
919-
// If it's longer than 1 character, it's a code
920926
return input.length > 1;
921927
}
928+
922929
fn.keyIsDown = function(input) {
923930
if (isCode(input)) {
924-
const key = input.length === 1 ? `Digit${input}` : input;
925-
return this._downKeyCodes[key] || this._downKeys[key];
931+
return this._downKeyCodes[input] || this._downKeys[input] || false;
926932
} else {
927-
return this._downKeys[input] || this._downKeyCodes[input];
933+
return this._downKeys[input] || this._downKeyCodes[input] || false;
928934
}
929935
}
930936
/**

test/unit/events/keyboard.js

Lines changed: 52 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import p5 from '../../../src/app.js';
2+
import { isCode } from '../../../src/events/keyboard.js';
23
import { parallelSketches } from '../../js/p5_helpers';
34

45
suite('Keyboard Events', function() {
@@ -180,18 +181,62 @@ suite('Keyboard Events', function() {
180181
});
181182
});
182183

184+
suite('isCode', function() {
185+
test('returns false for non-string inputs', function() {
186+
assert.isFalse(isCode(null));
187+
assert.isFalse(isCode(undefined));
188+
assert.isFalse(isCode(123));
189+
assert.isFalse(isCode({}));
190+
assert.isFalse(isCode([]));
191+
});
192+
193+
test('returns false for single non-digit characters', function() {
194+
assert.isFalse(isCode('a'));
195+
assert.isFalse(isCode('Z'));
196+
assert.isFalse(isCode('!'));
197+
assert.isFalse(isCode(' '));
198+
});
199+
200+
test('returns true for multi-character strings', function() {
201+
assert.isTrue(isCode('Enter'));
202+
assert.isTrue(isCode('ArrowUp'));
203+
assert.isTrue(isCode('Shift'));
204+
assert.isTrue(isCode('Control'));
205+
assert.isTrue(isCode('ab'));
206+
});
207+
208+
test('handles edge cases correctly', function() {
209+
assert.isFalse(isCode('')); // empty string
210+
assert.isTrue(isCode('11')); // multi-digit number
211+
assert.isTrue(isCode('1a')); // digit + letter
212+
});
213+
});
214+
183215
suite('p5.prototype.keyIsDown', function() {
184216
test('keyIsDown should return a boolean', function() {
185-
assert.isBoolean(myp5.keyIsDown(65));
217+
assert.isBoolean(myp5.keyIsDown('a'));
218+
assert.isBoolean(myp5.keyIsDown('Enter'));
186219
});
187220

188221
test('keyIsDown should return true if key is down', function() {
189-
window.dispatchEvent(new KeyboardEvent('keydown', { keyCode: 35 }));
190-
assert.strictEqual(myp5.keyIsDown(35), true);
191-
});
192-
193-
test.todo('keyIsDown should return false if key is not down', function() {
194-
assert.strictEqual(myp5.keyIsDown(35), false);
222+
// Test single character keys
223+
window.dispatchEvent(new KeyboardEvent('keydown', { key: 'a' }));
224+
assert.strictEqual(myp5.keyIsDown('a'), true);
225+
226+
// Test digit keys
227+
window.dispatchEvent(new KeyboardEvent('keydown', { key: '1', code: 'Digit1' }));
228+
assert.strictEqual(myp5.keyIsDown('1'), true);
229+
230+
// Test special keys
231+
window.dispatchEvent(new KeyboardEvent('keydown', { key: 'Enter', code: 'Enter' }));
232+
assert.strictEqual(myp5.keyIsDown('Enter'), true);
233+
});
234+
235+
test('keyIsDown should return false if key is not down', function() {
236+
// Ensure key is not down
237+
window.dispatchEvent(new KeyboardEvent('keyup'));
238+
assert.strictEqual(myp5.keyIsDown('z'), false);
239+
195240
});
196241
});
197242
});

0 commit comments

Comments
 (0)