Files
2026-07-13 12:48:55 +08:00

161 lines
4.4 KiB
JavaScript

import test from 'tape'
import nlp from './_lib.js'
const here = '[three/misc] '
test('full-sentence-issue', function (t) {
let doc = nlp(`Images of death have lost shock value`)
doc.ptrs = [[0], [0]]
t.equal(doc.questions().found, false, here + 'no questions')
t.equal(doc.length, 2, here + '2 matches')
t.equal(doc.sentences().length, 2, here + '2 sentences')
doc.unique()
t.equal(doc.sentences().length, 2, here + 'still 2')
doc = doc.unique()
t.equal(doc.sentences().length, 1, here + '1 unique sentence')
t.end()
})
test('test overloading', function (t) {
const doc = nlp(`the 7 days since december were gross`)
let m = doc.verbs()
t.ok(m.json(), 'overload-verb')
t.equal(m.eq(0).viewType, 'Verbs', 'still-is-verb')
m = doc.nouns()
t.ok(m.json(), 'overload-nouns')
t.equal(m.eq(0).viewType, 'Nouns', 'still-is-nouns')
m = doc.numbers()
t.ok(m.json(), 'overload-numbers')
t.equal(m.eq(0).viewType, 'Numbers', 'still-is-numbers')
m = doc.sentences()
t.ok(m.json(), 'overload-sentences')
t.equal(m.eq(0).viewType, 'Sentences', 'still-is-sentences')
m = doc.people()
t.ok(m.json(), 'overload-people')
t.equal(m.eq(0).viewType, 'People', 'still-is-people')
m = doc.places()
t.ok(m.json(), 'overload-places')
t.equal(m.eq(0).viewType, 'View', 'places has no class')
t.end()
})
test('drop back to View', function (t) {
const doc = nlp(`John Smith and Jack were walking`)
const vb = doc.verbs()
// ====== drop class ----
let m = vb.match('.')
t.equal(m.viewType, 'View', here + 'match-to-view')
m = vb.before('.$')
t.equal(m.viewType, 'View', here + 'before-to-view')
m = vb.map(v => v)
t.equal(m.viewType, 'View', here + 'map-to-view')
m = vb.insertAfter('drugs')
t.equal(m.viewType, 'View', here + 'insert-to-view')
m = vb.remove('jack')
t.equal(m.viewType, 'View', here + 'remove-to-view')
m = vb.replaceWith('jack', 'blue')
t.equal(m.viewType, 'View', here + 'replace-to-view')
m = vb.intersection(doc.match('.'))
t.equal(m.viewType, 'View', here + 'intersection-to-view')
m = vb.adverbs()
t.equal(m.viewType, 'View', here + 'adverbs-to-view')
t.end()
})
test('retain class', function (t) {
const doc = nlp(`John Smith and Jack were walking`)
const vb = doc.verbs()
// ====== keep class ---
let m = vb.update([])
t.equal(m.viewType, 'Verbs', here + 'update-keeps-class')
m = vb.find(v => v.toUpperCase())
t.equal(m.viewType, 'Verbs', here + 'find-kees-class')
m = vb.tag('Foo')
t.equal(m.viewType, 'Verbs', here + 'tag-keeps-class')
m = vb.ifNo('.')
t.equal(m.viewType, 'Verbs', here + 'if-keeps-class')
m = vb.toUpperCase()
t.equal(m.viewType, 'Verbs', here + 'case-keeps-class')
m = vb.clone()
t.equal(m.viewType, 'Verbs', here + 'clone-keeps-class')
m = vb.sort('alpha')
t.equal(m.viewType, 'Verbs', here + 'sort-keeps-class')
m = vb.unique()
t.equal(m.viewType, 'Verbs', here + 'unique-keeps-class')
t.end()
})
test('barely a term', function (t) {
let str = '.('
let doc = nlp(str)
t.equal(doc.out(), str, 'barely-term-no-space')
str = '.( '
doc = nlp(str)
t.equal(doc.out(), str, 'barely-term-with-space')
t.end()
})
//#744
test('replacement with a contraction', function (t) {
let doc = nlp('a b c d')
t.equal(doc.text(), 'a b c d', 'before replace')
doc.replace('b', "added i'm")
t.equal(doc.text(), "a added i'm c d", 'after replace')
doc = nlp("The only reason he doesn't continue is because of how tired he feels.", { reason: 'Noun' })
doc.verbs().toPastTense()
t.equal(doc.text(), 'The only reason he did not continue was because of how tired he felt.', 'conjugate-contraction')
t.end()
})
test('json extended options:', function (t) {
const doc = nlp(`Hey everybody, I'm lookin' for Amanda Hugginkiss`)
const json = doc.people().json({ offset: true })
t.ok(json[0].offset, here + 'exteded json methods')
t.end()
})
test('tag-multiples:', function (t) {
const r = nlp('twas brillig in the doofgafoof.')
r.match('brillig').tag(['Foo', 'Barr'])
t.ok(r.match('#Foo').found, 'tagged-foo')
t.ok(r.match('#Barr').found, 'tagged-barr')
t.end()
})
// -----
test('root-text vs match-text', function (t) {
const str = ` paper, scissors, rock. I run with scissors.`
const doc = nlp(str).match('*').all()
t.equal(doc.text(), str, 'perfect-root-text')
const m = doc.match('scissors')
t.equal(m.text(), 'scissors, scissors', 'match-text')
t.end()
})