const assert = require('assert'); const path = require('path'); const BrowserWindow = require('electron').remote.BrowserWindow; describe('debugger module', function() { var fixtures = path.resolve(__dirname, 'fixtures'); var w = null; beforeEach(function() { if (w != null) { w.destroy(); } w = new BrowserWindow({ show: false, width: 400, height: 400 }); }); afterEach(function() { if (w != null) { w.destroy(); } w = null; }); describe('debugger.attach', function() { it('fails when devtools is already open', function(done) { w.webContents.on('did-finish-load', function() { w.webContents.openDevTools(); try { w.webContents.debugger.attach(); } catch(err) { assert(w.webContents.debugger.isAttached()); done(); } }); w.webContents.loadURL('file://' + path.join(fixtures, 'pages', 'a.html')); }); it('fails when protocol version is not supported', function(done) { try { w.webContents.debugger.attach("2.0"); } catch(err) { assert(!w.webContents.debugger.isAttached()); done(); } }); it('attaches when no protocol version is specified', function(done) { try { w.webContents.debugger.attach(); } catch(err) { done('unexpected error : ' + err); } assert(w.webContents.debugger.isAttached()); done(); }); }); describe('debugger.detach', function() { it('fires detach event', function(done) { w.webContents.debugger.on('detach', function(e, reason) { assert.equal(reason, 'target closed'); assert(!w.webContents.debugger.isAttached()); done(); }); try { w.webContents.debugger.attach(); } catch(err) { done('unexpected error : ' + err); } w.webContents.debugger.detach(); }); }); describe('debugger.sendCommand', function() { it('retuns response', function(done) { w.webContents.loadURL('about:blank'); try { w.webContents.debugger.attach(); } catch(err) { done('unexpected error : ' + err); } var callback = function(err, res) { assert(!res.wasThrown); assert.equal(res.result.value, 6); w.webContents.debugger.detach(); done(); }; const params = { "expression": "4+2", }; w.webContents.debugger.sendCommand("Runtime.evaluate", params, callback); }); it('fires message event', function(done) { var url = process.platform != 'win32' ? 'file://' + path.join(fixtures, 'pages', 'a.html') : 'file:///' + path.join(fixtures, 'pages', 'a.html').replace(/\\/g, '/'); w.webContents.loadURL(url); try { w.webContents.debugger.attach(); } catch(err) { done('unexpected error : ' + err); } w.webContents.debugger.on('message', function(e, method, params) { if(method == "Console.messageAdded") { assert.equal(params.message.type, 'log'); assert.equal(params.message.url, url); assert.equal(params.message.text, 'a'); w.webContents.debugger.detach(); done(); } }); w.webContents.debugger.sendCommand("Console.enable"); }); it('returns error message when command fails', function(done) { w.webContents.loadURL('about:blank'); try { w.webContents.debugger.attach(); } catch(err) { done('unexpected error : ' + err); } w.webContents.debugger.sendCommand("Test", function(err) { assert.equal(err.message, '\'Test\' wasn\'t found'); w.webContents.debugger.detach(); done(); }); }); }); });