/* Copyright (C) 2013 Raquel Pau and Albert Coroleu. Walkmod is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Walkmod is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with Walkmod. If not, see <http://www.gnu.org/licenses/>.*/ package org.walkmod.javalang.ast; import java.io.File; import java.util.List; import org.junit.Assert; import org.junit.Test; import org.walkmod.javalang.JavadocManager; import org.walkmod.javalang.ast.body.JavadocTag; import org.walkmod.javalang.util.FileUtils; public class JavadocTest { @Test public void testSingleTag() throws Exception { String javadoc = "@author walkmod"; List<JavadocTag> tags = JavadocManager.parse(javadoc); Assert.assertTrue(!tags.isEmpty()); } @Test public void testMultipleTag() throws Exception { String javadoc = "@author <a href=\"mailto:benito@mail.com\">walkmod</a> \n @version 1.5 "; List<JavadocTag> tags = JavadocManager.parse(javadoc); Assert.assertTrue(tags.size() == 2); JavadocTag jt = tags.get(0); Assert.assertEquals("@author", jt.getName()); Assert.assertNotNull(jt.getValues()); Assert.assertEquals(1, jt.getValues().size()); Assert.assertEquals("<a href=\"mailto:benito@mail.com\">walkmod</a>", jt.getValues().get(0)); jt = tags.get(1); Assert.assertEquals("@version", jt.getName()); Assert.assertNotNull(jt.getValues()); Assert.assertEquals(1, jt.getValues().size()); Assert.assertEquals("1.5", jt.getValues().get(0)); } @Test public void testSpecificBlockTags() throws Exception { String javadoc = "@param fooParam my param description"; List<JavadocTag> tags = JavadocManager.parse(javadoc); Assert.assertTrue(tags.size() == 1); JavadocTag jt = tags.get(0); Assert.assertEquals("@param", jt.getName()); Assert.assertNotNull(jt.getValues()); Assert.assertEquals(2, jt.getValues().size()); Assert.assertEquals("fooParam", jt.getValues().get(0)); Assert.assertEquals("my param description", jt.getValues().get(1)); javadoc = "@param fooParam"; tags = JavadocManager.parse(javadoc); Assert.assertTrue(tags.size() == 1); jt = tags.get(0); Assert.assertEquals("@param", jt.getName()); Assert.assertNotNull(jt.getValues()); Assert.assertEquals(1, jt.getValues().size()); Assert.assertEquals("fooParam", jt.getValues().get(0)); } @Test public void testInlineTags() throws Exception { String javadoc = "Use the {@link #getComponentAt(int, int) getComponentAt} method."; List<JavadocTag> tags = JavadocManager.parse(javadoc); Assert.assertTrue(tags.size() == 1); JavadocTag jt = tags.get(0); Assert.assertEquals("@link", jt.getName()); Assert.assertNotNull(jt.getValues()); Assert.assertEquals(2, jt.getValues().size()); Assert.assertEquals("#getComponentAt(int, int)", jt.getValues().get(0)); Assert.assertEquals("getComponentAt", jt.getValues().get(1)); } @Test public void testInlineTagsWithArray() throws Exception { String javadoc = "Use the {@link #getComponentAt(int[], int[]) getComponentAt} method."; List<JavadocTag> tags = JavadocManager.parse(javadoc); Assert.assertTrue(tags.size() == 1); JavadocTag jt = tags.get(0); Assert.assertEquals("@link", jt.getName()); Assert.assertNotNull(jt.getValues()); Assert.assertEquals(2, jt.getValues().size()); Assert.assertEquals("#getComponentAt(int[], int[])", jt.getValues() .get(0)); Assert.assertEquals("getComponentAt", jt.getValues().get(1)); } @Test public void testInnnerCode() throws Exception { String javadoc = "{@code \n" + "public static double sqrt(double value) {\n" + " Preconditions.checkArgument(value >= 0.0, \"negative value: %s\", value);\n" + " // calculate the square root\n" + "}\n" + "void exampleBadCaller() {\n" + " double d = sqrt(-1.0);\n" + "}};"; List<JavadocTag> tags = JavadocManager.parse(javadoc); Assert.assertTrue(tags.size() == 1); JavadocTag jt = tags.get(0); Assert.assertEquals("@code", jt.getName()); Assert.assertNotNull(jt.getValues()); Assert.assertEquals(1, jt.getValues().size()); String code = jt.getValues().get(0); Assert.assertTrue(code.contains("double d = sqrt(-1.0);")); } @Test public void testInnnerEmptyBraces() throws Exception { String javadoc = "{@code \n"+ " static <T> TypeToken<List<T>> listOf(Class<T> elementType) {\n"+ " return new TypeToken<List<T>>() {}\n"+ " .where(new TypeParameter<T>() {}, elementType);\n"+ " }}"; List<JavadocTag> tags = JavadocManager.parse(javadoc); Assert.assertTrue(tags.size() == 1); JavadocTag jt = tags.get(0); Assert.assertEquals("@code", jt.getName()); Assert.assertNotNull(jt.getValues()); Assert.assertEquals(1, jt.getValues().size()); String code = jt.getValues().get(0); Assert.assertTrue(code.contains("new TypeParameter<T>()")); } @Test public void testInnnerJavadocTags() throws Exception { String javadoc = "{@code \n" + "/**\n"+ "* Returns the positive square root of the given value.\n"+ "*\n"+ "* @throws IllegalArgumentException if the value is negative\n"+ "*}"; List<JavadocTag> tags = JavadocManager.parse(javadoc); Assert.assertTrue(tags.size() == 1); JavadocTag jt = tags.get(0); Assert.assertEquals("@code", jt.getName()); Assert.assertNotNull(jt.getValues()); Assert.assertEquals(1, jt.getValues().size()); String code = jt.getValues().get(0); Assert.assertTrue(code.contains("@throws IllegalArgumentException")); } @Test public void testMultipleLineJavadocTags() throws Exception{ String javadoc = "Weak reference with a method which a background thread invokes after\n"; javadoc+="* the garbage collector reclaims the referent. This is a simpler alternative to using a {@link\n"; javadoc+="* ReferenceQueue }."; List<JavadocTag> tags = JavadocManager.parse(javadoc); Assert.assertTrue(tags.size() == 1); JavadocTag jt = tags.get(0); Assert.assertEquals("@link", jt.getName()); Assert.assertEquals("ReferenceQueue",jt.getValues().get(0)); } @Test public void testJavadocFailure() throws Exception { String javadoc = FileUtils .fileToString("src/test/resources/javadocFailure.txt"); javadoc = javadoc.replaceAll("\\*", ""); List<JavadocTag> tags = JavadocManager.parse(javadoc); Assert.assertTrue(tags.size() > 1); } }