You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1438 lines
41 KiB
JavaScript

/*global console, test, throws, equal, fail, deepEqual, notEqual, expect, require, ok,
QUnit, RiTa, RiString, RiGrammar, RiMarkov, RiLexicon */
/*jshint loopfunc: true */
var runtests = function () {
QUnit.module("RiString", {
setup: function () {
RiTa.SILENT = true;
},
teardown: function () {}
});
test("testRiString", function () {
ok(RiString('hello'));
ok(new RiString('hello'));
ok(RiString(''));
ok(new RiString(''));
ok(new RiString(64));
ok(RiString(64));
var BAD = [null, undefined];
for (var i = 0; i < BAD.length; i++) {
throws(function () {
try {
new RiString(BAD[i]);
fail("no exception");
} catch (e) {
throw e;
}
});
throws(function () {
try {
RiString(BAD[i]);
fail("no exception");
} catch (e) {
throw e;
}
});
}
});
test("testGet", function () {
// TODO
equal(1,1);
});
test("testSet", function () {
// TODO
equal(1,1);
});
test("testAnalyze", function () { // same tests as testFeatures() below
var features;
features = RiString("123").analyze().features();
ok(features);
equal(features.phonemes, "w-ah-n-t-uw-th-r-iy");
equal(features.syllables, "w-ah-n/t-uw/th-r-iy");
equal(features.stresses, "1/1/1");
features = RiString("Mom and Dad, waiting for the car, ate a steak.").analyze().features();
ok(features);
equal(features.phonemes, "m-aa-m ae-n-d d-ae-d , w-ey-t-ih-ng f-ao-r dh-ah k-aa-r , ey-t ey s-t-ey-k .");
equal(features.syllables, "m-aa-m ae-n-d d-ae-d , w-ey/t-ih-ng f-ao-r dh-ah k-aa-r , ey-t ey s-t-ey-k .");
equal(features.stresses, "1 1 1 , 1/0 1 0 1 , 1 1 1 .");
features = RiString("The dog ran faster than the other dog. But the other dog was prettier.").analyze().features();
ok(features);
equal(features.phonemes, "dh-ah d-ao-g r-ae-n f-ae-s-t-er dh-ae-n dh-ah ah-dh-er d-ao-g . b-ah-t dh-ah ah-dh-er d-ao-g w-aa-z p-r-ih-t-iy-er .");
equal(features.syllables, "dh-ah d-ao-g r-ae-n f-ae/s-t-er dh-ae-n dh-ah ah/dh-er d-ao-g . b-ah-t dh-ah ah/dh-er d-ao-g w-aa-z p-r-ih/t-iy/er .");
equal(features.stresses, "0 1 1 1/0 1 0 1/0 1 . 1 0 1/0 1 1 1/0/0 .");
features = RiString("The laggin dragon").analyze().features();
ok(features);
equal(features.phonemes, "dh-ah l-ae-g-ih-n d-r-ae-g-ah-n");
equal(features.syllables, "dh-ah l-ae/g-ih-n d-r-ae/g-ah-n");
equal(features.stresses, "0 1/1 1/0");
features = RiString("Tomatoes and apricots").analyze().features();
ok(features);
//lts - British pronunciation
equal(features.phonemes, "t-aa-m-ah-t-ow-z ae-n-d ae-p-r-ah-k-aa-t-s");
equal(features.syllables, "t-aa/m-ah/t-ow-z ae-n-d ae/p-r-ah/k-aa-t-s");
equal(features.stresses, "1/0/0 1 1/0/0");
features = RiString(".").analyze().features();
ok(features);
equal(features.phonemes, ".");
equal(features.syllables, ".");
equal(features.stresses, ".");
features = RiString("1 2 7").analyze().features();
ok(features);
equal(features.phonemes, "w-ah-n t-uw s-eh-v-ah-n");
equal(features.syllables, "w-ah-n t-uw s-eh/v-ah-n");
equal(features.stresses, "1 1 1/0");
features = RiString("*").analyze().features();
ok(features);
equal(features.phonemes, "*");
equal(features.syllables, "*");
equal(features.stresses, "*");
});
test("testFeatures", function () {
var txt = "Returns the array of words.";
var rs = RiString(txt), feats = rs.features();
ok(feats);
ok(feats[RiTa.POS]);
equal(feats[RiTa.TEXT], txt);
deepEqual(feats[RiTa.TOKENS], RiTa.tokenize(txt).join(' '));
txt = "Returns the array of words.";
rs = RiString(txt).analyze();
feats = rs.features();
ok(feats);
equal(feats[RiTa.TEXT], txt);
deepEqual(feats[RiTa.TOKENS], RiTa.tokenize(txt).join(' '));
ok(feats[RiTa.SYLLABLES]);
ok(feats[RiTa.PHONEMES]);
ok(feats[RiTa.STRESSES]);
ok(feats[RiTa.POS]);
});
test("testCharAt", function () {
var rs = new RiString("The dog was white");
var result = rs.charAt(0);
equal(result, "T");
result = rs.charAt(5);
notEqual(result, "O");
result = rs.charAt(5);
notEqual(result, '*');
result = rs.charAt(200); //out of range character
equal(result, "");
});
test("testConcat", function () {
var rs = new RiString("The dog was white");
var rs2 = new RiString("The dog was not white");
var result = rs.concat(rs2);
equal(result, "The dog was whiteThe dog was not white");
rs = new RiString(" The dog was white ");
rs2 = new RiString("The dog was not white ");
result = rs.concat(rs2);
equal(result, " The dog was white The dog was not white ");
rs = new RiString("#$#@#$@#");
rs2 = new RiString("The dog was not white ");
result = rs.concat(rs2);
equal(result, "#$#@#$@#The dog was not white ");
});
test("testCopy", function () {
var rs = new RiString("copy cat");
var rs2 = rs.copy();
deepEqual(rs2, rs);
rs = new RiString("copy dogs.");
rs2 = rs.copy();
deepEqual(rs, rs2);
rs = new RiString("cOPy dOgs.");
rs2 = rs.copy();
deepEqual(rs, rs2);
rs = new RiString("!@#$%^&*()_+");
rs2 = rs.copy();
deepEqual(rs, rs2);
rs = new RiString("");
rs2 = rs.copy();
deepEqual(rs, rs2);
rs = new RiString("!@#$sadas*()_+");
rs2 = rs.copy();
deepEqual(rs, rs2);
rs = new RiString("copy cat");
rs.set("myFeatureName", "myFeatureValue");
rs2 = rs.copy();
equal(rs.get("myFeatureName"), rs2.get("myFeatureName"));
rs = new RiString("copy cat");
rs.analyze();
rs2 = rs.copy();
deepEqual(rs.features(), rs2.features());
});
test("testEndsWith", function () {
// check that these are ok --------------
var rs = new RiString("girls");
var result = rs.endsWith("s");
ok(result);
rs = new RiString("closed");
result = rs.endsWith("ed");
ok(result);
rs = new RiString("The dog was white");
result = rs.endsWith("white");
ok(result);
rs = new RiString("");
result = rs.endsWith("");
ok(result);
});
test("testEquals", function () { // compare Object
var rs = new RiString("closed");
var rs2 = new RiString("closed");
var result = rs.equals(rs2);
ok(result);
rs = new RiString("closed");
rs2 = new RiString("Closed");
result = rs.equals(rs2);
ok(!result);
rs = new RiString("There is a cat.");
rs2 = new RiString("There is a cat.");
result = rs.equals(rs2);
ok(result);
rs = new RiString("There is a cat.");
rs2 = new RiString("There is a cat. ");
result = rs.equals(rs2);
ok(!result);
rs = new RiString("There is a cat.");
rs2 = new RiString("");
result = rs.equals(rs2);
ok(!result);
rs = new RiString("");
rs2 = new RiString("");
result = rs.equals(rs2);
ok(result);
rs = new RiString();
rs2 = new RiString();
result = rs.equals(rs2);
ok(result);
// ---------------
rs = new RiString("closed");
result = rs.equals(RiString("closed"));
ok(result);
rs = new RiString("closed");
result = rs.equals("Closed");
ok(!result);
rs = new RiString("clOsed");
result = rs.equals("closed");
ok(!result);
rs = new RiString("There is a cat.");
result = rs.equals("There is a cat.");
ok(!result);
});
test("testEqualsIgnoreCase", function () {
// check that these are ok ---------------
var rs = new RiString("closed");
var result = rs.equalsIgnoreCase("Closed");
ok(result);
rs = new RiString("There is a cat.");
result = rs.equalsIgnoreCase("TheRe Is a cAt.");
ok(result);
rs = new RiString("THere iS a Cat.");
result = rs.equalsIgnoreCase("TheRe Is a cAt.");
ok(result);
rs = new RiString("THere iS a Cat.");
var rs2 = new RiString("THere iS a Cat.");
result = rs.equalsIgnoreCase(rs2);
ok(result);
rs = new RiString("THere iS a Cat.");
rs2 = new RiString("THere iS not a Cat.");
result = rs.equalsIgnoreCase(rs2);
ok(!result);
rs = new RiString("");
result = rs.equalsIgnoreCase("");
ok(result);
});
test("testIndexOf", function () {
// check that these are ok ---------------
var rs = new RiString("Returns the array of words.");
var result = rs.indexOf("e");
equal(result, 1);
rs = new RiString("Returns the array of words .");
result = rs.indexOf("a");
equal(result, 12);
rs = new RiString("s ."); //space
result = rs.indexOf(" ");
equal(result, 1);
rs = new RiString("s ."); //double space
result = rs.indexOf(" ");
equal(result, 1);
rs = new RiString("s ."); //tab space
result = rs.indexOf(" ");
equal(result, 1);
rs = new RiString(" abc"); //space
result = rs.indexOf(" ");
equal(result, 0);
rs = new RiString(" abc"); //double space
result = rs.indexOf(" ");
equal(result, 0);
rs = new RiString(" abc"); //tab space
result = rs.indexOf(" ");
equal(result, -1);
rs = new RiString("Returns the array of words .");
result = rs.indexOf("array");
equal(result, 12);
rs = new RiString("Returns the array of words.");
result = rs.indexOf(",");
equal(result, -1);
rs = new RiString("Returns the array of words. Returns the array of words.");
result = rs.indexOf("a", 13);
equal(result, 15);
rs = new RiString("Returns the array of words. Returns the array of words?");
result = rs.indexOf("array", 13);
equal(result, 40);
rs = new RiString("Returns the array of words. Returns the array of words.");
result = rs.indexOf("");
equal(result, 0);
});
test("testInsertWord", function () {
var rs = new RiString("Inserts at wordIdx and shifts each subsequent word accordingly.");
var result = rs.insertWord(4, "then");
equal(result.text(), "Inserts at wordIdx and then shifts each subsequent word accordingly.");
rs = new RiString("inserts at wordIdx and shifts each subsequent word accordingly.");
rs.insertWord(0, "He");
equal(rs.text(), "He inserts at wordIdx and shifts each subsequent word accordingly.");
rs = new RiString("Inserts at wordIdx and shifts each subsequent word accordingly.");
rs.insertWord(1, "newWord");
var rs2 = new RiString(
"Inserts newWord at wordIdx and shifts each subsequent word accordingly.");
equal(rs.text(), rs2.text());
rs = new RiString("Inserts at wordIdx and shifts each subsequent word accordingly.");
rs.insertWord(1, "newWord and newWords");
rs2 = new RiString(
"Inserts newWord and newWords at wordIdx and shifts each subsequent word accordingly.");
equal(rs.text(), rs2.text());
rs = new RiString("Inserts at wordIdx and shifts each subsequent word accordingly.");
rs.insertWord(5, "");
rs2 = "Inserts at wordIdx and shifts each subsequent word accordingly.";
equal(rs.text(), rs2);
rs = new RiString("Inserts at wordIdx and shifts each subsequent word accordingly.");
rs.insertWord(5, "**");
equal(rs.text(), "Inserts at wordIdx and shifts ** each subsequent word accordingly.");
rs = new RiString("Inserts at wordIdx shifting each subsequent word accordingly.");
rs.insertWord(3, ",");
rs2 = new RiString(
"Inserts at wordIdx , shifting each subsequent word accordingly.");
equal(rs.text(), rs2.text());
rs = new RiString("Inserts at wordIdx and shifts each subsequent word accordingly.");
rs.insertWord(-2, "newWord");
equal(rs.text(), "Inserts at wordIdx and shifts each subsequent word newWord accordingly.");
});
test("testLastIndexOf", function () {
// check that these are ok --- ------------
var rs = new RiString("Start at first character. Start at last character.");
var result = rs.lastIndexOf("r");
equal(result, 48);
rs = new RiString("Start at first character. Start at last character.");
result = rs.lastIndexOf("Start");
equal(result, 26);
rs = new RiString("Start at first character. Start at last character.");
result = rs.lastIndexOf("start");
equal(result, -1);
rs = new RiString("Start at first character. Start at last character.");
result = rs.lastIndexOf("a", 12);
equal(result, 6);
rs = new RiString("Start at first character. Start at last character.");
result = rs.lastIndexOf("at", 12);
equal(result, 6);
rs = new RiString("Start at first character. Start at last character.");
result = rs.lastIndexOf("");
equal(result, rs.length()); // should be 50 or -1? 50(DCH)
});
test("testLength", function () {
var rs = new RiString("S");
var result = rs.length();
equal(result, 1);
rs = new RiString("s "); //space
result = rs.length();
equal(result, 2);
rs = new RiString("s" + '\t'); //tab space
result = rs.length();
equal(result, 2);
rs = new RiString(" s "); //2 space
result = rs.length();
equal(result, 3);
rs = new RiString('\t' + "s" + '\t'); // 2 tab space
result = rs.length();
equal(result, 3);
rs = new RiString("s b");
result = rs.length();
equal(result, 3);
rs = new RiString("s b.");
result = rs.length();
equal(result, 4);
rs = new RiString("s b ."); //space
result = rs.length();
equal(result, 5);
rs = new RiString("><><><#$!$@$@!$");
result = rs.length();
equal(result, 15);
rs = new RiString("");
result = rs.length();
equal(result, 0);
});
test("testMatch", function () {
var rs = new RiString("The rain in SPAIN stays mainly in the plain");
var result = rs.match(/ain/g);
deepEqual(result, ["ain", "ain", "ain"]);
rs = new RiString("The rain in SPAIN stays mainly in the plain");
result = rs.match(/ain/gi);
deepEqual(result, ["ain", "AIN", "ain", "ain"]);
rs = new RiString("Watch out for the rock!");
result = rs.match(/r?or?/g);
deepEqual(result, ["o", "or", "ro"]);
rs = new RiString("abc!");
result = rs.match(/r?or?/g);
deepEqual(result, []);
rs = new RiString("Letter !>D? hello 213331123");
result = rs.match(/[A-Za-z]/g);
deepEqual(result, ["L", "e", "t", "t", "e", "r", "D", "h", "e", "l", "l", "o"]);
rs = new RiString("Letter !>D? hello 213331123");
result = rs.match(/\W/g);
deepEqual(result, [" ", "!", ">", "?", " ", " "]);
rs = new RiString("Letter !>D? hello 213331123");
result = rs.match(/[^0-9]/g);
deepEqual(result, ["L", "e", "t", "t", "e", "r", " ", "!", ">", "D", "?", " ", "h", "e", "l", "l", "o", " "]);
rs = new RiString("!@#$%^&*()__+");
result = rs.match(/X|Z/g);
deepEqual(result, []);
rs = new RiString("!@#$%^&*()__+");
result = rs.match(/!|Z/g);
deepEqual(result, ["!"]);
rs = new RiString("The rain in SPAIN stays mainly in the plain");
result = rs.match(/ain/g);
deepEqual(result, ["ain", "ain", "ain"]);
//case-insensitive tests
rs = new RiString("The rain in SPAIN stays mainly in the plain");
result = rs.match(/ain/gi);
deepEqual(result, ["ain", "AIN", "ain", "ain"]);
});
test("testPos", function () {
// check that these are ok ---------------
var rs = new RiString("asdfaasd");
var result = rs.pos();
deepEqual(result, ["nn"]);
rs = new RiString("clothes");
result = rs.pos();
deepEqual(result, ["nns"]);
rs = new RiString("teeth");
result = rs.pos();
deepEqual(result, ["nns"]);
rs = new RiString("There is a cat.");
result = rs.pos();
deepEqual(result, ["ex", "vbz", "dt", "nn", "."]);
rs = new RiString("The boy, dressed in red, ate an apple.");
result = rs.pos();
deepEqual(result, ["dt", "nn", ",", "vbn", "in", "jj", ",", "vbd", "dt", "nn", "."]);
});
test("testPosAt", function () {
// check that these are ok ---------------
var rs = new RiString("The emperor had no clothes on.");
var result = rs.posAt(4);
equal("nns", result);
rs = new RiString("There is a cat.");
result = rs.posAt(3);
equal("nn", result);
rs = new RiString("There is a cat.");
result = rs.posAt(2);
equal("dt", result);
rs = new RiString("She bought a few knives.");
result = rs.posAt(4);
equal("nns", result);
// out of range tests
rs = new RiString("There is a cat.");
result = rs.posAt(-3);
equal("dt", result);
rs = new RiString("There is a cat.");
result = rs.posAt(-1);
equal(".", result);
rs = new RiString("There is a cat.");
result = rs.posAt(300);
// console.log("res="+result);
equal(".", result);
});
test("testRemoveChar", function () {
var rs = new RiString("The dog was white");
rs.removeChar(1);
equal(rs.text(), "Te dog was white");
rs = new RiString("The dog was white");
rs.removeChar(rs.length() - 1);
equal(rs.text(), "The dog was whit");
rs = new RiString("The dog was white");
rs.removeChar(rs.length());
equal(rs.text(), "The dog was white");
rs = new RiString("The dog was white");
rs.removeChar(0);
equal(rs.text(), "he dog was white");
rs = new RiString("The dog was white");
rs.removeChar(-1);
equal(rs.text(), "The dog was whit");
rs = new RiString("The dog was white");
rs.removeChar(1000);
equal(rs.text(), "The dog was white");
rs = new RiString("The dog was white.");
rs.removeChar(rs.length() - 1);
equal(rs.text(), "The dog was white");
});
test("testInsertChar", function () {
var rs = new RiString("Who are you?");
rs.insertChar(2, "");
equal(rs.text(), "Who are you?");
rs = new RiString("Who are you?");
rs.insertChar(2, "e");
equal(rs.text(), "Wheo are you?");
rs = new RiString("Who are you?");
rs.insertChar(2, "ere");
equal(rs.text(), "Whereo are you?");
rs = new RiString("Who are you?");
rs.insertChar(11, "!!");
equal(rs.text(), "Who are you!!?");
rs = new RiString("Who are you?");
rs.insertChar(0, "me");
equal(rs.text(), "meWho are you?");
rs = new RiString("Who?");
rs.insertChar(rs.length() - 1, "!");
equal(rs.text(), "Who!?");
rs = new RiString("Who?");
rs.insertChar(rs.length(), "!");
equal(rs.text(), "Who?!");
rs = new RiString("Who are you");
rs.insertChar(-1, "?");
equal(rs.text(), "Who are yo?u");
});
test("testReplaceChar", function () {
var rs = new RiString("Who are you?");
rs.replaceChar(2, "");
equal(rs.text(), "Wh are you?");
rs = new RiString("Who are you?");
rs.replaceChar(2, "e");
equal(rs.text(), "Whe are you?");
rs = new RiString("Who are you?");
rs.replaceChar(2, "ere");
equal(rs.text(), "Where are you?");
rs = new RiString("Who are you?");
rs.replaceChar(11, "!!");
equal(rs.text(), "Who are you!!");
rs = new RiString("Who are you?");
rs.replaceChar(0, "me");
equal(rs.text(), "meho are you?");
rs = new RiString("Who are you?");
rs.replaceChar(-1, "me");
equal(rs.text(), "Who are youme");
rs = new RiString("Who are you?");
rs.replaceChar(10000, "me");
equal(rs.text(), "Who are you?");
});
test("testReplaceFirst", function () {
// TODO: check against Java tests (should work the same) [C]
var rs = new RiString("Who are you?");
rs.replaceFirst("e", "E");
equal(rs.text(), "Who arE you?");
rs = new RiString("Who are you?");
rs.replaceFirst("o", "O");
equal(rs.text(), "WhO are you?");
rs = new RiString("Who are you?");
rs.replaceFirst("Who", "Where");
equal(rs.text(), "Where are you?");
rs = new RiString("Who are you?");
rs.replaceFirst("notExist", "Exist");
equal(rs.text(), "Who are you?");
rs = new RiString("Who are you?");
rs.replaceFirst("Who are", "Dare");
equal(rs.text(), "Dare you?");
rs = new RiString("Who are you?");
rs.replaceFirst("Who aRe", "Dare");
equal(rs.text(), "Who are you?");
rs = new RiString("Who are you? Who are you?");
rs.replaceFirst("Who are", "Dare");
equal(rs.text(), "Dare you? Who are you?");
rs = new RiString("Who are you?");
rs.replaceFirst("", "");
equal(rs.text(), "Who are you?");
//regex
rs = new RiString("The rain in SPAIN stays mainly in the plain");
rs.replaceFirst(/ain/, "ane");
equal(rs.text(), "The rane in SPAIN stays mainly in the plain");
rs = new RiString("The rain in SPAIN stays mainly in the plain");
rs.replaceFirst(/ain/i, "oll");
equal(rs.text(), "The roll in SPAIN stays mainly in the plain");
rs = new RiString("Watch out for the rock!");
rs.replaceFirst(/r?or?/, "a");
equal(rs.text(), "Watch aut for the rock!");
rs = new RiString("The rain in SPAIN stays mainly in the plain");
rs.replaceFirst(/in/, "");
equal(rs.text(), "The ra in SPAIN stays mainly in the plain");
rs = new RiString("Who are you?");
rs.replaceFirst("?", "?!");
equal(rs.text(), "Who are you?!");
// global ('g') should be ignored
rs = new RiString("The rain in SPAIN stays mainly in the plain");
rs.replaceFirst(/ain/g, "ane");
equal(rs.text(), "The rane in SPAIN stays mainly in the plain");
rs = new RiString("The rain in SPAIN stays mainly in the plain");
rs.replaceFirst(/ain/gi, "oll");
equal(rs.text(), "The roll in SPAIN stays mainly in the plain");
rs = new RiString("Watch out for the rock!");
rs.replaceFirst(/r?or?/g, "a");
equal(rs.text(), "Watch aut for the rock!");
rs = new RiString("The rain in SPAIN stays mainly in the plain");
rs.replaceFirst(/in/g, "");
equal(rs.text(), "The ra in SPAIN stays mainly in the plain");
});
test("testReplaceAll", function () {
// TODO: check against Java tests (should work the same) [C]
var rs = new RiString("Who are you? Who is he? Who is it?");
equal(rs.replaceAll("e", "E").text(), "Who arE you? Who is hE? Who is it?");
rs = new RiString("Who are you? Who is he? Who is it?");
equal(rs.replaceAll("Who", "O").text(), "O are you? O is he? O is it?");
rs = new RiString("Whom is he? Where is he? What is it?");
equal(rs.replaceAll("Wh*", "O").text(), "Whom is he? Where is he? What is it?");
rs = new RiString("%^&%&?");
equal(rs.replaceAll("%^&%&?", "!!!").text(), "!!!");
rs = new RiString("Who are you?");
equal(rs.replaceAll("notExist", "Exist").text(), "Who are you?");
rs = new RiString("Who are you?");
equal(rs.replaceAll("", "").text(), "Who are you?");
rs = new RiString("");
equal(rs.replaceAll("", "").text(), "");
// regex tests (global flag: should have same result with/w'out global flag)
rs = new RiString("The rain in SPAIN stays mainly in the plain");
rs.replaceAll(/ain/, "ane");
equal(rs.text(), "The rane in SPAIN stays manely in the plane");
rs.replaceAll(/ain/g, "ane");
equal(rs.text(), "The rane in SPAIN stays manely in the plane");
rs = new RiString("The rain in SPAIN stays mainly in the plain");
rs.replaceAll(/ain/i, "ane");
equal(rs.text(), "The rane in SPane stays manely in the plane");
rs = new RiString("Watch out for the rock!");
rs.replaceAll(/ ?r/, "wood");
equal(rs.text(), "Watch out fowood thewoodock!");
rs = new RiString("The rain in SPAIN stays mainly in the plain");
rs.replaceAll(/in/, "");
equal(rs.text(), "The ra SPAIN stays maly the pla");
rs = new RiString("Who wuz you?");
rs.replaceAll(/ou?/, "?!");
equal(rs.text(), "Wh?! wuz y?!?");
rs = new RiString("Who wuz you?");
rs.replaceAll("ou?", "?!");
equal(rs.text(), "Who wuz y?!");
rs = new RiString("Who are you{1,}");
rs.replaceAll("{1,}", "!");
equal(rs.text(), "Who are you!");
rs = new RiString("Who are you*");
rs.replaceAll("*", "!");
equal(rs.text(), "Who are you!");
rs = new RiString("Who are you+");
rs.replaceAll("+", "!");
equal(rs.text(), "Who are you!");
rs = new RiString("Who are you?");
rs.replaceAll("?", "?!");
equal(rs.text(), "Who are you?!");
});
test("testRemoveWord", function () {
var rs = new RiString("Who are you?");
rs.removeWord(2);
equal(rs.text(), "Who are?");
rs = new RiString("Who are you?");
rs.removeWord(3);
equal(rs.text(), "Who are you");
rs = new RiString("Who are you?");
rs.removeWord(20);
equal(rs.text(), "Who are you?");
rs = new RiString("Who are you?");
equal(rs.removeWord(0).text(), "are you?");
rs = new RiString("Who are you?");
rs.removeWord(-1);
equal(rs.text(), "Who are you"); // TODO: should go from back
});
test("testReplaceWord", function () {
var rs = new RiString("Who are you?");
rs.replaceWord(2, ""); // nice! this too...
equal(rs.text(), "Who are?"); // strange case, not sure
// could also be: equal(rs.text(), "Who are ?");
rs = new RiString("Who are you?");
equal("Who are What?", rs.replaceWord(2, "What").text());
rs = new RiString("Who are you?");
equal(rs.replaceWord(0, "What").text(), "What are you?");
rs = new RiString("Who are you?");
rs.replaceWord(3, "!!");
equal(rs.text(), "Who are you!!"); // nice! this is a strange one...
rs = new RiString("Who are you?");
rs.replaceWord(-1, ".");
equal(rs.text(), "Who are you.");
rs = new RiString("Who are you?");
rs.replaceWord(20, "asfasf");
equal(rs.text(), "Who are you?");
});
test("testSlice", function () {
var rs = new RiString(
"The Australian Pavilion at the Venice Biennale is getting a much-needed facelift.");
equal(rs.slice(1, 3), "he");
rs = new RiString(
"The Australian Pavilion at the Venice Biennale is getting a much-needed facelift.");
equal(rs.slice(-3, -2), "f");
rs = new RiString(
"The Australian Pavilion at the Venice Biennale is getting a much-needed facelift.");
equal(rs.slice(15, 500),
"Pavilion at the Venice Biennale is getting a much-needed facelift.");
rs = new RiString("!@#$%^&**()");
equal(rs.slice(2, 5), "#$%");
rs = new RiString(
"The Australian Pavilion at the Venice Biennale is getting a much-needed facelift.");
equal(rs.slice(15, 500),
"Pavilion at the Venice Biennale is getting a much-needed facelift.");
rs = new RiString("The Australian");
equal(rs.slice(-5, -3), "al");
rs = new RiString(
"The Australian Pavilion at the Venice Biennale is getting a much-needed facelift.");
equal(rs.slice(500, 501), "");
rs = new RiString(
"The Australian Pavilion at the Venice Biennale is getting a much-needed facelift.");
equal(rs.slice(10, 10), "");
rs = new RiString(
"The Australian Pavilion at the Venice Biennale is getting a much-needed facelift.");
equal(rs.slice(3, 1), "");
rs = new RiString(
"The Australian Pavilion at the Venice Biennale is getting a much-needed facelift.");
equal(rs.slice(-2, 3), "");
rs = new RiString(
"The Australian Pavilion at the Venice Biennale is getting a much-needed facelift.");
equal(rs.slice(-2, -3), "");
});
test("testSplit", function () {
var rs = new RiString("Who are you?");
var result = rs.split("?");
var answer = [RiString("Who are you")];
deepEqual(result, answer);
rs = new RiString("Who are you?");
result = rs.split("\\?");
answer = [RiString("Who are you?")];
deepEqual(result, answer);
rs = new RiString("Who are you?");
result = rs.split();
answer = [RiString("Who are you?")];
deepEqual(result, answer);
rs = new RiString("Who are you?");
result = rs.split(" ");
answer = [RiString("Who"), RiString("are"), RiString("you?")];
deepEqual(result, answer);
rs = new RiString("Who are you?");
result = rs.split("are");
answer = [RiString("Who "), RiString(" you?")];
deepEqual(result, answer);
rs = new RiString("Who are you?");
result = rs.split("W");
//console.log(result);
answer = [RiString("ho are you?")];
deepEqual(result, answer);
rs = new RiString("Who are you?");
result = rs.split("abc");
answer = [RiString("Who are you?")];
deepEqual(result, answer);
rs = new RiString("Who are you?");
result = rs.split("");
answer = [];
var chars = ["W", "h", "o", " ", "a", "r", "e", " ", "y", "o", "u", "?"];
for (var i = 0; i < chars.length; i++) {
answer[i] = RiString(chars[i]);
}
deepEqual(result, answer);
rs = new RiString("Who are you?");
result = rs.split("", 3);
answer = [RiString("W"), RiString("h"), RiString("o")];
deepEqual(result, answer);
rs = new RiString("Who are you?");
result = rs.split("", 0);
answer = [];
deepEqual(result, answer);
rs = new RiString("Who are you?");
result = rs.split("", 100);
answer = [];
chars = ["W", "h", "o", " ", "a", "r", "e", " ", "y", "o", "u", "?"];
for (i = 0; i < chars.length; i++) {
answer[i] = RiString(chars[i]);
}
deepEqual(result, answer);
});
test("testStartsWith", function () {
var rs = new RiString(
"The Australian Pavilion at the Venice Biennale is getting a much-needed facelift.");
ok(rs.startsWith("T"));
rs = new RiString(
"The Australian Pavilion at the Venice Biennale is getting a much-needed facelift.");
ok(rs.startsWith("The"));
rs = new RiString(
"The Australian Pavilion at the Venice Biennale is getting a much-needed facelift.");
ok(!rs.startsWith("Aus"));
rs = new RiString(
"The Australian Pavilion at the Venice Biennale is getting a much-needed facelift.");
ok(!rs.startsWith("*"));
rs = new RiString(
"*The Australian Pavilion at the Venice Biennale is getting a much-needed facelift.");
ok(rs.startsWith("*"));
rs = new RiString(
" The Australian Pavilion at the Venice Biennale is getting a much-needed facelift.");
ok(rs.startsWith(" ")); //single space
rs = new RiString(
" The Australian Pavilion at the Venice Biennale is getting a much-needed facelift.");
ok(rs.startsWith(" ")); //double space
rs = new RiString(
" The Australian Pavilion at the Venice Biennale is getting a much-needed facelift.");
ok(!rs.startsWith(" ")); // tab space
});
test("testSubstring", function () {
var rs = new RiString(
"The Australian Pavilion at the Venice Biennale is getting a much-needed facelift.");
equal(rs.substring(1, 3), "he");
rs = new RiString(
"The Australian Pavilion at the Venice Biennale is getting a much-needed facelift.");
equal(rs.substring(3, 1), "he");
rs = new RiString(
"The Australian Pavilion at the Venice Biennale is getting a much-needed facelift.");
equal(rs.substring(-2, 3), "The");
rs = new RiString(
"The Australian Pavilion at the Venice Biennale is getting a much-needed facelift.");
equal(rs.substring(15, 500),
"Pavilion at the Venice Biennale is getting a much-needed facelift.");
rs = new RiString(
"The Australian Pavilion at the Venice Biennale is getting a much-needed facelift.");
equal(rs.substring(500, 501), "");
rs = new RiString(
"The Australian Pavilion at the Venice Biennale is getting a much-needed facelift.");
equal(rs.substring(10, 10), "");
rs = new RiString("!@#$%^&**()");
equal(rs.substring(2, 5), "#$%");
rs = new RiString("Start at first character.");
equal(rs.substring(1, 5), "tart");
rs = new RiString("Start at first character.");
equal(rs.substring(0, 1), "S");
rs = new RiString("Start at first character.");
equal(rs.substring(0, 1), "S");
rs = new RiString("Start at first character.");
equal(rs.substring(3), "rt at first character.");
});
test("testSubstr", function () {
var rs = new RiString(
"The Australian Pavilion at the Venice Biennale is getting a much-needed facelift.");
equal(rs.substr(1, 3), "he ");
rs = new RiString(
"The Australian Pavilion at the Venice Biennale is getting a much-needed facelift.");
equal(rs.substr(-2, 3), "t.");
rs = new RiString(
"The Australian Pavilion at the Venice Biennale is getting a much-needed facelift.");
equal(rs.substr(15, 500),
"Pavilion at the Venice Biennale is getting a much-needed facelift.");
rs = new RiString(
"The Australian Pavilion at the Venice Biennale is getting a much-needed facelift.");
equal(rs.substr(500, 501), "");
rs = new RiString(
"The Australian Pavilion at the Venice Biennale is getting a much-needed facelift.");
equal(rs.substr(10, 10), "lian Pavil");
rs = new RiString("!@#$%^&**()");
equal(rs.substr(2, 5), "#$%^&");
});
test("testText", function () {
// check that these are ok ---------------
var rs = new RiString("this door is closed");
var result = rs.text();
equal(result, "this door is closed");
rs = new RiString("this door, is closed.*&)*^");
result = rs.text();
equal(result, "this door, is closed.*&)*^");
rs = new RiString(" this door , is closed.");
result = rs.text();
equal(result, " this door , is closed.");
rs = new RiString("this Door is closed");
result = rs.text();
notEqual(result, "this door is closed");
rs = new RiString("");
result = rs.text();
equal(result, "");
// no error checks needed
});
test("testToCharArray()", function () {
ok(1);
// no error checks needed
});
test("testToLowerCase", function () {
var rs = new RiString("The Australian Pavilion.");
rs.toLowerCase();
equal("the australian pavilion.", rs.text());
rs = new RiString("the Australian pavilion.");
rs.toLowerCase();
equal("the australian pavilion.", rs.text());
rs = new RiString(")(*(&^%%$!#$$%%^))");
rs.toLowerCase();
equal(")(*(&^%%$!#$$%%^))", rs.text());
// no error checks needed
});
test("testToUpperCase", function () {
var rs = new RiString("The Australian Pavilion.");
equal("THE AUSTRALIAN PAVILION.", rs.toUpperCase().text());
rs = new RiString(")(*(&^%%$!#$$%%^))");
rs.toUpperCase();
equal(")(*(&^%%$!#$$%%^))", rs.text());
// no error checks needed
});
test("testTrim", function () {
// check that these are ok ---------------
var rs = new RiString("Start at first character. ");
equal(rs.trim().text(), "Start at first character.");
rs = new RiString(" Start at first character.");
equal(rs.trim().text(), "Start at first character.");
rs = new RiString(" Start at first character. "); // tabs
equal(rs.trim().text(), "Start at first character.");
rs = new RiString(" Start at first character. "); // spaces/tabs
equal(rs.trim().text(), "Start at first character.");
rs = new RiString("Start at first character.\t"); //\t
equal(rs.trim().text(), "Start at first character.");
rs = new RiString("\t\t\tStart at first character.\t"); //\t
equal(rs.trim().text(), "Start at first character.");
});
test("testWordAt", function () {
var rs = new RiString("Returns the word at wordIdx using the default WordTokenizer.");
var result = rs.wordAt(0);
equal(result, "Returns");
result = rs.wordAt(1);
equal(result, "the");
result = rs.wordAt(9);
equal(result, ".");
result = rs.wordAt(500);
equal(result, "");
result = rs.wordAt(-5);
equal(result, "");
rs = new RiString("");
result = rs.wordAt(0);
equal(result, "");
});
test("testWordCount", function () {
// check that these are ok --- ------------
var rs = new RiString("Returns the word at wordIdx using the default WordTokenizer.");
var result = rs.wordCount();
equal(result, 10); // correct, according to WordTokenizer, need to try with RegexTokenizer
rs = new RiString("Returns the word.Returns the word. Returns the word .");
result = rs.wordCount();
equal(result, 12);
rs = new RiString(" Returns the word at wordIdx , using the default WordTokenizer."); //space
result = rs.wordCount();
equal(result, 11);
rs = new RiString(" Returns the word at wordIdx , using the default WordTokenizer. "); //tab space
result = rs.wordCount();
equal(result, 11);
rs = new RiString("");
result = rs.wordCount();
equal(result, 0);
});
test("testWords", function () {
// check that these are ok ---------------
var rs = new RiString("Returns the array of words.");
var result = rs.words();
var answer = ["Returns", "the", "array", "of", "words", "."];
deepEqual(result, answer);
rs = new RiString("The boy, dressed in red, ate an array.");
result = rs.words();
answer = ["The", "boy", ",", "dressed", "in", "red", ",", "ate", "an", "array", "."];
deepEqual(result, answer);
rs = new RiString("Returns the array of words .");
result = rs.words();
answer = ["Returns", "the", "array", "of", "words", "."];
deepEqual(result, answer);
rs = new RiString("The boy, dressed in red , ate an array?");
result = rs.words();
answer = ["The", "boy", ",", "dressed", "in", "red", ",", "ate", "an", "array", "?"];
deepEqual(result, answer);
rs = new RiString("");
result = rs.words();
answer = [""];
deepEqual(result, answer);
// no error checks needed
});
test("testGet", function () {
var rs = RiString("The laggin dragon").analyze();
ok(rs);
ok(rs.features());
var ph = rs.get(RiTa.PHONEMES);
var sy = rs.get(RiTa.SYLLABLES);
var st = rs.get(RiTa.STRESSES);
ok(ph && sy && st);
equal(ph, "dh-ah l-ae-g-ih-n d-r-ae-g-ah-n");
equal(sy, "dh-ah l-ae/g-ih-n d-r-ae/g-ah-n");
equal(st, "0 1/1 1/0");
var rs = RiString("Tomatoes and apricots").analyze();
ok(rs);
ok(rs.features());
var ph = rs.get(RiTa.PHONEMES);
var sy = rs.get(RiTa.SYLLABLES);
var st = rs.get(RiTa.STRESSES);
ok(ph && sy && st);
//lts phones use British pronounciation
equal(ph, "t-aa-m-ah-t-ow-z ae-n-d ae-p-r-ah-k-aa-t-s");
equal(sy, "t-aa/m-ah/t-ow-z ae-n-d ae/p-r-ah/k-aa-t-s");
equal(st, "1/0/0 1 1/0/0");
});
test("testSet", function () {
var rs = new RiString("Mom & Dad");
rs.set("Id", "1000"); // TODO: test that this does not create default features
equal(rs.get("Id"), "1000");
//console.log(rs.get(RiTa.PHONEMES));
var features = rs.features();
//console.log(features);
ok(features[RiTa.PHONEMES] !== null);
rs.text("Dad & Mom"); // reset all original features, but not those set() by user
equal(features[RiTa.PHONEMES], null); // OK: has been reset
equal(rs.get("Id"), "1000"); // OK: has not been reset
});
// private tests, no need to extract results
test("test_syllabifyString", function () {
var test = "ao2-r-g-ah0-n-ah0-z-ey1-sh-ah0-n-z";
var expected = "ao2-r g-ah0 n-ah0 z-ey1 sh-ah0-n-z";
var result = RiString._syllabify(test);
deepEqual(result, expected);
var data = [
['d-eh1-n-l-ih0-n-jh-er0', 'd-eh1-n l-ih0-n jh-er0'],
['d-uw1-ah0-l', 'd-uw1 ah0-l'],
['d-ih2-s-ah0-l-aw1-d', 'd-ih2 s-ah0 l-aw1-d'],
['d-aa1-d-z', 'd-aa1-d-z'],
['d-r-ao1-l-z', 'd-r-ao1-l-z'],
['d-ay0-ae1-n-ah0', 'd-ay0 ae1 n-ah0'],
['ey1-t-f-ow2-l-d', 'ey1-t f-ow2-l-d'],
['eh1-m-t-iy0-d', 'eh1-m t-iy0-d'],
['ih0-r-ey1-s', 'ih0 r-ey1-s'],
['eh1-v-r-ah0-n', 'eh1-v r-ah0-n'],
['f-ae1-l-k', 'f-ae1-l-k'],
['f-eh1-n-w-ey2', 'f-eh1-n w-ey2'],
['f-ih1-sh-k-ih2-l', 'f-ih1-sh k-ih2-l'],
['f-ao1-r-b-ih0-d-ah0-n', 'f-ao1-r b-ih0 d-ah0-n'],
['f-r-eh1-n-t-s', 'f-r-eh1-n-t-s'],
['g-ae1-l-b-r-ey2-th', 'g-ae1-l b-r-ey2-th'],
['zh-ih0-l-eh1-t', 'zh-ih0 l-eh1-t'],
['jh-ih1-n-iy0', 'jh-ih1 n-iy0'],
['g-aa0-n-z-aa1-l-ah0-z', 'g-aa0-n z-aa1 l-ah0-z'],
['g-r-iy1-n-f-iy2-l-d', 'g-r-iy1-n f-iy2-l-d'],
['g-ih0-t-aa1-r-z', 'g-ih0 t-aa1-r-z'],
['hh-ae1-m-er0-ih0-ng', 'hh-ae1 m-er0 ih0-ng'],
['hh-ae1-t-ih0-n-d-ao0-r-f', 'hh-ae1 t-ih0-n d-ao0-r-f'],
['hh-eh1-m-ih0-ng-w-ey2', 'hh-eh1 m-ih0-ng w-ey2'],
['hh-ih1-ng-k-m-ah0-n', 'hh-ih1-ng-k m-ah0-n'],
['hh-ow1-n-eh0-k', 'hh-ow1 n-eh0-k'],
['hh-ah1-l-d', 'hh-ah1-l-d'],
['ih0-l-uw1-zh-ah0-n', 'ih0 l-uw1 zh-ah0-n'],
['ih0-n-f-ae2-ch-uw0-ey1-sh-ah0-n', 'ih0-n f-ae2 ch-uw0 ey1 sh-ah0-n'],
['ih0-n-t-er1-n-ah0-l-ay2-z', 'ih0-n t-er1 n-ah0 l-ay2-z'],
['ih0-z-ae1-n-s-k-iy0-z', 'ih0 z-ae1-n s-k-iy0-z'],
['jh-ow0-hh-ae1-n-ah0-s', 'jh-ow0 hh-ae1 n-ah0-s'],
['k-ae1-r-ah0-m', 'k-ae1 r-ah0-m'],
['k-aa1-k-iy0', 'k-aa1 k-iy0'],
['n-ey1-v', 'n-ey1-v']
];
for (var i = 0, l = data.length; i < l; i++) {
var res = RiString._syllabify(data[i][0]);
equal(res, data[i][1]);
}
});
/*test("test_stringify", function () { // now private
var data = [
[
[2],
[],
['ao'],
['r']
],
[
[0],
['g'],
['ah'],
[]
],
[
[0],
['n'],
['ah'],
[]
],
[
[1],
['z'],
['ey'],
[]
],
[
[0],
['sh'],
['ah'],
['n', 'z']
]
];
var out = "ao2-r g-ah0 n-ah0 z-ey1 sh-ah0-n-z";
equal(stringify(data), out);
});*/
test("test_syllabifyArray", function () {
var test = "ao2-r-g-ah0-n-ah0-z-ey1-sh-ah0-n-z".split('-');
var expected = "ao2-r g-ah0 n-ah0 z-ey1 sh-ah0-n-z";
var result = RiString._syllabify(test);
deepEqual(result, expected);
});
};
if (typeof exports != 'undefined') {
runtests();
}