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); }
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); }