const { globalShortcut } = require('electron').remote

const chai = require('chai')
const dirtyChai = require('dirty-chai')
const isCI = require('electron').remote.getGlobal('isCi')

const { expect } = chai
chai.use(dirtyChai)

describe('globalShortcut module', () => {
  before(function () {
    if (isCI && process.platform === 'win32') {
      this.skip()
    }
  })

  beforeEach(() => {
    globalShortcut.unregisterAll()
  })

  it('can register and unregister single accelerators', () => {
    const accelerator = 'CmdOrCtrl+A+B+C'

    expect(globalShortcut.isRegistered(accelerator)).to.be.false()
    globalShortcut.register(accelerator, () => {})
    expect(globalShortcut.isRegistered(accelerator)).to.be.true()
    globalShortcut.unregister(accelerator)
    expect(globalShortcut.isRegistered(accelerator)).to.be.false()

    expect(globalShortcut.isRegistered(accelerator)).to.be.false()
    globalShortcut.register(accelerator, () => {})
    expect(globalShortcut.isRegistered(accelerator)).to.be.true()
    globalShortcut.unregisterAll()
    expect(globalShortcut.isRegistered(accelerator)).to.be.false()
  })

  it('can register and unregister multiple accelerators', () => {
    const accelerators = ['CmdOrCtrl+X', 'CmdOrCtrl+Y']

    expect(globalShortcut.isRegistered(accelerators[0])).to.be.false()
    expect(globalShortcut.isRegistered(accelerators[1])).to.be.false()

    globalShortcut.registerAll(accelerators, () => {})

    expect(globalShortcut.isRegistered(accelerators[0])).to.be.true()
    expect(globalShortcut.isRegistered(accelerators[1])).to.be.true()

    globalShortcut.unregisterAll()

    expect(globalShortcut.isRegistered(accelerators[0])).to.be.false()
    expect(globalShortcut.isRegistered(accelerators[1])).to.be.false()
  })
})