package org.jooby.internal;
import static org.easymock.EasyMock.expect;
import static org.junit.Assert.assertEquals;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.NoSuchElementException;
import org.jooby.test.MockUnit;
import org.junit.Test;
import com.google.common.collect.ImmutableList;
public class ParamReferenceImplTest {
@Test
public void defaults() throws Exception {
new MockUnit()
.run(unit -> {
new StrParamReferenceImpl("parameter", "name", Collections.emptyList());
});
}
@Test
public void first() throws Exception {
new MockUnit()
.run(unit -> {
assertEquals("first",
new StrParamReferenceImpl("parameter", "name", ImmutableList.of("first")).first());
});
}
@Test
public void last() throws Exception {
new MockUnit()
.run(unit -> {
assertEquals("last",
new StrParamReferenceImpl("parameter", "name", ImmutableList.of("last")).last());
});
}
@Test
public void get() throws Exception {
new MockUnit()
.run(unit -> {
assertEquals("0",
new StrParamReferenceImpl("parameter", "name", ImmutableList.of("0")).get(0));
assertEquals("1",
new StrParamReferenceImpl("parameter", "name", ImmutableList.of("0", "1")).get(1));
});
}
@Test(expected = NoSuchElementException.class)
public void missing() throws Exception {
new MockUnit()
.run(unit -> {
new StrParamReferenceImpl("parameter", "name", ImmutableList.of("0")).get(1);
});
}
@Test(expected = NoSuchElementException.class)
public void missingLowIndex() throws Exception {
new MockUnit()
.run(unit -> {
new StrParamReferenceImpl("parameter", "name", ImmutableList.of("0")).get(-1);
});
}
@Test
public void size() throws Exception {
new MockUnit()
.run(unit -> {
assertEquals(1,
new StrParamReferenceImpl("parameter", "name", ImmutableList.of("0")).size());
assertEquals(2,
new StrParamReferenceImpl("parameter", "name", ImmutableList.of("0", "1")).size());
});
}
@SuppressWarnings({"rawtypes", "unchecked" })
@Test
public void iterator() throws Exception {
new MockUnit(List.class, Iterator.class)
.expect(unit -> {
List list = unit.get(List.class);
expect(list.iterator()).andReturn(unit.get(Iterator.class));
})
.run(unit -> {
assertEquals(unit.get(Iterator.class),
new StrParamReferenceImpl("parameter", "name", unit.get(List.class)).iterator());
});
}
}