fix #68
[memoization.java.git] / memoization-guava / src / test / java / de / xn__ho_hia / memoization / guava / GuavaCacheBasedDoubleConsumerMemoizerTest.java
blob04cb4f174c016d18918839c8d31f66690f4f0be5
1 /*
2 * This file is part of memoization.java. It is subject to the license terms in the LICENSE file found in the top-level
3 * directory of this distribution and at http://creativecommons.org/publicdomain/zero/1.0/. No part of memoization.java,
4 * including this file, may be copied, modified, propagated, or distributed except according to the terms contained
5 * in the LICENSE file.
6 */
7 package de.xn__ho_hia.memoization.guava;
9 import static org.mockito.BDDMockito.given;
10 import static org.mockito.Matchers.any;
12 import java.util.concurrent.ExecutionException;
13 import java.util.function.DoubleConsumer;
14 import java.util.function.DoubleFunction;
16 import com.google.common.cache.Cache;
17 import com.google.common.cache.CacheBuilder;
19 import org.junit.Assert;
20 import org.junit.Rule;
21 import org.junit.Test;
22 import org.junit.rules.ExpectedException;
23 import org.mockito.Mockito;
25 import de.xn__ho_hia.memoization.shared.MemoizationException;
26 import de.xn__ho_hia.quality.suppression.CompilerWarnings;
28 /**
32 @SuppressWarnings({ CompilerWarnings.NLS, CompilerWarnings.STATIC_METHOD })
33 public class GuavaCacheBasedDoubleConsumerMemoizerTest {
35 /** Captures expected exceptions. */
36 @Rule
37 public ExpectedException thrown = ExpectedException.none();
39 /**
42 @Test
43 public void shouldAcceptCacheAndKeyFunctionAndConsumer() {
44 // given
45 final DoubleFunction<String> keyFunction = a -> "key";
46 final DoubleConsumer consumer = System.out::println;
47 final Cache<String, Double> cache = CacheBuilder.newBuilder().build();
49 // when
50 final GuavaCacheBasedDoubleConsumerMemoizer<String> memoizer = new GuavaCacheBasedDoubleConsumerMemoizer<>(
51 cache, keyFunction, consumer);
53 // then
54 Assert.assertNotNull(memoizer);
57 /**
60 @Test
61 public void shouldConsumeGivenValue() {
62 // given
63 final DoubleFunction<String> keyFunction = a -> "key";
64 final DoubleConsumer consumer = Mockito.mock(DoubleConsumer.class);
65 final Cache<String, Double> cache = CacheBuilder.newBuilder().build();
67 // when
68 final GuavaCacheBasedDoubleConsumerMemoizer<String> memoizer = new GuavaCacheBasedDoubleConsumerMemoizer<>(
69 cache, keyFunction, consumer);
71 // then
72 memoizer.accept(123.456D);
73 Mockito.verify(consumer).accept(123.456D);
76 /**
77 * @throws ExecutionException
78 * Added for the call to 'cache.get(..)'.
80 @Test
81 @SuppressWarnings(CompilerWarnings.UNCHECKED)
82 public void shouldWrapExecutionExceptionInMemoizationException() throws ExecutionException {
83 // given
84 final DoubleFunction<String> keyFunction = a -> "key";
85 final DoubleConsumer consumer = System.out::println;
86 final Cache<String, Double> cache = Mockito.mock(Cache.class);
87 given(cache.get(any(), any())).willThrow(ExecutionException.class);
88 final GuavaCacheBasedDoubleConsumerMemoizer<String> memoizer = new GuavaCacheBasedDoubleConsumerMemoizer<>(
89 cache, keyFunction, consumer);
91 // when
92 thrown.expect(MemoizationException.class);
94 // then
95 memoizer.accept(123.456D);