-
Notifications
You must be signed in to change notification settings - Fork 401
/
Copy pathhtml-attributes.spec.ts
116 lines (108 loc) · 3.86 KB
/
html-attributes.spec.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
/*
* Copyright (c) 2018, salesforce.com, inc.
* All rights reserved.
* SPDX-License-Identifier: MIT
* For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT
*/
import { htmlPropertyToAttribute, kebabCaseToCamelCase } from '../html-attributes';
type StringPair = [prop: string, attr: string];
const customAttributeMapping = [
['foo', 'foo'],
['fooBar', 'foo-bar'],
['fooBarBaz', 'foo-bar-baz'],
['FooBar', '-foo-bar'],
] as StringPair[];
const ariaAttributeMapping = [
['ariaAtomic', 'aria-atomic'],
['ariaAutoComplete', 'aria-autocomplete'],
['ariaBusy', 'aria-busy'],
['ariaChecked', 'aria-checked'],
['ariaColCount', 'aria-colcount'],
['ariaColIndex', 'aria-colindex'],
['ariaColIndexText', 'aria-colindextext'],
['ariaColSpan', 'aria-colspan'],
['ariaCurrent', 'aria-current'],
['ariaDescription', 'aria-description'],
['ariaDisabled', 'aria-disabled'],
['ariaExpanded', 'aria-expanded'],
['ariaHasPopup', 'aria-haspopup'],
['ariaHidden', 'aria-hidden'],
['ariaInvalid', 'aria-invalid'],
['ariaKeyShortcuts', 'aria-keyshortcuts'],
['ariaLabel', 'aria-label'],
['ariaLevel', 'aria-level'],
['ariaLive', 'aria-live'],
['ariaModal', 'aria-modal'],
['ariaMultiLine', 'aria-multiline'],
['ariaMultiSelectable', 'aria-multiselectable'],
['ariaOrientation', 'aria-orientation'],
['ariaPlaceholder', 'aria-placeholder'],
['ariaPosInSet', 'aria-posinset'],
['ariaPressed', 'aria-pressed'],
['ariaReadOnly', 'aria-readonly'],
['ariaRelevant', 'aria-relevant'],
['ariaRequired', 'aria-required'],
['ariaRoleDescription', 'aria-roledescription'],
['ariaRowCount', 'aria-rowcount'],
['ariaRowIndex', 'aria-rowindex'],
['ariaRowIndexText', 'aria-rowindextext'],
['ariaRowSpan', 'aria-rowspan'],
['ariaSelected', 'aria-selected'],
['ariaSetSize', 'aria-setsize'],
['ariaSort', 'aria-sort'],
['ariaValueMax', 'aria-valuemax'],
['ariaValueMin', 'aria-valuemin'],
['ariaValueNow', 'aria-valuenow'],
['ariaValueText', 'aria-valuetext'],
['ariaBrailleLabel', 'aria-braillelabel'],
['ariaBrailleRoleDescription', 'aria-brailleroledescription'],
['role', 'role'],
] as StringPair[];
// TODO [#2733]: remove non-standard ARIA reflection
const nonStandardAriaMapping = [
['ariaActiveDescendant', 'aria-activedescendant'],
['ariaControls', 'aria-controls'],
['ariaDescribedBy', 'aria-describedby'],
['ariaDetails', 'aria-details'],
['ariaErrorMessage', 'aria-errormessage'],
['ariaFlowTo', 'aria-flowto'],
['ariaLabelledBy', 'aria-labelledby'],
['ariaOwns', 'aria-owns'],
] as StringPair[];
const specialHtmlMapping = [
['accessKey', 'accesskey'],
['readOnly', 'readonly'],
['tabIndex', 'tabindex'],
['bgColor', 'bgcolor'],
['colSpan', 'colspan'],
['rowSpan', 'rowspan'],
['contentEditable', 'contenteditable'],
['crossOrigin', 'crossorigin'],
['dateTime', 'datetime'],
['formAction', 'formaction'],
['isMap', 'ismap'],
['maxLength', 'maxlength'],
['minLength', 'minlength'],
['noValidate', 'novalidate'],
['useMap', 'usemap'],
['htmlFor', 'for'],
] as StringPair[];
const attrToProp = ([prop, attr]: StringPair) => [attr, prop];
describe('htmlPropertyToAttribute', () => {
test.each([
...customAttributeMapping,
...ariaAttributeMapping,
...nonStandardAriaMapping,
...specialHtmlMapping,
])('htmlPropertyToAttribute("%s") returns "%s"', (prop, attr) => {
expect(htmlPropertyToAttribute(prop)).toEqual(attr);
});
});
describe('kebabCaseToCamelCase', () => {
test.each(customAttributeMapping.map(attrToProp))(
'kebabCaseToCamelCase("%s") returns "%s"',
(attr, prop) => {
expect(kebabCaseToCamelCase(attr)).toEqual(prop);
}
);
});