PageRenderTime 23ms CodeModel.GetById 19ms RepoModel.GetById 1ms app.codeStats 0ms

/doclet/src/test/java/com/atlassian/developer/calliope/doclet/WikiMarkupReferenceRendererTest.java

https://bitbucket.org/rtalusan/calliope
Java | 156 lines | 126 code | 30 blank | 0 comment | 1 complexity | 1a60c1aa8ee054eef839e98c07536070 MD5 | raw file
  1. package com.atlassian.developer.calliope.doclet;
  2. import com.atlassian.developer.calliope.javadoc.Traversal;
  3. import com.sun.javadoc.AnnotationDesc;
  4. import com.sun.javadoc.AnnotationDesc.ElementValuePair;
  5. import com.sun.javadoc.AnnotationTypeDoc;
  6. import com.sun.javadoc.AnnotationTypeElementDoc;
  7. import com.sun.javadoc.AnnotationValue;
  8. import com.sun.javadoc.ClassDoc;
  9. import com.sun.javadoc.ConstructorDoc;
  10. import com.sun.javadoc.FieldDoc;
  11. import com.sun.javadoc.MemberDoc;
  12. import com.sun.javadoc.MethodDoc;
  13. import com.sun.javadoc.PackageDoc;
  14. import com.sun.javadoc.ProgramElementDoc;
  15. import com.sun.javadoc.Type;
  16. import com.sun.javadoc.TypeVariable;
  17. import org.junit.Test;
  18. import static com.atlassian.developer.calliope.doclet.impl.RendererMatcher.rendered;
  19. import static org.hamcrest.MatcherAssert.assertThat;
  20. import static org.mockito.Mockito.mock;
  21. import static org.mockito.Mockito.when;
  22. public class WikiMarkupReferenceRendererTest
  23. {
  24. @Test public void assertThatAnnotationDescRenders()
  25. {
  26. AnnotationDesc node = mock(AnnotationDesc.class);
  27. AnnotationTypeDoc annotationType = mock(AnnotationTypeDoc.class);
  28. when(node.annotationType()).thenReturn(annotationType);
  29. when(annotationType.simpleTypeName()).thenReturn("Test");
  30. when(annotationType.qualifiedTypeName()).thenReturn("com.atlassian.Test");
  31. ElementValuePair[] elementValues = new ElementValuePair[]
  32. { mock(ElementValuePair.class), mock(ElementValuePair.class) };
  33. when(node.elementValues()).thenReturn(elementValues);
  34. AnnotationTypeElementDoc[] elements = new AnnotationTypeElementDoc[]
  35. { mock(AnnotationTypeElementDoc.class), mock(AnnotationTypeElementDoc.class) };
  36. AnnotationValue[] values = new AnnotationValue[]
  37. { mock(AnnotationValue.class), mock(AnnotationValue.class) };
  38. when(elementValues[0].element()).thenReturn(elements[0]);
  39. when(elementValues[0].value()).thenReturn(values[0]);
  40. when(elements[0].name()).thenReturn("element0");
  41. when(elements[0].containingClass()).thenReturn(annotationType);
  42. when(values[0].toString()).thenReturn("value0");
  43. when(elementValues[1].element()).thenReturn(elements[1]);
  44. when(elementValues[1].value()).thenReturn(values[1]);
  45. when(elements[1].name()).thenReturn("element1");
  46. when(elements[1].containingClass()).thenReturn(annotationType);
  47. when(values[1].toString()).thenReturn("value1");
  48. qualify(annotationType, elements[0], elements[1]);
  49. assertThat(traverse(node), rendered(node, "@[Test|com.atlassian.Test]([element0|com.atlassian.Test#element0] = value0, [element1|com.atlassian.Test#element1] = value1)"));
  50. }
  51. @Test public void assertThatAnnotationTypeDocRenders()
  52. {
  53. assertThatClassDocSubtypeRenders(AnnotationTypeDoc.class);
  54. }
  55. @Test public void assertThatAnnotationTypeElementDocRenders()
  56. {
  57. assertThatMemberDocSubtypeRenders(AnnotationTypeElementDoc.class);
  58. }
  59. @Test public void assertThatClassDocRenders()
  60. {
  61. assertThatClassDocSubtypeRenders(ClassDoc.class);
  62. }
  63. @Test public void assertThatConstructorDocRenders()
  64. {
  65. assertThatMemberDocSubtypeRenders(ConstructorDoc.class);
  66. }
  67. @Test public void assertThatFieldDocRenders()
  68. {
  69. assertThatMemberDocSubtypeRenders(FieldDoc.class);
  70. }
  71. @Test public void assertThatMethodDocRenders()
  72. {
  73. assertThatMemberDocSubtypeRenders(MethodDoc.class);
  74. }
  75. @Test public void assertThatPackageDocRenders()
  76. {
  77. PackageDoc node = mock(PackageDoc.class);
  78. when(node.name()).thenReturn("com.atlassian.test");
  79. assertThat(traverse(node), rendered(node, "[com.atlassian.test]"));
  80. }
  81. @Test public void assertThatTypeRenders()
  82. {
  83. Type node = mock(Type.class);
  84. when(node.simpleTypeName()).thenReturn("T");
  85. assertThat(traverse(node), rendered(node, "T"));
  86. }
  87. @Test public void assertThatTypeVariableRenders()
  88. {
  89. TypeVariable node = mock(TypeVariable.class);
  90. when(node.simpleTypeName()).thenReturn("T");
  91. assertThat(traverse(node), rendered(node, "T"));
  92. }
  93. private static <T extends ClassDoc> void assertThatClassDocSubtypeRenders(Class<T> clazz)
  94. {
  95. T node = mock(clazz);
  96. when(node.simpleTypeName()).thenReturn("Test");
  97. when(node.qualifiedTypeName()).thenReturn("com.atlassian.Test");
  98. qualify(node);
  99. assertThat(traverse(node), rendered(node, "[Test|com.atlassian.Test]"));
  100. }
  101. private static <T extends MemberDoc> void assertThatMemberDocSubtypeRenders(Class<T> clazz)
  102. {
  103. T node = mock(clazz);
  104. when(node.name()).thenReturn("test");
  105. ClassDoc containingClass = mock(ClassDoc.class);
  106. when(node.containingClass()).thenReturn(containingClass);
  107. when(containingClass.qualifiedTypeName()).thenReturn("com.atlassian.Test");
  108. qualify(node, containingClass);
  109. assertThat(traverse(node), rendered(node, "[test|com.atlassian.Test#test]"));
  110. }
  111. private static WikiMarkupReferenceRenderer traverse(Object node)
  112. {
  113. WikiMarkupReferenceRenderer renderer = new WikiMarkupReferenceRenderer();
  114. Traversal.traverse(node, renderer);
  115. return renderer;
  116. }
  117. private static void qualify(ProgramElementDoc... nodes)
  118. {
  119. for (ProgramElementDoc node : nodes)
  120. {
  121. PackageDoc containingPackage = mock(PackageDoc.class);
  122. when(containingPackage.name()).thenReturn("com.atlassian");
  123. when(node.containingPackage()).thenReturn(containingPackage);
  124. }
  125. }
  126. }