@@ -5,28 +5,66 @@ import {keyboardKey} from '#src/keyboard/types'
5
5
6
6
cases (
7
7
'reference key per' ,
8
- ( { text, key , code } ) => {
8
+ ( { text, keyDef } ) => {
9
9
const parsed = parseKeyDef ( defaultKeyMap , `/${ text } /` )
10
- expect ( parsed ) . toHaveLength ( 3 )
11
- expect ( parsed [ 1 ] ) . toEqual ( {
12
- keyDef : expect . objectContaining ( {
13
- key,
14
- code,
15
- } ) as keyboardKey ,
16
- releasePrevious : false ,
17
- releaseSelf : true ,
18
- repeat : 1 ,
19
- } )
10
+ keyDef = Array . isArray ( keyDef ) ? keyDef : [ keyDef ]
11
+ expect ( parsed ) . toHaveLength ( 2 + keyDef . length )
12
+ expect ( parsed . slice ( 1 , - 1 ) ) . toEqual (
13
+ keyDef . map ( d =>
14
+ expect . objectContaining ( {
15
+ keyDef : expect . objectContaining ( d ) as keyboardKey ,
16
+ } ) ,
17
+ ) ,
18
+ )
20
19
} ,
21
20
{
22
- code : { text : '[ControlLeft]' , key : 'Control' , code : 'ControlLeft' } ,
23
- 'unimplemented code' : { text : '[Foo]' , key : 'Unknown' , code : 'Foo' } ,
24
- key : { text : '{Control}' , key : 'Control' , code : 'ControlLeft' } ,
25
- 'unimplemented key' : { text : '{Foo}' , key : 'Foo' , code : 'Unknown' } ,
26
- 'printable character' : { text : 'a' , key : 'a' , code : 'KeyA' } ,
27
- 'modifiers as printable characters' : { text : '/' , key : '/' , code : 'Unknown' } ,
28
- '{ as printable' : { text : '{{' , key : '{' , code : 'Unknown' } ,
29
- '[ as printable' : { text : '[[' , key : '[' , code : 'Unknown' } ,
21
+ code : {
22
+ text : '[ControlLeft]' ,
23
+ keyDef : { key : 'Control' , code : 'ControlLeft' } ,
24
+ } ,
25
+ 'unimplemented code' : {
26
+ text : '[Foo]' ,
27
+ keyDef : { key : 'Unknown' , code : 'Foo' } ,
28
+ } ,
29
+ key : {
30
+ text : '{Control}' ,
31
+ keyDef : { key : 'Control' , code : 'ControlLeft' } ,
32
+ } ,
33
+ 'unimplemented key' : {
34
+ text : '{Foo}' ,
35
+ keyDef : { key : 'Foo' , code : 'Unknown' } ,
36
+ } ,
37
+ 'printable character' : {
38
+ text : 'a' ,
39
+ keyDef : { key : 'a' , code : 'KeyA' } ,
40
+ } ,
41
+ 'modifiers as printable characters' : {
42
+ text : '/' ,
43
+ keyDef : { key : '/' , code : 'Unknown' } ,
44
+ } ,
45
+ '{ as printable' : {
46
+ text : '{{' ,
47
+ keyDef : { key : '{' , code : 'Unknown' } ,
48
+ } ,
49
+ '{ as printable followed by descriptor' : {
50
+ text : '{{{foo}' ,
51
+ keyDef : [
52
+ { key : '{' , code : 'Unknown' } ,
53
+ { key : 'foo' , code : 'Unknown' } ,
54
+ ] ,
55
+ } ,
56
+ '{ as key with modifiers' : {
57
+ text : '{\\{>5/}' ,
58
+ keyDef : { key : '{' , code : 'Unknown' } ,
59
+ } ,
60
+ 'modifier as key with modifiers' : {
61
+ text : '{/\\/>5/}' ,
62
+ keyDef : { key : '/' , code : 'Unknown' } ,
63
+ } ,
64
+ '[ as printable' : {
65
+ text : '[[' ,
66
+ keyDef : { key : '[' , code : 'Unknown' } ,
67
+ } ,
30
68
} ,
31
69
)
32
70
@@ -79,10 +117,6 @@ cases(
79
117
expect ( ( ) => parseKeyDef ( defaultKeyMap , `${ text } ` ) ) . toThrow ( expectedError )
80
118
} ,
81
119
{
82
- 'invalid descriptor' : {
83
- text : '{!}' ,
84
- expectedError : 'but found "!" in "{!}"' ,
85
- } ,
86
120
'missing descriptor' : {
87
121
text : '' ,
88
122
expectedError : 'but found "" in ""' ,
@@ -99,5 +133,9 @@ cases(
99
133
text : '{a>3)' ,
100
134
expectedError : 'but found ")" in "{a>3)"' ,
101
135
} ,
136
+ 'unescaped modifier' : {
137
+ text : '{/>5}' ,
138
+ expectedError : 'but found ">" in "{/>5}"' ,
139
+ } ,
102
140
} ,
103
141
)
0 commit comments