package com.fernandocejas.frodo.joinpoint;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.runners.MockitoJUnitRunner;
import rx.Observable;
import static org.assertj.core.api.Assertions.assertThat;
@RunWith(MockitoJUnitRunner.class)
public class FrodoJoinPointTest {
@Test
public void shouldReturnCorrectParametersList() {
final Class[] paramTypes = { String.class, String.class };
final String[] paramNames = { "paramOne", "paramTwo" };
final Object[] paramValues = { "ValueOne", "ValueTwo" };
final TestJoinPoint testJoinPoint = new TestJoinPoint.Builder(this.getClass())
.withParamTypes(paramTypes)
.withParamNames(paramNames)
.withParamValues(paramValues)
.build();
final FrodoJoinPoint frodoJoinPoint = new FrodoJoinPoint(testJoinPoint);
final List<Class> paramTypeList = frodoJoinPoint.getMethodParamTypesList();
final List<String> paramNamesList = frodoJoinPoint.getMethodParamNamesList();
final List<Object> paramValuesList = frodoJoinPoint.getMethodParamValuesList();
assertThat(paramTypeList).isEqualTo(Arrays.asList(paramTypes));
assertThat(paramNamesList).isEqualTo(Arrays.asList(paramNames));
assertThat(paramValuesList).isEqualTo(Arrays.asList(paramValues));
}
@Test
public void shouldHaveReturnType() {
final TestJoinPoint testJoinPoint = new TestJoinPoint.Builder(this.getClass())
.withReturnType(Observable.class)
.build();
final FrodoJoinPoint frodoJoinPoint = new FrodoJoinPoint(testJoinPoint);
assertThat(frodoJoinPoint.hasReturnType(testJoinPoint)).isTrue();
assertThat(frodoJoinPoint.getReturnType()).isEqualTo(Observable.class);
}
@Test
public void shouldNotHaveReturnType() {
final TestJoinPoint testJoinPoint = new TestJoinPoint.Builder(this.getClass())
.withReturnType(void.class)
.build();
final FrodoJoinPoint frodoJoinPoint = new FrodoJoinPoint(testJoinPoint);
assertThat(frodoJoinPoint.hasReturnType(testJoinPoint)).isFalse();
assertThat(frodoJoinPoint.getReturnType()).isEqualTo(void.class);
}
@Test
public void shouldReturnCorrectGenericReturnType() {
final TestJoinPoint testJoinPoint = new TestJoinPoint.Builder(MyDummyClass.class, "buildDummyObservable")
.withReturnType(Observable.class)
.build();
final FrodoJoinPoint frodoJoinPoint = new FrodoJoinPoint(testJoinPoint);
assertThat(frodoJoinPoint.getGenericReturnTypes()).isEqualTo(
Collections.singletonList(Observable.class));
}
@Test
public void shouldReturnCorrectGenericParameterizedReturnType() {
final TestJoinPoint testJoinPoint = new TestJoinPoint.Builder(MyDummyClass.class, "toString")
.withReturnType(Observable.class)
.build();
final FrodoJoinPoint frodoJoinPoint = new FrodoJoinPoint(testJoinPoint);
assertThat(frodoJoinPoint.getGenericReturnTypes()).isEqualTo(
Collections.singletonList(String.class));
}
@Test
public void mustGenerateJoinPointUniqueNameForEqualityComparison() {
final Class[] paramTypes = { String.class, String.class };
final String[] paramNames = { "paramOne", "paramTwo" };
final Object[] paramValues = { "ValueOne", "ValueTwo" };
final TestJoinPoint testJoinPointOne = new TestJoinPoint.Builder(this.getClass())
.withParamTypes(paramTypes)
.withParamNames(paramNames)
.withParamValues(paramValues)
.build();
final TestJoinPoint testJoinPointTwo = new TestJoinPoint.Builder(this.getClass()).build();
final FrodoJoinPoint frodoJoinPointOne = new FrodoJoinPoint(testJoinPointOne);
final FrodoJoinPoint frodoJoinPointTwo = new FrodoJoinPoint(testJoinPointTwo);
assertThat(frodoJoinPointOne).isNotEqualTo(frodoJoinPointTwo);
assertThat(frodoJoinPointOne.hashCode()).isNotEqualTo(frodoJoinPointTwo.hashCode());
}
private static class MyDummyClass {
public MyDummyClass() {
}
public Observable buildDummyObservable() {
return Observable.empty();
}
@Override public String toString() {
return this.getClass().getSimpleName();
}
}
}