sc-voice
Version:
SuttaCentral Voice
163 lines (147 loc) • 5.93 kB
JavaScript
(typeof describe === 'function') && describe("sutta", function() {
const should = require("should");
const fs = require('fs');
const path = require('path');
const {
Section,
Sutta,
SuttaFactory,
SuttaCentralId,
Words,
} = require("../index");
const SC = path.join(__dirname, '../local/sc');
var segments = [{
scid: 's:0.1',
en:'a1 ab ac.',
},{
scid: 's:1.1',
en:'b1 ab bc.',
},{
scid: 's:1.2',
en:'c1 bc ac.',
}]
it("default ctor", ()=>{
should.throws(()=>{
var sutta = new Sutta();
});
});
it("custom ctor", ()=>{
var sutta_uid = "testSutta1";
var author = "testAuthor";
var lang = "test";
var segments = [{
scid: "testSutta1:0.1",
test: "text 1",
}];
var sutta = new Sutta({
author,
lang,
sutta_uid,
segments,
});
should(sutta).properties({
author,
sutta_uid,
lang,
});
should.deepEqual(sutta.segments, segments);
});
it("findIndexes(segments, pat) returns array of segment indexes", function() {
should.deepEqual(Sutta.findIndexes(segments, 'not found'),[]);
// search string
var prop = "en";
should.deepEqual(Sutta.findIndexes(segments, 'a1',{prop}),[0]);
should.deepEqual(Sutta.findIndexes(segments, 'ab',{prop}),[0,1]);
should.deepEqual(Sutta.findIndexes(segments, 'bc',{prop}),[1,2]);
should.deepEqual(Sutta.findIndexes(segments, 'ac',{prop}),[0,2]);
// search RegExp
should.deepEqual(Sutta.findIndexes(segments, /a1/,{prop}),[0]);
should.deepEqual(Sutta.findIndexes(segments, /ab/,{prop}),[0,1]);
should.deepEqual(Sutta.findIndexes(segments, /bc/,{prop}),[1,2]);
should.deepEqual(Sutta.findIndexes(segments, /ac/,{prop}),[0,2]);
should.deepEqual(Sutta.findIndexes(segments, /a1 ab|ab bc/,{prop}),[0,1]);
// search prop
var prop = 'scid'; // default
should.deepEqual(Sutta.findIndexes(segments, /^s:0.1/,{prop}),[0]); // segment
should.deepEqual(Sutta.findIndexes(segments, /^s:0.*/,{prop}),[0]); // section
should.deepEqual(Sutta.findIndexes(segments, /^s:1.*/),[1,2]); // section
var result = segments.filter(seg => /ab/.test(seg.en));
should.deepEqual(result, [{
scid: 's:0.1',
en:'a1 ab ac.',
},{
scid: 's:1.1',
en:'b1 ab bc.',
}]);
});
it("findSegments(segments, pat) returns array of segment indexes", function() {
should.deepEqual(Sutta.findSegments(segments, 'not found'), []);
// search string
var prop = 'en';
should.deepEqual(Sutta.findSegments(segments, 'a1',{prop}),[segments[0]]);
should.deepEqual(Sutta.findSegments(segments, 'ab',{prop}),[segments[0],segments[1]]);
should.deepEqual(Sutta.findSegments(segments, 'bc',{prop}),[segments[1],segments[2]]);
should.deepEqual(Sutta.findSegments(segments, 'ac',{prop}),[segments[0],segments[2]]);
// search RegExp
should.deepEqual(Sutta.findSegments(segments, /a1/,{prop}),[segments[0]]);
should.deepEqual(Sutta.findSegments(segments, /ab/,{prop}),[segments[0],segments[1]]);
should.deepEqual(Sutta.findSegments(segments, /bc/,{prop}),[segments[1],segments[2]]);
should.deepEqual(Sutta.findSegments(segments, /ac/,{prop}),[segments[0],segments[2]]);
should.deepEqual(Sutta.findSegments(segments, /a1 ab|ab bc/,{prop}),[segments[0],segments[1]]);
// search prop
var prop = 'scid'; // default value
should.deepEqual(Sutta.findSegments(segments, /^s:0.1/,{prop}),[segments[0]]); // segment
should.deepEqual(Sutta.findSegments(segments, /^s:0.*/,{prop}),[segments[0]]); // section
should.deepEqual(Sutta.findSegments(segments, /^s:1.*/),[segments[1],segments[2]]); // section
// search all segments
should.deepEqual(Sutta.findSegments(segments, /s.*/), segments);
should.deepEqual(Sutta.findSegments(segments, /s:.*/), segments);
});
it("indexOf(segments, scid) returns segment index", function() {
should(Sutta.indexOf(segments, 0)).equal(0);
should(Sutta.indexOf(segments, 2)).equal(2);
should(Sutta.indexOf(segments, -2)).equal(-2);
should(Sutta.indexOf(segments, "s:1.1")).equal(1);
should.throws(() => Sutta.indexOf(segments, "nonsense"));
should.throws(() => Sutta.indexOf(segments, "s:1.*"));
});
it("excerpt(segments, opts) returns segment/text excerpt", function() {
// excerpt all
should.deepEqual(Sutta.excerpt(segments), segments);
// excerpt first 2
should.deepEqual(Sutta.excerpt(segments, {
end: 2,
}),[
segments[0],
segments[1],
]);
// excerpt lsst 2
should.deepEqual(Sutta.excerpt(segments, {
start: -2,
prop: 'en',
}),[
segments[1].en,
segments[2].en,
]);
// excerpt by scid
should.deepEqual(Sutta.excerpt(segments, {
start: "s:0.1",
end: "s:1.2",
prop: 'en',
}),[
segments[0].en + Sutta.GROUP_SEP,
segments[1].en,
]);
});
it("textOfSegments(segments, opts) returns array of text", function() {
should.deepEqual(Sutta.textOfSegments(segments), [
`${segments[0].en}\n`, // group change forces extra EOL
segments[1].en,
segments[2].en,
]);
should.deepEqual(Sutta.textOfSegments(segments),
Sutta.textOfSegments(segments, {
prop: 'en',
}));
});
});