コード例 #1
0
        private void TestUnary(UnaryOperationKind kind)
        {
            string text;

            if (Operation.IsPrefixOperation(kind))
            {
                text = Operation.GetText(kind) + "$a";
            }
            else
            {
                text = "$a" + Operation.GetText(kind);
            }

            var expr = NSScript.ParseExpression(text) as UnaryExpression;

            Assert.NotNull(expr);
            Assert.Equal(SyntaxNodeKind.UnaryExpression, expr.Kind);
            Assert.Equal(kind, expr.OperationKind);

            var operand = expr.Operand as Variable;

            Assert.NotNull(operand);
            Assert.Equal("$a", operand.Name.FullName);

            Assert.Equal(text, expr.ToString());
        }
コード例 #2
0
        public void TestSelectStatement()
        {
            string text = @"
select
{
case option1:{}
case option2:{}
case option3:{}
}";

            var selectStatement = NSScript.ParseStatement(text) as SelectStatement;

            Assert.NotNull(selectStatement);
            Assert.Equal(SyntaxNodeKind.SelectStatement, selectStatement.Kind);

            var body = selectStatement.Body;

            Assert.Equal(3, body.Statements.Length);
            var firstSection = body.Statements[0] as SelectSection;

            Assert.NotNull(firstSection);
            Assert.Equal(SyntaxNodeKind.SelectSection, firstSection.Kind);
            Assert.Equal("option1", firstSection.Label.FullName);
            Assert.NotNull(firstSection.Body);
        }
コード例 #3
0
        public void TestReturnStatement()
        {
            string text      = "return;";
            var    statement = NSScript.ParseStatement(text) as ReturnStatement;

            Assert.NotNull(statement);
            Assert.Equal(SyntaxNodeKind.ReturnStatement, statement.Kind);
        }
コード例 #4
0
        public void TestCallChapterStatement()
        {
            string text      = "call_chapter @->testchapter;";
            var    statement = NSScript.ParseStatement(text) as CallChapterStatement;

            Assert.NotNull(statement);
            Assert.Equal(SyntaxNodeKind.CallChapterStatement, statement.Kind);
            Assert.Equal("@->testchapter", statement.ChapterName.FullName);
        }
コード例 #5
0
        public void TestCallSceneStatement()
        {
            string text      = "call_scene @->testscene;";
            var    statement = NSScript.ParseStatement(text) as CallSceneStatement;

            Assert.NotNull(statement);
            Assert.Equal(SyntaxNodeKind.CallSceneStatement, statement.Kind);
            Assert.Equal("@->testscene", statement.SceneName.FullName);
        }
コード例 #6
0
        public void TestConstant()
        {
            string text     = "center";
            var    constant = NSScript.ParseExpression(text) as NamedConstant;

            Assert.NotNull(constant);
            Assert.Equal(SyntaxNodeKind.NamedConstant, constant.Kind);
            Assert.Equal(text, constant.Name.FullName);
            Assert.Equal(text, constant.ToString());
        }
コード例 #7
0
        public void TestVariableReference()
        {
            string text       = "SomeMethod($a);";
            var    invocation = NSScript.ParseExpression(text) as MethodCall;

            var arg = invocation.Arguments[0] as Variable;

            Assert.NotNull(arg);
            Assert.Equal(SyntaxNodeKind.Variable, arg.Kind);
        }
コード例 #8
0
        public void TestScene()
        {
            string text  = "scene TestScene{}";
            var    root  = NSScript.ParseScript(text);
            var    scene = root.Scenes.SingleOrDefault();

            Assert.NotNull(scene);
            Assert.Equal(SyntaxNodeKind.Scene, scene.Kind);
            Assert.Equal("TestScene", scene.Name.FullName);
        }
コード例 #9
0
        public void TestNumericLiteralExpression()
        {
            string literal = "42";
            var    expr    = NSScript.ParseExpression(literal) as Literal;

            Assert.NotNull(expr);
            Assert.Equal(SyntaxNodeKind.Literal, expr.Kind);
            Assert.Equal(literal, expr.Text);
            Assert.Equal(42, expr.Value.RawValue);
            Assert.Equal(literal, expr.ToString());
        }
コード例 #10
0
        public void TestVariableWithHashSigil()
        {
            string text     = "#testVar";
            var    variable = NSScript.ParseExpression(text) as Variable;

            Assert.NotNull(variable);
            Assert.Equal(SyntaxNodeKind.Variable, variable.Kind);
            Assert.Equal(text, variable.Name.FullName);
            Assert.Equal("testVar", variable.Name.SimplifiedName);
            Assert.Equal(SigilKind.Hash, variable.Name.Sigil);
            Assert.Equal(text, variable.ToString());
        }
