Merge pull request #15411 from overleaf/mj-cypress-mathjax

[web] Stub mathjax in cypress tests

GitOrigin-RevId: 7b734a7d80cbc0a96c9cc05ee8c31a4daaab5e25
This commit is contained in:
Mathias Jakobsen 2023-10-25 12:11:14 +01:00 committed by Copybot
parent 1518b94451
commit 1e810a987f
6 changed files with 44 additions and 33 deletions

View file

@ -3,7 +3,22 @@ window.MathJax = {
startup: { startup: {
promise: Promise.resolve() promise: Promise.resolve()
}, },
svgStylesheet: () => document.createElement("STYLE") svgStylesheet: () => document.createElement("STYLE"),
typesetPromise: (elements) => {
for (const element of elements) {
// This will keep math delimeters around the text
element.classList.add('MathJax')
}
return Promise.resolve()
},
tex2svgPromise: (content) => {
const text = document.createElement('SPAN')
text.classList.add('MathJax')
text.innerText = content
return Promise.resolve(text)
},
getMetricsFor: () => ({}),
texReset: () => {},
} }
` `
@ -11,13 +26,12 @@ export const interceptMathJax = () => {
cy.window().then(win => { cy.window().then(win => {
win.metaAttributesCache.set( win.metaAttributesCache.set(
'ol-mathJax3Path', 'ol-mathJax3Path',
'https://unpkg.com/mathjax@3.2.2/es5/tex-svg-full.js' '/js/libs/mathjax3/es5/tex-svg-full.js'
) )
}) })
cy.intercept('GET', '/js/libs/mathjax3/es5/tex-svg-full.js*', MATHJAX_STUB)
cy.intercept( cy.intercept(
'GET', 'GET',
'https://unpkg.com/mathjax@3.2.2/es5/tex-svg-full.js', '/js/libs/mathjax3/es5/tex-svg-full.js*',
MATHJAX_STUB MATHJAX_STUB
) ).as('mathjax-load-request')
} }

View file

