index.js 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. var path = require('path')
  2. var http = require('http')
  3. var puppeteer = require('puppeteer')
  4. var iconv = require('iconv-lite')
  5. var options = {
  6. headless: false,
  7. // slowMo: 300,
  8. args: [
  9. `--disable-extensions-except=${path.resolve(__dirname, '../')}`,
  10. `--load-extension=${path.resolve(__dirname, '../')}`,
  11. ],
  12. }
  13. var tests = [
  14. 'popup-defaults',
  15. 'advanced-defaults',
  16. 'advanced-origins',
  17. 'popup-options',
  18. 'advanced-encoding',
  19. 'advanced-csp', // should be last - destroys popup and advanced
  20. ]
  21. describe('markdown-viewer', () => {
  22. var browser, server
  23. it('test suite', async () => {
  24. browser = await puppeteer.launch(options)
  25. var extensions = await browser.newPage()
  26. await extensions.goto('chrome://extensions')
  27. // enable developer mode
  28. await extensions.evaluate(() => {
  29. document.querySelector('extensions-manager').shadowRoot
  30. .querySelector('extensions-toolbar').shadowRoot
  31. .querySelector('cr-toggle').click()
  32. })
  33. // get extension id
  34. var id = await extensions.evaluate(() =>
  35. Array.from(
  36. document.querySelector('extensions-manager').shadowRoot
  37. .querySelector('extensions-item-list').shadowRoot
  38. .querySelectorAll('extensions-item')
  39. )[0].id
  40. )
  41. var popup = await browser.newPage()
  42. await popup.goto(`chrome-extension://${id}/content/popup.html`)
  43. var advanced = await browser.newPage()
  44. await advanced.goto(`chrome-extension://${id}/content/options.html`)
  45. var content = await browser.newPage()
  46. await new Promise((resolve, reject) => {
  47. server = http.createServer()
  48. server.on('request', (req, res) => {
  49. if (/wrong-content-type/.test(req.url)) {
  50. res.setHeader('Content-Type', 'text/plain')
  51. res.end('**bold**')
  52. }
  53. else if (/correct-content-type/.test(req.url)) {
  54. res.setHeader('Content-Type', 'text/markdown')
  55. res.end('**bold**')
  56. }
  57. else if (/correct-content-type-variation/.test(req.url)) {
  58. res.setHeader('Content-Type', 'text/x-markdown')
  59. res.end('**bold**')
  60. }
  61. else if (/compiler-options-marked/.test(req.url)) {
  62. res.setHeader('Content-Type', 'text/x-markdown')
  63. res.end('~~strikethrough~~')
  64. }
  65. else if (/compiler-options-remark/.test(req.url)) {
  66. res.setHeader('Content-Type', 'text/x-markdown')
  67. res.end('- [ ] task')
  68. }
  69. else if (/content-options-toc/.test(req.url)) {
  70. res.setHeader('Content-Type', 'text/markdown')
  71. res.end('# h1\n# h2\n# h3')
  72. }
  73. else if (/content-options-scroll/.test(req.url)) {
  74. res.setHeader('Content-Type', 'text/markdown')
  75. res.end([
  76. '# h1',
  77. Array(500).fill('lorem ipsum').join(' '),
  78. '## h2',
  79. Array(500).fill('lorem ipsum').join(' '),
  80. '### h3',
  81. Array(500).fill('lorem ipsum').join(' '),
  82. ].join('\n\n'))
  83. }
  84. else if (/csp-match-path/.test(req.url)) {
  85. res.setHeader('Content-Security-Policy',
  86. `default-src 'none'; style-src 'unsafe-inline'; sandbox`)
  87. res.end('# h1')
  88. }
  89. else if (/csp-wrong-path/.test(req.url)) {
  90. res.setHeader('Content-Security-Policy',
  91. `default-src 'none'; style-src 'unsafe-inline'; sandbox`)
  92. res.end('# h1')
  93. }
  94. else if (/windows-1251/.test(req.url)) {
  95. res.setHeader('Content-Type', 'text/markdown; charset=UTF-8')
  96. res.end(iconv.encode('здрасти', 'win1251'))
  97. }
  98. })
  99. server.listen(3000, resolve)
  100. })
  101. tests.forEach((file) => {
  102. describe(file, () => {
  103. require(`./${file}.js`)({puppeteer, browser, extensions, popup, advanced, content})
  104. })
  105. })
  106. after(async () => {
  107. server.close()
  108. await browser.close()
  109. })
  110. })
  111. })