165 lines
		
	
	
	
		
			4.6 KiB
			
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			165 lines
		
	
	
	
		
			4.6 KiB
			
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
const assert = require('assert')
 | 
						|
const http = require('http')
 | 
						|
const path = require('path')
 | 
						|
const {closeWindow} = require('./window-helpers')
 | 
						|
const BrowserWindow = require('electron').remote.BrowserWindow
 | 
						|
 | 
						|
describe('debugger module', () => {
 | 
						|
  const fixtures = path.resolve(__dirname, 'fixtures')
 | 
						|
  let w = null
 | 
						|
 | 
						|
  beforeEach(() => {
 | 
						|
    w = new BrowserWindow({
 | 
						|
      show: false,
 | 
						|
      width: 400,
 | 
						|
      height: 400
 | 
						|
    })
 | 
						|
  })
 | 
						|
 | 
						|
  afterEach(() => closeWindow(w).then(() => { w = null }))
 | 
						|
 | 
						|
  describe('debugger.attach', () => {
 | 
						|
    it('fails when devtools is already open', (done) => {
 | 
						|
      w.webContents.on('did-finish-load', () => {
 | 
						|
        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', (done) => {
 | 
						|
      try {
 | 
						|
        w.webContents.debugger.attach('2.0')
 | 
						|
      } catch (err) {
 | 
						|
        assert(!w.webContents.debugger.isAttached())
 | 
						|
        done()
 | 
						|
      }
 | 
						|
    })
 | 
						|
 | 
						|
    it('attaches when no protocol version is specified', (done) => {
 | 
						|
      try {
 | 
						|
        w.webContents.debugger.attach()
 | 
						|
      } catch (err) {
 | 
						|
        done(`unexpected error : ${err}`)
 | 
						|
      }
 | 
						|
      assert(w.webContents.debugger.isAttached())
 | 
						|
      done()
 | 
						|
    })
 | 
						|
  })
 | 
						|
 | 
						|
  describe('debugger.detach', () => {
 | 
						|
    it('fires detach event', (done) => {
 | 
						|
      w.webContents.debugger.on('detach', (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', () => {
 | 
						|
    let server
 | 
						|
 | 
						|
    afterEach(() => {
 | 
						|
      if (server != null) {
 | 
						|
        server.close()
 | 
						|
        server = null
 | 
						|
      }
 | 
						|
    })
 | 
						|
 | 
						|
    it('retuns response', (done) => {
 | 
						|
      w.webContents.loadURL('about:blank')
 | 
						|
      try {
 | 
						|
        w.webContents.debugger.attach()
 | 
						|
      } catch (err) {
 | 
						|
        return done('unexpected error : ' + err)
 | 
						|
      }
 | 
						|
      var callback = function (err, res) {
 | 
						|
        assert(!err.message)
 | 
						|
        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', (done) => {
 | 
						|
      const 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', (e, method, params) => {
 | 
						|
        if (method === 'Console.messageAdded') {
 | 
						|
          assert.equal(params.message.level, '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', (done) => {
 | 
						|
      w.webContents.loadURL('about:blank')
 | 
						|
      try {
 | 
						|
        w.webContents.debugger.attach()
 | 
						|
      } catch (err) {
 | 
						|
        done(`unexpected error : ${err}`)
 | 
						|
      }
 | 
						|
      w.webContents.debugger.sendCommand('Test', (err) => {
 | 
						|
        assert.equal(err.message, "'Test' wasn't found")
 | 
						|
        w.webContents.debugger.detach()
 | 
						|
        done()
 | 
						|
      })
 | 
						|
    })
 | 
						|
 | 
						|
    it('handles invalid unicode characters in message', (done) => {
 | 
						|
      try {
 | 
						|
        w.webContents.debugger.attach()
 | 
						|
      } catch (err) {
 | 
						|
        done(`unexpected error : ${err}`)
 | 
						|
      }
 | 
						|
 | 
						|
      w.webContents.debugger.on('message', (event, method, params) => {
 | 
						|
        if (method === 'Network.loadingFinished') {
 | 
						|
          w.webContents.debugger.sendCommand('Network.getResponseBody', {
 | 
						|
            requestId: params.requestId
 | 
						|
          }, () => {
 | 
						|
            done()
 | 
						|
          })
 | 
						|
        }
 | 
						|
      })
 | 
						|
 | 
						|
      server = http.createServer((req, res) => {
 | 
						|
        res.setHeader('Content-Type', 'text/plain; charset=utf-8')
 | 
						|
        res.end('\uFFFF')
 | 
						|
      })
 | 
						|
 | 
						|
      server.listen(0, '127.0.0.1', () => {
 | 
						|
        w.webContents.debugger.sendCommand('Network.enable')
 | 
						|
        w.loadURL(`http://127.0.0.1:${server.address().port}`)
 | 
						|
      })
 | 
						|
    })
 | 
						|
  })
 | 
						|
})
 |