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

146 lines
4.7 KiB
JavaScript

import test from 'tape'
import nlp from '../_lib.js'
const here = '[one/insert] '
test('insert-basic :', function (t) {
let m = nlp('the dog sat').insertBefore('and')
t.equal(m.out('text'), 'and the dog sat', here + 'parent-before')
m = nlp('the dog sat').insertAfter('patiently')
t.equal(m.out('text'), 'the dog sat patiently', here + 'parent-after')
m = nlp('the dog sat')
m.match('dog').insertBefore('nice')
t.equal(m.out('text'), 'the nice dog sat', here + 'match-before')
m = nlp('a dog sat')
m.match('sat').insertAfter('quickly')
t.equal(m.out('text'), 'a dog sat quickly', here + 'match-after')
m = nlp('a dog sat')
m.match('a dog sat').insertAfter('quickly')
t.equal(m.out('text'), 'a dog sat quickly', here + 'multi-match-after')
m = nlp('a dog sat')
m.match('asdf').insertAfter('no no no')
t.equal(m.out('text'), 'a dog sat', here + 'insert-multi-after')
t.end()
})
test('insert-subset-include :', function (t) {
let m = nlp('the dog is nice')
let sub = m.match('is')
sub.insertAfter('really')
// t.equal(sub.out('normal'), 'is really', here + 'after-parent')
t.equal(m.out('normal'), 'the dog is really nice', here + 'after-grandparent')
m = nlp('the dog climbed the fence')
sub = m.match('climbed')
sub.insertBefore('really')
// t.equal(sub.out('normal'), 'really climbed', here + 'before-parent')
t.equal(m.out('normal'), 'the dog really climbed the fence', here + 'before-grandparent')
t.end()
})
test('titlecase change in insertBefore :', function (t) {
let doc = nlp('walking is very cool')
doc.match('^.').insertBefore('jogging')
t.equal(doc.text(), 'jogging walking is very cool', here + 'non-titlecase')
doc = nlp('Walking is very cool')
doc.match('^.').insertBefore('jogging')
t.equal(doc.text(), 'Jogging walking is very cool', here + 'titlecase')
// doc = nlp('Toronto is very cool', { toronto: 'City' })
// doc.match('^.').insertBefore('jogging')
// t.equal(doc.text(), 'Jogging Toronto is very cool', here + 'two-titlecases')
doc = nlp('I am very cool')
doc.match('^.').insertBefore('jogging')
t.equal(doc.text(), 'Jogging I am very cool', here + 'pronoun-titlecase')
t.end()
})
test('insert document :', function (t) {
const doc = nlp(`one two three`)
const b = nlp('four')
doc.append(b)
t.equal(doc.text(), 'one two three four', here + 'doc appent')
t.end()
})
test('punctuation edge-cases :', function (t) {
let doc = nlp('before.').insertAfter('after')
t.equal(doc.text(), 'before after.', here + 'period')
doc = nlp('before...').insertAfter('after')
t.equal(doc.text(), 'before after...', here + 'elipses')
doc = nlp('before.?').insertAfter('after')
t.equal(doc.text(), 'before after.?', here + 'period question-mark')
doc = nlp('before?').insertAfter('after')
t.equal(doc.text(), 'before after?', here + ' question-mark')
t.end()
})
test('prepend shift-self :', function (t) {
const doc = nlp('no self no')
const m = doc.match('self')
const res = m.prepend('before')
t.equal(res.text(), 'before self', here + 'res has both')
t.equal(m.text(), 'before self', here + 'self is before+self')
t.end()
})
test('append shift-self :', function (t) {
const doc = nlp('self')
const m = doc.match('.')
const res = m.append('after')
t.equal(res.text(), 'self after', here + 'res has both')
t.equal(m.text(), 'self after', here + 'self is self+after')
t.end()
})
test('insert-multi :', function (t) {
const doc = nlp('the boy and the girl. girl girl')
const m = doc.match('(boy|girl)')
m.insertAfter('cat')
t.equal(doc.eq(0).text(), 'the boy cat and the girl cat.', here + 'insert multi')
t.equal(doc.eq(1).text(), 'girl cat girl cat', here + 'insert consecutive')
t.end()
})
test('insert doc :', function (t) {
const doc = nlp('walk the plank')
const doc2 = nlp('foo bar')
doc.insertAfter(doc2.docs)
t.equal(doc.text(), 'walk the plank foo bar', here + 'insert doc')
t.equal(doc.match('plank foo').found, true, here + 'insert found')
doc.prepend('oh yeah')
t.equal(doc.match('oh yeah walk').found, true, here + 'prepend found')
t.end()
})
test('insert repair :', function (t) {
let doc = nlp(`foo middle foo`)
doc.match('foo+').insertAfter('bar')
t.equal(doc.text(), 'foo bar middle foo bar', 'insert-repair-1')
doc = nlp(`foo foo middle foo`)
doc.match('foo+').insertAfter('bar')
t.equal(doc.text(), 'foo foo bar middle foo bar', 'insert-repair-2')
doc = nlp(`foo foo middle foo foo`)
doc.match('foo+').insertAfter('bar')
t.equal(doc.text(), 'foo foo bar middle foo foo bar', 'insert-repair-3')
doc = nlp(`before foo middle foo foo after foo`)
doc.match('foo+').insertAfter('bar')
t.equal(doc.text(), 'before foo bar middle foo foo bar after foo bar', 'insert-repair-4')
t.end()
})