mirror of
https://github.com/overleaf/overleaf.git
synced 2024-11-07 20:31:06 -05:00
fix regex and add AspellWorker unit tests
This commit is contained in:
parent
d96ec9d7fd
commit
1f861a6772
2 changed files with 113 additions and 1 deletions
|
@ -130,7 +130,7 @@ class ASpellWorker {
|
|||
|
||||
this.pipe.stdout.setEncoding('utf8') // ensure utf8 output is handled correctly
|
||||
var output = ''
|
||||
const endMarkerRegex = new RegExp('^[a-z][a-z]', 'm')
|
||||
const endMarkerRegex = new RegExp('^[a-z][a-z]', 'gm')
|
||||
this.pipe.stdout.on('data', data => {
|
||||
// We receive the language code from Aspell as the end of data marker in
|
||||
// the data. The input is a utf8 encoded string.
|
||||
|
|
112
services/spelling/test/unit/js/ASpellWorkerTests.js
Normal file
112
services/spelling/test/unit/js/ASpellWorkerTests.js
Normal file
|
@ -0,0 +1,112 @@
|
|||
/* eslint-disable
|
||||
handle-callback-err,
|
||||
no-undef
|
||||
*/
|
||||
// TODO: This file was created by bulk-decaffeinate.
|
||||
// Sanity-check the conversion and remove this comment.
|
||||
/*
|
||||
* decaffeinate suggestions:
|
||||
* DS102: Remove unnecessary code created because of implicit returns
|
||||
* Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md
|
||||
*/
|
||||
const sinon = require('sinon')
|
||||
const chai = require('chai')
|
||||
const { should, expect, assert } = chai
|
||||
const SandboxedModule = require('sandboxed-module')
|
||||
const EventEmitter = require('events')
|
||||
|
||||
describe('ASpellWorker', function () {
|
||||
beforeEach(function () {
|
||||
this.child_process = {}
|
||||
return (this.ASpellWorker = SandboxedModule.require('../../../app/js/ASpellWorker', {
|
||||
requires: {
|
||||
'logger-sharelatex': {
|
||||
log() { },
|
||||
info() { },
|
||||
err() { }
|
||||
},
|
||||
'metrics-sharelatex': {
|
||||
gauge() { },
|
||||
inc() { }
|
||||
},
|
||||
'child_process': this.child_process
|
||||
}
|
||||
}))
|
||||
})
|
||||
|
||||
describe("creating a worker", function () {
|
||||
beforeEach(function () {
|
||||
this.pipe = {
|
||||
'stdout': new EventEmitter(),
|
||||
'stderr': { on: sinon.stub() },
|
||||
'stdin': {on: sinon.stub() },
|
||||
'on': sinon.stub(),
|
||||
'pid': 12345
|
||||
}
|
||||
this.child_process.spawn = sinon.stub().returns(this.pipe)
|
||||
this.pipe.stdout.setEncoding = sinon.stub()
|
||||
worker = new this.ASpellWorker('en')
|
||||
|
||||
})
|
||||
|
||||
describe("with normal aspell output", function () {
|
||||
beforeEach(function () {
|
||||
this.callback = worker.callback = sinon.stub()
|
||||
this.pipe.stdout.emit('data', '& hello\n')
|
||||
this.pipe.stdout.emit('data', '& world\n')
|
||||
this.pipe.stdout.emit('data', 'en\n')
|
||||
this.pipe.stdout.emit('data', '& goodbye')
|
||||
})
|
||||
|
||||
it('should call the callback', function() {
|
||||
expect(this.callback.called).to.equal(true)
|
||||
expect(this.callback.calledWith(null, "& hello\n& world\nen\n")).to.equal(true)
|
||||
})
|
||||
})
|
||||
|
||||
describe("with the aspell end marker split across chunks", function () {
|
||||
beforeEach(function () {
|
||||
this.callback = worker.callback = sinon.stub()
|
||||
this.pipe.stdout.emit('data', '& hello\n')
|
||||
this.pipe.stdout.emit('data', '& world\ne')
|
||||
this.pipe.stdout.emit('data', 'n\n')
|
||||
this.pipe.stdout.emit('data', '& goodbye')
|
||||
})
|
||||
|
||||
it('should call the callback', function() {
|
||||
expect(this.callback.called).to.equal(true)
|
||||
expect(this.callback.calledWith(null, "& hello\n& world\nen\n")).to.equal(true)
|
||||
})
|
||||
})
|
||||
|
||||
describe("with the aspell end marker newline split across chunks", function () {
|
||||
beforeEach(function () {
|
||||
this.callback = worker.callback = sinon.stub()
|
||||
this.pipe.stdout.emit('data', '& hello\n')
|
||||
this.pipe.stdout.emit('data', '& world\n')
|
||||
this.pipe.stdout.emit('data', 'en')
|
||||
this.pipe.stdout.emit('data', '\n& goodbye')
|
||||
})
|
||||
|
||||
it('should call the callback', function() {
|
||||
expect(this.callback.called).to.equal(true)
|
||||
expect(this.callback.calledWith(null, "& hello\n& world\nen")).to.equal(true)
|
||||
})
|
||||
})
|
||||
|
||||
describe("with everything split across chunks", function () {
|
||||
beforeEach(function () {
|
||||
this.callback = worker.callback = sinon.stub()
|
||||
'& hello\n& world\nen\n& goodbye'.split('').forEach(x => {
|
||||
this.pipe.stdout.emit('data', x)
|
||||
})
|
||||
})
|
||||
|
||||
it('should call the callback', function() {
|
||||
expect(this.callback.called).to.equal(true)
|
||||
expect(this.callback.calledWith(null, "& hello\n& world\nen")).to.equal(true)
|
||||
})
|
||||
})
|
||||
|
||||
})
|
||||
})
|
Loading…
Reference in a new issue