UNPKG

ebt-deepl

Version:

Javascript Library for EBT translation via DeepL

347 lines (328 loc) 13.4 kB
import should from "should"; import { QuoteParser } from "../index.mjs"; import { DBG, } from '../src/defines.mjs'; const { LDQUOT, RDQUOT, LSQUOT, RSQUOT, LDGUIL, RDGUIL, NBSP, THNSP, LGUIL, RGUIL, } = QuoteParser; const MODULE = 'quote-parser'; (typeof describe==='function') && describe(MODULE, function() { it("default ctor()", ()=>{ let qp = new QuoteParser(); should(qp).properties({ lang : 'en', openQuotes: [ LDQUOT, LSQUOT, LDQUOT, LSQUOT ], closeQuotes: [ RDQUOT, RSQUOT, RDQUOT, RSQUOT ], level: 0, }); let { rexPreApos } = qp; should(rexPreApos).instanceOf(RegExp); should('the squirrels').match(rexPreApos); should('the skuirrels').not.match(rexPreApos); should('thesquirrels').not.match(rexPreApos); }); it("custom ctor()", ()=>{ let qp_fr = new QuoteParser({ lang: 'fr', level: 1, }); should(qp_fr).properties({ lang : 'fr', openQuotes: [ LDGUIL+THNSP, LGUIL+THNSP, LDQUOT, LSQUOT, ], closeQuotes: [ THNSP+RDGUIL, THNSP+RGUIL, RDQUOT, RSQUOT, ], level: 1, }); let qp_pt = new QuoteParser({ lang: 'pt', level: 2, }); should(qp_pt).properties({ lang : 'pt', openQuotes: [ LDGUIL, LDQUOT, LSQUOT, LDQUOT ], closeQuotes: [ RDGUIL, RDQUOT, RSQUOT, RDQUOT ], level: 2, }); let qp_br = new QuoteParser({ lang: 'pt-BR', level: 3, }); should(qp_br).properties({ lang : 'pt-br', openQuotes: [ LDQUOT, LSQUOT, LDQUOT, LSQUOT ], closeQuotes: [ RDQUOT, RSQUOT, RDQUOT, RSQUOT ], level: 3, }); let openQuotes = [ '{', '<' ]; let closeQuotes = [ '}', '>' ]; let qp_q = new QuoteParser({openQuotes, closeQuotes}); should(qp_q).properties({ openQuotes: [ '{', '<', '<', '<' ], closeQuotes: [ '}', '>', '>', '>' ] }); }); it("rexQuotes() en-us", ()=>{ const msg = 'test.QuoteParser.rexQuotes()'; let qp = new QuoteParser(); let [ L2, L1 ] = qp.openQuotes; let [ R2, R1 ] = qp.closeQuotes; let text = `a${L2} b${L1} c${R1} d${R1}${R2} e${R1}`; let parts = text.split(qp.rexSplit); //console.log(msg, qp.rexSplit, parts); should.deepEqual(parts, [ 'a', L2, ' b', L1, ' c', R1, ' d', R1, '', R2, ' e', R1, '', ]); }); it("parse()", ()=>{ let qp = new QuoteParser({lang:'en-deepl'}); let [ L1, L2, L3 ] = qp.openQuotes; let [ R1, R2, R3 ] = qp.closeQuotes; should(qp.parse(`abc`)).properties({level:0, quotes:0 }); should(qp.parse(`${L1}abc`)).properties({level:1, quotes:1 }); should(qp.parse(`abc`)).properties({level:1, quotes:0}); should(qp.parse(`${R1}abc`)).properties({level:0, quotes:1 }); // Supplied state should(qp.parse(`a${R3}b${R2}c`,3)).properties({ level:1, quotes:2 }); should(qp.parse(`${L1}abc`,0)).properties({level:1, quotes:1 }); should(qp.parse(`${R1}abc`,1)).properties({level:0, quotes:1 }); should(qp.parse(`${L1}a${L2}b${L3}c`)) .properties({level:3, quotes:3}); should(qp.parse(`${L1}a${L2}b${L3}c`, 0)) .properties({level:3, quotes:3}); should(qp.parse(`a${R3}b${R2}c`)).properties({ level:1, quotes:2 }); should(qp.parse(`abc`)).properties({ level:1, quotes:0 }); should(qp.parse(`${R1}bc`)).properties({ level:0, quotes:1 }); }); it("parse() deepl", ()=>{ let qp = new QuoteParser({lang:'en-deepl'}); let [ L1, L2, ] = qp.openQuotes; let [ R1, R2, ] = qp.closeQuotes; should(qp.parse(`abc`)).properties({level: 0, quotes:0 }); should(qp.parse(`${L1}abc`)).properties({level: 1, quotes:1 }); should(qp.parse(`abc`)).properties({level: 1, quotes:0}); should(qp.parse(`${R1}abc`)).properties({level: 0, quotes:1 }); should(qp.parse(`${R1}abc`, 1)).properties({level: 0, quotes:1 }); should(qp.parse(`${L1}a${L2}bc`)) .properties({level: 2, quotes:2}); should(qp.parse(`ab${R2}c`)).properties({ level: 1, quotes:1 }); should(qp.parse(`abc`)).properties({ level: 1, quotes:0 }); should(qp.parse(`${R1}bc`)).properties({ level: 0, quotes:1 }); }); it("convertQuotes() balanced", ()=>{ let usText = `“I say: ‘completed’”? `; let ukText = `‘I say: “completed”’? `; let qp_us = new QuoteParser({lang:'en-us'}); let qp_uk = new QuoteParser({lang:'en-uk'}); should(qp_us.convertQuotes(usText, qp_uk)).equal(ukText); should(qp_uk.convertQuotes(ukText, qp_us)).equal(usText); should(qp_us.level).equal(0); should(qp_uk.level).equal(0); should(qp_us.convertQuotes(usText, qp_uk,0)).equal(ukText); should(qp_uk.convertQuotes(ukText, qp_us,0)).equal(usText); should(qp_us.level).equal(0); should(qp_uk.level).equal(0); should(qp_us.convertQuotes(ukText, qp_uk, 1)).equal(usText); should(qp_uk.convertQuotes(usText, qp_us, 1)).equal(ukText); should(qp_us.level).equal(1); should(qp_uk.level).equal(1); }); it("convertQuotes() testcaseFeelingsEN() French", ()=>{ const msg = 'test.QuoteParser.convertQuotes()'; let qp_en = new QuoteParser({lang:'en'}); let qp_en_deepl = new QuoteParser({lang:'en-deepl'}); let enText = qp_en.testcaseFeelingsEN('French'); let preText = qp_en_deepl.testcaseFeelingsEN('French'); //console.log(msg, {enText, preText}); should(qp_en.convertQuotes(enText, qp_en_deepl, 2)) .equal(preText); }); it("convertQuotes() testcaseGratificationEN() French", ()=>{ const msg = 'test.QuoteParser.convertQuotes()'; let qp_en = new QuoteParser({lang:'en'}); let qp_en_deepl = new QuoteParser({lang:'en-deepl'}); let enText = qp_en.testcaseGratificationEN('French'); let preText = qp_en_deepl.testcaseGratificationEN('French'); //console.log(msg, {enText, preText}); should(qp_en.convertQuotes(enText, qp_en_deepl, 2)) .equal(preText); }); it("convertQuotes() testcasePleasuresEN() French", ()=>{ const msg = 'test.QuoteParser.convertQuotes()'; let qp_en = new QuoteParser({lang:'en'}); let qp_en_deepl = new QuoteParser({lang:'en-deepl'}); let enText = qp_en.testcasePleasuresEN('French'); let preText = qp_en_deepl.testcasePleasuresEN('French'); //console.log(msg, {enText, preText}); should(qp_en.convertQuotes(enText, qp_en_deepl, 2)) .equal(preText); }); it("convertQuotes() testcaseSquirrelsEN() French", ()=>{ const msg = 'test.QuoteParser.convertQuotes()'; let qp_en = new QuoteParser({lang:'en'}); let qp_en_deepl = new QuoteParser({lang:'en-deepl'}); let enText = qp_en.testcaseSquirrelsEN('French'); let preText = qp_en_deepl.testcaseSquirrelsEN('French'); //console.log(msg, {enText, preText}); should(qp_en.convertQuotes(enText, qp_en_deepl, 2)) .equal(preText); }); it("syncQuoteLevel() startLevel", ()=>{ const msg = 'test.QuoteParser@227'; const dbg = DBG.QUOTE; let qp = new QuoteParser({lang:'en'}); dbg && console.log(msg, '[1]rexSplit', qp.rexSplit); let [ lq1, lq2, lq3, lq4 ] = qp.openQuotes; let [ rq1, rq2, rq3, rq4 ] = qp.closeQuotes; let tests = [ `a`, // 0,1,2,3 `${lq1}a${rq1}`, // 0,2 `${lq2}a${rq2}`, // 1,3 `a${rq2}`, // 2,4 `${lq3}a${rq3}?${rq2}`, // 2 `${lq2}a${rq2}${rq1}`, // 1,2 ]; let i = -1; dbg && console.log(msg, `[2]`, tests[++i]); should(qp.syncQuoteLevel(tests[i], 0).startLevel).equal(0); should(qp.syncQuoteLevel(tests[i], 1).startLevel).equal(1); should(qp.syncQuoteLevel(tests[i], 2).startLevel).equal(2); should(qp.syncQuoteLevel(tests[i], 3).startLevel).equal(3); dbg && console.log(msg, `[3]`, tests[++i]); should(qp.syncQuoteLevel(tests[i], 0).startLevel).equal(0); should(qp.syncQuoteLevel(tests[i], 2).startLevel).equal(2); dbg && console.log(msg, `[4]`, tests[++i]); should(qp.syncQuoteLevel(tests[i], 1).startLevel).equal(1); should(qp.syncQuoteLevel(tests[i], 3).startLevel).equal(3); dbg && console.log(msg, `[5]`, tests[++i]); should(qp.syncQuoteLevel(tests[i], 2).startLevel).equal(2); should(qp.syncQuoteLevel(tests[i], 4).startLevel).equal(4); dbg && console.log(msg, `[6]`, tests[++i]); should(qp.syncQuoteLevel(tests[i], 2).startLevel).equal(2); dbg && console.log(msg, `[7]`, tests[++i]); should(qp.syncQuoteLevel(tests[i], 1).startLevel).equal(1); should(qp.syncQuoteLevel(tests[i], 3).startLevel).equal(3); }); it("syncQuoteLevel() endLevel same", ()=>{ const msg = 'test.QuoteParser@263'; const dbg = DBG.QUOTE; let qp = new QuoteParser({lang:'en'}); dbg && console.log(msg, '[1]rexSplit', qp.rexSplit); let [ lq1, lq2, lq3, lq4 ] = qp.openQuotes; let [ rq1, rq2, rq3, rq4 ] = qp.closeQuotes; let i; let testsSame = [ // Same quote level `a`, // 0,1,2,3 `${lq1}a${rq1}`, // 0,2 `${lq2}a${rq2}`, // 1,3 ]; i = 0; dbg && console.log(msg, `[2]`, testsSame[i]); should(qp.syncQuoteLevel(testsSame[i], 0).endLevel).equal(0); should(qp.syncQuoteLevel(testsSame[i], 1).endLevel).equal(1); should(qp.syncQuoteLevel(testsSame[i], 2).endLevel).equal(2); should(qp.syncQuoteLevel(testsSame[i], 3).endLevel).equal(3); ++i; dbg && console.log(msg, `[3]`, testsSame[i]); should(qp.syncQuoteLevel(testsSame[i], 0).endLevel).equal(0); should(qp.syncQuoteLevel(testsSame[i], 2).endLevel).equal(2); ++i; dbg && console.log(msg, `[4]`, testsSame[i]); should(qp.syncQuoteLevel(testsSame[i], 1).endLevel).equal(1); should(qp.syncQuoteLevel(testsSame[i], 3).endLevel).equal(3); }); it("syncQuoteLevel() endLevel close", ()=>{ const msg = 'test.QuoteParser@292'; const dbg = DBG.QUOTE; let qp = new QuoteParser({lang:'en'}); dbg && console.log(msg, '[1]rexSplit', qp.rexSplit); let [ lq1, lq2, lq3, lq4 ] = qp.openQuotes; let [ rq1, rq2, rq3, rq4 ] = qp.closeQuotes; let i; let testsClose = [ // Close quote to lower level `a${rq2}`, // 2,4 `${lq3}a${rq3}?${rq2}`, // 2 `${lq2}a${rq2}${rq1}`, // 1,2 ]; i = 0; dbg && console.log(msg, `[1]`, testsClose[i]); should(qp.syncQuoteLevel(testsClose[i], 2).endLevel).equal(1); should(qp.syncQuoteLevel(testsClose[i], 4).endLevel).equal(3); ++i; dbg && console.log(msg, `[2]`, testsClose[i]); should(qp.syncQuoteLevel(testsClose[i], 2).endLevel).equal(1); ++i; dbg && console.log(msg, `[3]`, testsClose[i]); should(qp.syncQuoteLevel(testsClose[i], 1).endLevel).equal(0); should(qp.syncQuoteLevel(testsClose[i], 3).endLevel).equal(2); }); it("syncQuoteLevel() endLevel open", ()=>{ const msg = 'test.QuoteParser@292'; const dbg = DBG.QUOTE; let qp = new QuoteParser({lang:'en'}); dbg && console.log(msg, '[1]rexSplit', qp.rexSplit); let [ lq1, lq2, lq3, lq4 ] = qp.openQuotes; let [ rq1, rq2, rq3, rq4 ] = qp.closeQuotes; let i; let testsOpen = [ // Close quote to lower level `${lq2}${lq3}a${rq3}?`, // 1 `${lq1}`, // 0,2 `${lq2}a${rq2}${rq1}`, // 1,2 `${lq2}a${lq3}${lq4}`, // 1 ]; i = -1; ++i; dbg && console.log(msg, `[1]`, testsOpen[i]); should(qp.syncQuoteLevel(testsOpen[i], 1).endLevel).equal(2); ++i dbg && console.log(msg, `[2]`, testsOpen[i]); should(qp.syncQuoteLevel(testsOpen[i], 0).endLevel).equal(1); should(qp.syncQuoteLevel(testsOpen[i], 2).endLevel).equal(3); ++i; dbg && console.log(msg, `[3]`, testsOpen[i]); should(qp.syncQuoteLevel(testsOpen[i], 1).endLevel).equal(0); should(qp.syncQuoteLevel(testsOpen[i], 3).endLevel).equal(2); ++i; dbg && console.log(msg, `[4]`, testsOpen[i]); should(qp.syncQuoteLevel(testsOpen[i], 1).endLevel).equal(4); }); it("syncQuoteLevel() errors", ()=>{ const msg = 'test.QuoteParser@318'; const dbg = DBG.QUOTE; let qp = new QuoteParser({lang:'en'}); dbg && console.log(msg, '[1]rexSplit', qp.rexSplit); let [ lq1, lq2, lq3, lq4 ] = qp.openQuotes; let [ rq1, rq2, rq3, rq4 ] = qp.closeQuotes; let tests = [ `${lq1}a${rq1}`, // 0,2 `${lq2}a${rq2}`, // 1,3 `a${rq2}`, // 2,4 `${lq3}a${rq3}?${rq2}`, // 2 `${lq2}a${rq2}${rq1}`, // 1,2 ]; let i = 0; console.log(msg, "***** BEGIN syncQuoteLevel() error test"); dbg && console.log(msg, `[2]`, tests[i]); should(qp.syncQuoteLevel(tests[i], 1).startLevel).equal(2); should(qp.syncQuoteLevel(tests[i], 3).startLevel).equal(0); should(qp.syncQuoteLevel(tests[i], 4).startLevel).equal(2); i++ dbg && console.log(msg, `[3]`, tests[i]); should(qp.syncQuoteLevel(tests[i], 0).startLevel).equal(1); should(qp.syncQuoteLevel(tests[i], 2).startLevel).equal(3); should(qp.syncQuoteLevel(tests[i], 4).startLevel).equal(1); i++ dbg && console.log(msg, `[4]`, tests[i]); should(qp.syncQuoteLevel(tests[i], 0).startLevel).equal(2); should(qp.syncQuoteLevel(tests[i], 1).startLevel).equal(2); should(qp.syncQuoteLevel(tests[i], 3).startLevel).equal(2); i++ dbg && console.log(msg, `[5]`, tests[i]); should(qp.syncQuoteLevel(tests[i], 0).startLevel).equal(2); should(qp.syncQuoteLevel(tests[i], 1).startLevel).equal(2); should(qp.syncQuoteLevel(tests[i], 3).startLevel).equal(2); console.log(msg, "***** END syncQuoteLevel() error test"); }); })