/** 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 System.IO;
using NUnit.Framework;
namespace JavaScript.UnitTest
{
/// <summary>
/// Summary description for LexTest.
/// </summary>
[TestFixture]
public class LexTest
{
public LexTest()
{
}
[Test]
public void SimpleVar()
{
string src = "var x = 1;\n";
StringReader reader = new StringReader( src );
Yylex lex = new Yylex( reader );
Yytoken tok = lex.yylex();
Assert.AreEqual(JsToken.VAR, tok.m_token, "Expected var");
tok = lex.yylex();
Assert.AreEqual(JsToken.ID, tok.m_token, "Expected id");
Assert.AreEqual("x", tok.m_text, "Expected x");
tok = lex.yylex();
Assert.AreEqual(JsToken.ASSIGN, tok.m_token, "Expected =");
tok = lex.yylex();
Assert.AreEqual(JsToken.INT, tok.m_token, "Expected INT");
Assert.AreEqual("1", tok.m_text, "Expected 1");
tok = lex.yylex();
Assert.AreEqual(JsToken.SEMI, tok.m_token, "Expected ;");
tok = lex.yylex();
Assert.AreEqual(true, lex.EOF, "Expected EOF");
}
[Test]
public void SimpleFunction()
{
string src = "function plus(a, b) {\nreturn ( a + b );\n}\nprint( plus(1,1));\n";
StringReader reader = new StringReader( src );
Yylex lex = new Yylex( reader );
Yytoken tok = lex.yylex();
Assert.AreEqual(JsToken.FUNCTION, tok.m_token, "Expected function");
tok = lex.yylex();
Assert.AreEqual(JsToken.ID, tok.m_token, "Expected ID");
Assert.AreEqual("plus", tok.m_text, "Expected plus");
tok = lex.yylex();
Assert.AreEqual(JsToken.LPARA, tok.m_token, "Expected (");
tok = lex.yylex();
Assert.AreEqual(JsToken.ID, tok.m_token, "Expected ID");
Assert.AreEqual("a", tok.m_text, "Expected a");
tok = lex.yylex();
Assert.AreEqual(JsToken.COMMA, tok.m_token, "Expected ,");
tok = lex.yylex();
Assert.AreEqual(JsToken.ID, tok.m_token, "Expected ID");
Assert.AreEqual("b", tok.m_text, "Expected b");
tok = lex.yylex();
Assert.AreEqual(JsToken.RPARA, tok.m_token, "Expected )");
tok = lex.yylex();
Assert.AreEqual(JsToken.LBRACE, tok.m_token, "Expected {");
tok = lex.yylex();
Assert.AreEqual(JsToken.RETURN, tok.m_token, "Expected return");
tok = lex.yylex();
Assert.AreEqual(JsToken.LPARA, tok.m_token, "Expected (");
tok = lex.yylex();
Assert.AreEqual(JsToken.ID, tok.m_token, "Expected ID");
Assert.AreEqual("a", tok.m_text, "Expected a");
tok = lex.yylex();
Assert.AreEqual(JsToken.PLUS, tok.m_token, "Expected +");
tok = lex.yylex();
Assert.AreEqual(JsToken.ID, tok.m_token, "Expected ID");
Assert.AreEqual("b", tok.m_text, "Expected b");
tok = lex.yylex();
Assert.AreEqual(JsToken.RPARA, tok.m_token, "Expected )");
tok = lex.yylex();
Assert.AreEqual(JsToken.SEMI, tok.m_token, "Expected ;");
tok = lex.yylex();
Assert.AreEqual(JsToken.RBRACE, tok.m_token, "Expected }");
tok = lex.yylex();
Assert.AreEqual(JsToken.ID, tok.m_token, "Expected ID");
Assert.AreEqual("print", tok.m_text, "Expected print");
tok = lex.yylex();
Assert.AreEqual(JsToken.LPARA, tok.m_token, "Expected (");
tok = lex.yylex();
Assert.AreEqual(JsToken.ID, tok.m_token, "Expected ID");
Assert.AreEqual("plus", tok.m_text, "Expected plus");
tok = lex.yylex();
Assert.AreEqual(JsToken.LPARA, tok.m_token, "Expected (");
tok = lex.yylex();
Assert.AreEqual(JsToken.INT, tok.m_token, "Expected 1");
tok = lex.yylex();
Assert.AreEqual(JsToken.COMMA, tok.m_token, "Expected ,");
tok = lex.yylex();
Assert.AreEqual(JsToken.INT, tok.m_token, "Expected 1");
tok = lex.yylex();
Assert.AreEqual(JsToken.RPARA, tok.m_token, "Expected )");
tok = lex.yylex();
Assert.AreEqual(JsToken.RPARA, tok.m_token, "Expected )");
tok = lex.yylex();
Assert.AreEqual(JsToken.SEMI, tok.m_token, "Expected ;");
}
}
}