@rpidanny/pdf2md
Version:
A PDF to Markdown Converter
96 lines (74 loc) • 2.55 kB
JavaScript
const { expect } = require('chai')
const StashingStream = require('../../lib/models/StashingStream')
describe('StashingStream', () => {
it('Simple', () => {
const stream = new MyStashingStream()
stream.consume('a')
stream.consume('b')
stream.consume('a')
stream.consume('a')
stream.consume('z')
stream.consume('m')
stream.consume('m')
stream.consume('z')
stream.consume('z')
stream.consume('c')
stream.consume('e')
stream.consume('f')
stream.consume('m')
stream.consume('a')
const resultsAsString = stream.complete().join('')
expect(resultsAsString).to.equal('AbAAZZZcefA')
expect(stream.transformedItems).to.equal(10)
})
it('Constructor Execption', () => {
expect(() => new StashingStream()).to.throw('Can not construct abstract class.')
})
it('ConsumeAll', () => {
const items = ['k', 'k', 'x', 'a', 'm', 'z', 'o', 'p']
const stream = new MyStashingStream()
stream.consumeAll(items)
const resultsAsString = stream.complete().join('')
expect(resultsAsString).to.equal('kkxAZop')
expect(stream.transformedItems).to.equal(3)
})
it('shouldStash Throw Error', () => {
const stream = new MyStashingStream()
expect(() => stream.shouldStashFromParent('a')).to.throw(' Do not call abstract method foo from child.a')
})
it('doMatchesStash Throw Error', () => {
const items = ['k', 'k', 'x', 'a', 'm', 'z', 'o', 'p']
const stream = new MyStashingStream()
stream.consumeAll(items)
expect(() => stream.doMatchesStashFromParent('p', 'q')).to.throw(' Do not call abstract method foo from child.pq')
})
it('doFlushStash Throw Error', () => {
const stream = new MyStashingStream()
expect(() => stream.doFlushStashFromParent(['a'], [])).to.throw(' Do not call abstract method foo from child.a')
})
})
class MyStashingStream extends StashingStream {
constructor () {
super()
this.transformedItems = 0
}
shouldStash (item) {
return item === 'a' || item === 'z' || item === 'm'
}
shouldStashFromParent (item) {
return super.shouldStash(item)
}
doMatchesStash (lastItem, item) {
return lastItem === item
}
doMatchesStashFromParent (lastItem, item) {
return super.doMatchesStash(lastItem, item)
}
doFlushStash (stash, results) {
this.transformedItems += stash.length
results.push(...stash.filter(elem => elem !== 'm').map(item => item.toUpperCase()))
}
doFlushStashFromParent (stash, results) {
super.doFlushStash(stash, results)
}
}