public void StaticFields()
        {
            String contents =
                "class MyClass \r\n" +
                "  @@myfield = 1 " +
                "  @@otherfield = 22 " +
                "end \r\n";

            CompilationUnitNode unit = RookParser.ParseContents(contents);

            Assert.IsNotNull(unit);
            Assert.AreEqual(0, unit.Namespaces.Count);
            Assert.AreEqual(1, unit.ClassesTypes.Count);

            ClassDefinitionStatement ClassDefinitionStatement = unit.ClassesTypes[0] as ClassDefinitionStatement;

            Assert.IsNotNull(ClassDefinitionStatement);
            Assert.AreEqual("MyClass", ClassDefinitionStatement.Name);
            Assert.AreEqual(0, ClassDefinitionStatement.BaseTypes.Count);
            Assert.AreEqual(2, ClassDefinitionStatement.Statements.Count);

            FieldDeclarationStatement stmt = ClassDefinitionStatement.Statements[0] as FieldDeclarationStatement;

            Assert.IsNotNull(stmt);
            Assert.AreEqual("@@myfield", (stmt.Target as StaticFieldReferenceExpression).Name);
            Assert.AreEqual("1", (stmt.Value as LiteralExpression).Value);

            stmt = ClassDefinitionStatement.Statements[1] as FieldDeclarationStatement;
            Assert.IsNotNull(stmt);
            Assert.AreEqual("@@otherfield", (stmt.Target as StaticFieldReferenceExpression).Name);
            Assert.AreEqual("22", (stmt.Value as LiteralExpression).Value);
        }
        public void MethodDefAndStatements()
        {
            String contents =
                "class MyClass \r\n" +
                "" +
                " def method1(x, y, z:int):int" +
                "     " +
                "   def method1(x, y, z:int):int  " +
                "   end  " +
                "   myvariable = 1  " +
                " end " +
                "" +
                "end \r\n";

            CompilationUnitNode unit = RookParser.ParseContents(contents);

            Assert.IsNotNull(unit);
            Assert.AreEqual(0, unit.Namespaces.Count);
            Assert.AreEqual(1, unit.ClassesTypes.Count);

            ClassDefinitionStatement ClassDefinitionStatement = unit.ClassesTypes[0] as ClassDefinitionStatement;

            Assert.IsNotNull(ClassDefinitionStatement);
            Assert.AreEqual("MyClass", ClassDefinitionStatement.Name);
            Assert.AreEqual(0, ClassDefinitionStatement.BaseTypes.Count);
        }
        public void NestedDeclarations()
        {
            String contents =
                "namespace My \r\n" +
                "  namespace Nested \r\n" +
                "    namespace Declaration \r\n" +
                "    end \r\n" +
                "  end \r\n" +
                "end \r\n";

            CompilationUnitNode unit = RookParser.ParseContents(contents);

            Assert.IsNotNull(unit);
            Assert.AreEqual(1, unit.Namespaces.Count);

            NamespaceNode ns = unit.Namespaces[0] as NamespaceNode;

            Assert.IsNotNull(ns);
            Assert.AreEqual("My", ns.Identifier.Name);
            Assert.AreEqual(1, ns.Namespaces.Count);

            ns = ns.Namespaces[0] as NamespaceNode;
            Assert.IsNotNull(ns);
            Assert.AreEqual("Nested", ns.Identifier.Name);
            Assert.AreEqual(1, ns.Namespaces.Count);

            ns = ns.Namespaces[0] as NamespaceNode;
            Assert.IsNotNull(ns);
            Assert.AreEqual("Declaration", ns.Identifier.Name);
            Assert.AreEqual(0, ns.Namespaces.Count);
        }
        public void MethodDefWithReturnType()
        {
            String contents =
                "class MyClass \r\n" +
                "" +
                " def self.method1() : int" +
                " end " +
                "" +
                "end \r\n";

            CompilationUnitNode unit = RookParser.ParseContents(contents);

            Assert.IsNotNull(unit);
            Assert.AreEqual(0, unit.Namespaces.Count);
            Assert.AreEqual(1, unit.ClassesTypes.Count);

            ClassDefinitionStatement ClassDefinitionStatement = unit.ClassesTypes[0] as ClassDefinitionStatement;

            Assert.IsNotNull(ClassDefinitionStatement);
            Assert.AreEqual("MyClass", ClassDefinitionStatement.Name);
            Assert.AreEqual(0, ClassDefinitionStatement.BaseTypes.Count);
            Assert.AreEqual(1, ClassDefinitionStatement.Statements.Count);

            MethodDefinitionStatement stmt = ClassDefinitionStatement.Statements[0] as MethodDefinitionStatement;

            Assert.IsNotNull(stmt);
        }
        public void Block()
        {
            String contents =
                "class MyClass \r\n" +
                "" +
                " def method1() : void" +
                "     " +
                "     do " +
                "       method(10, 12);  " +
                "     end " +
                "     " +
                " end " +
                "" +
                "end \r\n";

            CompilationUnitNode unit = RookParser.ParseContents(contents);

            Assert.IsNotNull(unit);
            Assert.AreEqual(0, unit.Namespaces.Count);
            Assert.AreEqual(1, unit.ClassesTypes.Count);

            ClassDefinitionStatement ClassDefinitionStatement = unit.ClassesTypes[0] as ClassDefinitionStatement;

            Assert.IsNotNull(ClassDefinitionStatement);
            Assert.AreEqual("MyClass", ClassDefinitionStatement.Name);
            Assert.AreEqual(0, ClassDefinitionStatement.BaseTypes.Count);
        }
        public void MethodDefAndStatements3()
        {
            String contents =
                "class MyClass \r\n" +
                "" +
                " def method1(x, y, z: int): System.Int32" +
                "     " +
                "     self.method2(10, 11)" +
                "     self.propertyx.save(100)" +
                "     self(100)" +
                "     " +
                " end " +
                "" +
                "end \r\n";

            CompilationUnitNode unit = RookParser.ParseContents(contents);

            Assert.IsNotNull(unit);
            Assert.AreEqual(0, unit.Namespaces.Count);
            Assert.AreEqual(1, unit.ClassesTypes.Count);

            ClassDefinitionStatement ClassDefinitionStatement = unit.ClassesTypes[0] as ClassDefinitionStatement;

            Assert.IsNotNull(ClassDefinitionStatement);
            Assert.AreEqual("MyClass", ClassDefinitionStatement.Name);
            Assert.AreEqual(0, ClassDefinitionStatement.BaseTypes.Count);
        }
