/**
* Copyright 2014 Red Hat, Inc. and/or its affiliates.
*
* Licensed under the Eclipse Public License version 1.0, available at
* http://www.eclipse.org/legal/epl-v10.html
*/
package org.jboss.forge.test.roaster.model;
import org.jboss.forge.roaster.Roaster;
import org.jboss.forge.roaster.model.JavaDoc;
import org.jboss.forge.roaster.model.JavaDocTag;
import org.jboss.forge.roaster.model.source.EnumConstantSource;
import org.jboss.forge.roaster.model.source.FieldSource;
import org.jboss.forge.roaster.model.source.JavaClassSource;
import org.jboss.forge.roaster.model.source.JavaDocSource;
import org.jboss.forge.roaster.model.source.JavaEnumSource;
import org.jboss.forge.roaster.model.source.MethodSource;
import org.junit.Assert;
import org.junit.Test;
/**
* Tests for {@link JavaDoc} support
*
* @author <a href="ggastald@redhat.com">George Gastaldi</a>
*/
public class JavaDocTest
{
private static final String LINE_SEPARATOR = System.getProperty("line.separator");
@Test
public void testJavaDocParsing() throws Exception
{
String text = "/** Text */ public class MyClass{}";
JavaClassSource javaClass = Roaster.parse(JavaClassSource.class, text);
JavaDocSource<JavaClassSource> javaDoc = javaClass.getJavaDoc();
Assert.assertNotNull(javaDoc);
Assert.assertEquals("Text", javaDoc.getText());
Assert.assertTrue(javaDoc.getTagNames().isEmpty());
}
@Test
public void testJavaDocParsingTags() throws Exception
{
String text = "/** Do Something\n*@author George Gastaldi*/ public class MyClass{}";
JavaClassSource javaClass = Roaster.parse(JavaClassSource.class, text);
JavaDocSource<JavaClassSource> javaDoc = javaClass.getJavaDoc();
Assert.assertNotNull(javaDoc);
Assert.assertEquals("Do Something", javaDoc.getText());
Assert.assertEquals(1, javaDoc.getTagNames().size());
JavaDocTag authorTag = javaDoc.getTags("@author").get(0);
Assert.assertEquals("@author", authorTag.getName());
Assert.assertEquals("George Gastaldi", authorTag.getValue());
}
@Test
public void testJavaDocRefTag() throws Exception
{
String text = "/** Do Something\n*@author George Gastaldi\n*@see JavaDocTest#testJavaDocCreation()\n*/ public class MyClass{}";
JavaClassSource javaClass = Roaster.parse(JavaClassSource.class, text);
JavaDocSource<JavaClassSource> javaDoc = javaClass.getJavaDoc();
Assert.assertNotNull(javaDoc);
Assert.assertEquals("Do Something", javaDoc.getText());
Assert.assertEquals(2, javaDoc.getTagNames().size());
JavaDocTag authorTag = javaDoc.getTags("@author").get(0);
Assert.assertEquals("@author", authorTag.getName());
Assert.assertEquals("George Gastaldi", authorTag.getValue());
JavaDocTag seeTag = javaDoc.getTags("@see").get(0);
Assert.assertEquals("@see", seeTag.getName());
Assert.assertEquals("JavaDocTest#testJavaDocCreation()", seeTag.getValue());
}
@Test
public void testJavaDocCreation() throws Exception
{
String expected = "/**" + LINE_SEPARATOR
+ " * Do Something" + LINE_SEPARATOR
+ " * " + LINE_SEPARATOR
+ " * @author George Gastaldi" + LINE_SEPARATOR + " */" + LINE_SEPARATOR
+ "public class MyClass {" + LINE_SEPARATOR + "}";
JavaClassSource javaClass = Roaster.create(JavaClassSource.class).setPublic().setName("MyClass");
Assert.assertFalse(javaClass.hasJavaDoc());
JavaDocSource<JavaClassSource> javaDoc = javaClass.getJavaDoc();
javaDoc.setText("Do Something").addTagValue("@author", "George Gastaldi");
Assert.assertEquals(expected, javaClass.toString());
}
@Test
public void testJavaDocSetFullText() throws Exception
{
String expected = "/**" + LINE_SEPARATOR
+ " * Do Something" + LINE_SEPARATOR
+ " * " + LINE_SEPARATOR
+ " * @author George Gastaldi" + LINE_SEPARATOR + " */" + LINE_SEPARATOR
+ "public class MyClass {" + LINE_SEPARATOR + "}";
JavaClassSource javaClass = Roaster.create(JavaClassSource.class).setPublic().setName("MyClass");
Assert.assertFalse(javaClass.hasJavaDoc());
JavaDocSource<JavaClassSource> javaDoc = javaClass.getJavaDoc();
javaDoc.setFullText("Do Something" + LINE_SEPARATOR + "* @author George Gastaldi");
Assert.assertEquals(expected, javaClass.toString());
}
@Test
public void testJavaDocGetFullText() throws Exception
{
String text = "/**" + LINE_SEPARATOR
+ " * Do Something" + LINE_SEPARATOR
+ " * @author George Gastaldi" + LINE_SEPARATOR + " */" + LINE_SEPARATOR
+ "public class MyClass" + LINE_SEPARATOR + "{" + LINE_SEPARATOR + "}";
JavaClassSource javaClass = Roaster.parse(JavaClassSource.class, text);
Assert.assertTrue(javaClass.hasJavaDoc());
JavaDocSource<JavaClassSource> javaDoc = javaClass.getJavaDoc();
String expected = "Do Something" + LINE_SEPARATOR + "@author George Gastaldi";
Assert.assertEquals(expected, javaDoc.getFullText());
}
@Test
public void testJavaDocField() throws Exception
{
String text = "public class MyClass {"
+ "/**" + LINE_SEPARATOR
+ " * Do Something" + LINE_SEPARATOR
+ " * @author George Gastaldi" + LINE_SEPARATOR + " */" + LINE_SEPARATOR + ""
+ "private String foo;}";
JavaClassSource javaClass = Roaster.parse(JavaClassSource.class, text);
Assert.assertFalse(javaClass.hasJavaDoc());
Assert.assertEquals(1, javaClass.getFields().size());
FieldSource<JavaClassSource> field = javaClass.getFields().get(0);
Assert.assertTrue(field.hasJavaDoc());
JavaDocSource<FieldSource<JavaClassSource>> javaDoc = field.getJavaDoc();
String expected = "Do Something" + LINE_SEPARATOR + "@author George Gastaldi";
Assert.assertEquals(expected, javaDoc.getFullText());
}
@Test
public void testJavaDocMethod() throws Exception
{
String text = "public class MyClass {"
+ "/**" + LINE_SEPARATOR
+ " * Do Something" + LINE_SEPARATOR
+ " * @author George Gastaldi" + LINE_SEPARATOR + " */" + LINE_SEPARATOR + ""
+ "private void foo(){};}";
JavaClassSource javaClass = Roaster.parse(JavaClassSource.class, text);
Assert.assertFalse(javaClass.hasJavaDoc());
Assert.assertEquals(1, javaClass.getMethods().size());
MethodSource<JavaClassSource> method = javaClass.getMethods().get(0);
Assert.assertTrue(method.hasJavaDoc());
JavaDocSource<MethodSource<JavaClassSource>> javaDoc = method.getJavaDoc();
String expected = "Do Something" + LINE_SEPARATOR + "@author George Gastaldi";
Assert.assertEquals(expected, javaDoc.getFullText());
}
@Test
public void testJavaDocEnumConstant() throws Exception
{
String text = "public enum MyEnum {"
+ "/**" + LINE_SEPARATOR
+ " * Do Something" + LINE_SEPARATOR
+ " * @author George Gastaldi" + LINE_SEPARATOR + " */" + LINE_SEPARATOR + ""
+ "MY_CONSTANT;}";
JavaEnumSource javaEnum = Roaster.parse(JavaEnumSource.class, text);
Assert.assertFalse(javaEnum.hasJavaDoc());
EnumConstantSource enumConstant = javaEnum.getEnumConstant("MY_CONSTANT");
Assert.assertTrue(enumConstant.hasJavaDoc());
JavaDocSource<EnumConstantSource> javaDoc = enumConstant.getJavaDoc();
String expected = "Do Something" + LINE_SEPARATOR + "@author George Gastaldi";
Assert.assertEquals(expected, javaDoc.getFullText());
}
@Test
public void testJavaDocMultiLineShouldNotConcatenateWords() throws Exception
{
String text = "/**" + LINE_SEPARATOR
+ "* The country where this currency is used mostly. This field is just for" + LINE_SEPARATOR
+ "* informational purposes and have no effect on any processing." + LINE_SEPARATOR
+ "*/" + LINE_SEPARATOR
+ "public class MyClass{}";
JavaClassSource javaClass = Roaster.parse(JavaClassSource.class, text);
JavaDocSource<JavaClassSource> javaDoc = javaClass.getJavaDoc();
String expected = "The country where this currency is used mostly. This field is just for informational purposes and have no effect on any processing.";
Assert.assertEquals(expected, javaDoc.getFullText());
}
@Test
public void testJavaDocFullTextShouldFormatParamWithSpace() throws Exception
{
JavaClassSource src = Roaster.parse(JavaClassSource.class,
"package issue;\npublic class Issue { \n" +
" /**\n" +
" * Creates a new instance of CLASS\n" +
" *\n" +
" * @param actual the actual value.\n" +
" * @return the modified text\n" +
" */\n" +
" public static String someMethod(String actual) {\n" +
" return actual;\n" +
" }}");
MethodSource<JavaClassSource> method = src.getMethods().get(0);
Assert.assertEquals(
"Creates a new instance of CLASS" + LINE_SEPARATOR + "@param actual the actual value." + LINE_SEPARATOR + "@return the modified text",
method.getJavaDoc().getFullText());
}
}