/**
* Copyright 2013-2015 John Ericksen
*
* 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 org.asciidoctor.asciidoclet;
import com.sun.javadoc.*;
import org.junit.Before;
import org.junit.Test;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.*;
/**
* @author John Ericksen
*/
public class DocletIteratorTest {
private DocletRenderer mockRenderer;
private RootDoc mockDoc;
private ClassDoc mockClassDoc;
private PackageDoc mockPackageDoc;
private FieldDoc mockFieldDoc;
private FieldDoc mockEnumFieldDoc;
private ConstructorDoc mockConstructorDoc;
private MethodDoc mockMethodDoc;
@Before
public void setup() {
mockRenderer = mock(DocletRenderer.class);
mockDoc = mock(RootDoc.class);
mockPackageDoc = mock(PackageDoc.class);
mockFieldDoc = mock(FieldDoc.class);
mockEnumFieldDoc = mock(FieldDoc.class);
mockConstructorDoc = mock(ConstructorDoc.class);
mockMethodDoc = mock(MethodDoc.class);
mockClassDoc = mockClassDoc(ClassDoc.class, mockPackageDoc, mockFieldDoc, mockEnumFieldDoc, mockConstructorDoc, mockMethodDoc);
when(mockDoc.classes()).thenReturn(new ClassDoc[]{mockClassDoc});
when(mockDoc.options()).thenReturn(new String[][]{});
}
private <T extends ClassDoc> T mockClassDoc(Class<T> type, PackageDoc packageDoc, FieldDoc fieldDoc, FieldDoc enumConstants, ConstructorDoc constructorDoc, MethodDoc methodDoc) {
T classDoc = mock(type);
when(classDoc.containingPackage()).thenReturn(packageDoc);
when(classDoc.fields()).thenReturn(new FieldDoc[]{fieldDoc});
when(classDoc.constructors()).thenReturn(new ConstructorDoc[]{constructorDoc});
when(classDoc.methods()).thenReturn(new MethodDoc[]{methodDoc});
when(classDoc.enumConstants()).thenReturn(new FieldDoc[]{enumConstants});
return classDoc;
}
@Test
public void testIteration() {
new DocletIterator(DocletOptions.NONE).render(mockDoc, mockRenderer);
verify(mockRenderer).renderDoc(mockClassDoc);
verify(mockRenderer).renderDoc(mockFieldDoc);
verify(mockRenderer).renderDoc(mockConstructorDoc);
verify(mockRenderer).renderDoc(mockMethodDoc);
verify(mockRenderer).renderDoc(mockPackageDoc);
verify(mockRenderer).renderDoc(mockEnumFieldDoc);
}
@Test
public void testAnnotationIteration() {
AnnotationTypeDoc mockClassDoc = mockClassDoc(AnnotationTypeDoc.class, mockPackageDoc, mockFieldDoc, mockEnumFieldDoc, mockConstructorDoc, mockMethodDoc);
AnnotationTypeElementDoc mockAnnotationElement = mock(AnnotationTypeElementDoc.class);
when(mockDoc.classes()).thenReturn(new ClassDoc[]{mockClassDoc});
when(mockClassDoc.elements()).thenReturn(new AnnotationTypeElementDoc[]{mockAnnotationElement});
new DocletIterator(DocletOptions.NONE).render(mockDoc, mockRenderer);
verify(mockRenderer).renderDoc(mockClassDoc);
verify(mockRenderer).renderDoc(mockAnnotationElement);
}
@Test
public void testIgnoreNonAsciidocOverview() {
DocletIterator iterator = new DocletIterator(new DocletOptions(new String[][] {{DocletOptions.OVERVIEW, "foo.html"}}));
assertTrue(iterator.render(mockDoc, mockRenderer));
verify(mockDoc, never()).setRawCommentText(any(String.class));
}
@Test
public void testFailIfAsciidocOverviewNotFound() {
DocletIterator iterator = new DocletIterator(new DocletOptions(new String[][] {{DocletOptions.OVERVIEW, "notfound.adoc"}}));
assertFalse(iterator.render(mockDoc, mockRenderer));
}
@Test
public void testOverviewFound() {
DocletIterator iterator = new DocletIterator(new DocletOptions(new String[][] {{DocletOptions.OVERVIEW, "src/main/java/overview.adoc"}}));
assertTrue(iterator.render(mockDoc, mockRenderer));
verify(mockRenderer).renderDoc(mockDoc);
}
}