コード例 #11
0
        public void TestEmptyDialogueBlock()
        {
            string text  = "<PRE box>[text000]</PRE>";
            var    block = NSScript.ParseDialogueBlock(text);

            Assert.Equal("box", block.BoxName);
            Assert.Equal(SyntaxNodeKind.DialogueBlock, block.Kind);
            Assert.Equal(0, block.Parts.Length);

            string toStringResult = Helpers.RemoveNewLineCharacters(block.ToString());

            Assert.Equal(text, toStringResult);
        }
コード例 #12
0
        public void TestChapter()
        {
            string text    = "chapter main{}";
            var    root    = NSScript.ParseScript(text);
            var    chapter = root.MainChapter;

            Assert.Equal(SyntaxNodeKind.Chapter, chapter.Kind);
            Assert.Equal("main", chapter.Name.FullName);

            string toStringResult = Helpers.RemoveNewLineCharacters(chapter.ToString());

            Assert.Equal(text, toStringResult);
        }
コード例 #13
0
        public void TestMethod()
        {
            string text   = "function Test(){}";
            var    root   = NSScript.ParseScript(text);
            var    method = root.Methods[0];

            Assert.Equal(SyntaxNodeKind.Method, method.Kind);
            Assert.Equal("Test", method.Name.FullName);
            Assert.Equal(0, method.Parameters.Length);

            string toStringResult = Helpers.RemoveNewLineCharacters(method.ToString());

            Assert.Equal(text, toStringResult);
        }
コード例 #14
0
        public void TestMethodCall()
        {
            string text = "WaitKey(10000);";
            var    call = NSScript.ParseExpression(text) as MethodCall;

            Assert.NotNull(call);
            Assert.Equal(SyntaxNodeKind.MethodCall, call.Kind);
            Assert.Equal("WaitKey", call.TargetMethodName.FullName);
            Assert.Equal(call.TargetMethodName.FullName, call.TargetMethodName.SimplifiedName);
            Assert.Equal(SigilKind.None, call.TargetMethodName.Sigil);
            Assert.Equal(1, call.Arguments.Length);

            Assert.Equal(text, call.ToString());
        }
コード例 #15
0
        public void TestWhileStatement()
        {
            string text           = "while (true){}";
            var    whileStatement = NSScript.ParseStatement(text) as WhileStatement;

            Assert.NotNull(whileStatement);
            Assert.Equal(SyntaxNodeKind.WhileStatement, whileStatement.Kind);
            Assert.NotNull(whileStatement.Condition);
            Assert.NotNull(whileStatement.Body);

            string toStringResult = Helpers.RemoveNewLineCharacters(whileStatement.ToString());

            Assert.Equal(text, toStringResult);
        }
コード例 #16
0
        public void TestIfStatementWithElseClause()
        {
            string text        = "if (#flag == true){}else{}";
            var    ifStatement = NSScript.ParseStatement(text) as IfStatement;

            Assert.NotNull(ifStatement);
            Assert.Equal(SyntaxNodeKind.IfStatement, ifStatement.Kind);
            Assert.NotNull(ifStatement.Condition);
            Assert.NotNull(ifStatement.IfTrueStatement);
            Assert.NotNull(ifStatement.IfFalseStatement);

            string toStringResult = Helpers.RemoveNewLineCharacters(ifStatement.ToString());

            Assert.Equal(text, toStringResult);
        }
コード例 #17
0
        private void TestAssignment(AssignmentOperationKind kind)
        {
            string text = "$a " + Operation.GetText(kind) + " 42";
            var    expr = NSScript.ParseExpression(text) as AssignmentExpression;

            Assert.NotNull(expr);
            Assert.Equal(SyntaxNodeKind.AssignmentExpression, expr.Kind);
            Assert.Equal(kind, expr.OperationKind);

            var target = expr.Target as Variable;

            Assert.NotNull(target);
            Assert.Equal("$a", target.Name.FullName);

            var value = expr.Value as Literal;

            Assert.NotNull(value);
            Assert.Equal(42, value.Value.RawValue);
        }
コード例 #18
0
        public void TestStringParameterReference()
        {
            string text   = "function Test(\"stringParam\") { SomeMethod(\"stringParam\"); }";
            var    root   = NSScript.ParseScript(text);
            var    method = root.Methods[0];

            var expressionStatement = method.Body.Statements[0] as ExpressionStatement;

            Assert.NotNull(expressionStatement);
            var invocation = expressionStatement.Expression as MethodCall;

            Assert.NotNull(invocation);
            var arg = invocation.Arguments[0] as ParameterReference;

            Assert.NotNull(arg);
            Assert.Equal(SyntaxNodeKind.Parameter, arg.Kind);
            Assert.Equal("\"stringParam\"", arg.ParameterName.FullName);
            Assert.Equal("stringParam", arg.ParameterName.SimplifiedName);
            Assert.Equal(SigilKind.None, arg.ParameterName.Sigil);
        }
