| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140 |
- // Run babel on tests to allow support for import/export statements in Node
- require('@babel/register')({
- extensions: ['.ts', '.tsx', '.js', '.jsx', '.mjs', '.svg'],
- plugins: [['module-resolver', { alias: { '^@/(.+)': './frontend/js/\\1' } }]],
- })
- // Load JSDOM to mock the DOM in Node
- // Set pretendToBeVisual to enable requestAnimationFrame
- require('jsdom-global')(undefined, {
- pretendToBeVisual: true,
- url: 'https://www.test-overleaf.com/',
- })
- const path = require('path')
- process.env.OVERLEAF_CONFIG = path.resolve(
- __dirname,
- '../../config/settings.webpack.js'
- )
- // Load sinon-chai assertions so expect(stubFn).to.have.been.calledWith('abc')
- // has a nicer failure messages
- const chai = require('chai')
- chai.use(require('sinon-chai'))
- chai.use(require('chai-as-promised'))
- // Mock global settings
- window.ExposedSettings = {
- appName: 'Overleaf',
- maxEntitiesPerProject: 10,
- maxUploadSize: 5 * 1024 * 1024,
- siteUrl: 'https://www.dev-overleaf.com',
- hasLinkUrlFeature: true,
- hasLinkedProjectFileFeature: true,
- hasLinkedProjectOutputFileFeature: true,
- textExtensions: [
- 'tex',
- 'latex',
- 'sty',
- 'cls',
- 'bst',
- 'bib',
- 'bibtex',
- 'txt',
- 'tikz',
- 'mtx',
- 'rtex',
- 'md',
- 'asy',
- 'lbx',
- 'bbx',
- 'cbx',
- 'm',
- 'lco',
- 'dtx',
- 'ins',
- 'ist',
- 'def',
- 'clo',
- 'ldf',
- 'rmd',
- 'lua',
- 'gv',
- 'mf',
- 'lhs',
- 'mk',
- 'xmpdata',
- 'cfg',
- 'rnw',
- 'ltx',
- 'inc',
- ],
- editableFilenames: ['latexmkrc', '.latexmkrc', 'makefile', 'gnumakefile'],
- }
- window.i18n = { currentLangCode: 'en' }
- require('../../frontend/js/i18n')
- const moment = require('moment')
- moment.updateLocale('en', {
- calendar: {
- lastDay: '[Yesterday]',
- sameDay: '[Today]',
- nextDay: '[Tomorrow]',
- lastWeek: 'ddd, Do MMM YY',
- nextWeek: 'ddd, Do MMM YY',
- sameElse: 'ddd, Do MMM YY',
- },
- })
- // workaround for missing keys in jsdom-global's keys.js
- globalThis.AbortController = global.AbortController = window.AbortController
- globalThis.MutationObserver = global.MutationObserver = window.MutationObserver
- globalThis.StorageEvent = global.StorageEvent = window.StorageEvent
- globalThis.SVGElement = global.SVGElement = window.SVGElement
- globalThis.localStorage = global.localStorage = window.localStorage
- globalThis.performance = global.performance = window.performance
- globalThis.cancelAnimationFrame = global.cancelAnimationFrame =
- window.cancelAnimationFrame
- globalThis.requestAnimationFrame = global.requestAnimationFrame =
- window.requestAnimationFrame
- globalThis.sessionStorage = global.sessionStorage = window.sessionStorage
- // add polyfill for ResizeObserver
- globalThis.ResizeObserver =
- global.ResizeObserver =
- window.ResizeObserver =
- require('@juggle/resize-observer').ResizeObserver
- // add stub for BroadcastChannel (unused in these tests)
- globalThis.BroadcastChannel =
- global.BroadcastChannel =
- window.BroadcastChannel =
- class BroadcastChannel {
- addEventListener(type, listener) {}
- removeEventListener(type, listener) {}
- postMessage(message) {}
- }
- // add stub for WebSocket state enum
- globalThis.WebSocket = class WebSocket {
- static CONNECTING = 0
- static OPEN = 1
- static CLOSING = 2
- static CLOSED = 3
- }
- // node-fetch doesn't accept relative URL's: https://github.com/node-fetch/node-fetch/blob/master/docs/v2-LIMITS.md#known-differences
- const fetch = require('node-fetch')
- globalThis.fetch =
- global.fetch =
- window.fetch =
- (url, ...options) => fetch(new URL(url, 'http://127.0.0.1'), ...options)
- // ignore CSS files
- const { addHook } = require('pirates')
- addHook(() => '', { exts: ['.css'], ignoreNodeModules: false })
- globalThis.HTMLElement.prototype.scrollIntoView = () => {}
- globalThis.DOMParser = window.DOMParser
|