aboutsummaryrefslogtreecommitdiff
path: root/src/test/java/org/zwobble/mammoth/tests/Arguments.java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2016-08-28 22:03:18 +0100
committerMichael Williamson <mike@zwobble.org>2016-08-28 22:03:18 +0100
commit9db49ccb50b1d667caf80f5b09087af88f817b60 (patch)
treee82112a7e546bcf733adad3551b0018e092e257d /src/test/java/org/zwobble/mammoth/tests/Arguments.java
parentdb23f095a273ab3715083122b21e446f8d0715dd (diff)
Remove usage of make it easy for building body readers
Diffstat (limited to 'src/test/java/org/zwobble/mammoth/tests/Arguments.java')
-rw-r--r--src/test/java/org/zwobble/mammoth/tests/Arguments.java46
1 files changed, 46 insertions, 0 deletions
diff --git a/src/test/java/org/zwobble/mammoth/tests/Arguments.java b/src/test/java/org/zwobble/mammoth/tests/Arguments.java
new file mode 100644
index 0000000..afb20bb
--- /dev/null
+++ b/src/test/java/org/zwobble/mammoth/tests/Arguments.java
@@ -0,0 +1,46 @@
+package org.zwobble.mammoth.tests;
+
+import org.zwobble.mammoth.internal.util.Iterables;
+
+import java.util.Iterator;
+
+import static java.util.Arrays.asList;
+
+public class Arguments {
+ private final Object[] arguments;
+
+ public Arguments(Object[] arguments) {
+ this.arguments = arguments;
+ }
+
+ public <T> T get(Class<T> clazz) {
+ return only(getAll(clazz));
+ }
+
+ public <T> T get(Class<T> clazz, T defaultValue) {
+ Iterator<T> arguments = getAll(clazz).iterator();
+ if (!arguments.hasNext()) {
+ return defaultValue;
+ } else {
+ return only(arguments);
+ }
+ }
+
+ private <T> Iterable<T> getAll(Class<T> clazz) {
+ return Iterables.lazyFilter(asList(arguments), clazz);
+ }
+
+
+ private <T> T only(Iterable<T> iterable) {
+ return only(iterable.iterator());
+ }
+
+ private <T> T only(Iterator<T> iterator) {
+ T value = iterator.next();
+ if (iterator.hasNext()) {
+ throw new RuntimeException("Expected exactly one element, but had multiple elements");
+ } else {
+ return value;
+ }
+ }
+}