index.js 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. var path = require('path')
  2. var http = require('http')
  3. var puppeteer = require('puppeteer')
  4. var options = {
  5. headless: false,
  6. // slowMo: 300,
  7. args: [
  8. `--disable-extensions-except=${path.resolve(__dirname, '../')}`,
  9. `--load-extension=${path.resolve(__dirname, '../')}`,
  10. ],
  11. }
  12. var tests = [
  13. 'popup-defaults',
  14. 'advanced-defaults',
  15. 'advanced-origins',
  16. 'popup-options',
  17. 'advanced-csp', // should be last - destroys popup and advanced
  18. ]
  19. describe('markdown-viewer', () => {
  20. var browser, server
  21. it('test suite', async () => {
  22. browser = await puppeteer.launch(options)
  23. var extensions = await browser.newPage()
  24. await extensions.goto('chrome://extensions')
  25. await extensions.waitForSelector('.extension-id')
  26. var id = await extensions.evaluate(() =>
  27. document.querySelector('.extension-id').innerText.trim()
  28. )
  29. var popup = await browser.newPage()
  30. await popup.goto(`chrome-extension://${id}/content/popup.html`)
  31. var advanced = await browser.newPage()
  32. await advanced.goto(`chrome-extension://${id}/content/options.html`)
  33. var content = await browser.newPage()
  34. await new Promise((resolve, reject) => {
  35. server = http.createServer()
  36. server.on('request', (req, res) => {
  37. if (/wrong-content-type/.test(req.url)) {
  38. res.setHeader('Content-Type', 'text/plain')
  39. res.end('**bold**')
  40. }
  41. else if (/correct-content-type/.test(req.url)) {
  42. res.setHeader('Content-Type', 'text/markdown')
  43. res.end('**bold**')
  44. }
  45. else if (/correct-content-type-variation/.test(req.url)) {
  46. res.setHeader('Content-Type', 'text/x-markdown')
  47. res.end('**bold**')
  48. }
  49. else if (/compiler-options-marked/.test(req.url)) {
  50. res.setHeader('Content-Type', 'text/x-markdown')
  51. res.end('~~strikethrough~~')
  52. }
  53. else if (/compiler-options-remark/.test(req.url)) {
  54. res.setHeader('Content-Type', 'text/x-markdown')
  55. res.end('- [ ] task')
  56. }
  57. else if (/content-options-toc/.test(req.url)) {
  58. res.setHeader('Content-Type', 'text/markdown')
  59. res.end('# h1\n# h2\n# h3')
  60. }
  61. else if (/content-options-scroll/.test(req.url)) {
  62. res.setHeader('Content-Type', 'text/markdown')
  63. res.end([
  64. '# h1',
  65. Array(500).fill('lorem ipsum').join(' '),
  66. '## h2',
  67. Array(500).fill('lorem ipsum').join(' '),
  68. '### h3',
  69. Array(500).fill('lorem ipsum').join(' '),
  70. ].join('\n\n'))
  71. }
  72. else if (/csp/.test(req.url)) {
  73. res.setHeader('Content-Security-Policy',
  74. `default-src 'none'; style-src 'unsafe-inline'; sandbox`)
  75. res.end('# h1')
  76. }
  77. })
  78. server.listen(3000, resolve)
  79. })
  80. tests.forEach((file) => {
  81. describe(file, () => {
  82. require(`./${file}.js`)({puppeteer, browser, extensions, popup, advanced, content})
  83. })
  84. })
  85. after(async () => {
  86. server.close()
  87. await browser.close()
  88. })
  89. })
  90. })