FunnelsTest.java revision 1d580d0f6ee4f21eb309ba7b509d2c6d671c4044
1// Copyright 2011 Google Inc. All Rights Reserved.
2
3package com.google.common.hash;
4
5import com.google.common.hash.AbstractStreamingHashFunction.AbstractStreamingHasher;
6
7import junit.framework.TestCase;
8
9import org.easymock.EasyMock;
10
11import java.nio.ByteBuffer;
12
13/**
14 * Tests for HashExtractors.
15 *
16 * @author andreou@google.com (Dimitris Andreou)
17 */
18public class FunnelsTest extends TestCase {
19  public void testForBytes() {
20    Sink byteSink = EasyMock.createMock(Sink.class);
21
22    EasyMock.expect(byteSink.putBytes(EasyMock.aryEq(new byte[] { 4, 3, 2, 1})))
23        .andReturn(byteSink).once();
24    EasyMock.replay(byteSink);
25
26    Funnels.byteArrayFunnel().funnel(new byte[]{4, 3, 2, 1}, byteSink);
27
28    EasyMock.verify(byteSink);
29  }
30
31  public void testForBytes_null() {
32    assertNullsThrowException(Funnels.byteArrayFunnel());
33  }
34
35  public void testForStrings() {
36
37    Sink byteSink = EasyMock.createMock(Sink.class);
38
39    EasyMock.expect(byteSink.putString("test")).andReturn(byteSink).once();
40    EasyMock.replay(byteSink);
41
42    Funnels.stringFunnel().funnel("test", byteSink);
43
44    EasyMock.verify(byteSink);
45  }
46
47  public void testForStrings_null() {
48    assertNullsThrowException(Funnels.stringFunnel());
49  }
50
51  private static void assertNullsThrowException(Funnel<?> funnel) {
52    Sink byteSink = new AbstractStreamingHasher(4, 4) {
53      @Override HashCode makeHash() { throw new UnsupportedOperationException(); }
54
55      @Override protected void process(ByteBuffer bb) {
56        while (bb.hasRemaining()) {
57          bb.get();
58        }
59      }
60    };
61    try {
62      funnel.funnel(null, byteSink);
63      fail();
64    } catch (NullPointerException ok) {}
65  }
66}
67