aboutsummaryrefslogtreecommitdiff
path: root/src/test/java/com/squareup/javapoet/ClassNameTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/java/com/squareup/javapoet/ClassNameTest.java')
-rw-r--r--src/test/java/com/squareup/javapoet/ClassNameTest.java32
1 files changed, 32 insertions, 0 deletions
diff --git a/src/test/java/com/squareup/javapoet/ClassNameTest.java b/src/test/java/com/squareup/javapoet/ClassNameTest.java
index 0488213..e2cc55e 100644
--- a/src/test/java/com/squareup/javapoet/ClassNameTest.java
+++ b/src/test/java/com/squareup/javapoet/ClassNameTest.java
@@ -23,10 +23,12 @@ import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
+import org.mockito.Mockito;
import static com.google.common.truth.Truth.assertThat;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.fail;
+import static org.mockito.Mockito.when;
@RunWith(JUnit4.class)
public final class ClassNameTest {
@@ -110,6 +112,36 @@ public final class ClassNameTest {
assertThat(ClassName.get(inner).toString()).isEqualTo("com.squareup.javapoet.ClassNameTest.$Outer.$Inner");
}
+ /**
+ * Buck builds with "source-based ABI generation" and those builds don't support
+ * {@link TypeElement#getKind()}. Test to confirm that we don't use that API.
+ */
+ @Test public void classNameFromTypeElementDoesntUseGetKind() {
+ Elements elements = compilationRule.getElements();
+ TypeElement object = elements.getTypeElement(Object.class.getCanonicalName());
+ assertThat(ClassName.get(preventGetKind(object)).toString())
+ .isEqualTo("java.lang.Object");
+ TypeElement outer = elements.getTypeElement($Outer.class.getCanonicalName());
+ assertThat(ClassName.get(preventGetKind(outer)).toString())
+ .isEqualTo("com.squareup.javapoet.ClassNameTest.$Outer");
+ TypeElement inner = elements.getTypeElement($Outer.$Inner.class.getCanonicalName());
+ assertThat(ClassName.get(preventGetKind(inner)).toString())
+ .isEqualTo("com.squareup.javapoet.ClassNameTest.$Outer.$Inner");
+ }
+
+ /** Returns a new instance like {@code object} that throws on {@code getKind()}. */
+ private TypeElement preventGetKind(TypeElement object) {
+ TypeElement spy = Mockito.spy(object);
+ when(spy.getKind()).thenThrow(new AssertionError());
+ when(spy.getEnclosingElement()).thenAnswer(invocation -> {
+ Object enclosingElement = invocation.callRealMethod();
+ return enclosingElement instanceof TypeElement
+ ? preventGetKind((TypeElement) enclosingElement)
+ : enclosingElement;
+ });
+ return spy;
+ }
+
@Test public void classNameFromClass() {
assertThat(ClassName.get(Object.class).toString())
.isEqualTo("java.lang.Object");