/** JavaScript -- DOT NET Javascript Library
* Copyright (C) 2005 John Garrison
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
using System;
using NUnit.Framework;
namespace JavaScript.UnitTest
{
[TestFixture]
public class StringTest
{
public StringTest()
{
}
[Test]
public void Assign()
{
JsEngine eng = new JsEngine();
eng.Eval( "var str = \"\";" );
Assert.AreEqual("", eng.Eval("str;").ToString(), "var str = '';");
Assert.AreEqual("0", eng.Eval("str.length;").ToString(), "str.length");
eng.Eval( "var str2 = str;" );
Assert.AreEqual("", eng.Eval("str2;").ToString(), "var str2 = str;");
Assert.AreEqual("0", eng.Eval("str2.length;").ToString(), "str2.length");
eng.Eval( "str = \"test1\";" );
Assert.AreEqual("test1", eng.Eval("str;").ToString(), "str = 'test1';");
Assert.AreEqual("5", eng.Eval("str.length;").ToString(), "str.length");
Assert.AreEqual("", eng.Eval("str2;").ToString(), "str = 'test1';");
Assert.AreEqual("0", eng.Eval("str2.length;").ToString(), "str2.length");
}
[Test]
public void Concat()
{
JsEngine eng = new JsEngine();
eng.Eval( "var str ='hi' + 'there';" );
Assert.AreEqual("hithere", eng.Eval("str;").ToString(), "var str ='hi' + 'there';");
Assert.AreEqual("7", eng.Eval("str.length;").ToString(), "str.length");
eng.Eval( "var str2 = str + ' buba';" );
Assert.AreEqual("hithere buba", eng.Eval("str2;").ToString(), "var str2 = str + ' buba';");
eng.Eval( "var str3 = str2 + str;" );
Assert.AreEqual("hithere bubahithere", eng.Eval("str3;").ToString(), "var str3 = str2 + str;");
eng.Eval( "str3 = str2 + str;" );
Assert.AreEqual("hithere bubahithere", eng.Eval("str3;").ToString(), "str3 = str2 + str;");
}
[Test]
public void PlusEqual()
{
JsEngine eng = new JsEngine();
eng.Eval( "var str ='hi';" );
eng.Eval( "str += 'there';" );
Assert.AreEqual("hithere", eng.Eval("str;").ToString(), "+=");
}
[Test]
public void Substr_ing()
{
JsEngine eng = new JsEngine();
eng.Eval( "var str ='Now is the time for all good men to get laid.';" );
Assert.AreEqual("Now", eng.Eval("str.substring(0, 3);").ToString(), "substr()");
Assert.AreEqual("No", eng.Eval("str.substr(0, 2);").ToString(), "substr()");
Assert.AreEqual("is", eng.Eval("str.substring(4, 6);").ToString(), "substr()");
Assert.AreEqual("is th", eng.Eval("str.substr(4, 5);").ToString(), "substr()");
}
[Test]
public void CharAt()
{
JsEngine eng = new JsEngine();
eng.Eval( "var str ='Now is the time for all good men to get laid.';" );
Assert.AreEqual("N", eng.Eval("str.charAt(0);").ToString(), "charAt()");
Assert.AreEqual("o", eng.Eval("str.charAt(1);").ToString(), "charAt()");
Assert.AreEqual("w", eng.Eval("str.charAt(2);").ToString(), "charAt()");
Assert.AreEqual(" ", eng.Eval("str.charAt(3);").ToString(), "charAt()");
Assert.AreEqual("78", eng.Eval("str.charCodeAt(0);").ToString(), "charCodeAt()");
Assert.AreEqual("111", eng.Eval("str.charCodeAt(1);").ToString(), "charCodeAt()");
Assert.AreEqual("o", eng.Eval("String.fromCharCode(111);").ToString(), "String.fromCharCode()");
}
[Test]
public void IndexOf()
{
JsEngine eng = new JsEngine();
string innerstr = "Now is the time for all good men to get time.";
string src = "var str ='" + innerstr + "';";
eng.Eval( src );
Assert.AreEqual(innerstr.IndexOf("time").ToString(), eng.Eval("str.indexOf('time');").ToString(), "indexOf()");
Assert.AreEqual(innerstr.IndexOf("time", 15).ToString(), eng.Eval("str.indexOf('time', 15);").ToString(), "indexOf()");
Assert.AreEqual(innerstr.LastIndexOf("time").ToString(), eng.Eval("str.lastIndexOf('time');").ToString(), "lastIndexOf()");
Assert.AreEqual(innerstr.LastIndexOf("time", 20).ToString(), eng.Eval("str.lastIndexOf('time', 20);").ToString(), "lastIndexOf()");
}
[Test]
public void Replace()
{
string src = "var str = 'the time has come';";
JsEngine eng = new JsEngine();
eng.Eval( src );
Assert.AreEqual("the fobin has come", eng.Eval("str.replace('time','fobin');").ToString(), "Replace()");
}
[Test]
public void Split()
{
string src = "var str = 'the time has come';";
JsEngine eng = new JsEngine();
eng.Eval( src );
eng.Eval( "var ar = str.split(' ');");
Assert.AreEqual("4", eng.Eval("ar.length;").ToString(), "Split()");
Assert.AreEqual("time", eng.Eval("ar['1'];").ToString(), "Split()");
Assert.AreEqual("time", eng.Eval("ar[1];").ToString(), "Split()");
}
[Test]
public void Case()
{
string src = "var str = 'tHe timE Has come';";
JsEngine eng = new JsEngine();
eng.Eval( src );
Assert.AreEqual("THE TIME HAS COME", eng.Eval("str.toUpperCase();").ToString(), "toUpper()");
Assert.AreEqual("the time has come", eng.Eval("str.toLowerCase();").ToString(), "toLower()");
}
[Test]
public void ElfTrimSpaces()
{
string src = "function trimSpaces(strValue) {" +
" var intLen = 0;" +
" var intCtr = 0;" +
" var intFirstIndex = 0;" +
" var intLastIndex = 0; " +
" strValue += \"\";" +
" intLen = strValue.length;" +
" if (intLen == 0) { return \"\"; }" +
" for (intCtr = 0;intCtr < intLen;intCtr++) {" +
" if (strValue.charAt(intCtr) != \" \") { intFirstIndex = intCtr; break;}" +
" }" +
" for (intCtr = intLen - 1;intCtr > -1;intCtr--) {" +
" if (strValue.charAt(intCtr) != \" \") { intLastIndex = intCtr; break;}" +
" }" +
" return strValue.substring(intFirstIndex,intLastIndex + 1);" +
"}";
JsEngine eng = new JsEngine();
eng.Eval(src);
Assert.AreEqual("abc", eng.Eval("trimSpaces(' abc ');").ToString(), "charAt()");
}
[Test]
public void EscapeSequences()
{
JsEngine eng = new JsEngine();
Assert.AreEqual("\\", eng.Eval("var x = '\\\\'; x;").ToString(), "\\\\");
Assert.AreEqual("\0", eng.Eval("var x = '\\0'; x;").ToString(), "\\0");
Assert.AreEqual("\b", eng.Eval("var x = '\\b'; x;").ToString(), "\\b");
Assert.AreEqual("\f", eng.Eval("var x = '\\f'; x;").ToString(), "\\f");
Assert.AreEqual("\n", eng.Eval("var x = '\\n'; x;").ToString(), "\\n");
Assert.AreEqual("\r", eng.Eval("var x = '\\r'; x;").ToString(), "\\r");
Assert.AreEqual("\t", eng.Eval("var x = '\\t'; x;").ToString(), "\\t");
Assert.AreEqual("\v", eng.Eval("var x = '\\v'; x;").ToString(), "\\v");
Assert.AreEqual("\"", eng.Eval("var x = '\\\"'; x;").ToString(), "\\\"");
Assert.AreEqual("'", eng.Eval("var x = '\\''; x;").ToString(), "\\'");
}
//[Test]
//public void UnicodeEscSequences()
//{
// JsEngine eng = new JsEngine();
// Assert.AreEqual("\\", eng.Eval("var x = '\\u005C'; x;").ToString(), "\\u005C");
// Assert.AreEqual("\0", eng.Eval("var x = '\\u0000'; x;").ToString(), "\\u0000");
// Assert.AreEqual("\b", eng.Eval("var x = '\\u0008'; x;").ToString(), "\\u0008");
// Assert.AreEqual("\f", eng.Eval("var x = '\\u000C'; x;").ToString(), "\\u000C");
// Assert.AreEqual("\n", eng.Eval("var x = '\\u000A'; x;").ToString(), "\\u000A");
// Assert.AreEqual("\r", eng.Eval("var x = '\\u000D'; x;").ToString(), "\\u000D");
// Assert.AreEqual("\t", eng.Eval("var x = '\\u0009'; x;").ToString(), "\\u0009");
// Assert.AreEqual("\v", eng.Eval("var x = '\\u000B'; x;").ToString(), "\\u000B");
//}
[Test]
public void NullHandling()
{
//JsEngine eng = new JsEngine();
//Assert.AreEqual("7", eng.Eval("'abc\0def'.length;").ToString(), "'abc\0def'.length;");
//Assert.AreEqual("True", eng.Eval("'abc\0def' != 'abc\0xyz';").ToString(), "'abc\0def' != 'abc\0xyz';");
}
[Test]
public void EscapeUnescape()
{
JsEngine eng = new JsEngine();
Assert.AreEqual("that%27s%20all.", eng.Eval("escape(\"that's all.\");").ToString(), "escape(\"that's all.\");");
Assert.AreEqual("that's all.", eng.Eval("unescape(\"that%27s%20all.\");").ToString(), "unescape(\"that%27s%20all.\");");
}
}
}