/**
* Copyright 2011-2014 Asakusa Framework Team.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.asakusafw.utils.java.parser.javadoc;
import static com.asakusafw.utils.java.internal.parser.javadoc.ir.JavadocTokenKind.*;
import static org.junit.Assert.*;
import java.util.EnumSet;
import org.junit.Test;
import com.asakusafw.utils.java.internal.parser.javadoc.ir.IrBasicTypeKind;
import com.asakusafw.utils.java.internal.parser.javadoc.ir.IrDocArrayType;
import com.asakusafw.utils.java.internal.parser.javadoc.ir.IrDocBasicType;
import com.asakusafw.utils.java.internal.parser.javadoc.ir.IrDocElement;
import com.asakusafw.utils.java.internal.parser.javadoc.ir.IrDocElementKind;
import com.asakusafw.utils.java.internal.parser.javadoc.ir.IrDocField;
import com.asakusafw.utils.java.internal.parser.javadoc.ir.IrDocFragment;
import com.asakusafw.utils.java.internal.parser.javadoc.ir.IrDocMethod;
import com.asakusafw.utils.java.internal.parser.javadoc.ir.IrDocMethodParameter;
import com.asakusafw.utils.java.internal.parser.javadoc.ir.IrDocName;
import com.asakusafw.utils.java.internal.parser.javadoc.ir.IrDocNamedType;
import com.asakusafw.utils.java.internal.parser.javadoc.ir.IrDocSimpleName;
import com.asakusafw.utils.java.internal.parser.javadoc.ir.IrDocText;
import com.asakusafw.utils.java.internal.parser.javadoc.ir.IrDocType;
import com.asakusafw.utils.java.internal.parser.javadoc.ir.IrLocation;
import com.asakusafw.utils.java.internal.parser.javadoc.ir.JavadocToken;
import com.asakusafw.utils.java.internal.parser.javadoc.ir.JavadocTokenKind;
/**
* Test for {@link JavadocBlockParserUtil}.
*/
public class JavadocBlockParserUtilTest extends JavadocTestRoot {
/**
* Test method for {@link JavadocBlockParserUtil#setLocation(IrDocElement, JavadocToken, JavadocToken)}.
*/
@Test
public void testSetLocationToken() {
{
IrDocElement elem = new IrDocText("text");
JavadocToken start = new JavadocToken(JavadocTokenKind.IDENTIFIER, "id", 10);
JavadocToken stop = new JavadocToken(JavadocTokenKind.IDENTIFIER, "id", 20);
JavadocBlockParserUtil.setLocation(elem, start, stop);
assertEquals(10, elem.getLocation().getStartPosition());
assertEquals(12, elem.getLocation().getLength());
}
{
IrDocElement elem = new IrDocText("text");
JavadocToken start = new JavadocToken(JavadocTokenKind.IDENTIFIER, "id", 10);
JavadocBlockParserUtil.setLocation(elem, start, start);
assertEquals(10, elem.getLocation().getStartPosition());
assertEquals(2, elem.getLocation().getLength());
}
}
/**
* Test method for {@link JavadocBlockParserUtil#setLocation(IrDocElement, IrLocation, IrLocation)}.
*/
@Test
public void testSetLocationLocation() {
{
IrDocElement elem = new IrDocText("text");
IrLocation start = new IrLocation(10, 2);
IrLocation stop = new IrLocation(20, 2);
JavadocBlockParserUtil.setLocation(elem, start, stop);
assertEquals(10, elem.getLocation().getStartPosition());
assertEquals(12, elem.getLocation().getLength());
}
{
IrDocElement elem = new IrDocText("text");
IrLocation start = new IrLocation(10, 2);
JavadocBlockParserUtil.setLocation(elem, start, start);
assertEquals(10, elem.getLocation().getStartPosition());
assertEquals(2, elem.getLocation().getLength());
}
{
IrDocElement elem = new IrDocText("text");
IrLocation fragment = new IrLocation(10, 2);
JavadocBlockParserUtil.setLocation(elem, null, fragment);
assertNull(elem.getLocation());
}
{
IrDocElement elem = new IrDocText("text");
IrLocation fragment = new IrLocation(10, 2);
JavadocBlockParserUtil.setLocation(elem, fragment, null);
assertNull(elem.getLocation());
}
}
/**
* 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);
}
}
/**
* 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#fetchBlockInfo(JavadocScanner)}.
*/
@Test
public void testFetchBlockInfoSimple() {
DefaultJavadocScanner scanner = scanner("simple-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!", inline.getContent());
assertEquals(JavadocTokenKind.EOF, bScanner.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#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#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#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#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#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#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#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#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#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());
}
}
private void assertSameLocation(int start, int length, IrLocation location) {
assertEquals(start, location.getStartPosition());
assertEquals(length, location.getLength());
}
}