123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280 |
- suite('lunr.Pipeline', function () {
- var noop = function () {}
- setup(function () {
- this.existingRegisteredFunctions = lunr.Pipeline.registeredFunctions
- this.existingWarnIfFunctionNotRegistered = lunr.Pipeline.warnIfFunctionNotRegistered
- lunr.Pipeline.registeredFunctions = {}
- lunr.Pipeline.warnIfFunctionNotRegistered = noop
- this.pipeline = new lunr.Pipeline
- })
- teardown(function () {
- lunr.Pipeline.registeredFunctions = this.existingRegisteredFunctions
- lunr.Pipeline.warnIfFunctionNotRegistered = this.existingWarnIfFunctionNotRegistered
- })
- suite('#add', function () {
- test('add function to pipeline', function () {
- this.pipeline.add(noop)
- assert.equal(1, this.pipeline._stack.length)
- })
- test('add multiple functions to the pipeline', function () {
- this.pipeline.add(noop, noop)
- assert.equal(2, this.pipeline._stack.length)
- })
- })
- suite('#remove', function () {
- test('function exists in pipeline', function () {
- this.pipeline.add(noop)
- assert.equal(1, this.pipeline._stack.length)
- this.pipeline.remove(noop)
- assert.equal(0, this.pipeline._stack.length)
- })
- test('function does not exist in pipeline', function () {
- var fn = function () {}
- this.pipeline.add(noop)
- assert.equal(1, this.pipeline._stack.length)
- this.pipeline.remove(fn)
- assert.equal(1, this.pipeline._stack.length)
- })
- })
- suite('#before', function () {
- var fn = function () {}
- test('other function exists', function () {
- this.pipeline.add(noop)
- this.pipeline.before(noop, fn)
- assert.deepEqual([fn, noop], this.pipeline._stack)
- })
- test('other function does not exist', function () {
- var action = function () {
- this.pipeline.before(noop, fn)
- }
- assert.throws(action.bind(this))
- assert.equal(0, this.pipeline._stack.length)
- })
- })
- suite('#after', function () {
- var fn = function () {}
- test('other function exists', function () {
- this.pipeline.add(noop)
- this.pipeline.after(noop, fn)
- assert.deepEqual([noop, fn], this.pipeline._stack)
- })
- test('other function does not exist', function () {
- var action = function () {
- this.pipeline.after(noop, fn)
- }
- assert.throws(action.bind(this))
- assert.equal(0, this.pipeline._stack.length)
- })
- })
- suite('#run', function () {
- test('calling each function for each token', function () {
- var count1 = 0, count2 = 0,
- fn1 = function (t) { count1++; return t },
- fn2 = function (t) { count2++; return t }
- this.pipeline.add(fn1, fn2)
- this.pipeline.run([1,2,3])
- assert.equal(3, count1)
- assert.equal(3, count2)
- })
- test('passes token to pipeline function', function () {
- this.pipeline.add(function (token) {
- assert.equal('foo', token)
- })
- this.pipeline.run(['foo'])
- })
- test('passes index to pipeline function', function () {
- this.pipeline.add(function (_, index) {
- assert.equal(0, index)
- })
- this.pipeline.run(['foo'])
- })
- test('passes entire token array to pipeline function', function () {
- this.pipeline.add(function (_, _, tokens) {
- assert.deepEqual(['foo'], tokens)
- })
- this.pipeline.run(['foo'])
- })
- test('passes output of one function as input to the next', function () {
- this.pipeline.add(function (t) {
- return t.toUpperCase()
- })
- this.pipeline.add(function (t) {
- assert.equal('FOO', t)
- })
- this.pipeline.run(['foo'])
- })
- test('returns the results of the last function', function () {
- this.pipeline.add(function (t) {
- return t.toUpperCase()
- })
- assert.deepEqual(['FOO'], this.pipeline.run(['foo']))
- })
- test('filters out null, undefined and empty string values', function () {
- var tokens = [],
- output
- // only pass on tokens for even token indexes
- // return null for 'foo'
- // return undefined for 'bar'
- // return '' for 'baz'
- this.pipeline.add(function (t, i) {
- if (i == 4) {
- return null
- } else if (i == 5) {
- return ''
- } if (i % 2) {
- return t
- } else {
- return undefined
- }
- })
- this.pipeline.add(function (t) {
- tokens.push(t)
- return t
- })
- output = this.pipeline.run(['a', 'b', 'c', 'd', 'foo', 'bar', 'baz'])
- assert.sameMembers(['b', 'd'], tokens)
- assert.sameMembers(['b', 'd'], output)
- })
- suite('expanding tokens', function () {
- test('passed to output', function () {
- this.pipeline.add(function (t) {
- return [t, t.toUpperCase()]
- })
- assert.sameMembers(["foo", "FOO"], this.pipeline.run(['foo']))
- })
- test('not passed to same function', function () {
- var received = []
- this.pipeline.add(function (t) {
- received.push(t)
- return [t, t.toUpperCase()]
- })
- this.pipeline.run(['foo'])
- assert.sameMembers(['foo'], received)
- })
- test('passed to the next pipeline function', function () {
- var received = []
- this.pipeline.add(function (t) {
- return [t, t.toUpperCase()]
- })
- this.pipeline.add(function (t) {
- received.push(t)
- })
- this.pipeline.run(['foo'])
- assert.sameMembers(['foo', 'FOO'], received)
- })
- })
- })
- suite('#toJSON', function () {
- test('returns an array of registered function labels', function () {
- var fn = function () {}
- lunr.Pipeline.registerFunction(fn, 'fn')
- this.pipeline.add(fn)
- assert.sameMembers(['fn'], this.pipeline.toJSON())
- })
- })
- suite('.registerFunction', function () {
- setup(function () {
- this.fn = function () {}
- })
- test('adds a label property to the function', function () {
- lunr.Pipeline.registerFunction(this.fn, 'fn')
- assert.equal('fn', this.fn.label)
- })
- test('adds function to the list of registered functions', function () {
- lunr.Pipeline.registerFunction(this.fn, 'fn')
- assert.equal(this.fn, lunr.Pipeline.registeredFunctions['fn'])
- })
- })
- suite('.load', function () {
- test('with registered functions', function () {
- var fn = function () {},
- serializedPipeline = ['fn'],
- pipeline
- lunr.Pipeline.registerFunction(fn, 'fn')
- pipeline = lunr.Pipeline.load(serializedPipeline)
- assert.equal(1, pipeline._stack.length)
- assert.equal(fn, pipeline._stack[0])
- })
- test('with unregisterd functions', function () {
- var serializedPipeline = ['fn']
- assert.throws(function () {
- lunr.Pipeline.load(serializedPipeline)
- })
- })
- })
- suite('#reset', function () {
- test('empties the stack', function () {
- this.pipeline.add(function () {})
- assert.equal(1, this.pipeline._stack.length)
- this.pipeline.reset()
- assert.equal(0, this.pipeline._stack.length)
- })
- })
- })
|