summaryrefslogtreecommitdiffstats
path: root/jdisc_http_service/src/test/java/com/yahoo/jdisc/http/server/jetty/AlternativeTest.java
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@yahoo-inc.com>2016-06-15 23:09:44 +0200
committerJon Bratseth <bratseth@yahoo-inc.com>2016-06-15 23:09:44 +0200
commit72231250ed81e10d66bfe70701e64fa5fe50f712 (patch)
tree2728bba1131a6f6e5bdf95afec7d7ff9358dac50 /jdisc_http_service/src/test/java/com/yahoo/jdisc/http/server/jetty/AlternativeTest.java
Publish
Diffstat (limited to 'jdisc_http_service/src/test/java/com/yahoo/jdisc/http/server/jetty/AlternativeTest.java')
-rw-r--r--jdisc_http_service/src/test/java/com/yahoo/jdisc/http/server/jetty/AlternativeTest.java136
1 files changed, 136 insertions, 0 deletions
diff --git a/jdisc_http_service/src/test/java/com/yahoo/jdisc/http/server/jetty/AlternativeTest.java b/jdisc_http_service/src/test/java/com/yahoo/jdisc/http/server/jetty/AlternativeTest.java
new file mode 100644
index 00000000000..0e666e826ae
--- /dev/null
+++ b/jdisc_http_service/src/test/java/com/yahoo/jdisc/http/server/jetty/AlternativeTest.java
@@ -0,0 +1,136 @@
+// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.jdisc.http.server.jetty;
+
+import org.testng.annotations.Test;
+
+import java.util.Set;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+import static org.hamcrest.CoreMatchers.equalTo;
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.CoreMatchers.not;
+import static org.hamcrest.CoreMatchers.nullValue;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.greaterThan;
+
+/**
+ * @author <a href="mailto:bakksjo@yahoo-inc.com">Oyvind Bakksjo</a>
+ */
+public class AlternativeTest {
+ private static final String MAN = "man";
+ private static final String BEAR = "bear";
+ private static final String PIG = "pig";
+
+ @Test
+ public void singleValue() {
+ assertThat(
+ Alternative.preferred(MAN)
+ .orElseGet(() -> BEAR),
+ is(MAN));
+ }
+
+ @Test
+ public void singleNull() {
+ assertThat(
+ Alternative.preferred(null)
+ .orElseGet(() -> BEAR),
+ is(BEAR));
+ }
+
+ @Test
+ public void twoValues() {
+ assertThat(
+ Alternative.preferred(MAN)
+ .alternatively(() -> BEAR)
+ .orElseGet(() -> PIG),
+ is(MAN));
+ }
+
+ @Test
+ public void oneNullOneValue() {
+ assertThat(
+ Alternative.preferred(null)
+ .alternatively(() -> MAN)
+ .orElseGet(() -> BEAR),
+ is(MAN));
+ }
+
+ @Test
+ public void twoNulls() {
+ assertThat(
+ Alternative.preferred(null)
+ .alternatively(() -> null)
+ .orElseGet(() -> MAN),
+ is(MAN));
+ }
+
+ @Test
+ public void singleNullLastResortIsNull() {
+ assertThat(
+ Alternative.preferred(null)
+ .orElseGet(() -> null),
+ is(nullValue()));
+ }
+
+ @Test
+ public void twoNullsLastResortIsNull() {
+ assertThat(
+ Alternative.preferred(null)
+ .alternatively(() -> null)
+ .orElseGet(() -> null),
+ is(nullValue()));
+ }
+
+ @Test
+ public void oneNullTwoValues() {
+ assertThat(
+ Alternative.preferred(null)
+ .alternatively(() -> MAN)
+ .alternatively(() -> BEAR)
+ .orElseGet(() -> PIG),
+ is(MAN));
+ }
+
+ @Test
+ public void equalValuesMakeEqualAlternatives() {
+ assertThat(Alternative.preferred(MAN), is(equalTo(Alternative.preferred(MAN))));
+ assertThat(Alternative.preferred(BEAR), is(equalTo(Alternative.preferred(BEAR))));
+ assertThat(Alternative.preferred(PIG), is(equalTo(Alternative.preferred(PIG))));
+ assertThat(Alternative.preferred(null), is(equalTo(Alternative.preferred(null))));
+ }
+
+ @Test
+ public void equalValuesMakeEqualHashCodes() {
+ assertThat(Alternative.preferred(MAN).hashCode(), is(equalTo(Alternative.preferred(MAN).hashCode())));
+ assertThat(Alternative.preferred(BEAR).hashCode(), is(equalTo(Alternative.preferred(BEAR).hashCode())));
+ assertThat(Alternative.preferred(PIG).hashCode(), is(equalTo(Alternative.preferred(PIG).hashCode())));
+ assertThat(Alternative.preferred(null).hashCode(), is(equalTo(Alternative.preferred(null).hashCode())));
+ }
+
+ @Test
+ public void unequalValuesMakeUnequalAlternatives() {
+ assertThat(Alternative.preferred(MAN), is(not(equalTo(Alternative.preferred(BEAR)))));
+ assertThat(Alternative.preferred(MAN), is(not(equalTo(Alternative.preferred(PIG)))));
+ assertThat(Alternative.preferred(MAN), is(not(equalTo(Alternative.preferred(null)))));
+ assertThat(Alternative.preferred(BEAR), is(not(equalTo(Alternative.preferred(MAN)))));
+ assertThat(Alternative.preferred(BEAR), is(not(equalTo(Alternative.preferred(PIG)))));
+ assertThat(Alternative.preferred(BEAR), is(not(equalTo(Alternative.preferred(null)))));
+ assertThat(Alternative.preferred(PIG), is(not(equalTo(Alternative.preferred(MAN)))));
+ assertThat(Alternative.preferred(PIG), is(not(equalTo(Alternative.preferred(BEAR)))));
+ assertThat(Alternative.preferred(PIG), is(not(equalTo(Alternative.preferred(null)))));
+ assertThat(Alternative.preferred(null), is(not(equalTo(Alternative.preferred(MAN)))));
+ assertThat(Alternative.preferred(null), is(not(equalTo(Alternative.preferred(BEAR)))));
+ assertThat(Alternative.preferred(null), is(not(equalTo(Alternative.preferred(PIG)))));
+ }
+
+ @Test
+ public void hashValuesAreDecent() {
+ final String[] animals = { MAN, BEAR, PIG, "squirrel", "aardvark", "porcupine", "sasquatch", null };
+ final Set<Integer> hashCodes = Stream.of(animals)
+ .map(Alternative::preferred)
+ .map(Alternative::hashCode)
+ .collect(Collectors.toSet());
+ assertThat(hashCodes.size(), is(greaterThan(animals.length / 2))); // A modest requirement.
+ }
+}