package bluej.parser;
import java.util.List;
import bluej.JavaFXThreadingRule;
import bluej.editor.moe.ScopeColors;
import bluej.editor.moe.MoeSyntaxDocument;
import bluej.parser.entity.ClassLoaderResolver;
import bluej.parser.entity.EntityResolver;
import bluej.parser.entity.JavaEntity;
import bluej.parser.entity.PackageResolver;
import bluej.parser.entity.TypeEntity;
import bluej.parser.entity.ValueEntity;
import bluej.parser.nodes.NodeTree.NodeAndPosition;
import bluej.parser.nodes.ParsedCUNode;
import bluej.parser.nodes.ParsedNode;
import bluej.parser.nodes.ParsedTypeNode;
import bluej.parser.nodes.TypeInnerNode;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Rule;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
public class IncrementalParseTest
{
@Rule
public JavaFXThreadingRule javafxRule = new JavaFXThreadingRule();
@BeforeClass
public static void initConfig()
{
InitConfig.init();
}
private TestEntityResolver resolver;
@Before
public void setUp() throws Exception
{
resolver = new TestEntityResolver(new ClassLoaderResolver(this.getClass().getClassLoader()));
}
| Generate a compilation unit node based on some source code.
|
private MoeSyntaxDocument docForSource(String sourceCode, String pkg)
{
EntityResolver resolver = new PackageResolver(this.resolver, pkg);
MoeSyntaxDocument document = new MoeSyntaxDocument(resolver, ScopeColors.dummy());
document.enableParser(true);
document.insertString(0, sourceCode);
return document;
}
@Test
public void test1() throws Exception
{
String aSrc = "class A {\n" +
" void method() {\n" +
" }\n" +
"}\n";
MoeSyntaxDocument aDoc = docForSource(aSrc, "");
ParsedCUNode aNode = aDoc.getParser();
NodeAndPosition<ParsedNode> nap = aNode.findNodeAt(0, 0);
assertNotNull(nap);
assertEquals(0, nap.getPosition());
assertEquals(33, nap.getSize());
aDoc.remove(8, 1);
aDoc.flushReparseQueue();
aDoc.insertString(8, "{");
aDoc.flushReparseQueue();
nap = aNode.findNodeAt(0, 0);
assertNotNull(nap);
assertEquals(0, nap.getPosition());
assertEquals(33, nap.getSize());
}
@Test
public void test2() throws Exception
{
String aSrc = "class A {\n" +
" void method() {\n" +
" }\n" +
"}\n";
MoeSyntaxDocument aDoc = docForSource(aSrc, "");
ParsedCUNode aNode = aDoc.getParser();
NodeAndPosition<ParsedNode> nap = aNode.findNodeAt(0, 0);
assertNotNull(nap);
assertEquals(0, nap.getPosition());
assertEquals(33, nap.getSize());
aDoc.insertString(8, "impl");
aDoc.flushReparseQueue();
aDoc.insertString(12, "ements ");
aDoc.flushReparseQueue();
aDoc.insertString(19, "Runnable ");
aDoc.flushReparseQueue();
nap = aNode.findNodeAt(0, 0);
assertNotNull(nap);
assertEquals(0, nap.getPosition());
assertEquals(53, nap.getSize());
}
@Test
public void test3() throws Exception
{
String aSrc = "class A {\n" +
"}\n";
MoeSyntaxDocument aDoc = docForSource(aSrc, "");
ParsedCUNode aNode = aDoc.getParser();
NodeAndPosition<ParsedNode> nap = aNode.findNodeAt(0, 0);
assertNotNull(nap);
assertEquals(0, nap.getPosition());
assertEquals(11, nap.getSize());
aDoc.insertString(10, "\n");
aDoc.flushReparseQueue();
aDoc.remove(10, 1);
aDoc.flushReparseQueue();
nap = aNode.findNodeAt(0, 0);
assertNotNull(nap);
assertEquals(0, nap.getPosition());
assertEquals(11, nap.getSize());
}
@Test
public void test4() throws Exception
{
String aSrc = "class A {\n" +
" public void someFunc() {\n" +
" if (true) {\n" +
" }\n" +
" \n" +
" }\n" +
"}\n";
MoeSyntaxDocument aDoc = docForSource(aSrc, "");
ParsedCUNode aNode = aDoc.getParser();
NodeAndPosition<ParsedNode> nap = aNode.findNodeAt(0, 0);
assertNotNull(nap);
assertEquals(0, nap.getPosition());
assertEquals(67, nap.getSize());
aDoc.insertString(59, " else { }\n");
aDoc.flushReparseQueue();
nap = aNode.findNodeAt(0, 0);
assertNotNull(nap);
assertEquals(0, nap.getPosition());
assertEquals(80, nap.getSize());
nap = nap.getNode().findNodeAt(9, nap.getPosition());
assertNotNull(nap);
assertEquals(9, nap.getPosition());
assertEquals(57+13, nap.getSize());
nap = nap.getNode().findNodeAt(12, nap.getPosition());
assertNotNull(nap);
assertEquals(12, nap.getPosition());
assertEquals(53+13, nap.getSize());
nap = nap.getNode().findNodeAt(36, nap.getPosition());
assertNotNull(nap);
assertEquals(36, nap.getPosition());
assertEquals(28+13, nap.getSize());
nap = nap.getNode().findNodeAt(41, nap.getPosition());
assertNotNull(nap);
assertEquals(41, nap.getPosition());
assertEquals(17+13, nap.getSize());
}
@Test
public void test5() throws Exception
{
String aSrc = "class A {\n" +
"}\n";
MoeSyntaxDocument aDoc = docForSource(aSrc, "");
ParsedCUNode aNode = aDoc.getParser();
NodeAndPosition<ParsedNode> nap = aNode.findNodeAt(0, 0);
assertNotNull(nap);
assertEquals(0, nap.getPosition());
assertEquals(11, nap.getSize());
aDoc.insertString(10, "}\n");
aDoc.flushReparseQueue();
nap = aNode.findNodeAt(0, 0);
assertNotNull(nap);
assertEquals(0, nap.getPosition());
assertEquals(11, nap.getSize());
aDoc.remove(10, 1);
aDoc.flushReparseQueue();
nap = aNode.findNodeAt(0, 0);
assertNotNull(nap);
assertEquals(0, nap.getPosition());
assertEquals(12, nap.getSize());
}
@Test
public void test6() throws Exception
{
String aSrc = "class A {\n" +
"\n" +
"}\n";
MoeSyntaxDocument aDoc = docForSource(aSrc, "");
ParsedCUNode aNode = aDoc.getParser();
NodeAndPosition<ParsedNode> nap = aNode.findNodeAt(0, 0);
assertNotNull(nap);
assertEquals(0, nap.getPosition());
assertEquals(12, nap.getSize());
nap = nap.getNode().findNodeAt(9, nap.getPosition());
assertNotNull(nap);
assertEquals(9, nap.getPosition());
assertEquals(11, nap.getEnd());
aDoc.insertString(10, "}");
aDoc.flushReparseQueue();
aDoc.remove(10, 1);
aNode = aDoc.getParser();
nap = aNode.findNodeAt(0, 0);
assertNotNull(nap);
assertEquals(0, nap.getPosition());
assertEquals(12, nap.getSize());
nap = nap.getNode().findNodeAt(9, nap.getPosition());
assertNotNull(nap);
assertEquals(9, nap.getPosition());
assertEquals(11, nap.getEnd());
}
@Test
public void test7() throws Exception
{
String aSrc = "class A {\n" +
" class B {\n" +
" \n" +
" }\n" +
"}\n";
MoeSyntaxDocument aDoc = docForSource(aSrc, "");
ParsedCUNode aNode = aDoc.getParser();
NodeAndPosition<ParsedNode> nap = aNode.findNodeAt(0, 0);
assertNotNull(nap);
assertEquals(0, nap.getPosition());
assertEquals(30, nap.getSize());
nap = nap.getNode().findNodeAt(9, nap.getPosition());
assertNotNull(nap);
assertEquals(9, nap.getPosition());
assertEquals(29, nap.getEnd());
nap = nap.getNode().findNodeAt(12, nap.getPosition());
assertNotNull(nap);
assertEquals(12, nap.getPosition());
assertEquals(28, nap.getEnd());
nap = nap.getNode().findNodeAt(21, nap.getPosition());
assertNotNull(nap);
assertEquals(21, nap.getPosition());
assertEquals(27, nap.getEnd());
aDoc.remove(27, 1);
aNode = aDoc.getParser();
nap = aNode.findNodeAt(0, 0);
assertNotNull(nap);
assertEquals(0, nap.getPosition());
assertEquals(30, nap.getSize());
nap = nap.getNode().findNodeAt(9, nap.getPosition());
assertNotNull(nap);
assertEquals(9, nap.getPosition());
assertEquals(30, nap.getEnd());
aDoc.insertString(27, "}");
aNode = aDoc.getParser();
nap = aNode.findNodeAt(0, 0);
assertNotNull(nap);
assertEquals(0, nap.getPosition());
assertEquals(30, nap.getSize());
nap = nap.getNode().findNodeAt(9, nap.getPosition());
assertNotNull(nap);
assertEquals(9, nap.getPosition());
assertEquals(29, nap.getEnd());
nap = nap.getNode().findNodeAt(12, nap.getPosition());
assertNotNull(nap);
assertEquals(12, nap.getPosition());
assertEquals(28, nap.getEnd());
nap = nap.getNode().findNodeAt(21, nap.getPosition());
assertNotNull(nap);
assertEquals(21, nap.getPosition());
assertEquals(27, nap.getEnd());
}
@Test
public void test8() throws Exception
{
String aSrc = "class A {\n" +
" public void someFunc() {\n" +
" if (true) {\n" +
" }\n" +
" \n" +
" }\n" +
"}\n";
MoeSyntaxDocument aDoc = docForSource(aSrc, "");
ParsedCUNode aNode = aDoc.getParser();
NodeAndPosition<ParsedNode> nap = aNode.findNodeAt(0, 0);
assertNotNull(nap);
assertEquals(0, nap.getPosition());
assertEquals(67, nap.getSize());
aDoc.remove(41, 11);
aDoc.flushReparseQueue();
aDoc.remove(57 - 11, 1);
aDoc.flushReparseQueue();
aNode = aDoc.getParser();
nap = aNode.findNodeAt(0, 0);
assertNotNull(nap);
assertEquals(0, nap.getPosition());
assertEquals(67 - 12, nap.getSize());
}
@Test
public void test9() throws Exception
{
String aSrc = "class A {\n" +
" public void someFunc() {\n" +
" \n" +
" }\n" +
"}\n";
MoeSyntaxDocument aDoc = docForSource(aSrc, "");
ParsedCUNode aNode = aDoc.getParser();
NodeAndPosition<ParsedNode> nap = aNode.findNodeAt(0, 0);
assertNotNull(nap);
assertEquals(0, nap.getPosition());
assertEquals(45, nap.getSize());
aDoc.insertString(39, "if(true) {");
aNode = aDoc.getParser();
nap = aNode.findNodeAt(39, 0);
assertNotNull(nap);
assertEquals(0, nap.getPosition());
assertEquals(56, nap.getSize());
nap = nap.getNode().findNodeAt(39, nap.getPosition());
assertNotNull(nap);
assertEquals(9, nap.getPosition());
assertEquals(56, nap.getEnd());
nap = nap.getNode().findNodeAt(39, nap.getPosition());
assertNotNull(nap);
assertEquals(12, nap.getPosition());
assertEquals(55, nap.getEnd());
nap = nap.getNode().findNodeAt(39, nap.getPosition());
assertNotNull(nap);
assertEquals(36, nap.getPosition());
assertEquals(54, nap.getEnd());
aDoc.remove(39, 10);
aDoc.flushReparseQueue();
aDoc.insertString(39, "if(true) {");
aNode = aDoc.getParser();
nap = aNode.findNodeAt(39, 0);
assertNotNull(nap);
assertEquals(0, nap.getPosition());
assertEquals(56, nap.getSize());
nap = nap.getNode().findNodeAt(39, nap.getPosition());
assertNotNull(nap);
assertEquals(9, nap.getPosition());
assertEquals(56, nap.getEnd());
nap = nap.getNode().findNodeAt(39, nap.getPosition());
assertNotNull(nap);
assertEquals(12, nap.getPosition());
assertEquals(55, nap.getEnd());
nap = nap.getNode().findNodeAt(39, nap.getPosition());
assertNotNull(nap);
assertEquals(36, nap.getPosition());
assertEquals(54, nap.getEnd());
}
@Test
public void test10() throws Exception
{
String aSrc =
"/** A comment */\n" +
"class A {\n" +
"}\n";
MoeSyntaxDocument aDoc = docForSource(aSrc, "");
ParsedCUNode aNode = aDoc.getParser();
NodeAndPosition<ParsedNode> nap = aNode.findNodeAt(0, 0);
assertNotNull(nap);
assertEquals(0, nap.getPosition());
assertEquals(28, nap.getSize());
aDoc.insertString(0, "/");
aNode = aDoc.getParser();
nap = aNode.findNodeAt(18, 0);
assertNotNull(nap);
assertEquals(18, nap.getPosition());
assertEquals(11, nap.getSize());
aDoc.remove(0, 1);
aNode = aDoc.getParser();
nap = aNode.findNodeAt(18, 0);
assertNotNull(nap);
assertEquals(0, nap.getPosition());
assertEquals(28, nap.getSize());
}
@Test
public void test11() throws Exception
{
String aSrc =
"public class ArrayWrapper\n" +
"{\n" +
" private int x;\n" +
" /**\n" +
" * Constructor for objects of class ArrayWrapper\n" +
" */\n" +
" public ArrayWrapper()\n" +
" {\n" +
" x = 0;\n" +
" }\n" +
"}\n";
MoeSyntaxDocument aDoc = docForSource(aSrc, "");
ParsedCUNode aNode = aDoc.getParser();
NodeAndPosition<ParsedNode> nap = aNode.findNodeAt(0, 0);
assertNotNull(nap);
assertEquals(0, nap.getPosition());
assertEquals(152, nap.getSize());
nap = nap.getNode().findNodeAt(27, nap.getPosition());
assertNotNull(nap);
assertEquals(27, nap.getPosition());
assertEquals(151, nap.getEnd());
nap = nap.getNode().findNodeAtOrAfter(27, 27);
assertNotNull(nap);
assertEquals(30, nap.getPosition());
assertEquals(44, nap.getEnd());
nap = nap.nextSibling();
assertNotNull(nap);
assertEquals(47, nap.getPosition());
assertEquals(150, nap.getEnd());
nap = nap.getNode().findNodeAtOrAfter(47, 47);
assertNotNull(nap);
assertEquals(47, nap.getPosition());
assertEquals(107, nap.getEnd());
nap = nap.nextSibling();
assertNotNull(nap);
assertEquals(135, nap.getPosition());
assertEquals(149, nap.getEnd());
int removeSize = 107 - 42;
aDoc.remove(42, removeSize);
nap = aNode.findNodeAt(0, 0);
assertNotNull(nap);
assertEquals(0, nap.getPosition());
assertEquals(152 - removeSize, nap.getSize());
nap = nap.getNode().findNodeAt(27, nap.getPosition());
assertNotNull(nap);
assertEquals(27, nap.getPosition());
assertEquals(151 - removeSize, nap.getEnd());
nap = nap.getNode().findNodeAtOrAfter(27, 27);
assertNotNull(nap);
assertEquals(30, nap.getPosition());
assertEquals(42, nap.getEnd());
NodeAndPosition<ParsedNode> nnap = nap.nextSibling();
assertTrue(nnap == null || nnap.getPosition() >= nap.getEnd());
}
@Test
public void test12() throws Exception
{
String aSrc = "class A {\n" +
" public int x() { }\n" +
"}\n";
MoeSyntaxDocument aDoc = docForSource(aSrc, "");
ParsedCUNode aNode = aDoc.getParser();
NodeAndPosition<ParsedNode> nap = aNode.findNodeAt(0, 0);
assertNotNull(nap);
assertEquals(0, nap.getPosition());
assertEquals(34, nap.getSize());
nap = nap.getNode().findNodeAt(9, nap.getPosition());
assertNotNull(nap);
assertEquals(9, nap.getPosition());
assertEquals(24, nap.getSize());
nap = nap.getNode().findNodeAt(14, nap.getPosition());
assertNotNull(nap);
assertEquals(14, nap.getPosition());
assertEquals(18, nap.getSize());
aDoc.remove(32, 1);
aNode = aDoc.getParser();
nap = aNode.findNodeAt(0, 0);
assertNotNull(nap);
assertEquals(0, nap.getPosition());
assertEquals(33, nap.getSize());
nap = nap.getNode().findNodeAt(9, nap.getPosition());
assertNotNull(nap);
assertEquals(9, nap.getPosition());
assertEquals(23, nap.getSize());
nap = nap.getNode().findNodeAt(14, nap.getPosition());
assertNotNull(nap);
assertEquals(14, nap.getPosition());
assertEquals(18, nap.getSize());
aDoc.insertString(32, "\n");
aNode = aDoc.getParser();
nap = aNode.findNodeAt(0, 0);
assertNotNull(nap);
assertEquals(0, nap.getPosition());
assertEquals(34, nap.getSize());
nap = nap.getNode().findNodeAt(9, nap.getPosition());
assertNotNull(nap);
assertEquals(9, nap.getPosition());
assertEquals(24, nap.getSize());
nap = nap.getNode().findNodeAt(14, nap.getPosition());
assertNotNull(nap);
assertEquals(14, nap.getPosition());
assertEquals(18, nap.getSize());
aDoc.remove(32, 1);
aNode = aDoc.getParser();
nap = aNode.findNodeAt(0, 0);
assertNotNull(nap);
assertEquals(0, nap.getPosition());
assertEquals(33, nap.getSize());
nap = nap.getNode().findNodeAt(9, nap.getPosition());
assertNotNull(nap);
assertEquals(9, nap.getPosition());
assertEquals(23, nap.getSize());
nap = nap.getNode().findNodeAt(14, nap.getPosition());
assertNotNull(nap);
assertEquals(14, nap.getPosition());
assertEquals(18, nap.getSize());
}
@Test
public void test13() throws Exception
{
String aSrc = "class A {\n" +
" \n" +
" void xyz(int n) { }\n" +
"}\n";
MoeSyntaxDocument aDoc = docForSource(aSrc, "");
ParsedCUNode aNode = aDoc.getParser();
NodeAndPosition<ParsedNode> nap = aNode.findNodeAt(0, 0);
assertNotNull(nap);
assertEquals(0, nap.getPosition());
assertEquals(40, nap.getSize());
nap = nap.getNode().findNodeAt(9, nap.getPosition());
assertNotNull(nap);
assertEquals(9, nap.getPosition());
assertEquals(30, nap.getSize());
nap = nap.getNode().findNodeAt(19, nap.getPosition());
assertNotNull(nap);
assertEquals(19, nap.getPosition());
assertEquals(19, nap.getSize());
aDoc.insertString(14, "<T> fff(List<");
aNode = aDoc.getParser();
nap = aNode.findNodeAt(0, 0);
assertNotNull(nap);
assertEquals(0, nap.getPosition());
assertEquals(53, nap.getSize());
nap = nap.getNode().findNodeAt(9, nap.getPosition());
assertNotNull(nap);
assertEquals(9, nap.getPosition());
assertEquals(43, nap.getSize());
}
@Test
public void testChangeSuper() throws Exception
{
String aSrc = "class A {\n" +
" public void someFunc() {\n" +
" \n" +
" }\n" +
"}\n";
MoeSyntaxDocument aDoc = docForSource(aSrc, "");
ParsedCUNode aNode = aDoc.getParser();
NodeAndPosition<ParsedNode> nap = aNode.findNodeAt(0, 0);
assertNotNull(nap);
assertEquals(0, nap.getPosition());
assertEquals(45, nap.getSize());
nap = aNode.findNodeAt(0, 0);
assertNotNull(nap);
ParsedNode pn = nap.getNode();
List<JavaEntity> etypes = ((ParsedTypeNode) pn).getExtendedTypes();
assertTrue(etypes.isEmpty());
aDoc.insertString(7, " extends String");
aNode = aDoc.getParser();
nap = aNode.findNodeAt(0,0);
assertNotNull(nap);
pn = nap.getNode();
etypes = ((ParsedTypeNode) pn).getExtendedTypes();
assertEquals(1, etypes.size());
TypeEntity tent = etypes.get(0).resolveAsType();
assertNotNull(tent);
assertEquals("java.lang.String", tent.getType().toString());
aDoc.remove(16, 6);
aDoc.insertString(16, "Object");
aNode = aDoc.getParser();
nap = aNode.findNodeAt(0,0);
assertNotNull(nap);
pn = nap.getNode();
etypes = ((ParsedTypeNode) pn).getExtendedTypes();
assertEquals(1, etypes.size());
tent = etypes.get(0).resolveAsType();
assertNotNull(tent);
assertEquals("java.lang.Object", tent.getType().toString());
}
| Test for bug #317 regression.
|
@Test
public void testRegression317() throws Exception
{
MoeSyntaxDocument aDoc = docForSource("", "");
aDoc.insertString(0, "class ");
aDoc.getParser();
aDoc.insertString(6, "A\n");
aDoc.getParser();
aDoc.insertString(8, "{\n\n}\n");
ParsedCUNode aNode = aDoc.getParser();
NodeAndPosition<ParsedNode> nap = aNode.findNodeAt(0, 0);
assertNotNull(nap);
assertEquals(0, nap.getPosition());
assertEquals(12, nap.getSize());
aDoc.insertString(10, " public void x() { }");
aNode = aDoc.getParser();
nap = aNode.findNodeAt(0, 0);
assertNotNull(nap);
assertEquals(0, nap.getPosition());
assertEquals(35, nap.getSize());
nap = nap.getNode().findNodeAt(9, 0);
assertNotNull(nap);
assertEquals(9, nap.getPosition());
assertEquals(25, nap.getSize());
nap = nap.getNode().findNodeAt(14, nap.getPosition());
assertNotNull(nap);
assertEquals(14, nap.getPosition());
assertEquals(19, nap.getSize());
aDoc.remove(7, 1);
aNode = aDoc.getParser();
nap = aNode.findNodeAt(0, 0);
assertNotNull(nap);
assertEquals(0, nap.getPosition());
assertEquals(34, nap.getSize());
nap = nap.getNode().findNodeAt(8, 0);
assertNotNull(nap);
assertEquals(8, nap.getPosition());
assertEquals(25, nap.getSize());
nap = nap.getNode().findNodeAt(13, nap.getPosition());
assertNotNull(nap);
assertEquals(13, nap.getPosition());
assertEquals(19, nap.getSize());
}
@Test
public void testImportStmt() throws Exception
{
MoeSyntaxDocument aDoc = docForSource("import somepkg.*; ;", "");
ParsedCUNode aNode = aDoc.getParser();
NodeAndPosition<ParsedNode> nap = aNode.findNodeAt(0, 0);
assertNotNull(nap);
assertEquals(17, nap.getSize());
aDoc.remove(16, 1);
aNode = aDoc.getParser();
nap = aNode.findNodeAt(0, 0);
assertNotNull(nap);
assertEquals(18, nap.getSize());
}
@Test
public void testImportStmt2() throws Exception
{
MoeSyntaxDocument aDoc = docForSource("import somepkg.* abc/* a comment */;", "");
ParsedCUNode aNode = aDoc.getParser();
aDoc.remove(17, 3);
aNode = aDoc.getParser();
NodeAndPosition<ParsedNode> nap = aNode.findNodeAt(0, 0);
assertNotNull(nap);
assertEquals(33, nap.getSize());
}
@Test
public void testRegression331() throws Exception
{
String aSrc = "class A {\n" +
" public void someFunc() {\n" +
" \n" +
" }\n" +
"}\n";
MoeSyntaxDocument aDoc = docForSource(aSrc, "");
ParsedCUNode aNode = aDoc.getParser();
NodeAndPosition<ParsedNode> nap = aNode.findNodeAt(0, 0);
assertNotNull(nap);
assertEquals(0, nap.getPosition());
assertEquals(45, nap.getSize());
aDoc.insertString(7, " extends javax");
aNode = aDoc.getParser();
aDoc.insertString(21, ".");
aNode = aDoc.getParser();
aDoc.insertString(22, "swing.JFrame");
aNode = aDoc.getParser();
nap = aNode.findNodeAt(0, 0);
assertNotNull(nap);
assertEquals(0, nap.getPosition());
assertEquals(72, nap.getSize());
}
@Test
public void testRegression331p2() throws Exception
{
String aSrc = "/* comment */ class A extends javax.swing.JFrame {\n" +
" public void someFunc() {\n" +
" \n" +
" }\n" +
"}\n";
MoeSyntaxDocument aDoc = docForSource(aSrc, "");
ParsedCUNode aNode = aDoc.getParser();
NodeAndPosition<ParsedNode> nap = aNode.findNodeAt(0, 0);
assertNotNull(nap);
assertEquals(0, nap.getPosition());
assertEquals(86, nap.getSize());
aDoc.insertString(48, ".");
aNode = aDoc.getParser();
aDoc.remove(48, 1);
aNode = aDoc.getParser();
nap = aNode.findNodeAt(0, 0);
assertNotNull(nap);
assertEquals(0, nap.getPosition());
assertEquals(86, nap.getSize());
}
@Test
public void testNewStmt() throws Exception
{
String aSrc = "class A {\n" +
" public void someFunc() {\n" +
" A a = new \\A();\n" +
" }\n" +
"}\n";
MoeSyntaxDocument aDoc = docForSource(aSrc, "");
ParsedCUNode aNode = aDoc.getParser();
aDoc.remove(51, 1);
aNode = aDoc.getParser();
NodeAndPosition<ParsedNode> nap = aNode.findNodeAt(0, 0);
assertNotNull(nap);
assertEquals(0, nap.getPosition());
assertEquals(61, nap.getSize());
nap = nap.getNode().findNodeAt(12, nap.getPosition());
assertNotNull(nap);
assertEquals(9, nap.getPosition());
assertEquals(51, nap.getSize());
nap = nap.getNode().findNodeAt(12, nap.getPosition());
assertNotNull(nap);
assertEquals(12, nap.getPosition());
assertEquals(47, nap.getSize());
nap = nap.getNode().findNodeAt(36, nap.getPosition());
assertNotNull(nap);
assertEquals(36, nap.getPosition());
assertEquals(22, nap.getSize());
nap = nap.getNode().findNodeAt(41, nap.getPosition());
assertNotNull(nap);
assertEquals(41, nap.getPosition());
assertEquals(14, nap.getSize());
nap = nap.getNode().findNodeAt(47, nap.getPosition());
assertNotNull(nap);
assertEquals(47, nap.getPosition());
assertEquals(7, nap.getSize());
}
@Test
public void testRegression393() throws Exception
{
String aSrc = "@RunWith(Suite.class)\n" +
"public class AllTests {\n" +
"// public static void main(String[] args) {\n" +
"}\n";
MoeSyntaxDocument aDoc = docForSource(aSrc, "");
aDoc.getParser();
aDoc.remove(47, 1);
aDoc.getParser();
}
@Test
public void testRegression440() throws Exception
{
String aSrc = "public class XXXXX {\n" +
" public XXXXX() {\n" +
" //\n" +
" for (int i = 0; i < 10; i++) {\n" +
" \n" +
" }\n" +
" }\n" +
"}\n";
MoeSyntaxDocument aDoc = docForSource(aSrc, "");
ParsedCUNode aNode = aDoc.getParser();
NodeAndPosition<ParsedNode> nap = aNode.findNodeAt(0, 0);
assertEquals(0, nap.getPosition());
assertEquals(118, nap.getSize());
nap = nap.getNode().findNodeAt(20, nap.getPosition());
assertEquals(20, nap.getPosition());
assertEquals(97, nap.getSize());
nap = nap.getNode().findNodeAt(25, nap.getPosition());
assertEquals(25, nap.getPosition());
assertEquals(91, nap.getSize());
nap = nap.getNode().findNodeAt(41, nap.getPosition());
assertEquals(41, nap.getPosition());
assertEquals(74, nap.getSize());
nap = nap.getNode().findNodeAt(61, nap.getPosition());
assertEquals(61, nap.getPosition());
assertEquals(49, nap.getSize());
nap = nap.getNode().findNodeAt(91, nap.getPosition());
assertEquals(91, nap.getPosition());
assertEquals(18, nap.getSize());
aDoc.insertString(61, "//");
aDoc.getParser();
aDoc.insertString(61 + 39 + 2, "//");
aDoc.getParser();
aDoc.insertString(61 + 39 + 9 + 4, "//");
aNode = aDoc.getParser();
nap = aNode.findNodeAt(0, 0);
assertEquals(0, nap.getPosition());
assertEquals(118 + 6, nap.getSize());
nap = nap.getNode().findNodeAt(20, nap.getPosition());
assertEquals(20, nap.getPosition());
assertEquals(97 + 6, nap.getSize());
nap = nap.getNode().findNodeAt(25, nap.getPosition());
assertEquals(25, nap.getPosition());
assertEquals(91 + 6, nap.getSize());
nap = nap.getNode().findNodeAt(41, nap.getPosition());
assertEquals(41, nap.getPosition());
assertEquals(74 + 6, nap.getSize());
}
@Test
public void testMultipleDeclaration() throws Exception
{
String aSrc = "class A {\n" +
" public Runnable r, b = new Runnable() {\n" +
" public void run() {\n" +
" c.run();\n" +
" }\n" +
" };\n" +
"}\n";
MoeSyntaxDocument aDoc = docForSource(aSrc, "");
ParsedCUNode aNode = aDoc.getParser();
NodeAndPosition<ParsedNode> classNap = aNode.findNodeAt(0, 0);
assertEquals(0, classNap.getPosition());
assertEquals(103, classNap.getSize());
ParsedTypeNode classNode = (ParsedTypeNode) classNap.getNode();
TypeInnerNode classInner = classNode.getInner();
NodeAndPosition<ParsedNode> nap = classInner.findNodeAt(12, 9);
assertEquals(12, nap.getPosition());
assertEquals(29, nap.getEnd());
nap = classInner.findNodeAt(30, 9);
assertEquals(30, nap.getPosition());
assertEquals(101, nap.getEnd());
JavaEntity rvar = classInner.getValueEntity("r", null);
assertNotNull(rvar);
ValueEntity rval = rvar.resolveAsValue();
assertNotNull(rval);
assertEquals("java.lang.Runnable", rval.getType().toString());
JavaEntity bvar = classInner.getValueEntity("b", null);
assertNotNull(bvar);
ValueEntity bval = bvar.resolveAsValue();
assertNotNull(bval);
assertEquals(bval.getType().toString(), "java.lang.Runnable");
aDoc.insertString(100, ", c");
aNode = aDoc.getParser();
nap = aNode.findNodeAt(0, 0);
classNode = (ParsedTypeNode) nap.getNode();
classInner = classNode.getInner();
nap = classInner.findNodeAt(12, 9);
assertEquals(12, nap.getPosition());
assertEquals(29, nap.getEnd());
nap = classInner.findNodeAt(30, 9);
assertEquals(30, nap.getPosition());
assertEquals(100, nap.getEnd());
nap = classInner.findNodeAt(101, 9);
assertEquals(101, nap.getPosition());
assertEquals(104, nap.getEnd());
bvar = classInner.getValueEntity("b", null);
assertNotNull(bvar);
bval = bvar.resolveAsValue();
assertNotNull(bval);
assertNotNull(bval.getType());
assertEquals(bval.getType().toString(), "java.lang.Runnable");
JavaEntity cvar = classInner.getValueEntity("c", null);
assertNotNull(cvar);
ValueEntity cval = cvar.resolveAsValue();
assertNotNull(cval);
assertNotNull(cval.getType());
assertEquals(cval.getType().toString(), "java.lang.Runnable");
ExpressionTypeInfo suggests = aNode.getExpressionType(84, aDoc);
assertNotNull(suggests);
assertEquals(suggests.getSuggestionType().toString(), "java.lang.Runnable");
}
}
top,
use,
map,
class IncrementalParseTest
. initConfig
. setUp
. docForSource
. test1
. test2
. test3
. test4
. test5
. test6
. test7
. test8
. test9
. test10
. test11
. test12
. test13
. testChangeSuper
. testRegression317
. testImportStmt
. testImportStmt2
. testRegression331
. testRegression331p2
. testNewStmt
. testRegression393
. testRegression440
. testMultipleDeclaration
1242 neLoCode
+ 2 LoComm