package org.rubypeople.rdt.internal.core.util; import junit.framework.TestCase; import org.jruby.ast.Node; import org.rubypeople.rdt.internal.core.parser.ClosestNodeLocator; import org.rubypeople.rdt.internal.core.parser.RubyParser; public class ASTUtilTest extends TestCase { public void testNamespace() { RubyParser parser = new RubyParser(); String src = "module M1; def m1_method; end; end\n" + "module M2; def m2_method; end; end\n" + "module M3\n" + " class Chris\n" + " include M1\n" + " include M2\n" + " def c_method\n" + " end\n" + " end\n" + "end\n" + "\n" + "ob = M3::Chris.new\n" + "ob"; Node root = parser.parse(src).getAST(); assertEquals("M3", ASTUtil.getNamespace(root, 82)); //_c_lass Chris assertEquals("M3", ASTUtil.getNamespace(root, 92)); // Chri_s_ assertEquals("M3::Chris", ASTUtil.getNamespace(root, 93)); // end of line for "class Chris" assertEquals("M3::Chris", ASTUtil.getNamespace(root, 94)); // beginning of line after "class Chris" } public void testFullyQualifiedTypename() { RubyParser parser = new RubyParser(); String src = "module M1; def m1_method; end; end\n" + "module M2; def m2_method; end; end\n" + "module M3\n" + " class Chris\n" + " include M1\n" + " include M2\n" + " def c_method\n" + " end\n" + " end\n" + "end\n" + "\n" + "ob = M3::Chris.new\n" + "ob"; Node root = parser.parse(src).getAST(); assertEquals("M3::Chris", ASTUtil.getFullyQualifiedTypeName(root, new ClosestNodeLocator().getClosestNodeAtOffset(root, 92))); // Chri_s_ } public void testFullyQualifiedTypenameOfTypeAtOffsetZero() { RubyParser parser = new RubyParser(); String src = "class MyClass; end"; Node root = parser.parse(src).getAST(); assertEquals("MyClass", ASTUtil.getFullyQualifiedTypeName(root, new ClosestNodeLocator().getClosestNodeAtOffset(root, 0))); } }