overleaf/services/clsi/test/unit/js/SynctexOutputParserTests.js

117 lines
2.6 KiB
JavaScript
Raw Normal View History

const Path = require('node:path')
const SandboxedModule = require('sandboxed-module')
const { expect } = require('chai')
const MODULE_PATH = Path.join(__dirname, '../../../app/js/SynctexOutputParser')
describe('SynctexOutputParser', function () {
beforeEach(function () {
this.SynctexOutputParser = SandboxedModule.require(MODULE_PATH)
})
describe('parseViewOutput', function () {
it('parses valid output', function () {
const output = `This is SyncTeX command line utility, version 1.5
SyncTeX result begin
Output:/compile/output.pdf
Page:1
x:136.537964
y:661.437561
h:133.768356
v:663.928223
W:343.711060
H:9.962640
before:
offset:-1
middle:
after:
Output:/compile/output.pdf
Page:2
x:178.769592
y:649.482361
h:134.768356
v:651.973022
W:342.711060
H:19.962640
before:
offset:-1
middle:
after:
SyncTeX result end
`
const records = this.SynctexOutputParser.parseViewOutput(output)
expect(records).to.deep.equal([
{
page: 1,
h: 133.768356,
v: 663.928223,
width: 343.71106,
height: 9.96264,
},
{
page: 2,
h: 134.768356,
v: 651.973022,
width: 342.71106,
height: 19.96264,
},
])
})
it('handles garbage', function () {
const output = 'This computer is on strike!'
const records = this.SynctexOutputParser.parseViewOutput(output)
expect(records).to.deep.equal([])
})
})
describe('parseEditOutput', function () {
it('parses valid output', function () {
const output = `This is SyncTeX command line utility, version 1.5
SyncTeX result begin
Output:/compile/output.pdf
Input:/compile/main.tex
Line:17
Column:-1
Offset:0
Context:
SyncTeX result end
`
const records = this.SynctexOutputParser.parseEditOutput(
output,
'/compile'
)
expect(records).to.deep.equal([
{ file: 'main.tex', line: 17, column: -1 },
])
})
it('handles values that contain colons', function () {
const output = `This is SyncTeX command line utility, version 1.5
SyncTeX result begin
Output:/compile/output.pdf
Input:/compile/this-file:has-a-weird-name.tex
Line:17
Column:-1
Offset:0
Context:
SyncTeX result end
`
const records = this.SynctexOutputParser.parseEditOutput(
output,
'/compile'
)
expect(records).to.deep.equal([
{ file: 'this-file:has-a-weird-name.tex', line: 17, column: -1 },
])
})
it('handles garbage', function () {
const output = '2 + 2 = 4'
const records = this.SynctexOutputParser.parseEditOutput(output)
expect(records).to.deep.equal([])
})
})
})