mirror of
https://github.com/overleaf/overleaf.git
synced 2024-11-07 20:31:06 -05:00
155 lines
4.3 KiB
JavaScript
155 lines
4.3 KiB
JavaScript
/* eslint-disable
|
|
no-return-assign,
|
|
no-unused-vars,
|
|
*/
|
|
// TODO: This file was created by bulk-decaffeinate.
|
|
// Fix any style issues and re-enable lint.
|
|
/*
|
|
* decaffeinate suggestions:
|
|
* DS102: Remove unnecessary code created because of implicit returns
|
|
* Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md
|
|
*/
|
|
const SandboxedModule = require('sandboxed-module')
|
|
const sinon = require('sinon')
|
|
require('chai').should()
|
|
const modulePath = require('path').join(
|
|
__dirname,
|
|
'../../../app/js/LatexRunner'
|
|
)
|
|
const Path = require('path')
|
|
|
|
describe('LatexRunner', function() {
|
|
beforeEach(function() {
|
|
let Timer
|
|
this.LatexRunner = SandboxedModule.require(modulePath, {
|
|
requires: {
|
|
'settings-sharelatex': (this.Settings = {
|
|
docker: {
|
|
socketPath: '/var/run/docker.sock'
|
|
}
|
|
}),
|
|
'logger-sharelatex': (this.logger = {
|
|
log: sinon.stub(),
|
|
error: sinon.stub()
|
|
}),
|
|
'./Metrics': {
|
|
Timer: (Timer = class Timer {
|
|
done() {}
|
|
})
|
|
},
|
|
'./CommandRunner': (this.CommandRunner = {}),
|
|
'fs': (this.fs = {
|
|
writeFile: sinon.stub().callsArg(2)
|
|
})
|
|
}
|
|
})
|
|
|
|
this.directory = '/local/compile/directory'
|
|
this.mainFile = 'main-file.tex'
|
|
this.compiler = 'pdflatex'
|
|
this.image = 'example.com/image'
|
|
this.callback = sinon.stub()
|
|
this.project_id = 'project-id-123'
|
|
return (this.env = { foo: '123' })
|
|
})
|
|
|
|
return describe('runLatex', function() {
|
|
beforeEach(function() {
|
|
return (this.CommandRunner.run = sinon.stub().callsArg(6))
|
|
})
|
|
|
|
describe('normally', function() {
|
|
beforeEach(function() {
|
|
return this.LatexRunner.runLatex(
|
|
this.project_id,
|
|
{
|
|
directory: this.directory,
|
|
mainFile: this.mainFile,
|
|
compiler: this.compiler,
|
|
timeout: (this.timeout = 42000),
|
|
image: this.image,
|
|
environment: this.env
|
|
},
|
|
this.callback
|
|
)
|
|
})
|
|
|
|
return it('should run the latex command', function() {
|
|
return this.CommandRunner.run
|
|
.calledWith(
|
|
this.project_id,
|
|
sinon.match.any,
|
|
this.directory,
|
|
this.image,
|
|
this.timeout,
|
|
this.env
|
|
)
|
|
.should.equal(true)
|
|
})
|
|
|
|
it('should record the stdout and stderr', function () {
|
|
this.fs.writeFile
|
|
.calledWith(
|
|
this.directory + '/' + 'output.stdout',
|
|
"this is stdout"
|
|
)
|
|
.should.equal(true)
|
|
this.fs.writeFile
|
|
.calledWith(
|
|
this.directory + '/' + 'output.stderr',
|
|
"this is stderr"
|
|
)
|
|
.should.equal(true)
|
|
})
|
|
})
|
|
|
|
describe('with an .Rtex main file', function() {
|
|
beforeEach(function() {
|
|
return this.LatexRunner.runLatex(
|
|
this.project_id,
|
|
{
|
|
directory: this.directory,
|
|
mainFile: 'main-file.Rtex',
|
|
compiler: this.compiler,
|
|
image: this.image,
|
|
timeout: (this.timeout = 42000)
|
|
},
|
|
this.callback
|
|
)
|
|
})
|
|
|
|
return it('should run the latex command on the equivalent .tex file', function() {
|
|
const command = this.CommandRunner.run.args[0][1]
|
|
const mainFile = command.slice(-1)[0]
|
|
return mainFile.should.equal('$COMPILE_DIR/main-file.tex')
|
|
})
|
|
})
|
|
|
|
return describe('with a flags option', function() {
|
|
beforeEach(function() {
|
|
return this.LatexRunner.runLatex(
|
|
this.project_id,
|
|
{
|
|
directory: this.directory,
|
|
mainFile: this.mainFile,
|
|
compiler: this.compiler,
|
|
image: this.image,
|
|
timeout: (this.timeout = 42000),
|
|
flags: ['-file-line-error', '-halt-on-error']
|
|
},
|
|
this.callback
|
|
)
|
|
})
|
|
|
|
return it('should include the flags in the command', function() {
|
|
const command = this.CommandRunner.run.args[0][1]
|
|
const flags = command.filter(
|
|
arg => arg === '-file-line-error' || arg === '-halt-on-error'
|
|
)
|
|
flags.length.should.equal(2)
|
|
flags[0].should.equal('-file-line-error')
|
|
return flags[1].should.equal('-halt-on-error')
|
|
})
|
|
})
|
|
})
|
|
})
|