package com.perunlabs.testinjector;
import static com.perunlabs.testinjector.inject.TestInjector.injectTest;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.util.ArrayList;
import org.junit.Test;
import org.mockito.Mock;
import org.mockito.Spy;
import com.google.inject.BindingAnnotation;
import com.google.inject.name.Named;
import com.perunlabs.testinjector.util.MoreThanOneBindingAnnotationException;
public class AnnotationTest {
@Test(expected = MoreThanOneBindingAnnotationException.class)
public void mocking_twice_annotated_field_fails() throws Exception {
injectTest(new TwiceAnnotatedMock());
}
private static class TwiceAnnotatedMock {
@Named("x")
@MyAnnotation
@Mock
Runnable mock;
}
@Test(expected = MoreThanOneBindingAnnotationException.class)
public void spying_twice_annotated_field_fails() throws Exception {
injectTest(new TwiceAnnotatedSpy());
}
private static class TwiceAnnotatedSpy {
@Named("x")
@MyAnnotation
@Spy
Iterable<String> spy = new ArrayList<String>();
}
@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER, ElementType.TYPE })
@BindingAnnotation
@interface MyAnnotation {}
}