• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2008 The Guava Authors
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.google.common.io;
18 
19 import java.io.ByteArrayInputStream;
20 import java.io.IOException;
21 import java.io.InputStream;
22 
23 /**
24  * Unit tests for {@link CountingInputStream}.
25  *
26  * @author Chris Nokleberg
27  */
28 public class CountingInputStreamTest extends IoTestCase {
29   private CountingInputStream counter;
30 
setUp()31   @Override protected void setUp() throws Exception {
32     super.setUp();
33     counter = new CountingInputStream(new ByteArrayInputStream(new byte[20]));
34   }
35 
testReadSingleByte()36   public void testReadSingleByte() throws IOException {
37     assertEquals(0, counter.getCount());
38     assertEquals(0, counter.read());
39     assertEquals(1, counter.getCount());
40   }
41 
testReadArray()42   public void testReadArray() throws IOException {
43     assertEquals(10, counter.read(new byte[10]));
44     assertEquals(10, counter.getCount());
45   }
46 
testReadArrayRange()47   public void testReadArrayRange() throws IOException {
48     assertEquals(3, counter.read(new byte[10], 1, 3));
49     assertEquals(3, counter.getCount());
50   }
51 
testSkip()52   public void testSkip() throws IOException {
53     assertEquals(10, counter.skip(10));
54     assertEquals(10, counter.getCount());
55   }
56 
testSkipEOF()57   public void testSkipEOF() throws IOException {
58     assertEquals(20, counter.skip(30));
59     assertEquals(20, counter.getCount());
60     assertEquals(0, counter.skip(20));
61     assertEquals(20, counter.getCount());
62 
63     // Test reading a single byte while we're in the right state
64     assertEquals(-1, counter.read());
65     assertEquals(20, counter.getCount());
66   }
67 
testReadArrayEOF()68   public void testReadArrayEOF() throws IOException {
69     assertEquals(20, counter.read(new byte[30]));
70     assertEquals(20, counter.getCount());
71     assertEquals(-1, counter.read(new byte[30]));
72     assertEquals(20, counter.getCount());
73   }
74 
testMark()75   public void testMark() throws Exception {
76     assertTrue(counter.markSupported());
77     assertEquals(10, counter.read(new byte[10]));
78     assertEquals(10, counter.getCount());
79     counter.mark(5);
80     counter.read();
81     assertEquals(11, counter.getCount());
82     counter.reset();
83     assertEquals(10, counter.getCount());
84     assertEquals(10, counter.skip(100));
85     assertEquals(20, counter.getCount());
86   }
87 
testMarkNotSet()88   public void testMarkNotSet() {
89     try {
90       counter.reset();
91       fail();
92     } catch (IOException expected) {
93       assertEquals("Mark not set", expected.getMessage());
94     }
95   }
96 
testMarkNotSupported()97   public void testMarkNotSupported() {
98     counter = new CountingInputStream(new UnmarkableInputStream());
99 
100     try {
101       counter.reset();
102       fail();
103     } catch (IOException expected) {
104       assertEquals("Mark not supported", expected.getMessage());
105     }
106   }
107 
108   private static class UnmarkableInputStream extends InputStream {
109     @Override
read()110     public int read() throws IOException {
111       return 0;
112     }
113 
114     @Override
markSupported()115     public boolean markSupported() {
116       return false;
117     }
118   }
119 }
120