1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.commons.io.input.buffer;
18
19 import static org.junit.jupiter.api.Assertions.assertEquals;
20 import static org.junit.jupiter.api.Assertions.assertFalse;
21 import static org.junit.jupiter.api.Assertions.assertThrows;
22 import static org.junit.jupiter.api.Assertions.assertTrue;
23
24 import java.nio.charset.StandardCharsets;
25
26 import org.junit.jupiter.api.Test;
27
28
29
30
31 class CircularByteBufferTest {
32
33 @Test
34 void testAddByteSmallestBuffer() {
35 final CircularByteBuffer cbb = new CircularByteBuffer(1);
36 cbb.add((byte) 1);
37 assertEquals(1, cbb.read());
38 cbb.add((byte) 2);
39 assertEquals(2, cbb.read());
40 }
41
42 @Test
43 void testAddInvalidOffset() {
44 final CircularByteBuffer cbb = new CircularByteBuffer();
45 assertThrows(IllegalArgumentException.class, () -> cbb.add(new byte[] { 1, 2, 3 }, -1, 3));
46 }
47
48 @Test
49 void testAddNegativeLength() {
50 final CircularByteBuffer cbb = new CircularByteBuffer();
51 final byte[] targetBuffer = { 1, 2, 3 };
52 assertThrows(IllegalArgumentException.class, () -> cbb.add(targetBuffer, 0, -1));
53 }
54
55 @Test
56 void testAddNullBuffer() {
57 final CircularByteBuffer cbb = new CircularByteBuffer();
58 assertThrows(NullPointerException.class, () -> cbb.add(null, 0, 3));
59 }
60
61
62
63
64 @Test
65 void testAddValidData() {
66 final CircularByteBuffer cbb = new CircularByteBuffer();
67 final int length = 3;
68 cbb.add(new byte[] { 3, 6, 9 }, 0, length);
69 assertEquals(length, cbb.getCurrentNumberOfBytes());
70 }
71
72 @Test
73 void testClear() {
74 final byte[] data = { 1, 2, 3 };
75 final CircularByteBuffer buffer = new CircularByteBuffer(10);
76 assertEquals(0, buffer.getCurrentNumberOfBytes());
77 assertFalse(buffer.hasBytes());
78
79 buffer.add(data, 0, data.length);
80 assertEquals(3, buffer.getCurrentNumberOfBytes());
81 assertEquals(7, buffer.getSpace());
82 assertTrue(buffer.hasBytes());
83 assertTrue(buffer.hasSpace());
84
85 buffer.clear();
86 assertEquals(0, buffer.getCurrentNumberOfBytes());
87 assertEquals(10, buffer.getSpace());
88 assertFalse(buffer.hasBytes());
89 assertTrue(buffer.hasSpace());
90 }
91
92 @Test
93 void testHasSpace() {
94 final CircularByteBuffer cbb = new CircularByteBuffer(1);
95 assertTrue(cbb.hasSpace());
96 cbb.add((byte) 1);
97 assertFalse(cbb.hasSpace());
98 assertEquals(1, cbb.read());
99 assertTrue(cbb.hasSpace());
100 cbb.add((byte) 2);
101 assertFalse(cbb.hasSpace());
102 assertEquals(2, cbb.read());
103 assertTrue(cbb.hasSpace());
104 }
105
106 @Test
107 void testHasSpaceInt() {
108 final CircularByteBuffer cbb = new CircularByteBuffer(1);
109 assertTrue(cbb.hasSpace(1));
110 cbb.add((byte) 1);
111 assertFalse(cbb.hasSpace(1));
112 assertEquals(1, cbb.read());
113 assertTrue(cbb.hasSpace(1));
114 cbb.add((byte) 2);
115 assertFalse(cbb.hasSpace(1));
116 assertEquals(2, cbb.read());
117 assertTrue(cbb.hasSpace(1));
118 }
119
120 @Test
121 void testPeekWithExcessiveLength() {
122 assertFalse(new CircularByteBuffer().peek(new byte[] { 1, 3, 5, 7, 9 }, 0, 6));
123 }
124
125 @Test
126 void testPeekWithInvalidOffset() {
127 final CircularByteBuffer cbb = new CircularByteBuffer();
128 final IllegalArgumentException e = assertThrows(IllegalArgumentException.class, () -> cbb.peek(new byte[] { 2, 4, 6, 8, 10 }, -1, 5));
129 assertEquals("Illegal offset: -1", e.getMessage());
130 }
131
132 @Test
133 void testPeekWithNegativeLength() {
134 final CircularByteBuffer cbb = new CircularByteBuffer();
135 final IllegalArgumentException e = assertThrows(IllegalArgumentException.class, () -> cbb.peek(new byte[] { 1, 4, 3 }, 0, -1));
136 assertEquals("Illegal length: -1", e.getMessage());
137 }
138
139
140 @Test
141 void testPeekWithValidArguments() {
142 assertFalse(new CircularByteBuffer().peek(new byte[] { 5, 10, 15, 20, 25 }, 0, 5));
143 }
144
145 @Test
146 void testReadByteArray() {
147 final CircularByteBuffer cbb = new CircularByteBuffer();
148 final String string = "0123456789";
149 final byte[] bytesIn = string.getBytes(StandardCharsets.UTF_8);
150 cbb.add(bytesIn, 0, 10);
151 final byte[] bytesOut = new byte[10];
152 cbb.read(bytesOut, 0, 10);
153 assertEquals(string, new String(bytesOut, StandardCharsets.UTF_8));
154 }
155
156 @Test
157 void testReadByteArrayIllegalArgumentException() {
158 final CircularByteBuffer cbb = new CircularByteBuffer();
159 final byte[] bytesOut = new byte[10];
160
161 assertThrows(IllegalArgumentException.class, () -> cbb.read(bytesOut, -1, 10));
162
163 assertThrows(IllegalArgumentException.class, () -> cbb.read(bytesOut, 0, bytesOut.length + 1));
164 }
165 }