mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2025-10-15 19:54:57 +08:00

--HG-- branch : dev rename : src/Orchard.Web/Modules/Orchard.Widgets/SimpleScripting/AbstractSyntaxTree.cs => src/Orchard.Web/Modules/Orchard.Widgets/SimpleScripting/Ast/AbstractSyntaxTree.cs rename : src/Orchard.Web/Modules/Orchard.Widgets/SimpleScripting/AstNode.cs => src/Orchard.Web/Modules/Orchard.Widgets/SimpleScripting/Ast/AstNode.cs rename : src/Orchard.Web/Modules/Orchard.Widgets/SimpleScripting/BinaryAstNode.cs => src/Orchard.Web/Modules/Orchard.Widgets/SimpleScripting/Ast/BinaryAstNode.cs rename : src/Orchard.Web/Modules/Orchard.Widgets/SimpleScripting/ConstantAstNode.cs => src/Orchard.Web/Modules/Orchard.Widgets/SimpleScripting/Ast/ConstantAstNode.cs rename : src/Orchard.Web/Modules/Orchard.Widgets/SimpleScripting/ErrorAstNode.cs => src/Orchard.Web/Modules/Orchard.Widgets/SimpleScripting/Ast/ErrorAstNode.cs rename : src/Orchard.Web/Modules/Orchard.Widgets/SimpleScripting/IAstNodeWithToken.cs => src/Orchard.Web/Modules/Orchard.Widgets/SimpleScripting/Ast/IAstNodeWithToken.cs rename : src/Orchard.Web/Modules/Orchard.Widgets/SimpleScripting/UnaryAstNode.cs => src/Orchard.Web/Modules/Orchard.Widgets/SimpleScripting/Ast/UnaryAstNode.cs rename : src/Orchard.Web/Modules/Orchard.Widgets/SimpleScripting/Lexer.cs => src/Orchard.Web/Modules/Orchard.Widgets/SimpleScripting/Compiler/Lexer.cs rename : src/Orchard.Web/Modules/Orchard.Widgets/SimpleScripting/Parser.cs => src/Orchard.Web/Modules/Orchard.Widgets/SimpleScripting/Compiler/Parser.cs rename : src/Orchard.Web/Modules/Orchard.Widgets/SimpleScripting/Terminal.cs => src/Orchard.Web/Modules/Orchard.Widgets/SimpleScripting/Compiler/Token.cs rename : src/Orchard.Web/Modules/Orchard.Widgets/SimpleScripting/TerminalKind.cs => src/Orchard.Web/Modules/Orchard.Widgets/SimpleScripting/Compiler/TokenKind.cs rename : src/Orchard.Web/Modules/Orchard.Widgets/SimpleScripting/Tokenizer.cs => src/Orchard.Web/Modules/Orchard.Widgets/SimpleScripting/Compiler/Tokenizer.cs
78 lines
3.3 KiB
C#
78 lines
3.3 KiB
C#
using NUnit.Framework;
|
|
using Orchard.Widgets.SimpleScripting;
|
|
using Orchard.Widgets.SimpleScripting.Compiler;
|
|
|
|
namespace Orchard.Tests.Modules.SimpleScriptingTests {
|
|
[TestFixture]
|
|
public class TokenizerTests {
|
|
|
|
[Test]
|
|
public void LexerShouldProcessSingleQuotedStringLiteral() {
|
|
TestStringLiteral(@"'toto'", @"toto", TokenKind.SingleQuotedStringLiteral);
|
|
TestStringLiteral(@"'to\'to'", @"to'to", TokenKind.SingleQuotedStringLiteral);
|
|
TestStringLiteral(@"'to\\to'", @"to\to", TokenKind.SingleQuotedStringLiteral);
|
|
TestStringLiteral(@"'to\ato'", @"to\ato", TokenKind.SingleQuotedStringLiteral);
|
|
}
|
|
|
|
[Test]
|
|
public void LexerShouldProcessStringLiteral() {
|
|
TestStringLiteral(@"""toto""", @"toto", TokenKind.StringLiteral);
|
|
TestStringLiteral(@"""to\'to""", @"to'to", TokenKind.StringLiteral);
|
|
TestStringLiteral(@"""to\\to""", @"to\to", TokenKind.StringLiteral);
|
|
TestStringLiteral(@"""to\ato""", @"toato", TokenKind.StringLiteral);
|
|
}
|
|
|
|
private void TestStringLiteral(string value, string expected, TokenKind expectedTokenKind) {
|
|
var lexer = new Tokenizer(value);
|
|
var token1 = lexer.NextToken();
|
|
Assert.That(token1.Kind, Is.EqualTo(expectedTokenKind));
|
|
Assert.That(token1.Value, Is.EqualTo(expected));
|
|
|
|
var token2 = lexer.NextToken();
|
|
Assert.That(token2.Kind, Is.EqualTo(TokenKind.Eof));
|
|
}
|
|
|
|
[Test]
|
|
public void LexerShouldProcessReservedWords() {
|
|
TestReservedWord("true", true, TokenKind.True);
|
|
TestReservedWord("false", false, TokenKind.False);
|
|
TestReservedWord("not", null, TokenKind.Not);
|
|
TestReservedWord("and", null, TokenKind.And);
|
|
TestReservedWord("or", null, TokenKind.Or);
|
|
}
|
|
|
|
private void TestReservedWord(string expression, object value, TokenKind expectedTokenKind) {
|
|
var lexer = new Tokenizer(expression);
|
|
var token1 = lexer.NextToken();
|
|
Assert.That(token1.Kind, Is.EqualTo(expectedTokenKind));
|
|
Assert.That(token1.Value, Is.EqualTo(value));
|
|
|
|
var token2 = lexer.NextToken();
|
|
Assert.That(token2.Kind, Is.EqualTo(TokenKind.Eof));
|
|
}
|
|
|
|
[Test]
|
|
public void LexerShouldProcesSequenceOfTokens() {
|
|
CheckTokenSequence("true false", TokenKind.True, TokenKind.False);
|
|
CheckTokenSequence("true toto false", TokenKind.True, TokenKind.Identifier, TokenKind.False);
|
|
}
|
|
|
|
[Test]
|
|
public void LexerShouldProcesSequenceOfTokens2() {
|
|
CheckTokenSequence("1+2*3", TokenKind.Integer, TokenKind.Plus, TokenKind.Integer, TokenKind.Mul, TokenKind.Integer);
|
|
}
|
|
|
|
|
|
private void CheckTokenSequence(string expression, params TokenKind[] tokenKinds) {
|
|
var lexer = new Tokenizer(expression);
|
|
foreach (var kind in tokenKinds) {
|
|
var token = lexer.NextToken();
|
|
Assert.That(token.Kind, Is.EqualTo(kind));
|
|
}
|
|
|
|
var token2 = lexer.NextToken();
|
|
Assert.That(token2.Kind, Is.EqualTo(TokenKind.Eof));
|
|
}
|
|
}
|
|
}
|