aboutsummaryrefslogtreecommitdiff
path: root/src/test/java/com/squareup/javapoet/ParameterSpecTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/java/com/squareup/javapoet/ParameterSpecTest.java')
-rw-r--r--src/test/java/com/squareup/javapoet/ParameterSpecTest.java95
1 files changed, 92 insertions, 3 deletions
diff --git a/src/test/java/com/squareup/javapoet/ParameterSpecTest.java b/src/test/java/com/squareup/javapoet/ParameterSpecTest.java
index 2f81866..c3effca 100644
--- a/src/test/java/com/squareup/javapoet/ParameterSpecTest.java
+++ b/src/test/java/com/squareup/javapoet/ParameterSpecTest.java
@@ -15,23 +15,49 @@
*/
package com.squareup.javapoet;
+import com.google.testing.compile.CompilationRule;
+import java.util.ArrayList;
+import java.util.List;
+import javax.annotation.Nullable;
+import javax.lang.model.element.ExecutableElement;
+import javax.lang.model.element.TypeElement;
+import javax.lang.model.element.VariableElement;
+import javax.lang.model.util.Elements;
+import org.junit.Before;
+import org.junit.Rule;
+import javax.lang.model.element.Modifier;
import org.junit.Test;
import static com.google.common.truth.Truth.assertThat;
+import static com.squareup.javapoet.TestUtil.findFirst;
+import static javax.lang.model.util.ElementFilter.fieldsIn;
+import static javax.lang.model.util.ElementFilter.methodsIn;
import static org.junit.Assert.fail;
-import javax.lang.model.element.Modifier;
-
public class ParameterSpecTest {
+ @Rule public final CompilationRule compilation = new CompilationRule();
+
+ private Elements elements;
+
+ @Before public void setUp() {
+ elements = compilation.getElements();
+ }
+
+ private TypeElement getElement(Class<?> clazz) {
+ return elements.getTypeElement(clazz.getCanonicalName());
+ }
+
@Test public void equalsAndHashCode() {
ParameterSpec a = ParameterSpec.builder(int.class, "foo").build();
ParameterSpec b = ParameterSpec.builder(int.class, "foo").build();
assertThat(a.equals(b)).isTrue();
assertThat(a.hashCode()).isEqualTo(b.hashCode());
+ assertThat(a.toString()).isEqualTo(b.toString());
a = ParameterSpec.builder(int.class, "i").addModifiers(Modifier.STATIC).build();
b = ParameterSpec.builder(int.class, "i").addModifiers(Modifier.STATIC).build();
assertThat(a.equals(b)).isTrue();
assertThat(a.hashCode()).isEqualTo(b.hashCode());
+ assertThat(a.toString()).isEqualTo(b.toString());
}
@Test public void nullAnnotationsAddition() {
@@ -43,4 +69,67 @@ public class ParameterSpecTest {
.isEqualTo("annotationSpecs == null");
}
}
-} \ No newline at end of file
+
+ final class VariableElementFieldClass {
+ String name;
+ }
+
+ @Test public void fieldVariableElement() {
+ TypeElement classElement = getElement(VariableElementFieldClass.class);
+ List<VariableElement> methods = fieldsIn(elements.getAllMembers(classElement));
+ VariableElement element = findFirst(methods, "name");
+
+ try {
+ ParameterSpec.get(element);
+ fail();
+ } catch (IllegalArgumentException exception) {
+ assertThat(exception).hasMessageThat().isEqualTo("element is not a parameter");
+ }
+ }
+
+ final class VariableElementParameterClass {
+ public void foo(@Nullable final String bar) {
+ }
+ }
+
+ @Test public void parameterVariableElement() {
+ TypeElement classElement = getElement(VariableElementParameterClass.class);
+ List<ExecutableElement> methods = methodsIn(elements.getAllMembers(classElement));
+ ExecutableElement element = findFirst(methods, "foo");
+ VariableElement parameterElement = element.getParameters().get(0);
+
+ assertThat(ParameterSpec.get(parameterElement).toString())
+ .isEqualTo("@javax.annotation.Nullable java.lang.String arg0");
+ }
+
+ @Test public void addNonFinalModifier() {
+ List<Modifier> modifiers = new ArrayList<>();
+ modifiers.add(Modifier.FINAL);
+ modifiers.add(Modifier.PUBLIC);
+
+ try {
+ ParameterSpec.builder(int.class, "foo")
+ .addModifiers(modifiers);
+ fail();
+ } catch (Exception e) {
+ assertThat(e.getMessage()).isEqualTo("unexpected parameter modifier: public");
+ }
+ }
+
+ @Test public void modifyAnnotations() {
+ ParameterSpec.Builder builder = ParameterSpec.builder(int.class, "foo")
+ .addAnnotation(Override.class)
+ .addAnnotation(SuppressWarnings.class);
+
+ builder.annotations.remove(1);
+ assertThat(builder.build().annotations).hasSize(1);
+ }
+
+ @Test public void modifyModifiers() {
+ ParameterSpec.Builder builder = ParameterSpec.builder(int.class, "foo")
+ .addModifiers(Modifier.PUBLIC, Modifier.STATIC);
+
+ builder.modifiers.remove(1);
+ assertThat(builder.build().modifiers).containsExactly(Modifier.PUBLIC);
+ }
+}