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