1
2
3
4
5
6 package mockit.asm.util;
7
8 import static org.junit.jupiter.api.Assertions.assertEquals;
9 import static org.junit.jupiter.api.Assertions.assertNotNull;
10 import static org.junit.jupiter.api.Assertions.assertThrows;
11 import static org.junit.jupiter.api.Assertions.assertTrue;
12
13 import org.junit.jupiter.api.Test;
14
15 final class ByteVectorTest {
16
17 @Test
18 void constructorDefaultSize() {
19 ByteVector bv = new ByteVector();
20 assertNotNull(bv.getData());
21 assertEquals(0, bv.getLength());
22 }
23
24 @Test
25 void constructorWithInitialSize() {
26 ByteVector bv = new ByteVector(128);
27 assertNotNull(bv.getData());
28 assertEquals(0, bv.getLength());
29 }
30
31 @Test
32 void putByteIncreasesLength() {
33 ByteVector bv = new ByteVector();
34 bv.putByte(42);
35 assertEquals(1, bv.getLength());
36 assertEquals(42, bv.getData()[0]);
37 }
38
39 @Test
40 void putShortIncreasesLength() {
41 ByteVector bv = new ByteVector();
42 bv.putShort(0x1234);
43 assertEquals(2, bv.getLength());
44 assertEquals(0x12, bv.getData()[0] & 0xFF);
45 assertEquals(0x34, bv.getData()[1] & 0xFF);
46 }
47
48 @Test
49 void putIntIncreasesLength() {
50 ByteVector bv = new ByteVector();
51 bv.putInt(0x12345678);
52 assertEquals(4, bv.getLength());
53 assertEquals(0x12, bv.getData()[0] & 0xFF);
54 assertEquals(0x34, bv.getData()[1] & 0xFF);
55 assertEquals(0x56, bv.getData()[2] & 0xFF);
56 assertEquals(0x78, bv.getData()[3] & 0xFF);
57 }
58
59 @Test
60 void putLongIncreasesLength() {
61 ByteVector bv = new ByteVector();
62 bv.putLong(0x1234567890ABCDEFL);
63 assertEquals(8, bv.getLength());
64 }
65
66 @Test
67 void putLongValueZero() {
68 ByteVector bv = new ByteVector();
69 bv.putLong(0L);
70 assertEquals(8, bv.getLength());
71 for (int i = 0; i < 8; i++) {
72 assertEquals(0, bv.getData()[i]);
73 }
74 }
75
76 @Test
77 void putLongMaxValue() {
78 ByteVector bv = new ByteVector();
79 bv.putLong(Long.MAX_VALUE);
80 assertEquals(8, bv.getLength());
81 }
82
83 @Test
84 void putUTF8AsciiString() {
85 ByteVector bv = new ByteVector();
86 bv.putUTF8("hello");
87
88 assertEquals(7, bv.getLength());
89 }
90
91 @Test
92 void putUTF8EmptyString() {
93 ByteVector bv = new ByteVector();
94 bv.putUTF8("");
95
96 assertEquals(2, bv.getLength());
97 assertEquals(0, bv.getData()[0]);
98 assertEquals(0, bv.getData()[1]);
99 }
100
101 @Test
102 void putUTF8WithNonAsciiChars() {
103 ByteVector bv = new ByteVector();
104
105 bv.putUTF8("\u00e9");
106
107 assertTrue(bv.getLength() >= 2);
108 }
109
110 @Test
111 void putUTF8WithHighUnicodeChars() {
112 ByteVector bv = new ByteVector();
113
114 bv.putUTF8("\u0800");
115
116 assertTrue(bv.getLength() >= 2);
117 }
118
119 @Test
120 void putUTF8TooLongThrows() {
121 ByteVector bv = new ByteVector();
122
123 StringBuilder sb = new StringBuilder(65536);
124 for (int i = 0; i < 65536; i++) {
125 sb.append('a');
126 }
127 assertThrows(IllegalArgumentException.class, () -> bv.putUTF8(sb.toString()));
128 }
129
130 @Test
131 void setLengthUpdatesLength() {
132 ByteVector bv = new ByteVector();
133 bv.putInt(0);
134 assertEquals(4, bv.getLength());
135 bv.setLength(2);
136 assertEquals(2, bv.getLength());
137 }
138
139 @Test
140 void put11TwoBytes() {
141 ByteVector bv = new ByteVector();
142 bv.put11(0xAB, 0xCD);
143 assertEquals(2, bv.getLength());
144 assertEquals(0xAB, bv.getData()[0] & 0xFF);
145 assertEquals(0xCD, bv.getData()[1] & 0xFF);
146 }
147
148 @Test
149 void put12ThreeBytes() {
150 ByteVector bv = new ByteVector();
151 bv.put12(0xAB, 0x1234);
152 assertEquals(3, bv.getLength());
153 assertEquals(0xAB, bv.getData()[0] & 0xFF);
154 assertEquals(0x12, bv.getData()[1] & 0xFF);
155 assertEquals(0x34, bv.getData()[2] & 0xFF);
156 }
157
158 @Test
159 void autoEnlargeWhenFull() {
160 ByteVector bv = new ByteVector(4);
161
162 for (int i = 0; i < 10; i++) {
163 bv.putByte(i);
164 }
165 assertEquals(10, bv.getLength());
166 }
167 }