api-debugger-spec.js 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  1. const assert = require('assert')
  2. const http = require('http')
  3. const path = require('path')
  4. const {closeWindow} = require('./window-helpers')
  5. const BrowserWindow = require('electron').remote.BrowserWindow
  6. describe('debugger module', function () {
  7. var fixtures = path.resolve(__dirname, 'fixtures')
  8. var w = null
  9. beforeEach(function () {
  10. w = new BrowserWindow({
  11. show: false,
  12. width: 400,
  13. height: 400
  14. })
  15. })
  16. afterEach(function () {
  17. return closeWindow(w).then(function () { w = null })
  18. })
  19. describe('debugger.attach', function () {
  20. it('fails when devtools is already open', function (done) {
  21. w.webContents.on('did-finish-load', function () {
  22. w.webContents.openDevTools()
  23. try {
  24. w.webContents.debugger.attach()
  25. } catch (err) {
  26. assert(w.webContents.debugger.isAttached())
  27. done()
  28. }
  29. })
  30. w.webContents.loadURL('file://' + path.join(fixtures, 'pages', 'a.html'))
  31. })
  32. it('fails when protocol version is not supported', function (done) {
  33. try {
  34. w.webContents.debugger.attach('2.0')
  35. } catch (err) {
  36. assert(!w.webContents.debugger.isAttached())
  37. done()
  38. }
  39. })
  40. it('attaches when no protocol version is specified', function (done) {
  41. try {
  42. w.webContents.debugger.attach()
  43. } catch (err) {
  44. done('unexpected error : ' + err)
  45. }
  46. assert(w.webContents.debugger.isAttached())
  47. done()
  48. })
  49. })
  50. describe('debugger.detach', function () {
  51. it('fires detach event', function (done) {
  52. w.webContents.debugger.on('detach', function (e, reason) {
  53. assert.equal(reason, 'target closed')
  54. assert(!w.webContents.debugger.isAttached())
  55. done()
  56. })
  57. try {
  58. w.webContents.debugger.attach()
  59. } catch (err) {
  60. done('unexpected error : ' + err)
  61. }
  62. w.webContents.debugger.detach()
  63. })
  64. })
  65. describe('debugger.sendCommand', function () {
  66. let server
  67. afterEach(function () {
  68. if (server != null) {
  69. server.close()
  70. server = null
  71. }
  72. })
  73. it('retuns response', function (done) {
  74. w.webContents.loadURL('about:blank')
  75. try {
  76. w.webContents.debugger.attach()
  77. } catch (err) {
  78. return done('unexpected error : ' + err)
  79. }
  80. var callback = function (err, res) {
  81. assert(!err.message)
  82. assert(!res.wasThrown)
  83. assert.equal(res.result.value, 6)
  84. w.webContents.debugger.detach()
  85. done()
  86. }
  87. const params = {
  88. 'expression': '4+2'
  89. }
  90. w.webContents.debugger.sendCommand('Runtime.evaluate', params, callback)
  91. })
  92. it('fires message event', function (done) {
  93. var url = process.platform !== 'win32'
  94. ? 'file://' + path.join(fixtures, 'pages', 'a.html')
  95. : 'file:///' + path.join(fixtures, 'pages', 'a.html').replace(/\\/g, '/')
  96. w.webContents.loadURL(url)
  97. try {
  98. w.webContents.debugger.attach()
  99. } catch (err) {
  100. done('unexpected error : ' + err)
  101. }
  102. w.webContents.debugger.on('message', function (e, method, params) {
  103. if (method === 'Console.messageAdded') {
  104. assert.equal(params.message.level, 'log')
  105. assert.equal(params.message.url, url)
  106. assert.equal(params.message.text, 'a')
  107. w.webContents.debugger.detach()
  108. done()
  109. }
  110. })
  111. w.webContents.debugger.sendCommand('Console.enable')
  112. })
  113. it('returns error message when command fails', function (done) {
  114. w.webContents.loadURL('about:blank')
  115. try {
  116. w.webContents.debugger.attach()
  117. } catch (err) {
  118. done('unexpected error : ' + err)
  119. }
  120. w.webContents.debugger.sendCommand('Test', function (err) {
  121. assert.equal(err.message, "'Test' wasn't found")
  122. w.webContents.debugger.detach()
  123. done()
  124. })
  125. })
  126. it('handles invalid unicode characters in message', function (done) {
  127. try {
  128. w.webContents.debugger.attach()
  129. } catch (err) {
  130. done('unexpected error : ' + err)
  131. }
  132. w.webContents.debugger.on('message', (event, method, params) => {
  133. if (method === 'Network.loadingFinished') {
  134. w.webContents.debugger.sendCommand('Network.getResponseBody', {
  135. requestId: params.requestId
  136. }, () => {
  137. done()
  138. })
  139. }
  140. })
  141. server = http.createServer((req, res) => {
  142. res.setHeader('Content-Type', 'text/plain; charset=utf-8')
  143. res.end('\uFFFF')
  144. })
  145. server.listen(0, '127.0.0.1', () => {
  146. w.webContents.debugger.sendCommand('Network.enable')
  147. w.loadURL(`http://127.0.0.1:${server.address().port}`)
  148. })
  149. })
  150. })
  151. })