Skip to content

Commit 85cde5d

Browse files
authored
webidl: access keys in lexicographical order (#4841)
* webidl: access keys in lexicographical order * fixup
1 parent 8fe397e commit 85cde5d

2 files changed

Lines changed: 29 additions & 0 deletions

File tree

lib/web/webidl/index.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -452,6 +452,9 @@ webidl.interfaceConverter = function (TypeCheck, name) {
452452
}
453453

454454
webidl.dictionaryConverter = function (converters) {
455+
// "For each dictionary member member declared on dictionary, in lexicographical order:"
456+
converters.sort((a, b) => (a.key > b.key) - (a.key < b.key))
457+
455458
return (dictionary, prefix, argument) => {
456459
const dict = {}
457460

test/webidl/converters.js

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,32 @@ describe('webidl.dictionaryConverter', () => {
121121
assert.deepStrictEqual(dict(obj), { key: 1 })
122122
assert.deepStrictEqual(dict(obj2), { key: 1 })
123123
})
124+
125+
test('keys are accessed in lexicographical order', () => {
126+
const converter = webidl.dictionaryConverter([
127+
{
128+
converter: () => true,
129+
key: 'zyx'
130+
},
131+
{
132+
converter: () => true,
133+
key: 'abc'
134+
}
135+
])
136+
137+
const accessed = []
138+
139+
converter({
140+
get abc () {
141+
return accessed.push('abc')
142+
},
143+
get zyx () {
144+
return accessed.push('zyx')
145+
}
146+
}, 'converter', 'converter')
147+
148+
assert.deepStrictEqual(accessed, ['abc', 'zyx'])
149+
})
124150
})
125151

126152
describe('buffer source converters', () => {

0 commit comments

Comments
 (0)