| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143 |
- var path = require('path')
- var http = require('http')
- var puppeteer = require('puppeteer')
- var iconv = require('iconv-lite')
- var options = {
- headless: false,
- // slowMo: 300,
- args: [
- `--disable-extensions-except=${path.resolve(__dirname, '../')}`,
- `--load-extension=${path.resolve(__dirname, '../')}`,
- ],
- }
- var tests = [
- 'defaults-popup',
- 'defaults-options',
- 'popup-options',
- 'origin-add',
- 'origin-match',
- 'origin-encoding',
- 'origin-csp', // should be last - destroys popup and advanced
- ]
- describe('markdown-viewer', () => {
- var browser, server
- it('test suite', async () => {
- browser = await puppeteer.launch(options)
- var extensions = await browser.newPage()
- await extensions.goto('chrome://extensions')
- // enable developer mode
- await extensions.evaluate(() => {
- document.querySelector('extensions-manager').shadowRoot
- .querySelector('extensions-toolbar').shadowRoot
- .querySelector('cr-toggle').click()
- })
- // get extension id
- var id = await extensions.evaluate(() =>
- Array.from(
- document.querySelector('extensions-manager').shadowRoot
- .querySelector('extensions-item-list').shadowRoot
- .querySelectorAll('extensions-item')
- )[0].id
- )
- var popup = await browser.newPage()
- await popup.goto(`chrome-extension://${id}/content/popup.html`)
- var advanced = await browser.newPage()
- await advanced.goto(`chrome-extension://${id}/content/options.html`)
- var content = await browser.newPage()
- await new Promise((resolve, reject) => {
- var index = 0
- server = http.createServer()
- server.on('request', (req, res) => {
- // content-type
- if (/wrong-content-type/.test(req.url)) {
- res.setHeader('Content-Type', 'text/plain')
- res.end('**bold**')
- }
- else if (/correct-content-type/.test(req.url)) {
- res.setHeader('Content-Type', 'text/markdown')
- res.end('**bold**')
- }
- else if (/correct-content-type-variation/.test(req.url)) {
- res.setHeader('Content-Type', 'text/x-markdown')
- res.end('**bold**')
- }
- // popup options
- else if (/compiler-options-marked/.test(req.url)) {
- res.setHeader('Content-Type', 'text/x-markdown')
- res.end('~~strikethrough~~')
- }
- else if (/compiler-options-remark/.test(req.url)) {
- res.setHeader('Content-Type', 'text/x-markdown')
- res.end('- [ ] task')
- }
- else if (/content-options-toc/.test(req.url)) {
- res.setHeader('Content-Type', 'text/markdown')
- res.end('# h1\n# h2\n# h3')
- }
- else if (/content-options-scroll/.test(req.url)) {
- res.setHeader('Content-Type', 'text/markdown')
- res.end([
- '# h1',
- Array(500).fill('lorem ipsum').join(' '),
- '## h2',
- Array(500).fill('lorem ipsum').join(' '),
- '### h3',
- Array(500).fill('lorem ipsum').join(' '),
- ].join('\n\n'))
- }
- else if (/autoreload/.test(req.url)) {
- res.setHeader('Content-Type', 'text/markdown')
- index += /preventCache/.test(req.url) ? 1 : 0
- res.end(`# ${index}`)
- }
- // csp
- else if (/csp-match-header/.test(req.url)) {
- res.setHeader('Content-Security-Policy',
- `default-src 'none'; style-src 'unsafe-inline'; sandbox`)
- res.setHeader('Content-Type', 'text/markdown')
- res.end('# h1')
- }
- else if (/csp-match-path/.test(req.url)) {
- res.setHeader('Content-Security-Policy',
- `default-src 'none'; style-src 'unsafe-inline'; sandbox`)
- res.end('# h1')
- }
- else if (/csp-no-header-no-path/.test(req.url)) {
- res.setHeader('Content-Security-Policy',
- `default-src 'none'; style-src 'unsafe-inline'; sandbox`)
- res.end('# h1')
- }
- // encoding
- else if (/windows-1251/.test(req.url)) {
- res.setHeader('Content-Type', 'text/markdown; charset=UTF-8')
- res.end(iconv.encode('здрасти', 'win1251'))
- }
- })
- server.listen(3000, resolve)
- })
- tests.forEach((file) => {
- describe(file, () => {
- require(`./${file}.js`)({puppeteer, browser, extensions, popup, advanced, content})
- })
- })
- after(async () => {
- server.close()
- await browser.close()
- })
- })
- })
|