fix
This commit is contained in:
336
book/node_modules/lunr/test/index_test.js
generated
vendored
Normal file
336
book/node_modules/lunr/test/index_test.js
generated
vendored
Normal file
@ -0,0 +1,336 @@
|
||||
module('lunr.Index')
|
||||
|
||||
test("defining what fields to index", function () {
|
||||
var idx = new lunr.Index
|
||||
idx.field('foo')
|
||||
|
||||
deepEqual(idx._fields[0], {name: 'foo', boost: 1})
|
||||
})
|
||||
|
||||
test("giving a particular field a weighting", function () {
|
||||
var idx = new lunr.Index
|
||||
idx.field('foo', { boost: 10 })
|
||||
|
||||
deepEqual(idx._fields[0], {name: 'foo', boost: 10})
|
||||
})
|
||||
|
||||
test('default reference should be id', function () {
|
||||
var idx = new lunr.Index
|
||||
equal(idx._ref, 'id')
|
||||
})
|
||||
|
||||
test("defining the reference field for the index", function () {
|
||||
var idx = new lunr.Index
|
||||
idx.ref('foo')
|
||||
|
||||
deepEqual(idx._ref, 'foo')
|
||||
})
|
||||
|
||||
test('adding a document to the index', function () {
|
||||
var idx = new lunr.Index,
|
||||
doc = {id: 1, body: 'this is a test'}
|
||||
|
||||
idx.field('body')
|
||||
idx.add(doc)
|
||||
|
||||
equal(idx.documentStore.length, 1)
|
||||
ok(!!idx.documentStore.get(1))
|
||||
})
|
||||
|
||||
test('adding a document with an empty field', function () {
|
||||
var idx = new lunr.Index,
|
||||
doc = {id: 1, body: 'test', title: ''}
|
||||
|
||||
idx.field('title')
|
||||
idx.field('body')
|
||||
|
||||
idx.add(doc)
|
||||
ok(!isNaN(idx.tokenStore.get('test')[1].tf))
|
||||
})
|
||||
|
||||
test('ignore empty tokens', function () {
|
||||
var idx = new lunr.Index,
|
||||
doc = {id: 1, body: 'test ???'}
|
||||
|
||||
idx.field('body')
|
||||
idx.pipeline.add(lunr.trimmer)
|
||||
|
||||
idx.add(doc)
|
||||
|
||||
var tokens = idx.documentStore.get(1).toArray()
|
||||
equal(tokens.length, 1)
|
||||
deepEqual(tokens, ['test']) // ??? should be ignored
|
||||
})
|
||||
|
||||
test('triggering add events', function () {
|
||||
var idx = new lunr.Index,
|
||||
doc = {id: 1, body: 'this is a test'},
|
||||
callbackCalled = false,
|
||||
callbackArgs = []
|
||||
|
||||
idx.on('add', function (doc, index) {
|
||||
callbackCalled = true
|
||||
callbackArgs = Array.prototype.slice.call(arguments)
|
||||
})
|
||||
|
||||
idx.field('body')
|
||||
idx.add(doc)
|
||||
|
||||
ok(callbackCalled)
|
||||
equal(callbackArgs.length, 2)
|
||||
deepEqual(callbackArgs[0], doc)
|
||||
deepEqual(callbackArgs[1], idx)
|
||||
})
|
||||
|
||||
test('silencing add events', function () {
|
||||
var idx = new lunr.Index,
|
||||
doc = {id: 1, body: 'this is a test'},
|
||||
callbackCalled = false,
|
||||
callbackArgs = []
|
||||
|
||||
idx.on('add', function (doc, index) {
|
||||
callbackCalled = true
|
||||
callbackArgs = Array.prototype.slice.call(arguments)
|
||||
})
|
||||
|
||||
idx.field('body')
|
||||
idx.add(doc, false)
|
||||
|
||||
ok(!callbackCalled)
|
||||
})
|
||||
|
||||
test('removing a document from the index', function () {
|
||||
var idx = new lunr.Index,
|
||||
doc = {id: 1, body: 'this is a test'}
|
||||
|
||||
idx.field('body')
|
||||
equal(idx.documentStore.length, 0)
|
||||
|
||||
idx.add(doc)
|
||||
equal(idx.documentStore.length, 1)
|
||||
|
||||
idx.remove(doc)
|
||||
equal(idx.documentStore.length, 0)
|
||||
})
|
||||
|
||||
test('triggering remove events', function () {
|
||||
var idx = new lunr.Index,
|
||||
doc = {id: 1, body: 'this is a test'},
|
||||
callbackCalled = false,
|
||||
callbackArgs = []
|
||||
|
||||
idx.on('remove', function (doc, index) {
|
||||
callbackCalled = true
|
||||
callbackArgs = Array.prototype.slice.call(arguments)
|
||||
})
|
||||
|
||||
idx.field('body')
|
||||
idx.add(doc)
|
||||
idx.remove(doc)
|
||||
|
||||
ok(callbackCalled)
|
||||
equal(callbackArgs.length, 2)
|
||||
deepEqual(callbackArgs[0], doc)
|
||||
deepEqual(callbackArgs[1], idx)
|
||||
})
|
||||
|
||||
test('silencing remove events', function () {
|
||||
var idx = new lunr.Index,
|
||||
doc = {id: 1, body: 'this is a test'},
|
||||
callbackCalled = false,
|
||||
callbackArgs = []
|
||||
|
||||
idx.on('remove', function (doc, index) {
|
||||
callbackCalled = true
|
||||
callbackArgs = Array.prototype.slice.call(arguments)
|
||||
})
|
||||
|
||||
idx.field('body')
|
||||
idx.add(doc)
|
||||
idx.remove(doc, false)
|
||||
|
||||
ok(!callbackCalled)
|
||||
})
|
||||
|
||||
test('removing a non-existent document from the index', function () {
|
||||
var idx = new lunr.Index,
|
||||
doc = {id: 1, body: 'this is a test'},
|
||||
doc2 = {id: 2, body: 'i dont exist'},
|
||||
callbackCalled = false
|
||||
|
||||
idx.on('remove', function (doc, index) {
|
||||
callbackCalled = true
|
||||
})
|
||||
|
||||
idx.field('body')
|
||||
equal(idx.documentStore.length, 0)
|
||||
|
||||
idx.add(doc)
|
||||
equal(idx.documentStore.length, 1)
|
||||
|
||||
idx.remove(doc2)
|
||||
equal(idx.documentStore.length, 1)
|
||||
|
||||
ok(!callbackCalled)
|
||||
})
|
||||
|
||||
test('updating a document', function () {
|
||||
var idx = new lunr.Index,
|
||||
doc = {id: 1, body: 'foo'}
|
||||
|
||||
idx.field('body')
|
||||
idx.add(doc)
|
||||
equal(idx.documentStore.length, 1)
|
||||
ok(idx.tokenStore.has('foo'))
|
||||
|
||||
doc.body = 'bar'
|
||||
idx.update(doc)
|
||||
|
||||
equal(idx.documentStore.length, 1)
|
||||
ok(idx.tokenStore.has('bar'))
|
||||
})
|
||||
|
||||
test('emitting update events', function () {
|
||||
var idx = new lunr.Index,
|
||||
doc = {id: 1, body: 'foo'},
|
||||
addCallbackCalled = false,
|
||||
removeCallbackCalled = false,
|
||||
updateCallbackCalled = false,
|
||||
callbackArgs = []
|
||||
|
||||
idx.field('body')
|
||||
idx.add(doc)
|
||||
equal(idx.documentStore.length, 1)
|
||||
ok(idx.tokenStore.has('foo'))
|
||||
|
||||
idx.on('update', function (doc, index) {
|
||||
updateCallbackCalled = true
|
||||
callbackArgs = Array.prototype.slice.call(arguments)
|
||||
})
|
||||
|
||||
idx.on('add', function () {
|
||||
addCallbackCalled = true
|
||||
})
|
||||
|
||||
idx.on('remove', function () {
|
||||
removeCallbackCalled = true
|
||||
})
|
||||
|
||||
|
||||
doc.body = 'bar'
|
||||
idx.update(doc)
|
||||
|
||||
ok(updateCallbackCalled)
|
||||
equal(callbackArgs.length, 2)
|
||||
deepEqual(callbackArgs[0], doc)
|
||||
deepEqual(callbackArgs[1], idx)
|
||||
|
||||
ok(!addCallbackCalled)
|
||||
ok(!removeCallbackCalled)
|
||||
})
|
||||
|
||||
test('silencing update events', function () {
|
||||
var idx = new lunr.Index,
|
||||
doc = {id: 1, body: 'foo'},
|
||||
callbackCalled = false
|
||||
|
||||
idx.field('body')
|
||||
idx.add(doc)
|
||||
equal(idx.documentStore.length, 1)
|
||||
ok(idx.tokenStore.has('foo'))
|
||||
|
||||
idx.on('update', function (doc, index) {
|
||||
callbackCalled = true
|
||||
})
|
||||
|
||||
doc.body = 'bar'
|
||||
idx.update(doc, false)
|
||||
|
||||
ok(!callbackCalled)
|
||||
})
|
||||
|
||||
test('serialising', function () {
|
||||
var idx = new lunr.Index,
|
||||
mockDocumentStore = { toJSON: function () { return 'documentStore' }},
|
||||
mockTokenStore = { toJSON: function () { return 'tokenStore' }},
|
||||
mockCorpusTokens = { toJSON: function () { return 'corpusTokens' }},
|
||||
mockPipeline = { toJSON: function () { return 'pipeline' }}
|
||||
|
||||
idx.documentStore = mockDocumentStore
|
||||
idx.tokenStore = mockTokenStore
|
||||
idx.corpusTokens = mockCorpusTokens
|
||||
idx.pipeline = mockPipeline
|
||||
|
||||
idx.ref('id')
|
||||
|
||||
idx.field('title', { boost: 10 })
|
||||
idx.field('body')
|
||||
|
||||
deepEqual(idx.toJSON(), {
|
||||
version: '@VERSION', // this is what the lunr version is set to before being built
|
||||
fields: [
|
||||
{ name: 'title', boost: 10 },
|
||||
{ name: 'body', boost: 1 }
|
||||
],
|
||||
ref: 'id',
|
||||
documentStore: 'documentStore',
|
||||
tokenStore: 'tokenStore',
|
||||
corpusTokens: 'corpusTokens',
|
||||
pipeline: 'pipeline'
|
||||
})
|
||||
})
|
||||
|
||||
test('loading a serialised index', function () {
|
||||
var serialisedData = {
|
||||
version: '@VERSION', // this is what the lunr version is set to before being built
|
||||
fields: [
|
||||
{ name: 'title', boost: 10 },
|
||||
{ name: 'body', boost: 1 }
|
||||
],
|
||||
ref: 'id',
|
||||
documentStore: { store: {}, length: 0 },
|
||||
tokenStore: { root: {}, length: 0 },
|
||||
corpusTokens: [],
|
||||
pipeline: ['stopWordFilter', 'stemmer']
|
||||
}
|
||||
|
||||
var idx = lunr.Index.load(serialisedData)
|
||||
|
||||
deepEqual(idx._fields, serialisedData.fields)
|
||||
equal(idx._ref, 'id')
|
||||
})
|
||||
|
||||
test('idf cache with reserved words', function () {
|
||||
var idx = new lunr.Index
|
||||
|
||||
var troublesomeTokens = [
|
||||
'constructor',
|
||||
'__proto__',
|
||||
'hasOwnProperty',
|
||||
'isPrototypeOf',
|
||||
'propertyIsEnumerable',
|
||||
'toLocaleString',
|
||||
'toString',
|
||||
'valueOf'
|
||||
]
|
||||
|
||||
troublesomeTokens.forEach(function (token) {
|
||||
equal(typeof(idx.idf(token)), 'number', 'Using token: ' + token)
|
||||
})
|
||||
})
|
||||
|
||||
test('using a plugin', function () {
|
||||
var idx = new lunr.Index,
|
||||
ctx, args,
|
||||
plugin = function () {
|
||||
ctx = this
|
||||
args = Array.prototype.slice.call(arguments)
|
||||
this.pluginLoaded = true
|
||||
}
|
||||
|
||||
idx.use(plugin, 'foo', 'bar')
|
||||
|
||||
equal(ctx, idx)
|
||||
deepEqual(args, [idx, 'foo', 'bar'])
|
||||
ok(idx.pluginLoaded)
|
||||
})
|
Reference in New Issue
Block a user