/** Test method for {@link JavadocBlockParserUtil#fetchBlockInfo(JavadocScanner)}. */
  @Test
  public void testFetchBlockInfoEmpty() {
    DefaultJavadocScanner scanner = scanner("empty-inline.txt");
    JavadocBlockInfo block = JavadocBlockParserUtil.fetchBlockInfo(scanner);
    assertEquals(JavadocTokenKind.EOF, scanner.lookahead(0).getKind());
    assertEquals("code", block.getTagName());
    assertEquals(0, block.getLocation().getStartPosition());
    assertEquals(scanner.lookahead(0).getStartPosition(), block.getLocation().getLength());

    JavadocScanner bScanner = block.getBlockScanner();
    assertEquals(JavadocTokenKind.EOF, bScanner.lookahead(0).getKind());
  }
 /**
  * Test method for {@link JavadocBlockParserUtil#fetchNamedType(JavadocScanner, java.util.Set)}.
  */
 @Test
 public void testFetchNamedType() {
   {
     DefaultJavadocScanner scanner = string("String#length()");
     IrDocNamedType elem = JavadocBlockParserUtil.fetchNamedType(scanner, null);
     assertNotNull(elem);
     assertEquals("String", elem.getName().asString());
     assertSameLocation(0, "String".length(), elem.getLocation());
     assertEquals(SHARP, scanner.lookahead(0).getKind());
   }
   {
     DefaultJavadocScanner scanner = string("java.lang.String#length()");
     IrDocNamedType elem = JavadocBlockParserUtil.fetchNamedType(scanner, null);
     assertNotNull(elem);
     assertEquals("java.lang.String", elem.getName().asString());
     assertSameLocation(0, "java.lang.String".length(), elem.getLocation());
     assertEquals(SHARP, scanner.lookahead(0).getKind());
   }
   {
     DefaultJavadocScanner scanner = string("/String#length()");
     IrDocNamedType elem = JavadocBlockParserUtil.fetchNamedType(scanner, null);
     assertNull(elem);
     assertEquals(SLASH, scanner.lookahead(0).getKind());
   }
   {
     DefaultJavadocScanner scanner = string("String#length()");
     IrDocNamedType elem =
         JavadocBlockParserUtil.fetchNamedType(scanner, EnumSet.of(WHITE_SPACES));
     assertNull(elem);
     assertEquals(IDENTIFIER, scanner.lookahead(0).getKind());
   }
 }
  /** Test method for {@link JavadocBlockParserUtil#fetchBlockInfo(JavadocScanner)}. */
  @Test
  public void testFetchBlockInfoBroken() {
    DefaultJavadocScanner scanner = scanner("broken-inline.txt");
    JavadocBlockInfo block = JavadocBlockParserUtil.fetchBlockInfo(scanner);
    assertEquals(JavadocTokenKind.EOF, scanner.lookahead(0).getKind());
    assertEquals("code", block.getTagName());
    assertEquals(0, block.getLocation().getStartPosition());
    assertEquals(scanner.lookahead(0).getStartPosition(), block.getLocation().getLength());

    JavadocScanner bScanner = block.getBlockScanner();
    IrDocText inline = JavadocBlockParserUtil.fetchText(bScanner, false, false);
    assertEquals(" Hello, world! EOF->", inline.getContent());
    assertEquals(JavadocTokenKind.EOF, bScanner.lookahead(0).getKind());
  }
 /**
  * Test method for {@link JavadocBlockParserUtil#fetchPrimitiveType(JavadocScanner,
  * java.util.Set)}.
  */
 @Test
 public void testFetchPrimitiveType() {
   {
     DefaultJavadocScanner scanner = string("int");
     IrDocBasicType elem = JavadocBlockParserUtil.fetchPrimitiveType(scanner, null);
     assertNotNull(elem);
     assertEquals(IrBasicTypeKind.INT, elem.getTypeKind());
     assertSameLocation(0, "int".length(), elem.getLocation());
     assertEquals(EOF, scanner.lookahead(0).getKind());
   }
   {
     DefaultJavadocScanner scanner = string("void");
     IrDocBasicType elem = JavadocBlockParserUtil.fetchPrimitiveType(scanner, null);
     assertNull(elem);
     assertEquals(IDENTIFIER, scanner.lookahead(0).getKind());
   }
 }
 /**
  * Test method for {@link JavadocBlockParserUtil#fetchBasicType(JavadocScanner, java.util.Set)}.
  */
 @Test
 public void testFetchBasicType() {
   {
     DefaultJavadocScanner scanner = string("int");
     IrDocBasicType elem = JavadocBlockParserUtil.fetchBasicType(scanner, null);
     assertNotNull(elem);
     assertEquals(IrBasicTypeKind.INT, elem.getTypeKind());
     assertSameLocation(0, "int".length(), elem.getLocation());
     assertEquals(EOF, scanner.lookahead(0).getKind());
   }
   {
     DefaultJavadocScanner scanner = string("void");
     IrDocBasicType elem = JavadocBlockParserUtil.fetchBasicType(scanner, null);
     assertNotNull(elem);
     assertEquals(IrBasicTypeKind.VOID, elem.getTypeKind());
     assertSameLocation(0, "void".length(), elem.getLocation());
     assertEquals(EOF, scanner.lookahead(0).getKind());
   }
   {
     DefaultJavadocScanner scanner = string("int[]");
     IrDocBasicType elem = JavadocBlockParserUtil.fetchBasicType(scanner, null);
     assertNotNull(elem);
     assertEquals(IrBasicTypeKind.INT, elem.getTypeKind());
     assertSameLocation(0, "int".length(), elem.getLocation());
     assertEquals(LEFT_BRACKET, scanner.lookahead(0).getKind());
   }
   {
     DefaultJavadocScanner scanner = string("#int[]");
     IrDocBasicType elem = JavadocBlockParserUtil.fetchBasicType(scanner, null);
     assertNull(elem);
     assertEquals(SHARP, scanner.lookahead(0).getKind());
   }
   {
     DefaultJavadocScanner scanner = string("int[]");
     IrDocBasicType elem =
         JavadocBlockParserUtil.fetchBasicType(scanner, EnumSet.of(WHITE_SPACES));
     assertNull(elem);
     assertEquals(IDENTIFIER, scanner.lookahead(0).getKind());
   }
 }
  /** Test method for {@link JavadocBlockParserUtil#fetchName(JavadocScanner, java.util.Set)}. */
  @Test
  public void testFetchName() {
    {
      DefaultJavadocScanner scanner = string("java.lang.String#length()");
      IrDocName elem = JavadocBlockParserUtil.fetchName(scanner, null);
      assertNotNull(elem);
      assertEquals("java.lang.String", elem.asString());
      assertSameLocation(0, "java.lang.String".length(), elem.getLocation());

      assertEquals(IrDocElementKind.QUALIFIED_NAME, elem.getKind());
      assertEquals(3, elem.asSimpleNameList().size());
      assertSameLocation(
          "".length(), "java".length(), elem.asSimpleNameList().get(0).getLocation());
      assertSameLocation(
          "java.".length(), "lang".length(), elem.asSimpleNameList().get(1).getLocation());
      assertSameLocation(
          "java.lang.".length(), "String".length(), elem.asSimpleNameList().get(2).getLocation());
      assertEquals(SHARP, scanner.lookahead(0).getKind());
    }
    {
      DefaultJavadocScanner scanner = string(".java.lang.String");
      IrDocName elem = JavadocBlockParserUtil.fetchName(scanner, null);
      assertNull(elem);
      assertEquals(DOT, scanner.lookahead(0).getKind());
    }
    {
      DefaultJavadocScanner scanner = string("java.lang.String#length()");
      IrDocName elem = JavadocBlockParserUtil.fetchName(scanner, EnumSet.of(WHITE_SPACES));
      assertNull(elem);
      assertEquals(IDENTIFIER, scanner.lookahead(0).getKind());
    }
  }
 /**
  * Test method for {@link JavadocBlockParserUtil#fetchSimpleName(JavadocScanner, java.util.Set)}.
  */
 @Test
 public void testFetchSimpleName() {
   {
     DefaultJavadocScanner scanner = string("java.lang.String");
     IrDocSimpleName elem = JavadocBlockParserUtil.fetchSimpleName(scanner, null);
     assertNotNull(elem);
     assertEquals("java", elem.getIdentifier());
     assertEquals(0, elem.getLocation().getStartPosition());
     assertEquals("java".length(), elem.getLocation().getLength());
     assertEquals(DOT, scanner.lookahead(0).getKind());
   }
   {
     DefaultJavadocScanner scanner = string(".String");
     IrDocSimpleName elem = JavadocBlockParserUtil.fetchSimpleName(scanner, null);
     assertNull(elem);
     assertEquals(DOT, scanner.lookahead(0).getKind());
   }
   {
     DefaultJavadocScanner scanner = string("java.lang.String");
     IrDocSimpleName elem =
         JavadocBlockParserUtil.fetchSimpleName(scanner, EnumSet.of(WHITE_SPACES));
     assertNull(elem);
     assertEquals(IDENTIFIER, scanner.lookahead(0).getKind());
   }
 }
  /**
   * Test method for {@link JavadocBlockParserUtil#fetchLinkTarget(JavadocScanner, java.util.Set)}.
   */
  @Test
  public void testFetchLinkTarget() {
    {
      DefaultJavadocScanner scanner = string("java.lang.String");
      IrDocFragment target = JavadocBlockParserUtil.fetchLinkTarget(scanner, null);
      assertNotNull(target);
      assertEquals(IrDocElementKind.NAMED_TYPE, target.getKind());
      IrDocNamedType elem = (IrDocNamedType) target;
      assertEquals("java.lang.String", elem.getName().asString());
      assertSameLocation(0, "java.lang.String".length(), elem.getLocation());
      assertEquals(EOF, scanner.lookahead(0).getKind());
    }
    {
      DefaultJavadocScanner scanner = string("Math#PI{");
      IrDocFragment target = JavadocBlockParserUtil.fetchLinkTarget(scanner, null);
      assertNotNull(target);
      assertEquals(IrDocElementKind.FIELD, target.getKind());
      IrDocField elem = (IrDocField) target;
      assertEquals("Math", elem.getDeclaringType().getName().asString());
      assertEquals("PI", elem.getName().getIdentifier());
      assertSameLocation(0, "Math#PI".length(), elem.getLocation());

      assertEquals(LEFT_BRACE, scanner.lookahead(0).getKind());
    }
    {
      DefaultJavadocScanner scanner = string("Math#max(int a, int b)");
      IrDocFragment target = JavadocBlockParserUtil.fetchLinkTarget(scanner, null);
      assertNotNull(target);
      assertEquals(IrDocElementKind.METHOD, target.getKind());
      IrDocMethod elem = (IrDocMethod) target;
      assertEquals("Math", elem.getDeclaringType().getName().asString());
      assertEquals("max", elem.getName().asString());
      assertEquals(2, elem.getParameters().size());
      {
        IrDocMethodParameter param = elem.getParameters().get(0);
        assertEquals(IrDocElementKind.BASIC_TYPE, param.getType().getKind());
        assertEquals(IrBasicTypeKind.INT, ((IrDocBasicType) param.getType()).getTypeKind());
        assertFalse(param.isVariableArity());
        assertNotNull(param.getName());
        assertEquals("a", param.getName().getIdentifier());
      }
      {
        IrDocMethodParameter param = elem.getParameters().get(1);
        assertEquals(IrDocElementKind.BASIC_TYPE, param.getType().getKind());
        assertEquals(IrBasicTypeKind.INT, ((IrDocBasicType) param.getType()).getTypeKind());
        assertFalse(param.isVariableArity());
        assertNotNull(param.getName());
        assertEquals("b", param.getName().getIdentifier());
      }
      assertEquals(EOF, scanner.lookahead(0).getKind());
    }
  }
 /** Test method for {@link JavadocBlockParserUtil#fetchMethod(JavadocScanner, java.util.Set)}. */
 @Test
 public void testFetchMethod() {
   {
     DefaultJavadocScanner scanner = string("String#length(){");
     IrDocMethod elem = JavadocBlockParserUtil.fetchMethod(scanner, null);
     assertNotNull(elem);
     assertEquals("String", elem.getDeclaringType().getName().asString());
     assertEquals("length", elem.getName().asString());
     assertEquals(0, elem.getParameters().size());
     assertEquals(LEFT_BRACE, scanner.lookahead(0).getKind());
   }
   {
     DefaultJavadocScanner scanner = string("#length(){");
     IrDocMethod elem = JavadocBlockParserUtil.fetchMethod(scanner, null);
     assertNotNull(elem);
     assertNull(elem.getDeclaringType());
     assertEquals("length", elem.getName().asString());
     assertEquals(0, elem.getParameters().size());
     assertEquals(LEFT_BRACE, scanner.lookahead(0).getKind());
   }
   {
     DefaultJavadocScanner scanner = string("Math#abs(int)");
     IrDocMethod elem = JavadocBlockParserUtil.fetchMethod(scanner, null);
     assertNotNull(elem);
     assertEquals("Math", elem.getDeclaringType().getName().asString());
     assertEquals("abs", elem.getName().asString());
     assertEquals(1, elem.getParameters().size());
     {
       IrDocMethodParameter param = elem.getParameters().get(0);
       assertEquals(IrDocElementKind.BASIC_TYPE, param.getType().getKind());
       assertEquals(IrBasicTypeKind.INT, ((IrDocBasicType) param.getType()).getTypeKind());
       assertNull(param.getName());
     }
     assertEquals(EOF, scanner.lookahead(0).getKind());
   }
   {
     DefaultJavadocScanner scanner = string("Math#abs(int number)");
     IrDocMethod elem = JavadocBlockParserUtil.fetchMethod(scanner, null);
     assertNotNull(elem);
     assertEquals("Math", elem.getDeclaringType().getName().asString());
     assertEquals("abs", elem.getName().asString());
     assertEquals(1, elem.getParameters().size());
     {
       IrDocMethodParameter param = elem.getParameters().get(0);
       assertEquals(IrDocElementKind.BASIC_TYPE, param.getType().getKind());
       assertEquals(IrBasicTypeKind.INT, ((IrDocBasicType) param.getType()).getTypeKind());
       assertFalse(param.isVariableArity());
       assertNotNull(param.getName());
       assertEquals("number", param.getName().getIdentifier());
     }
     assertEquals(EOF, scanner.lookahead(0).getKind());
   }
   {
     DefaultJavadocScanner scanner = string("Arrays#asList(Object...)");
     IrDocMethod elem = JavadocBlockParserUtil.fetchMethod(scanner, null);
     assertNotNull(elem);
     assertEquals("Arrays", elem.getDeclaringType().getName().asString());
     assertEquals("asList", elem.getName().asString());
     assertEquals(1, elem.getParameters().size());
     {
       IrDocMethodParameter param = elem.getParameters().get(0);
       assertEquals(IrDocElementKind.NAMED_TYPE, param.getType().getKind());
       assertEquals("Object", ((IrDocNamedType) param.getType()).getName().asString());
       assertTrue(param.isVariableArity());
       assertNull(param.getName());
     }
     assertEquals(EOF, scanner.lookahead(0).getKind());
   }
   {
     DefaultJavadocScanner scanner = string("Arrays#asList(Object...elems)");
     IrDocMethod elem = JavadocBlockParserUtil.fetchMethod(scanner, null);
     assertNotNull(elem);
     assertEquals("Arrays", elem.getDeclaringType().getName().asString());
     assertEquals("asList", elem.getName().asString());
     assertEquals(1, elem.getParameters().size());
     {
       IrDocMethodParameter param = elem.getParameters().get(0);
       assertEquals(IrDocElementKind.NAMED_TYPE, param.getType().getKind());
       assertEquals("Object", ((IrDocNamedType) param.getType()).getName().asString());
       assertTrue(param.isVariableArity());
       assertNotNull(param.getName());
       assertEquals("elems", param.getName().getIdentifier());
     }
     assertEquals(EOF, scanner.lookahead(0).getKind());
   }
   {
     DefaultJavadocScanner scanner = string("Math#max(int, int)");
     IrDocMethod elem = JavadocBlockParserUtil.fetchMethod(scanner, null);
     assertNotNull(elem);
     assertEquals("Math", elem.getDeclaringType().getName().asString());
     assertEquals("max", elem.getName().asString());
     assertEquals(2, elem.getParameters().size());
     {
       IrDocMethodParameter param = elem.getParameters().get(0);
       assertEquals(IrDocElementKind.BASIC_TYPE, param.getType().getKind());
       assertEquals(IrBasicTypeKind.INT, ((IrDocBasicType) param.getType()).getTypeKind());
       assertFalse(param.isVariableArity());
       assertNull(param.getName());
     }
     {
       IrDocMethodParameter param = elem.getParameters().get(1);
       assertEquals(IrDocElementKind.BASIC_TYPE, param.getType().getKind());
       assertEquals(IrBasicTypeKind.INT, ((IrDocBasicType) param.getType()).getTypeKind());
       assertFalse(param.isVariableArity());
       assertNull(param.getName());
     }
     assertEquals(EOF, scanner.lookahead(0).getKind());
   }
   {
     DefaultJavadocScanner scanner = string("Math#max(int a, int b)");
     IrDocMethod elem = JavadocBlockParserUtil.fetchMethod(scanner, null);
     assertNotNull(elem);
     assertEquals("Math", elem.getDeclaringType().getName().asString());
     assertEquals("max", elem.getName().asString());
     assertEquals(2, elem.getParameters().size());
     {
       IrDocMethodParameter param = elem.getParameters().get(0);
       assertEquals(IrDocElementKind.BASIC_TYPE, param.getType().getKind());
       assertEquals(IrBasicTypeKind.INT, ((IrDocBasicType) param.getType()).getTypeKind());
       assertFalse(param.isVariableArity());
       assertNotNull(param.getName());
       assertEquals("a", param.getName().getIdentifier());
     }
     {
       IrDocMethodParameter param = elem.getParameters().get(1);
       assertEquals(IrDocElementKind.BASIC_TYPE, param.getType().getKind());
       assertEquals(IrBasicTypeKind.INT, ((IrDocBasicType) param.getType()).getTypeKind());
       assertFalse(param.isVariableArity());
       assertNotNull(param.getName());
       assertEquals("b", param.getName().getIdentifier());
     }
     assertEquals(EOF, scanner.lookahead(0).getKind());
   }
   {
     DefaultJavadocScanner scanner = string("/Math#max(int a, int b)");
     IrDocMethod elem = JavadocBlockParserUtil.fetchMethod(scanner, null);
     assertNull(elem);
     assertEquals(0, scanner.getIndex());
   }
   {
     DefaultJavadocScanner scanner = string("Math+#max(int a, int b)");
     IrDocMethod elem = JavadocBlockParserUtil.fetchMethod(scanner, null);
     assertNull(elem);
     assertEquals(0, scanner.getIndex());
   }
   {
     DefaultJavadocScanner scanner = string("Math#+max(int a, int b)");
     IrDocMethod elem = JavadocBlockParserUtil.fetchMethod(scanner, null);
     assertNull(elem);
     assertEquals(0, scanner.getIndex());
   }
   {
     DefaultJavadocScanner scanner = string("Math#max+(int a, int b)");
     IrDocMethod elem = JavadocBlockParserUtil.fetchMethod(scanner, null);
     assertNull(elem);
     assertEquals(0, scanner.getIndex());
   }
   {
     DefaultJavadocScanner scanner = string("Math#max(+int a, int b)");
     IrDocMethod elem = JavadocBlockParserUtil.fetchMethod(scanner, null);
     assertNull(elem);
     assertEquals(0, scanner.getIndex());
   }
   {
     DefaultJavadocScanner scanner = string("Math#max(int *a, int b)");
     IrDocMethod elem = JavadocBlockParserUtil.fetchMethod(scanner, null);
     assertNull(elem);
     assertEquals(0, scanner.getIndex());
   }
   {
     DefaultJavadocScanner scanner = string("Math#max(int a+, int b)");
     IrDocMethod elem = JavadocBlockParserUtil.fetchMethod(scanner, null);
     assertNull(elem);
     assertEquals(0, scanner.getIndex());
   }
   {
     DefaultJavadocScanner scanner = string("Math#max(int a int b)");
     IrDocMethod elem = JavadocBlockParserUtil.fetchMethod(scanner, null);
     assertNull(elem);
     assertEquals(0, scanner.getIndex());
   }
   {
     DefaultJavadocScanner scanner = string("Math#max(int a, int b");
     IrDocMethod elem = JavadocBlockParserUtil.fetchMethod(scanner, null);
     assertNull(elem);
     assertEquals(0, scanner.getIndex());
   }
   {
     DefaultJavadocScanner scanner = string("String#length(){");
     IrDocMethod elem = JavadocBlockParserUtil.fetchMethod(scanner, EnumSet.of(WHITE_SPACES));
     assertNull(elem);
     assertEquals(0, scanner.getIndex());
   }
 }
  /** Test method for {@link JavadocBlockParserUtil#fetchField(JavadocScanner, java.util.Set)}. */
  @Test
  public void testFetchField() {
    {
      DefaultJavadocScanner scanner = string("Math#PI{");
      IrDocField elem = JavadocBlockParserUtil.fetchField(scanner, null);
      assertNotNull(elem);

      assertEquals("Math", elem.getDeclaringType().getName().asString());
      assertEquals("PI", elem.getName().getIdentifier());
      assertSameLocation(0, "Math#PI".length(), elem.getLocation());

      assertEquals(LEFT_BRACE, scanner.lookahead(0).getKind());
    }
    {
      DefaultJavadocScanner scanner = string("#PI{");
      IrDocField elem = JavadocBlockParserUtil.fetchField(scanner, null);
      assertNotNull(elem);

      assertNull(elem.getDeclaringType());
      assertEquals("PI", elem.getName().getIdentifier());
      assertSameLocation(0, "#PI".length(), elem.getLocation());

      assertEquals(LEFT_BRACE, scanner.lookahead(0).getKind());
    }
    {
      DefaultJavadocScanner scanner = string("/Math#PI");
      IrDocField elem = JavadocBlockParserUtil.fetchField(scanner, null);
      assertNull(elem);
      assertEquals(0, scanner.getIndex());
    }
    {
      DefaultJavadocScanner scanner = string("Math+#PI");
      IrDocField elem = JavadocBlockParserUtil.fetchField(scanner, null);
      assertNull(elem);
      assertEquals(0, scanner.getIndex());
    }
    {
      DefaultJavadocScanner scanner = string("Math#+PI");
      IrDocField elem = JavadocBlockParserUtil.fetchField(scanner, null);
      assertNull(elem);
      assertEquals(0, scanner.getIndex());
    }
    {
      DefaultJavadocScanner scanner = string("Math#PI{");
      IrDocField elem = JavadocBlockParserUtil.fetchField(scanner, EnumSet.of(WHITE_SPACES));
      assertNull(elem);
      assertEquals(0, scanner.getIndex());
    }
  }
  /** Test method for {@link JavadocBlockParserUtil#fetchType(JavadocScanner, java.util.Set)}. */
  @Test
  public void testFetchType() {
    {
      DefaultJavadocScanner scanner = string("double");
      IrDocType type = JavadocBlockParserUtil.fetchType(scanner, null);
      assertNotNull(type);

      assertEquals(IrDocElementKind.BASIC_TYPE, type.getKind());
      IrDocBasicType elem = (IrDocBasicType) type;

      assertEquals(IrBasicTypeKind.DOUBLE, elem.getTypeKind());
      assertSameLocation(0, "double".length(), elem.getLocation());
      assertEquals(EOF, scanner.lookahead(0).getKind());
    }
    {
      DefaultJavadocScanner scanner = string("float[]");
      IrDocType type = JavadocBlockParserUtil.fetchType(scanner, null);
      assertNotNull(type);

      assertEquals(IrDocElementKind.ARRAY_TYPE, type.getKind());
      IrDocArrayType array = (IrDocArrayType) type;
      assertSameLocation(0, "float[]".length(), array.getLocation());

      IrDocBasicType elem = (IrDocBasicType) array.getComponentType();
      assertEquals(IrBasicTypeKind.FLOAT, elem.getTypeKind());
      assertSameLocation(0, "float".length(), elem.getLocation());
      assertEquals(EOF, scanner.lookahead(0).getKind());
    }
    {
      DefaultJavadocScanner scanner = string("char[][]");
      IrDocType type = JavadocBlockParserUtil.fetchType(scanner, null);
      assertNotNull(type);

      assertEquals(IrDocElementKind.ARRAY_TYPE, type.getKind());
      IrDocArrayType array = (IrDocArrayType) type;
      assertSameLocation(0, "char[][]".length(), array.getLocation());

      IrDocType component = array.getComponentType();
      assertEquals(IrDocElementKind.ARRAY_TYPE, component.getKind());
      IrDocArrayType array2 = (IrDocArrayType) component;
      assertSameLocation(0, "char[]".length(), array2.getLocation());

      IrDocBasicType elem = (IrDocBasicType) array2.getComponentType();
      assertEquals(IrBasicTypeKind.CHAR, elem.getTypeKind());
      assertSameLocation(0, "char".length(), elem.getLocation());
      assertEquals(EOF, scanner.lookahead(0).getKind());
    }
    {
      DefaultJavadocScanner scanner = string("java.lang.String");
      IrDocType type = JavadocBlockParserUtil.fetchType(scanner, null);
      assertNotNull(type);
      assertEquals(IrDocElementKind.NAMED_TYPE, type.getKind());
      IrDocNamedType elem = (IrDocNamedType) type;
      assertEquals("java.lang.String", elem.getName().asString());
      assertSameLocation(0, "java.lang.String".length(), elem.getLocation());
      assertEquals(EOF, scanner.lookahead(0).getKind());
    }
    {
      DefaultJavadocScanner scanner = string("java.lang.String[]");
      IrDocType type = JavadocBlockParserUtil.fetchType(scanner, null);
      assertNotNull(type);

      assertEquals(IrDocElementKind.ARRAY_TYPE, type.getKind());
      IrDocArrayType array = (IrDocArrayType) type;
      assertSameLocation(0, "java.lang.String[]".length(), array.getLocation());

      IrDocNamedType elem = (IrDocNamedType) array.getComponentType();
      assertEquals("java.lang.String", elem.getName().asString());
      assertSameLocation(0, "java.lang.String".length(), elem.getLocation());

      assertEquals(EOF, scanner.lookahead(0).getKind());
    }
  }
  /** Test method for {@link JavadocBlockParserUtil#fetchText(JavadocScanner, boolean, boolean)}. */
  @Test
  public void testFetchText() {
    DefaultJavadocScanner scanner = scanner("testFetchText.txt");
    {
      int offset = scanner.lookahead(0).getStartPosition();
      IrDocText text = JavadocBlockParserUtil.fetchText(scanner, false, false);
      assertEquals("onlyIdentifier", text.getContent());
      assertNotNull(text.getLocation());
      assertEquals(offset, text.getLocation().getStartPosition());
      assertEquals(text.getContent().length(), text.getLocation().getLength());

      assertEquals(JavadocTokenKind.LINE_BREAK, scanner.lookahead(0).getKind());
      scanner.consume(JavadocScannerUtil.countUntilNextLineStart(scanner, 0));
    }
    {
      int offset = scanner.lookahead(0).getStartPosition();
      IrDocText text = JavadocBlockParserUtil.fetchText(scanner, false, false);
      assertEquals("Identifier with space", text.getContent());
      assertNotNull(text.getLocation());
      assertEquals(offset, text.getLocation().getStartPosition());
      assertEquals(text.getContent().length(), text.getLocation().getLength());

      assertEquals(JavadocTokenKind.LINE_BREAK, scanner.lookahead(0).getKind());
      scanner.consume(JavadocScannerUtil.countUntilNextLineStart(scanner, 0));
    }
    {
      IrDocText text = JavadocBlockParserUtil.fetchText(scanner, false, false);
      assertNull(text);
      scanner.consume(JavadocScannerUtil.countUntilNextLineStart(scanner, 0));
    }
    {
      int offset = scanner.lookahead(0).getStartPosition();
      IrDocText text = JavadocBlockParserUtil.fetchText(scanner, false, false);
      assertEquals("head ", text.getContent());
      assertNotNull(text.getLocation());
      assertEquals(offset, text.getLocation().getStartPosition());
      assertEquals(text.getContent().length(), text.getLocation().getLength());

      assertEquals(JavadocTokenKind.LEFT_BRACE, scanner.lookahead(0).getKind());
      scanner.consume(
          JavadocScannerUtil.countUntil(EnumSet.of(JavadocTokenKind.RIGHT_BRACE), scanner, 0) + 1);

      offset = scanner.lookahead(0).getStartPosition();
      text = JavadocBlockParserUtil.fetchText(scanner, false, false);
      assertEquals(" tail", text.getContent());
      assertNotNull(text.getLocation());
      assertEquals(offset, text.getLocation().getStartPosition());
      assertEquals(text.getContent().length(), text.getLocation().getLength());

      assertEquals(JavadocTokenKind.LINE_BREAK, scanner.lookahead(0).getKind());
      scanner.consume(JavadocScannerUtil.countUntilNextLineStart(scanner, 0));
    }
    {
      int offset = scanner.lookahead(0).getStartPosition();
      IrDocText text = JavadocBlockParserUtil.fetchText(scanner, false, false);
      assertEquals("   <- 3spaces ->   ", text.getContent());
      assertNotNull(text.getLocation());
      assertEquals(offset, text.getLocation().getStartPosition());
      assertEquals(text.getContent().length(), text.getLocation().getLength());

      assertEquals(JavadocTokenKind.LINE_BREAK, scanner.lookahead(0).getKind());
      scanner.consume(JavadocScannerUtil.countUntilNextLineStart(scanner, 0));
    }
    {
      int offset = scanner.lookahead(0).getStartPosition();
      IrDocText text = JavadocBlockParserUtil.fetchText(scanner, true, false);
      assertEquals("<- 3spaces ->   ", text.getContent());
      assertNotNull(text.getLocation());
      assertEquals(offset + 3, text.getLocation().getStartPosition());
      assertEquals(text.getContent().length(), text.getLocation().getLength());

      assertEquals(JavadocTokenKind.LINE_BREAK, scanner.lookahead(0).getKind());
      scanner.consume(JavadocScannerUtil.countUntilNextLineStart(scanner, 0));
    }
    {
      int offset = scanner.lookahead(0).getStartPosition();
      IrDocText text = JavadocBlockParserUtil.fetchText(scanner, false, true);
      assertEquals("   <- 3spaces ->", text.getContent());
      assertNotNull(text.getLocation());
      assertEquals(offset, text.getLocation().getStartPosition());
      assertEquals(text.getContent().length(), text.getLocation().getLength());

      assertEquals(JavadocTokenKind.LINE_BREAK, scanner.lookahead(0).getKind());
      scanner.consume(JavadocScannerUtil.countUntilNextLineStart(scanner, 0));
    }
    {
      int offset = scanner.lookahead(0).getStartPosition();
      IrDocText text = JavadocBlockParserUtil.fetchText(scanner, true, true);
      assertEquals("<- 3spaces ->", text.getContent());
      assertNotNull(text.getLocation());
      assertEquals(offset + 3, text.getLocation().getStartPosition());
      assertEquals(text.getContent().length(), text.getLocation().getLength());

      assertEquals(JavadocTokenKind.LINE_BREAK, scanner.lookahead(0).getKind());
      scanner.consume(JavadocScannerUtil.countUntilNextLineStart(scanner, 0));
    }
    {
      IrDocText text = JavadocBlockParserUtil.fetchText(scanner, false, false);
      assertNull(text);
    }
  }