コード例 #19
0
        private void TestStringParameterReferenceWithSigilImpl(string fullName, string simplifiedName, SigilKind sigil)
        {
            string text   = $"function Test({fullName}) {{ SomeMethod({fullName}); }}";
            var    root   = NSScript.ParseScript(text);
            var    method = root.Methods[0];

            var expressionStatement = method.Body.Statements[0] as ExpressionStatement;

            Assert.NotNull(expressionStatement);
            var invocation = expressionStatement.Expression as MethodCall;

            Assert.NotNull(invocation);
            var arg = invocation.Arguments[0] as ParameterReference;

            Assert.NotNull(arg);
            Assert.Equal(SyntaxNodeKind.Parameter, arg.Kind);
            Assert.Equal(fullName, arg.ParameterName.FullName);
            Assert.Equal(simplifiedName, arg.ParameterName.SimplifiedName);
            Assert.Equal(sigil, arg.ParameterName.Sigil);
        }
コード例 #20
0
        public void TestDialogueLine_OneSegment()
        {
            string text  = "<PRE box>[text000]This is a test.</PRE>";
            var    block = NSScript.ParseDialogueBlock(text);

            Assert.Equal("text000", block.Identifier);
            Assert.Equal("box", block.BoxName);
            Assert.Equal(SyntaxNodeKind.DialogueBlock, block.Kind);
            Assert.Equal(1, block.Parts.Length);

            var line = block.Parts[0] as DialogueLine;

            Assert.Equal(SyntaxNodeKind.DialogueLine, line.Kind);
            Assert.Equal(1, line.Segments.Length);

            var segment = line.Segments[0];

            Assert.Equal(SyntaxNodeKind.TextSegment, segment.Kind);
            Assert.Equal("This is a test.", segment.Text);
        }
コード例 #21
0
        public void TestMethodWithStringParameter()
        {
            string text   = "function Test(\"stringParam\"){}";
            var    root   = NSScript.ParseScript(text);
            var    method = root.Methods[0];

            Assert.Equal(SyntaxNodeKind.Method, method.Kind);
            Assert.Equal("Test", method.Name.FullName);

            Assert.Equal(1, method.Parameters.Length);
            var p = method.Parameters[0];

            Assert.Equal(SyntaxNodeKind.Parameter, p.Kind);
            Assert.Equal("\"stringParam\"", p.ParameterName.FullName);
            Assert.Equal("stringParam", p.ParameterName.SimplifiedName);
            Assert.Equal(SigilKind.None, p.ParameterName.Sigil);

            string toStringResult = Helpers.RemoveNewLineCharacters(method.ToString());

            Assert.Equal(text, toStringResult);
        }
コード例 #22
0
        private void TestMethodWithStringParameterWithSigilImpl(string fullName, string simplifiedName, SigilKind sigil)
        {
            string text   = $"function Test({fullName}){{}}";
            var    root   = NSScript.ParseScript(text);
            var    method = root.Methods[0];

            Assert.Equal(SyntaxNodeKind.Method, method.Kind);
            Assert.Equal("Test", method.Name.FullName);

            Assert.Equal(1, method.Parameters.Length);
            var p = method.Parameters[0];

            Assert.Equal(SyntaxNodeKind.Parameter, p.Kind);
            Assert.Equal(fullName, p.ParameterName.FullName);
            Assert.Equal(simplifiedName, p.ParameterName.SimplifiedName);
            Assert.Equal(sigil, p.ParameterName.Sigil);

            string toStringResult = Helpers.RemoveNewLineCharacters(method.ToString());

            Assert.Equal(text, toStringResult);
        }
コード例 #23
0
        private void TestBinary(BinaryOperationKind kind)
        {
            string text = "$a " + Operation.GetText(kind) + " $b";
            var    expr = NSScript.ParseExpression(text) as BinaryExpression;

            Assert.NotNull(expr);
            Assert.Equal(SyntaxNodeKind.BinaryExpression, expr.Kind);
            Assert.Equal(kind, expr.OperationKind);

            var left = expr.Left as Variable;

            Assert.NotNull(left);
            Assert.Equal("$a", left.Name.FullName);

            var right = expr.Right as Variable;

            Assert.NotNull(right);
            Assert.Equal("$b", right.Name.FullName);

            Assert.Equal(text, expr.ToString());
        }
コード例 #24
0
        private SyntaxToken LexToken(string text)
        {
            SyntaxToken result = null;

            foreach (var token in NSScript.ParseTokens(text))
            {
                if (result == null)
                {
                    result = token;
                }
                else if (token.Kind != SyntaxTokenKind.EndOfFileToken)
                {
                    Assert.True(false, "More than one token was lexed.");
                }
            }

            if (result == null)
            {
                Assert.True(false, "No tokens were lexed.");
            }

            return(result);
        }