Exemplo n.º 7
0
        public override void Process(CompilationContext context)
        {
            foreach (TextReader reader in context.Sources)
            {
                CompilationUnitNode unit = RookParser.ParseContents(reader);

                context["unit"] = unit;

                ProcessNext(context);
            }
        }
        public void SimpleDeclaration2()
        {
            String contents = "namespace My.qualified.name \r\n" +
                              "end \r\n";

            CompilationUnitNode unit = RookParser.ParseContents(contents);

            Assert.IsNotNull(unit);
            Assert.AreEqual(1, unit.Namespaces.Count);

            NamespaceNode ns = unit.Namespaces[0] as NamespaceNode;

            Assert.IsNotNull(ns);
            Assert.AreEqual("My.qualified.name", ns.Identifier.Name);
        }
        public void AssignmentsAndAccessLevels()
        {
            String contents =
                "class MyClass \r\n" +
                "private \r\n" +
                "  @@myfield = 1 \r\n" +
                "public \r\n" +
                "  @@otherfield = 2 \r\n" +
                "  @@someother = 3 \r\n" +
                "end \r\n";

            CompilationUnitNode unit = RookParser.ParseContents(contents);

            Assert.IsNotNull(unit);
            Assert.AreEqual(0, unit.Namespaces.Count);
            Assert.AreEqual(1, unit.ClassesTypes.Count);

            ClassDefinitionStatement ClassDefinitionStatement = unit.ClassesTypes[0] as ClassDefinitionStatement;

            Assert.IsNotNull(ClassDefinitionStatement);
            Assert.AreEqual("MyClass", ClassDefinitionStatement.Name);
            Assert.AreEqual(0, ClassDefinitionStatement.BaseTypes.Count);
            Assert.AreEqual(3, ClassDefinitionStatement.Statements.Count);

            FieldDeclarationStatement stmt = ClassDefinitionStatement.Statements[0] as FieldDeclarationStatement;

            Assert.IsNotNull(stmt);
            Assert.AreEqual(AccessLevel.Private, stmt.ScopeAccessLevel);
            Assert.AreEqual("@@myfield", (stmt.Target as StaticFieldReferenceExpression).Name);
            Assert.AreEqual("1", (stmt.Value as LiteralExpression).Value);

            stmt = ClassDefinitionStatement.Statements[1] as FieldDeclarationStatement;
            Assert.IsNotNull(stmt);
            Assert.AreEqual(AccessLevel.Public, stmt.ScopeAccessLevel);
            Assert.AreEqual("@@otherfield", (stmt.Target as StaticFieldReferenceExpression).Name);
            Assert.AreEqual("2", (stmt.Value as LiteralExpression).Value);

            stmt = ClassDefinitionStatement.Statements[2] as FieldDeclarationStatement;
            Assert.IsNotNull(stmt);
            Assert.AreEqual(AccessLevel.Public, stmt.ScopeAccessLevel);
            Assert.AreEqual("@@someother", (stmt.Target as StaticFieldReferenceExpression).Name);
            Assert.AreEqual("3", (stmt.Value as LiteralExpression).Value);
        }
        public void SimpleDeclaration()
        {
            String contents =
                "class MyClass \r\n" +
                "" +
                "" +
                "end \r\n";

            CompilationUnitNode unit = RookParser.ParseContents(contents);

            Assert.IsNotNull(unit);
            Assert.AreEqual(0, unit.Namespaces.Count);
            Assert.AreEqual(1, unit.ClassesTypes.Count);

            ClassDefinitionStatement ClassDefinitionStatement = unit.ClassesTypes[0] as ClassDefinitionStatement;

            Assert.IsNotNull(ClassDefinitionStatement);
            Assert.AreEqual("MyClass", ClassDefinitionStatement.Name);
            Assert.AreEqual(0, ClassDefinitionStatement.BaseTypes.Count);
        }
        public void AssignmentsAndMethods()
        {
            String contents =
                "class MyClass \r\n" +
                "private \r\n" +
                "  @@myfield = 1 \r\n" +
                "   \r\n" +
                "  def method1() \r\n" +
                "  end \r\n" +
                "   \r\n" +
                "  def self.method2() \r\n" +
                "  end \r\n" +
                "end \r\n";

            CompilationUnitNode unit = RookParser.ParseContents(contents);

            Assert.IsNotNull(unit);
            Assert.AreEqual(0, unit.Namespaces.Count);
            Assert.AreEqual(1, unit.ClassesTypes.Count);

            ClassDefinitionStatement ClassDefinitionStatement = unit.ClassesTypes[0] as ClassDefinitionStatement;

            Assert.IsNotNull(ClassDefinitionStatement);
            Assert.AreEqual("MyClass", ClassDefinitionStatement.Name);
            Assert.AreEqual(0, ClassDefinitionStatement.BaseTypes.Count);
            Assert.AreEqual(3, ClassDefinitionStatement.Statements.Count);

            FieldDeclarationStatement assignStmt  = ClassDefinitionStatement.Statements[0] as FieldDeclarationStatement;
            MethodDefinitionStatement method1Stmt = ClassDefinitionStatement.Statements[1] as MethodDefinitionStatement;
            MethodDefinitionStatement method2Stmt = ClassDefinitionStatement.Statements[2] as MethodDefinitionStatement;

            Assert.IsNotNull(assignStmt);
            Assert.IsNotNull(method1Stmt);
            Assert.IsNotNull(method2Stmt);

            Assert.AreEqual("method1", method1Stmt.Name);
            Assert.AreEqual("method2", method2Stmt.Name);
            Assert.AreEqual("self", method2Stmt.BoundTo);
        }
        public void MethodInvocationsOnClassBody()
        {
            String contents =
                "class MyClass \r\n" +
                "  attr_accessor (:name) \r\n" +
                "end \r\n";

            CompilationUnitNode unit = RookParser.ParseContents(contents);

            Assert.IsNotNull(unit);
            Assert.AreEqual(0, unit.Namespaces.Count);
            Assert.AreEqual(1, unit.ClassesTypes.Count);

            ClassDefinitionStatement ClassDefinitionStatement = unit.ClassesTypes[0] as ClassDefinitionStatement;

            Assert.IsNotNull(ClassDefinitionStatement);
            Assert.AreEqual("MyClass", ClassDefinitionStatement.Name);
            Assert.AreEqual(0, ClassDefinitionStatement.BaseTypes.Count);
            Assert.AreEqual(1, ClassDefinitionStatement.Statements.Count);

            ExpressionStatement stmt = ClassDefinitionStatement.Statements[0] as ExpressionStatement;

            Assert.IsNotNull(stmt);
            Assert.IsNotNull(stmt.Expression);

            MethodInvokeExpression minv = stmt.Expression as MethodInvokeExpression;

            Assert.IsNotNull(minv);
            Assert.IsNotNull(minv.Target);
            Assert.IsNotNull(minv.Arguments);
            Assert.AreEqual(1, minv.Arguments.Count);
            Assert.AreEqual("attr_accessor", (minv.Target as IdentifierReferenceExpression).Name);

            SymbolExpression se = minv.Arguments[0] as SymbolExpression;

            Assert.IsNotNull(se);
            Assert.AreEqual(":name", se.Name);
        }
        public void SimpleDeclarationWithExtends2()
        {
            String contents =
                "class MyClass < MyBaseType, IList, Collections.IBindable \r\n" +
                "" +
                "" +
                "end \r\n";

            CompilationUnitNode unit = RookParser.ParseContents(contents);

            Assert.IsNotNull(unit);
            Assert.AreEqual(0, unit.Namespaces.Count);
            Assert.AreEqual(1, unit.ClassesTypes.Count);

            ClassDefinitionStatement ClassDefinitionStatement = unit.ClassesTypes[0] as ClassDefinitionStatement;

            Assert.IsNotNull(ClassDefinitionStatement);
            Assert.AreEqual("MyClass", ClassDefinitionStatement.Name);
            Assert.AreEqual(3, ClassDefinitionStatement.BaseTypes.Count);
            Assert.AreEqual("MyBaseType", (ClassDefinitionStatement.BaseTypes[0] as Identifier).Name);
            Assert.AreEqual("IList", (ClassDefinitionStatement.BaseTypes[1] as Identifier).Name);
            Assert.AreEqual("Collections.IBindable", (ClassDefinitionStatement.BaseTypes[2] as Identifier).Name);
        }
        public void MixinTypes()
        {
            String contents =
                "namespace My \r\n" +
                "  mixin MyMixin \r\n" +
                "  end \r\n" +
                "  class MyClass \r\n" +
                "  end \r\n" +
                "end \r\n";

            CompilationUnitNode unit = RookParser.ParseContents(contents);

            Assert.IsNotNull(unit);
            Assert.AreEqual(1, unit.Namespaces.Count);

            NamespaceNode ns = unit.Namespaces[0] as NamespaceNode;

            Assert.IsNotNull(ns);
            Assert.AreEqual("My", ns.Identifier.Name);
            Assert.AreEqual(0, ns.Namespaces.Count);
            Assert.AreEqual(1, ns.MixinTypes.Count);
            Assert.AreEqual(1, ns.ClassesTypes.Count);
        }