/** * Copyright 2011-2017 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 java.util.List; import org.junit.Test; import com.asakusafw.utils.java.internal.parser.javadoc.ir.JavadocToken; import com.asakusafw.utils.java.internal.parser.javadoc.ir.JavadocTokenKind; /** * Test for {@link JavadocScannerUtil}. */ public class JavadocScannerUtilTest extends JavadocTestRoot { /** * Test method for {@link JavadocScannerUtil#lookaheadTokens(JavadocScanner, int, int)}. */ @Test public void testLookaheadTokens() { DefaultJavadocScanner scanner = scanner("alphabets.txt"); { List<JavadocToken> tokens = JavadocScannerUtil.lookaheadTokens(scanner, 0, 0); assertTextSequence(tokens); } { List<JavadocToken> tokens = JavadocScannerUtil.lookaheadTokens(scanner, 0, 1); assertTextSequence(tokens, "a"); } { List<JavadocToken> tokens = JavadocScannerUtil.lookaheadTokens(scanner, 0, 3); assertTextSequence(tokens, "a", " ", "b"); } { List<JavadocToken> tokens = JavadocScannerUtil.lookaheadTokens(scanner, 4, 3); assertTextSequence(tokens, "c", " ", "d"); } { List<JavadocToken> tokens = JavadocScannerUtil.lookaheadTokens(scanner, 46, 100); assertTextSequence(tokens, "x", " ", "y", " ", "z"); } } /** * Test method for {@link JavadocScannerUtil#countWhile(java.util.Collection, JavadocScanner, int)}. */ @Test public void testCountWhileVoid() { DefaultJavadocScanner scanner = scanner("kinds.txt"); { EnumSet<JavadocTokenKind> set = EnumSet.noneOf(JavadocTokenKind.class); int count = JavadocScannerUtil.countWhile(set, scanner, 0); assertEquals(0, count); } { EnumSet<JavadocTokenKind> set = EnumSet.noneOf(JavadocTokenKind.class); int count = JavadocScannerUtil.countWhile(set, scanner, 3); assertEquals(0, count); } { EnumSet<JavadocTokenKind> set = EnumSet.noneOf(JavadocTokenKind.class); int count = JavadocScannerUtil.countWhile(set, scanner, 5); assertEquals(0, count); } } /** * Test method for {@link JavadocScannerUtil#countWhile(java.util.Collection, JavadocScanner, int)}. */ @Test public void testCountWhileSingle() { DefaultJavadocScanner scanner = scanner("kinds.txt"); { EnumSet<JavadocTokenKind> set = EnumSet.of(ASTERISK); int count = JavadocScannerUtil.countWhile(set, scanner, 0); assertEquals(3, count); } { EnumSet<JavadocTokenKind> set = EnumSet.of(ASTERISK); int count = JavadocScannerUtil.countWhile(set, scanner, 1); assertEquals(2, count); } { EnumSet<JavadocTokenKind> set = EnumSet.of(ASTERISK); int count = JavadocScannerUtil.countWhile(set, scanner, 2); assertEquals(1, count); } { EnumSet<JavadocTokenKind> set = EnumSet.of(ASTERISK); int count = JavadocScannerUtil.countWhile(set, scanner, 3); assertEquals(0, count); } { EnumSet<JavadocTokenKind> set = EnumSet.of(IDENTIFIER); int count = JavadocScannerUtil.countWhile(set, scanner, 0); assertEquals(0, count); } { EnumSet<JavadocTokenKind> set = EnumSet.of(IDENTIFIER); int count = JavadocScannerUtil.countWhile(set, scanner, 3); assertEquals(1, count); } } /** * Test method for {@link JavadocScannerUtil#countWhile(java.util.Collection, JavadocScanner, int)}. */ @Test public void testCountWhileMulti() { DefaultJavadocScanner scanner = scanner("kinds.txt"); { EnumSet<JavadocTokenKind> set = EnumSet.of(ASTERISK, IDENTIFIER); int count = JavadocScannerUtil.countWhile(set, scanner, 0); assertEquals(4, count); } { EnumSet<JavadocTokenKind> set = EnumSet.of(ASTERISK, IDENTIFIER, QUESTION); int count = JavadocScannerUtil.countWhile(set, scanner, 0); assertEquals(8, count); } { EnumSet<JavadocTokenKind> set = EnumSet.of(QUESTION, WHITE_SPACES); int count = JavadocScannerUtil.countWhile(set, scanner, 0); assertEquals(0, count); } { EnumSet<JavadocTokenKind> set = EnumSet.of(QUESTION, WHITE_SPACES); int count = JavadocScannerUtil.countWhile(set, scanner, 4); assertEquals(5, count); } { EnumSet<JavadocTokenKind> set = EnumSet.allOf(JavadocTokenKind.class); int count = JavadocScannerUtil.countWhile(set, scanner, 0); assertEquals(scanner.getTokens().size(), count); } } /** * Test method for {@link JavadocScannerUtil#countUntil(java.util.Collection, JavadocScanner, int)}. */ @Test public void testCountUntilVoid() { DefaultJavadocScanner scanner = scanner("kinds.txt"); { EnumSet<JavadocTokenKind> set = EnumSet.noneOf(JavadocTokenKind.class); int count = JavadocScannerUtil.countUntil(set, scanner, 0); assertEquals(scanner.getTokens().size(), count); } { EnumSet<JavadocTokenKind> set = EnumSet.noneOf(JavadocTokenKind.class); int count = JavadocScannerUtil.countUntil(set, scanner, 5); assertEquals(scanner.getTokens().size() - 5, count); } } /** * Test method for {@link JavadocScannerUtil#countUntil(java.util.Collection, JavadocScanner, int)}. */ @Test public void testCountUntilSingle() { DefaultJavadocScanner scanner = scanner("kinds.txt"); { EnumSet<JavadocTokenKind> set = EnumSet.of(ASTERISK); int count = JavadocScannerUtil.countUntil(set, scanner, 0); assertEquals(0, count); } { EnumSet<JavadocTokenKind> set = EnumSet.of(IDENTIFIER); int count = JavadocScannerUtil.countUntil(set, scanner, 0); assertEquals(3, count); } { EnumSet<JavadocTokenKind> set = EnumSet.of(QUESTION); int count = JavadocScannerUtil.countUntil(set, scanner, 0); assertEquals(4, count); } { EnumSet<JavadocTokenKind> set = EnumSet.of(WHITE_SPACES); int count = JavadocScannerUtil.countUntil(set, scanner, 0); assertEquals(8, count); } { EnumSet<JavadocTokenKind> set = EnumSet.of(AT); int count = JavadocScannerUtil.countUntil(set, scanner, 5); assertEquals(5, count); } } /** * Test method for {@link JavadocScannerUtil#countUntil(java.util.Collection, JavadocScanner, int)}. */ @Test public void testCountUntilMulti() { DefaultJavadocScanner scanner = scanner("kinds.txt"); { EnumSet<JavadocTokenKind> set = EnumSet.of(IDENTIFIER, AT); int count = JavadocScannerUtil.countUntil(set, scanner, 0); assertEquals(3, count); } { EnumSet<JavadocTokenKind> set = EnumSet.of(IDENTIFIER, AT); int count = JavadocScannerUtil.countUntil(set, scanner, 5); assertEquals(5, count); } } /** * Test method for {@link JavadocScannerUtil#countUntilBlockEnd(JavadocScanner, int)}. */ @Test public void testCountUntilBlockEnd() { { DefaultJavadocScanner scanner = string("Hello, world!"); int count = JavadocScannerUtil.countUntilBlockEnd(scanner, 0); assertEquals(EOF, scanner.lookahead(count).getKind()); } { DefaultJavadocScanner scanner = string( "Hello, world!\n" + "@stop"); int count = JavadocScannerUtil.countUntilBlockEnd(scanner, 0); assertEquals(AT, scanner.lookahead(count).getKind()); assertEquals("stop", scanner.lookahead(count + 1).getText()); } { DefaultJavadocScanner scanner = string( "\n" + " * Hello, world!\n" + " * @stop"); int count = JavadocScannerUtil.countUntilBlockEnd(scanner, 0); assertEquals(AT, scanner.lookahead(count).getKind()); assertEquals("stop", scanner.lookahead(count + 1).getText()); } { DefaultJavadocScanner scanner = string( "\n" + " * Hello, world!\n" + " * @stop"); int count = JavadocScannerUtil.countUntilBlockEnd(scanner, 0); assertEquals(AT, scanner.lookahead(count).getKind()); assertEquals("stop", scanner.lookahead(count + 1).getText()); } { DefaultJavadocScanner scanner = string( "\n" + " * {@code block start-->\n" + " * @dummy\n" + " * }\n" + " * @stop"); int count = JavadocScannerUtil.countUntilBlockEnd(scanner, 0); assertEquals(AT, scanner.lookahead(count).getKind()); assertEquals("stop", scanner.lookahead(count + 1).getText()); } { DefaultJavadocScanner scanner = string( "\n" + " * @start\n" + " * {@code block start-->\n" + " * @dummy\n" + " * }\n" + " * @stop"); int count = JavadocScannerUtil.countUntilBlockEnd(scanner, 6); assertEquals(AT, scanner.lookahead(6 + count).getKind()); assertEquals("stop", scanner.lookahead(6 + count + 1).getText()); } } /** * Test method for {@link JavadocScannerUtil#countUntilCommentEnd(JavadocScanner, boolean, int)}. */ @Test public void testCountUntilCommentEnd() { { DefaultJavadocScanner scanner = string("*/"); int count = JavadocScannerUtil.countUntilCommentEnd(scanner, true, 0); assertEquals(0, count); } { DefaultJavadocScanner scanner = string("*/ /* */"); int count = JavadocScannerUtil.countUntilCommentEnd(scanner, true, 0); assertEquals(0, count); } { DefaultJavadocScanner scanner = string("*****/ /* */"); int count = JavadocScannerUtil.countUntilCommentEnd(scanner, true, 0); assertEquals(4, count); } { DefaultJavadocScanner scanner = string("*****/ /* */"); int count = JavadocScannerUtil.countUntilCommentEnd(scanner, false, 0); assertEquals(4, count); } { DefaultJavadocScanner scanner = string("*****+/ /* */"); int count = JavadocScannerUtil.countUntilCommentEnd(scanner, true, 0); assertEquals(11, count); } { DefaultJavadocScanner scanner = string("*****+/ /* +/"); int count = JavadocScannerUtil.countUntilCommentEnd(scanner, true, 0); assertEquals(-1, count); } { DefaultJavadocScanner scanner = string("*****+/ /* +/"); int count = JavadocScannerUtil.countUntilCommentEnd(scanner, false, 0); assertEquals(scanner.getTokens().size(), count); } } /** * Test method for {@link JavadocScannerUtil#countUntilNextLineStart(JavadocScanner, int)}. */ @Test public void testCountUntilNextLineStart() { DefaultJavadocScanner scanner = scanner("3lines-formatted.txt"); int offset = 0; assertEquals("a", scanner.lookahead(offset).getText()); offset++; assertEquals(LINE_BREAK, scanner.lookahead(offset).getKind()); offset += JavadocScannerUtil.countUntilNextLineStart(scanner, offset); assertEquals(WHITE_SPACES, scanner.lookahead(offset).getKind()); assertEquals("b", scanner.lookahead(offset + 1).getText()); offset += 2; assertEquals(LINE_BREAK, scanner.lookahead(offset).getKind()); offset += JavadocScannerUtil.countUntilNextLineStart(scanner, offset); assertEquals(WHITE_SPACES, scanner.lookahead(offset).getKind()); assertEquals("c", scanner.lookahead(offset + 1).getText()); offset += 2; assertEquals(EOF, scanner.lookahead(offset).getKind()); } /** * Test method for {@link JavadocScannerUtil#countUntilNextPrintable(JavadocScanner, int)}. */ @Test public void testCountUntilNextPrintableGeneral() { DefaultJavadocScanner scanner = scanner("alphabets.txt"); int offset = 0; assertEquals("a", scanner.lookahead(offset).getText()); offset++; assertEquals(WHITE_SPACES, scanner.lookahead(offset).getKind()); offset += JavadocScannerUtil.countUntilNextPrintable(scanner, offset); assertEquals("b", scanner.lookahead(offset).getText()); offset++; assertEquals(WHITE_SPACES, scanner.lookahead(offset).getKind()); offset += JavadocScannerUtil.countUntilNextPrintable(scanner, offset); assertEquals("c", scanner.lookahead(offset).getText()); } /** * Test method for {@link JavadocScannerUtil#countUntilNextPrintable(JavadocScanner, int)}. */ @Test public void testCountUntilNextPrintableBeyondLines() { DefaultJavadocScanner scanner = scanner("3lines-formatted.txt"); int offset = 0; assertEquals("a", scanner.lookahead(offset).getText()); offset++; offset += JavadocScannerUtil.countUntilNextPrintable(scanner, offset); assertEquals("b", scanner.lookahead(offset).getText()); offset++; offset += JavadocScannerUtil.countUntilNextPrintable(scanner, offset); assertEquals("c", scanner.lookahead(offset).getText()); offset++; offset += JavadocScannerUtil.countUntilNextPrintable(scanner, offset); assertEquals(EOF, scanner.lookahead(offset).getKind()); } /** * Test method for {@link JavadocScannerUtil#countUntilNextPrintable(JavadocScanner, int)}. */ @Test public void testCountUntilNextPrintableBeyondBlankLines() { DefaultJavadocScanner scanner = scanner("blank-lines.txt"); int offset = 0; assertEquals("a", scanner.lookahead(offset).getText()); offset++; offset += JavadocScannerUtil.countUntilNextPrintable(scanner, offset); assertEquals("b", scanner.lookahead(offset).getText()); offset++; offset += JavadocScannerUtil.countUntilNextPrintable(scanner, offset); assertEquals("c", scanner.lookahead(offset).getText()); offset++; offset += JavadocScannerUtil.countUntilNextPrintable(scanner, offset); assertEquals("d", scanner.lookahead(offset).getText()); offset++; offset += JavadocScannerUtil.countUntilNextPrintable(scanner, offset); assertEquals(EOF, scanner.lookahead(offset).getKind()); } }