diff options
author | Jon Bratseth <bratseth@yahoo-inc.com> | 2016-06-15 23:09:44 +0200 |
---|---|---|
committer | Jon Bratseth <bratseth@yahoo-inc.com> | 2016-06-15 23:09:44 +0200 |
commit | 72231250ed81e10d66bfe70701e64fa5fe50f712 (patch) | |
tree | 2728bba1131a6f6e5bdf95afec7d7ff9358dac50 /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.java | 136 |
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. + } +} |