electron/spec/api-desktop-capturer-spec.js
Andrew MacDonald 6bfb122cd1 Add a display_id parameter to the desktopCapturer API. (#12417)
* Add a screen_api_id parameter to the desktopCapturer API.

When using the DirectX capturer on Windows, there was previously no way
to associate desktopCapturer/getUserMedia and electron.screen API
screens. This new parameter provides the association.

* Fix non-Windows build.

* Fix Mac.

* Fix Mac harder.

* JS lint

* clang-format C++ code.

* IWYU

* display_id, Linux comment, better test

* lint

* Fix tests on Linux.

* Add display_id documentation.
2018-04-09 14:43:35 +09:00

83 lines
2.5 KiB
JavaScript

const assert = require('assert')
const {desktopCapturer, remote, screen} = require('electron')
const isCI = remote.getGlobal('isCi')
describe('desktopCapturer', () => {
before(function () {
if (isCI && process.platform === 'win32') {
this.skip()
}
})
it('should return a non-empty array of sources', (done) => {
desktopCapturer.getSources({
types: ['window', 'screen']
}, (error, sources) => {
assert.equal(error, null)
assert.notEqual(sources.length, 0)
done()
})
})
it('throws an error for invalid options', (done) => {
desktopCapturer.getSources(['window', 'screen'], (error) => {
assert.equal(error.message, 'Invalid options')
done()
})
})
it('does not throw an error when called more than once (regression)', (done) => {
let callCount = 0
const callback = (error, sources) => {
callCount++
assert.equal(error, null)
assert.notEqual(sources.length, 0)
if (callCount === 2) done()
}
desktopCapturer.getSources({types: ['window', 'screen']}, callback)
desktopCapturer.getSources({types: ['window', 'screen']}, callback)
})
it('responds to subsequent calls of different options', (done) => {
let callCount = 0
const callback = (error, sources) => {
callCount++
assert.equal(error, null)
if (callCount === 2) done()
}
desktopCapturer.getSources({types: ['window']}, callback)
desktopCapturer.getSources({types: ['screen']}, callback)
})
it('returns an empty display_id for window sources on Windows and Mac', (done) => {
// Linux doesn't return any window sources.
if (process.platform !== 'win32' && process.platform !== 'darwin') {
return done()
}
desktopCapturer.getSources({types: ['window']}, (error, sources) => {
assert.equal(error, null)
assert.notEqual(sources.length, 0)
sources.forEach((source) => { assert.equal(source.display_id.length, 0) })
done()
})
})
it('returns display_ids matching the Screen API on Windows and Mac', (done) => {
if (process.platform !== 'win32' && process.platform !== 'darwin') {
return done()
}
const displays = screen.getAllDisplays()
desktopCapturer.getSources({types: ['screen']}, (error, sources) => {
assert.equal(error, null)
assert.notEqual(sources.length, 0)
assert.equal(sources.length, displays.length)
for (let i = 0; i < sources.length; i++) {
assert.equal(sources[i].display_id, displays[i].id)
}
done()
})
})
})