const assert = require('assert') const path = require('path') const { BrowserWindow, TouchBar } = require('electron').remote const { closeWindow } = require('./window-helpers') const { TouchBarButton, TouchBarColorPicker, TouchBarGroup } = TouchBar const { TouchBarLabel, TouchBarPopover, TouchBarScrubber, TouchBarSegmentedControl, TouchBarSlider, TouchBarSpacer } = TouchBar describe('TouchBar module', () => { it('throws an error when created without an options object', () => { assert.throws(() => { const touchBar = new TouchBar() touchBar.toString() }, /Must specify options object as first argument/) }) it('throws an error when created with invalid items', () => { assert.throws(() => { const touchBar = new TouchBar({ items: [1, true, {}, []] }) touchBar.toString() }, /Each item must be an instance of TouchBarItem/) }) it('throws an error when an invalid escape item is set', () => { assert.throws(() => { const touchBar = new TouchBar({ items: [], escapeItem: 'esc' }) touchBar.toString() }, /Escape item must be an instance of TouchBarItem/) assert.throws(() => { const touchBar = new TouchBar({ items: [] }) touchBar.escapeItem = 'esc' }, /Escape item must be an instance of TouchBarItem/) }) describe('BrowserWindow behavior', () => { let window beforeEach(() => { window = new BrowserWindow() }) afterEach(() => { window.setTouchBar(null) return closeWindow(window).then(() => { window = null }) }) it('can be added to and removed from a window', () => { const label = new TouchBarLabel({ label: 'bar' }) const touchBar = new TouchBar([ new TouchBarButton({ label: 'foo', backgroundColor: '#F00', click: () => {} }), new TouchBarButton({ icon: path.join(__dirname, 'fixtures', 'assets', 'logo.png'), iconPosition: 'right', click: () => {} }), new TouchBarColorPicker({ selectedColor: '#F00', change: () => {} }), new TouchBarGroup({ items: new TouchBar([new TouchBarLabel({ label: 'hello' })]) }), label, new TouchBarPopover({ items: new TouchBar([new TouchBarButton({ label: 'pop' })]) }), new TouchBarSlider({ label: 'slide', value: 5, minValue: 2, maxValue: 75, change: () => {} }), new TouchBarSpacer({ size: 'large' }), new TouchBarSegmentedControl({ segmentStyle: 'capsule', segments: [{ label: 'baz', enabled: false }], selectedIndex: 5 }), new TouchBarSegmentedControl({ segments: [] }), new TouchBarScrubber({ items: [{ label: 'foo' }, { label: 'bar' }, { label: 'baz' }], selectedStyle: 'outline', mode: 'fixed', showArrowButtons: true }) ]) const escapeButton = new TouchBarButton({ label: 'foo' }) window.setTouchBar(touchBar) touchBar.escapeItem = escapeButton label.label = 'baz' escapeButton.label = 'hello' window.setTouchBar() window.setTouchBar(new TouchBar([new TouchBarLabel({ label: 'two' })])) touchBar.escapeItem = null }) it('calls the callback on the items when a window interaction event fires', (done) => { const button = new TouchBarButton({ label: 'bar', click: () => { done() } }) const touchBar = new TouchBar({ items: [button] }) window.setTouchBar(touchBar) window.emit('-touch-bar-interaction', {}, button.id) }) it('calls the callback on the escape item when a window interaction event fires', (done) => { const button = new TouchBarButton({ label: 'bar', click: () => { done() } }) const touchBar = new TouchBar({ escapeItem: button }) window.setTouchBar(touchBar) window.emit('-touch-bar-interaction', {}, button.id) }) }) })