fix: guard against duplicate TouchBarItem IDs (#22272)

* feat: Add OtherItemsProxy touchbar item

* review!

* fix: guard against duplicate TouchBarItem IDs

* add spec
This commit is contained in:
Erick Zhao 2020-02-26 14:12:56 -08:00 committed by GitHub
parent 12c1d4411d
commit 85ef762269
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 15 additions and 0 deletions

View file

@ -53,6 +53,7 @@ class TouchBar extends EventEmitter {
} }
let hasOtherItemsProxy = false let hasOtherItemsProxy = false
const idSet = new Set()
items.forEach((item) => { items.forEach((item) => {
if (!(item instanceof TouchBarItem)) { if (!(item instanceof TouchBarItem)) {
throw new Error('Each item must be an instance of TouchBarItem') throw new Error('Each item must be an instance of TouchBarItem')
@ -65,6 +66,12 @@ class TouchBar extends EventEmitter {
throw new Error('Must only have one OtherItemsProxy per TouchBar') throw new Error('Must only have one OtherItemsProxy per TouchBar')
} }
} }
if (!idSet.has(item.id)) {
idSet.add(item.id)
} else {
throw new Error('Cannot add a single instance of TouchBarItem multiple times in a TouchBar')
}
}) })
// register in separate loop after all items are validated // register in separate loop after all items are validated

View file

@ -39,6 +39,14 @@ describe('TouchBar module', () => {
}).to.throw('Must only have one OtherItemsProxy per TouchBar') }).to.throw('Must only have one OtherItemsProxy per TouchBar')
}) })
it('throws an error if the same TouchBarItem is added multiple times', () => {
expect(() => {
const item = new TouchBarLabel({ label: 'Label' })
const touchBar = new TouchBar({ items: [item, item] })
touchBar.toString()
}).to.throw('Cannot add a single instance of TouchBarItem multiple times in a TouchBar')
})
describe('BrowserWindow behavior', () => { describe('BrowserWindow behavior', () => {
let window: BrowserWindow let window: BrowserWindow