@ -155,6 +155,14 @@ cell 3 & cell 4 \\\\
checkBordersWithNoMultiColumn([false, true, false], [false, true, false]) checkBordersWithNoMultiColumn([false, true, false], [false, true, false])
}) })
it('Renders math in cells', function () {
mountEditor(`
\\begin{tabular}{c}
$\\pi$
\\end{tabular}`)
cy.get('.MathJax').should('have.text', '$\\pi$')
})
}) })
describe('The toolbar', function () { describe('The toolbar', function () {

View file

@ -27,10 +27,7 @@ const mountEditor = (content: string, ...args: any[]) => {
describe('<CodeMirrorEditor/> in Visual mode with read-only permission', function () { describe('<CodeMirrorEditor/> in Visual mode with read-only permission', function () {
beforeEach(function () { beforeEach(function () {
window.metaAttributesCache.set('ol-preventCompileOnLoad', true) window.metaAttributesCache.set('ol-preventCompileOnLoad', true)
window.metaAttributesCache.set( cy.interceptMathJax()
'ol-mathJax3Path',
'https://unpkg.com/mathjax@3.2.2/es5/tex-svg-full.js'
)
cy.interceptEvents() cy.interceptEvents()
cy.interceptSpelling() cy.interceptSpelling()
}) })

View file

@ -10,10 +10,7 @@ const Container: FC = ({ children }) => (
describe('<CodeMirrorEditor/> tooltips in Visual mode', function () { describe('<CodeMirrorEditor/> tooltips in Visual mode', function () {
beforeEach(function () { beforeEach(function () {
window.metaAttributesCache.set('ol-preventCompileOnLoad', true) window.metaAttributesCache.set('ol-preventCompileOnLoad', true)
window.metaAttributesCache.set( cy.interceptMathJax()
'ol-mathJax3Path',
'https://unpkg.com/mathjax@3.2.2/es5/tex-svg-full.js'
)
cy.interceptEvents() cy.interceptEvents()
cy.interceptSpelling() cy.interceptSpelling()

View file

@ -13,12 +13,9 @@ const Container: FC = ({ children }) => (
describe('<CodeMirrorEditor/> in Visual mode', function () { describe('<CodeMirrorEditor/> in Visual mode', function () {
beforeEach(function () { beforeEach(function () {
window.metaAttributesCache.set('ol-preventCompileOnLoad', true) window.metaAttributesCache.set('ol-preventCompileOnLoad', true)
window.metaAttributesCache.set(
'ol-mathJax3Path',
'https://unpkg.com/mathjax@3.2.2/es5/tex-svg-full.js'
)
cy.interceptEvents() cy.interceptEvents()
cy.interceptSpelling() cy.interceptSpelling()
cy.interceptMathJax()
// 3 blank lines // 3 blank lines
const content = '\n'.repeat(3) const content = '\n'.repeat(3)
@ -386,17 +383,14 @@ describe('<CodeMirrorEditor/> in Visual mode', function () {
cy.get('@first-line').type( cy.get('@first-line').type(
'\\begin{{}frame}{{}Slide\\\\title}{Enter}\\end{{}frame}{Enter}' '\\begin{{}frame}{{}Slide\\\\title}{Enter}\\end{{}frame}{Enter}'
) )
cy.get('.ol-cm-frame-title').should('have.html', 'Slide<br>title') cy.get('.ol-cm-frame-title').should('contain.html', 'Slide<br>title')
}) })
// eslint-disable-next-line mocha/no-skipped-tests it('typesets math in title', function () {
it.skip('typesets math in title', function () {
cy.get('@first-line').type( cy.get('@first-line').type(
'\\begin{{}frame}{{}Slide $\\pi$}{Enter}\\end{{}frame}{Enter}' '\\begin{{}frame}{{}Slide $\\pi$}{Enter}\\end{{}frame}{Enter}'
) )
cy.get('.MathJax').should('contain.text', '$\\pi$')
// allow plenty of time for MathJax to load
cy.get('.MathJax', { timeout: 10000 })
}) })
it('typesets subtitle', function () { it('typesets subtitle', function () {
@ -419,11 +413,7 @@ describe('<CodeMirrorEditor/> in Visual mode', function () {
].join('{Enter}') ].join('{Enter}')
) )
// allow plenty of time for MathJax to load cy.get('.ol-cm-maketitle').should('have.class', 'MathJax')
// TODO: re-enable this assertion when stable
// cy.get('.MathJax', { timeout: 10000 })
cy.get('.ol-cm-maketitle')
cy.get('.ol-cm-title').should('contain.html', 'Document title<br>with') cy.get('.ol-cm-title').should('contain.html', 'Document title<br>with')
cy.get('.ol-cm-author').should('have.text', 'Author') cy.get('.ol-cm-author').should('have.text', 'Author')
@ -700,7 +690,15 @@ describe('<CodeMirrorEditor/> in Visual mode', function () {
} }
) )
it('invokes MathJax when math is written', function () {
cy.get('@first-line').type('foo $\\pi$ bar')
cy.get('@second-line').type(
'foo \n\\[\\epsilon{rightArrow}{rightArrow}\nbar'
)
cy.get('.MathJax').first().should('have.text', '\\pi')
cy.get('.MathJax').eq(1).should('have.text', '\\epsilon')
})
// TODO: \input // TODO: \input
// TODO: Math
// TODO: Abstract // TODO: Abstract
}) })

View file

@ -41,10 +41,7 @@ describe('<FigureModal />', function () {
// TODO: Write tests for width toggle, when we can match on source code // TODO: Write tests for width toggle, when we can match on source code
beforeEach(function () { beforeEach(function () {
window.metaAttributesCache.set('ol-preventCompileOnLoad', true) window.metaAttributesCache.set('ol-preventCompileOnLoad', true)
window.metaAttributesCache.set( cy.interceptMathJax()
'ol-mathJax3Path',
'https://unpkg.com/mathjax@3.2.2/es5/tex-svg-full.js'
)
cy.interceptEvents() cy.interceptEvents()
cy.interceptSpelling() cy.interceptSpelling()