mirror of
https://github.com/yu-i-i/overleaf-cep.git
synced 2026-05-23 09:09:36 +02:00
178 lines
5.1 KiB
JavaScript
178 lines
5.1 KiB
JavaScript
import { vi, describe, beforeEach, it } from 'vitest'
|
|
|
|
import sinon from 'sinon'
|
|
import path from 'node:path'
|
|
|
|
const modulePath = path.join(import.meta.dirname, '../../../app/js/TikzManager')
|
|
|
|
describe('TikzManager', () => {
|
|
beforeEach(async ctx => {
|
|
vi.doMock('../../../app/js/ResourceWriter', () => ({
|
|
default: (ctx.ResourceWriter = {}),
|
|
}))
|
|
|
|
vi.doMock('../../../app/js/SafeReader', () => ({
|
|
default: (ctx.SafeReader = {}),
|
|
}))
|
|
|
|
vi.doMock('fs', () => ({
|
|
default: (ctx.fs = {}),
|
|
}))
|
|
|
|
ctx.TikzManager = (await import(modulePath)).default
|
|
})
|
|
|
|
describe('checkMainFile', () => {
|
|
beforeEach(ctx => {
|
|
ctx.compileDir = 'compile-dir'
|
|
ctx.mainFile = 'main.tex'
|
|
ctx.callback = sinon.stub()
|
|
})
|
|
|
|
describe('if there is already an output.tex file in the resources', () => {
|
|
beforeEach(ctx => {
|
|
ctx.resources = [{ path: 'main.tex' }, { path: 'output.tex' }]
|
|
ctx.TikzManager.checkMainFile(
|
|
ctx.compileDir,
|
|
ctx.mainFile,
|
|
ctx.resources,
|
|
ctx.callback
|
|
)
|
|
})
|
|
|
|
it('should call the callback with false ', ctx => {
|
|
ctx.callback.calledWithExactly(null, false).should.equal(true)
|
|
})
|
|
})
|
|
|
|
describe('if there is no output.tex file in the resources', () => {
|
|
beforeEach(ctx => {
|
|
ctx.resources = [{ path: 'main.tex' }]
|
|
ctx.ResourceWriter.checkPath = sinon
|
|
.stub()
|
|
.withArgs(ctx.compileDir, ctx.mainFile)
|
|
.callsArgWith(2, null, `${ctx.compileDir}/${ctx.mainFile}`)
|
|
})
|
|
|
|
describe('and the main file contains tikzexternalize', () => {
|
|
beforeEach(ctx => {
|
|
ctx.SafeReader.readFile = sinon
|
|
.stub()
|
|
.withArgs(`${ctx.compileDir}/${ctx.mainFile}`)
|
|
.callsArgWith(3, null, 'hello \\tikzexternalize')
|
|
ctx.TikzManager.checkMainFile(
|
|
ctx.compileDir,
|
|
ctx.mainFile,
|
|
ctx.resources,
|
|
ctx.callback
|
|
)
|
|
})
|
|
|
|
it('should look at the file on disk', ctx => {
|
|
ctx.SafeReader.readFile
|
|
.calledWith(`${ctx.compileDir}/${ctx.mainFile}`)
|
|
.should.equal(true)
|
|
})
|
|
|
|
it('should call the callback with true ', ctx => {
|
|
ctx.callback.calledWithExactly(null, true).should.equal(true)
|
|
})
|
|
})
|
|
|
|
describe('and the main file does not contain tikzexternalize', () => {
|
|
beforeEach(ctx => {
|
|
ctx.SafeReader.readFile = sinon
|
|
.stub()
|
|
.withArgs(`${ctx.compileDir}/${ctx.mainFile}`)
|
|
.callsArgWith(3, null, 'hello')
|
|
ctx.TikzManager.checkMainFile(
|
|
ctx.compileDir,
|
|
ctx.mainFile,
|
|
ctx.resources,
|
|
ctx.callback
|
|
)
|
|
})
|
|
|
|
it('should look at the file on disk', ctx => {
|
|
ctx.SafeReader.readFile
|
|
.calledWith(`${ctx.compileDir}/${ctx.mainFile}`)
|
|
.should.equal(true)
|
|
})
|
|
|
|
it('should call the callback with false', ctx => {
|
|
ctx.callback.calledWithExactly(null, false).should.equal(true)
|
|
})
|
|
})
|
|
|
|
describe('and the main file contains \\usepackage{pstool}', () => {
|
|
beforeEach(ctx => {
|
|
ctx.SafeReader.readFile = sinon
|
|
.stub()
|
|
.withArgs(`${ctx.compileDir}/${ctx.mainFile}`)
|
|
.callsArgWith(3, null, 'hello \\usepackage[random-options]{pstool}')
|
|
ctx.TikzManager.checkMainFile(
|
|
ctx.compileDir,
|
|
ctx.mainFile,
|
|
ctx.resources,
|
|
ctx.callback
|
|
)
|
|
})
|
|
|
|
it('should look at the file on disk', ctx => {
|
|
ctx.SafeReader.readFile
|
|
.calledWith(`${ctx.compileDir}/${ctx.mainFile}`)
|
|
.should.equal(true)
|
|
})
|
|
|
|
it('should call the callback with true ', ctx => {
|
|
ctx.callback.calledWithExactly(null, true).should.equal(true)
|
|
})
|
|
})
|
|
})
|
|
})
|
|
|
|
describe('injectOutputFile', () => {
|
|
beforeEach(ctx => {
|
|
ctx.rootDir = '/mock'
|
|
ctx.filename = 'filename.tex'
|
|
ctx.callback = sinon.stub()
|
|
ctx.content = `\
|
|
\\documentclass{article}
|
|
\\usepackage{tikz}
|
|
\\tikzexternalize
|
|
\\begin{document}
|
|
Hello world
|
|
\\end{document}\
|
|
`
|
|
ctx.fs.readFile = sinon.stub().callsArgWith(2, null, ctx.content)
|
|
ctx.fs.writeFile = sinon.stub().callsArg(3)
|
|
ctx.ResourceWriter.checkPath = sinon
|
|
.stub()
|
|
.callsArgWith(2, null, `${ctx.rootDir}/${ctx.filename}`)
|
|
ctx.TikzManager.injectOutputFile(ctx.rootDir, ctx.filename, ctx.callback)
|
|
})
|
|
|
|
it('should check the path', ctx => {
|
|
ctx.ResourceWriter.checkPath
|
|
.calledWith(ctx.rootDir, ctx.filename)
|
|
.should.equal(true)
|
|
})
|
|
|
|
it('should read the file', ctx => {
|
|
ctx.fs.readFile
|
|
.calledWith(`${ctx.rootDir}/${ctx.filename}`, 'utf8')
|
|
.should.equal(true)
|
|
})
|
|
|
|
it('should write out the same file as output.tex', ctx => {
|
|
ctx.fs.writeFile
|
|
.calledWith(`${ctx.rootDir}/output.tex`, ctx.content, { flag: 'wx' })
|
|
.should.equal(true)
|
|
})
|
|
|
|
it('should call the callback', ctx => {
|
|
ctx.callback.called.should.equal(true)
|
|
})
|
|
})
|
|
})
|