public void testParsedItemCreation3() throws Exception {
    setDefaultVersion(IGrammarVersionProvider.GRAMMAR_PYTHON_VERSION_2_5);
    String str =
        ""
            + "class Test:\n"
            + "    def __init__(self):\n"
            + "        self.foo, self.bar = 1, 2\n"
            + "";

    SimpleNode node = parseLegalDocStr(str);

    OutlineCreatorVisitor visitor = OutlineCreatorVisitor.create(node);
    ParsedItem item = new ParsedItem(visitor.getAll().toArray(new ASTEntryWithChildren[0]), null);

    // module level: Test
    assertEquals(1, item.getAstChildrenEntries().length);

    // class level: __init__
    ASTEntryWithChildren classEntry = item.getAstChildrenEntries()[0];
    assertEquals(1, classEntry.children.size());

    // method level: 2 attributes
    ASTEntryWithChildren functionEntry = classEntry.children.get(0);
    assertEquals(2, functionEntry.children.size());
  }
  public void testParsedItemCreation() throws Exception {
    setDefaultVersion(IGrammarVersionProvider.GRAMMAR_PYTHON_VERSION_2_5);
    String str =
        ""
            + "class Foo(object):\n"
            + "    def m1(self):\n"
            + "        pass\n"
            + "        #--- comm method\n"
            + "    #--- comm class\n"
            + "#--- comm module\n"
            + "";

    SimpleNode node = parseLegalDocStr(str);

    OutlineCreatorVisitor visitor = OutlineCreatorVisitor.create(node);
    ParsedItem item = new ParsedItem(visitor.getAll().toArray(new ASTEntryWithChildren[0]), null);

    // module level: Foo and 1 comment
    assertEquals(2, item.getAstChildrenEntries().length);
    assertNull(item.getAstChildrenEntries()[1].children); // comment has no children

    // class level: m1 and 1 comment
    ASTEntryWithChildren classEntry = item.getAstChildrenEntries()[0];
    assertEquals(2, classEntry.children.size());
    assertNull(classEntry.children.get(1).children); // comment has no children

    // method level: 1 comment
    ASTEntryWithChildren functionEntry = classEntry.children.get(0);
    assertEquals(1, functionEntry.children.size());
  }
  public void testParsedItemCreation2() throws Exception {
    setDefaultVersion(IGrammarVersionProvider.GRAMMAR_PYTHON_VERSION_2_5);
    String str =
        ""
            + "class Foo(object):\n"
            + "    pass\n"
            + "if __name__ == '__main__':\n"
            + "    var = 10\n"
            + "\n"
            + "";

    SimpleNode node = parseLegalDocStr(str);

    OutlineCreatorVisitor visitor = OutlineCreatorVisitor.create(node);
    ParsedItem item = new ParsedItem(visitor.getAll().toArray(new ASTEntryWithChildren[0]), null);

    // module level: Foo and main
    assertEquals(2, item.getAstChildrenEntries().length);
    assertNull(item.getAstChildrenEntries()[0].children); // no children
  }
  public void testParsedItemCreation4() throws Exception {
    setDefaultVersion(IGrammarVersionProvider.GRAMMAR_PYTHON_VERSION_2_5);
    String str =
        ""
            + "if 0:\n"
            + "    #--- foo ---\n"
            + "    pass\n"
            + "else:\n"
            + "    #--- bar ---\n"
            + "    pass";

    SimpleNode node = parseLegalDocStr(str);

    OutlineCreatorVisitor visitor = OutlineCreatorVisitor.create(node);
    ParsedItem item = new ParsedItem(visitor.getAll().toArray(new ASTEntryWithChildren[0]), null);

    // module level: 2 comments
    assertEquals(2, item.getAstChildrenEntries().length);
    assertNull(item.getAstChildrenEntries()[0].children); // comment has no children
    assertNull(item.getAstChildrenEntries()[1].children); // comment has no children
  }
  /**
   * Check if the creation of a new structure will maintain the old items intact (as much as
   * possible).
   *
   * @throws Exception
   */
  public void testNewChildrenStructure() throws Exception {
    setDefaultVersion(IGrammarVersionProvider.GRAMMAR_PYTHON_VERSION_2_5);
    String str = "" + "class Foo(object):\n" + "    def m1(self):\n" + "        pass\n" + "\n" + "";

    String str2 =
        ""
            + "class Foo(object):\n"
            + "    def m1(self):\n"
            + "        pass\n"
            + "    def m2(self):\n"
            + // one more member
            "        pass\n"
            + "\n"
            + "";

    SimpleNode node = parseLegalDocStr(str);
    SimpleNode node2 = parseLegalDocStr(str2);

    OutlineCreatorVisitor visitor = OutlineCreatorVisitor.create(node);
    ParsedItem item = new ParsedItem(visitor.getAll().toArray(new ASTEntryWithChildren[0]), null);

    OutlineCreatorVisitor visitor2 = OutlineCreatorVisitor.create(node2);
    ParsedItem item2 = new ParsedItem(visitor2.getAll().toArray(new ASTEntryWithChildren[0]), null);

    item.updateTo(item2);
  }