1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.apache.commons.compress.archivers.zip;
21
22 import java.io.IOException;
23 import java.nio.ByteBuffer;
24
25 import junit.framework.TestCase;
26
27 import org.apache.commons.compress.utils.CharsetNames;
28
29
30
31
32 public class TestZipEncodings extends TestCase {
33 private static final String UNENC_STRING = "\u2016";
34
35
36 private static final String BAD_STRING =
37 "\u2016\u2015\u2016\u2015\u2016\u2015\u2016\u2015\u2016\u2015\u2016";
38
39 private static final String BAD_STRING_ENC =
40 "%U2016%U2015%U2016%U2015%U2016%U2015%U2016%U2015%U2016%U2015%U2016";
41
42 public void testSimpleCp437Encoding() throws IOException {
43
44 doSimpleEncodingTest("Cp437", null);
45 }
46
47 public void testSimpleCp850Encoding() throws IOException {
48
49 doSimpleEncodingTest("Cp850", null);
50 }
51
52 public void testNioCp1252Encoding() throws IOException {
53
54
55
56
57 byte[] b =
58 new byte[] { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
59 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
60 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
61 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F,
62 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
63 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F,
64 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
65 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F,
66 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
67 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F,
68 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57,
69 0x58, 0x59, 0x5A, 0x5B, 0x5C, 0x5D, 0x5E, 0x5F,
70 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
71 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F,
72 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
73 0x78, 0x79, 0x7A, 0x7B, 0x7C, 0x7D, 0x7E, 0x7F,
74 (byte) 0x80, (byte) 0x82, (byte) 0x83, (byte) 0x84,
75 (byte) 0x85, (byte) 0x86, (byte) 0x87, (byte) 0x88,
76 (byte) 0x89, (byte) 0x8A, (byte) 0x8B, (byte) 0x8C,
77 (byte) 0x8E, (byte) 0x91, (byte) 0x92, (byte) 0x93,
78 (byte) 0x94, (byte) 0x95, (byte) 0x96, (byte) 0x97,
79 (byte) 0x98, (byte) 0x99, (byte) 0x9A, (byte) 0x9B,
80 (byte) 0x9C, (byte) 0x9E, (byte) 0x9F, (byte) 0xA0,
81 (byte) 0xA1, (byte) 0xA2, (byte) 0xA3, (byte) 0xA4,
82 (byte) 0xA5, (byte) 0xA6, (byte) 0xA7, (byte) 0xA8,
83 (byte) 0xA9, (byte) 0xAA, (byte) 0xAB, (byte) 0xAC,
84 (byte) 0xAD, (byte) 0xAE, (byte) 0xAF, (byte) 0xB0,
85 (byte) 0xB1, (byte) 0xB2, (byte) 0xB3, (byte) 0xB4,
86 (byte) 0xB5, (byte) 0xB6, (byte) 0xB7, (byte) 0xB8,
87 (byte) 0xB9, (byte) 0xBA, (byte) 0xBB, (byte) 0xBC,
88 (byte) 0xBD, (byte) 0xBE, (byte) 0xBF, (byte) 0xC0,
89 (byte) 0xC1, (byte) 0xC2, (byte) 0xC3, (byte) 0xC4,
90 (byte) 0xC5, (byte) 0xC6, (byte) 0xC7, (byte) 0xC8,
91 (byte) 0xC9, (byte) 0xCA, (byte) 0xCB, (byte) 0xCC,
92 (byte) 0xCD, (byte) 0xCE, (byte) 0xCF, (byte) 0xD0,
93 (byte) 0xD1, (byte) 0xD2, (byte) 0xD3, (byte) 0xD4,
94 (byte) 0xD5, (byte) 0xD6, (byte) 0xD7, (byte) 0xD8,
95 (byte) 0xD9, (byte) 0xDA, (byte) 0xDB, (byte) 0xDC,
96 (byte) 0xDD, (byte) 0xDE, (byte) 0xDF, (byte) 0xE0,
97 (byte) 0xE1, (byte) 0xE2, (byte) 0xE3, (byte) 0xE4,
98 (byte) 0xE5, (byte) 0xE6, (byte) 0xE7, (byte) 0xE8,
99 (byte) 0xE9, (byte) 0xEA, (byte) 0xEB, (byte) 0xEC,
100 (byte) 0xED, (byte) 0xEE, (byte) 0xEF, (byte) 0xF0,
101 (byte) 0xF1, (byte) 0xF2, (byte) 0xF3, (byte) 0xF4,
102 (byte) 0xF5, (byte) 0xF6, (byte) 0xF7, (byte) 0xF8,
103 (byte) 0xF9, (byte) 0xFA, (byte) 0xFB, (byte) 0xFC,
104 (byte) 0xFD, (byte) 0xFE, (byte) 0xFF };
105
106 doSimpleEncodingTest("Cp1252",b);
107 }
108
109 private static final void assertEquals(byte[] expected, ByteBuffer actual) {
110
111 assertEquals(expected.length, actual.limit());
112
113 for (int i = 0; i < expected.length; ++i) {
114
115 byte a = actual.get();
116 assertEquals(expected[i], a);
117 }
118
119 }
120
121 private void doSimpleEncodingTest(String name, byte[] testBytes)
122 throws IOException {
123
124 ZipEncoding enc = ZipEncodingHelper.getZipEncoding(name);
125
126 if (testBytes == null) {
127
128 testBytes = new byte[256];
129 for (int i = 0; i < 256; ++i) {
130 testBytes[i] = (byte) i;
131 }
132 }
133
134 String decoded = enc.decode(testBytes);
135
136 assertEquals(true, enc.canEncode(decoded));
137
138 ByteBuffer encoded = enc.encode(decoded);
139
140 assertEquals(testBytes, encoded);
141
142 assertEquals(false, enc.canEncode(UNENC_STRING));
143 assertEquals("%U2016".getBytes(CharsetNames.US_ASCII), enc.encode(UNENC_STRING));
144 assertEquals(false, enc.canEncode(BAD_STRING));
145 assertEquals(BAD_STRING_ENC.getBytes(CharsetNames.US_ASCII),
146 enc.encode(BAD_STRING));
147 }
148
149 }