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