001: /* ====================================================================
002: Licensed to the Apache Software Foundation (ASF) under one or more
003: contributor license agreements. See the NOTICE file distributed with
004: this work for additional information regarding copyright ownership.
005: The ASF licenses this file to You under the Apache License, Version 2.0
006: (the "License"); you may not use this file except in compliance with
007: the License. You may obtain a copy of the License at
008:
009: http://www.apache.org/licenses/LICENSE-2.0
010:
011: Unless required by applicable law or agreed to in writing, software
012: distributed under the License is distributed on an "AS IS" BASIS,
013: WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014: See the License for the specific language governing permissions and
015: limitations under the License.
016: ==================================================================== */
017:
018: package org.apache.poi.poifs.property;
019:
020: import java.io.*;
021:
022: import java.util.*;
023:
024: import junit.framework.*;
025:
026: import org.apache.poi.poifs.property.DocumentProperty;
027:
028: /**
029: * Class to test DocumentProperty functionality
030: *
031: * @author Marc Johnson
032: */
033:
034: public class TestDocumentProperty extends TestCase {
035:
036: /**
037: * Constructor TestDocumentProperty
038: *
039: * @param name
040: */
041:
042: public TestDocumentProperty(String name) {
043: super (name);
044: }
045:
046: /**
047: * Test constructing DocumentPropertys
048: *
049: * @exception IOException
050: */
051:
052: public void testConstructor() throws IOException {
053:
054: // test with short name, small file
055: verifyProperty("foo", 1234);
056:
057: // test with just long enough name, small file
058: verifyProperty("A.really.long.long.long.name123", 2345);
059:
060: // test with longer name, just small enough file
061: verifyProperty("A.really.long.long.long.name1234", 4095);
062:
063: // test with just long enough file
064: verifyProperty("A.really.long.long.long.name123", 4096);
065: }
066:
067: /**
068: * Test reading constructor
069: *
070: * @exception IOException
071: */
072:
073: public void testReadingConstructor() throws IOException {
074: byte[] input = { (byte) 0x52, (byte) 0x00, (byte) 0x6F,
075: (byte) 0x00, (byte) 0x6F, (byte) 0x00, (byte) 0x74,
076: (byte) 0x00, (byte) 0x20, (byte) 0x00, (byte) 0x45,
077: (byte) 0x00, (byte) 0x6E, (byte) 0x00, (byte) 0x74,
078: (byte) 0x00, (byte) 0x72, (byte) 0x00, (byte) 0x79,
079: (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
080: (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
081: (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
082: (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
083: (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
084: (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
085: (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
086: (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
087: (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
088: (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
089: (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
090: (byte) 0x00, (byte) 0x16, (byte) 0x00, (byte) 0x05,
091: (byte) 0x01, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
092: (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
093: (byte) 0xFF, (byte) 0x02, (byte) 0x00, (byte) 0x00,
094: (byte) 0x00, (byte) 0x20, (byte) 0x08, (byte) 0x02,
095: (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
096: (byte) 0x00, (byte) 0xC0, (byte) 0x00, (byte) 0x00,
097: (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
098: (byte) 0x46, (byte) 0x00, (byte) 0x00, (byte) 0x00,
099: (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
100: (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
101: (byte) 0x00, (byte) 0xC0, (byte) 0x5C, (byte) 0xE8,
102: (byte) 0x23, (byte) 0x9E, (byte) 0x6B, (byte) 0xC1,
103: (byte) 0x01, (byte) 0xFE, (byte) 0xFF, (byte) 0xFF,
104: (byte) 0xFF, (byte) 0x00, (byte) 0x00, (byte) 0x00,
105: (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
106: (byte) 0x00,
107:
108: (byte) 0x57, (byte) 0x00, (byte) 0x6F, (byte) 0x00,
109: (byte) 0x72, (byte) 0x00, (byte) 0x6B, (byte) 0x00,
110: (byte) 0x62, (byte) 0x00, (byte) 0x6F, (byte) 0x00,
111: (byte) 0x6F, (byte) 0x00, (byte) 0x6B, (byte) 0x00,
112: (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
113: (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
114: (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
115: (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
116: (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
117: (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
118: (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
119: (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
120: (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
121: (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
122: (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
123: (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
124: (byte) 0x12, (byte) 0x00, (byte) 0x02, (byte) 0x01,
125: (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
126: (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
127: (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
128: (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
129: (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
130: (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
131: (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
132: (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
133: (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
134: (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
135: (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
136: (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
137: (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
138: (byte) 0x00, (byte) 0x10, (byte) 0x00, (byte) 0x00,
139: (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
140:
141: (byte) 0x05, (byte) 0x00, (byte) 0x53, (byte) 0x00,
142: (byte) 0x75, (byte) 0x00, (byte) 0x6D, (byte) 0x00,
143: (byte) 0x6D, (byte) 0x00, (byte) 0x61, (byte) 0x00,
144: (byte) 0x72, (byte) 0x00, (byte) 0x79, (byte) 0x00,
145: (byte) 0x49, (byte) 0x00, (byte) 0x6E, (byte) 0x00,
146: (byte) 0x66, (byte) 0x00, (byte) 0x6F, (byte) 0x00,
147: (byte) 0x72, (byte) 0x00, (byte) 0x6D, (byte) 0x00,
148: (byte) 0x61, (byte) 0x00, (byte) 0x74, (byte) 0x00,
149: (byte) 0x69, (byte) 0x00, (byte) 0x6F, (byte) 0x00,
150: (byte) 0x6E, (byte) 0x00, (byte) 0x00, (byte) 0x00,
151: (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
152: (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
153: (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
154: (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
155: (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
156: (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
157: (byte) 0x28, (byte) 0x00, (byte) 0x02, (byte) 0x01,
158: (byte) 0x01, (byte) 0x00, (byte) 0x00, (byte) 0x00,
159: (byte) 0x03, (byte) 0x00, (byte) 0x00, (byte) 0x00,
160: (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
161: (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
162: (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
163: (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
164: (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
165: (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
166: (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
167: (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
168: (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
169: (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
170: (byte) 0x08, (byte) 0x00, (byte) 0x00, (byte) 0x00,
171: (byte) 0x00, (byte) 0x10, (byte) 0x00, (byte) 0x00,
172: (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
173:
174: (byte) 0x05, (byte) 0x00, (byte) 0x44, (byte) 0x00,
175: (byte) 0x6F, (byte) 0x00, (byte) 0x63, (byte) 0x00,
176: (byte) 0x75, (byte) 0x00, (byte) 0x6D, (byte) 0x00,
177: (byte) 0x65, (byte) 0x00, (byte) 0x6E, (byte) 0x00,
178: (byte) 0x74, (byte) 0x00, (byte) 0x53, (byte) 0x00,
179: (byte) 0x75, (byte) 0x00, (byte) 0x6D, (byte) 0x00,
180: (byte) 0x6D, (byte) 0x00, (byte) 0x61, (byte) 0x00,
181: (byte) 0x72, (byte) 0x00, (byte) 0x79, (byte) 0x00,
182: (byte) 0x49, (byte) 0x00, (byte) 0x6E, (byte) 0x00,
183: (byte) 0x66, (byte) 0x00, (byte) 0x6F, (byte) 0x00,
184: (byte) 0x72, (byte) 0x00, (byte) 0x6D, (byte) 0x00,
185: (byte) 0x61, (byte) 0x00, (byte) 0x74, (byte) 0x00,
186: (byte) 0x69, (byte) 0x00, (byte) 0x6F, (byte) 0x00,
187: (byte) 0x6E, (byte) 0x00, (byte) 0x00, (byte) 0x00,
188: (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
189: (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
190: (byte) 0x38, (byte) 0x00, (byte) 0x02, (byte) 0x01,
191: (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
192: (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
193: (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
194: (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
195: (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
196: (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
197: (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
198: (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
199: (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
200: (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
201: (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
202: (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
203: (byte) 0x10, (byte) 0x00, (byte) 0x00, (byte) 0x00,
204: (byte) 0x00, (byte) 0x10, (byte) 0x00, (byte) 0x00,
205: (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00 };
206:
207: verifyReadingProperty(1, input, 128, "Workbook");
208: verifyReadingProperty(2, input, 256, "\005SummaryInformation");
209: verifyReadingProperty(3, input, 384,
210: "\005DocumentSummaryInformation");
211: }
212:
213: private void verifyReadingProperty(int index, byte[] input,
214: int offset, String name) throws IOException {
215: DocumentProperty property = new DocumentProperty(index, input,
216: offset);
217: ByteArrayOutputStream stream = new ByteArrayOutputStream(128);
218: byte[] expected = new byte[128];
219:
220: System.arraycopy(input, offset, expected, 0, 128);
221: property.writeData(stream);
222: byte[] output = stream.toByteArray();
223:
224: assertEquals(128, output.length);
225: for (int j = 0; j < 128; j++) {
226: assertEquals("mismatch at offset " + j, expected[j],
227: output[j]);
228: }
229: assertEquals(index, property.getIndex());
230: assertEquals(name, property.getName());
231: }
232:
233: private void verifyProperty(String name, int size)
234: throws IOException {
235: DocumentProperty property = new DocumentProperty(name, size);
236:
237: if (size >= 4096) {
238: assertTrue(!property.shouldUseSmallBlocks());
239: } else {
240: assertTrue(property.shouldUseSmallBlocks());
241: }
242: byte[] testblock = new byte[128];
243: int index = 0;
244:
245: for (; index < 0x40; index++) {
246: testblock[index] = (byte) 0;
247: }
248: int limit = Math.min(31, name.length());
249:
250: testblock[index++] = (byte) (2 * (limit + 1));
251: testblock[index++] = (byte) 0;
252: testblock[index++] = (byte) 2;
253: testblock[index++] = (byte) 1;
254: for (; index < 0x50; index++) {
255: testblock[index] = (byte) 0xFF;
256: }
257: for (; index < 0x78; index++) {
258: testblock[index] = (byte) 0;
259: }
260: int sz = size;
261:
262: testblock[index++] = (byte) sz;
263: sz /= 256;
264: testblock[index++] = (byte) sz;
265: sz /= 256;
266: testblock[index++] = (byte) sz;
267: sz /= 256;
268: testblock[index++] = (byte) sz;
269: for (; index < 0x80; index++) {
270: testblock[index] = (byte) 0x0;
271: }
272: byte[] name_bytes = name.getBytes();
273:
274: for (index = 0; index < limit; index++) {
275: testblock[index * 2] = name_bytes[index];
276: }
277: ByteArrayOutputStream stream = new ByteArrayOutputStream(512);
278:
279: property.writeData(stream);
280: byte[] output = stream.toByteArray();
281:
282: assertEquals(testblock.length, output.length);
283: for (int j = 0; j < testblock.length; j++) {
284: assertEquals("mismatch at offset " + j, testblock[j],
285: output[j]);
286: }
287: }
288:
289: /**
290: * main method to run the unit tests
291: *
292: * @param ignored_args
293: */
294:
295: public static void main(String[] ignored_args) {
296: System.out
297: .println("Testing org.apache.poi.poifs.property.DocumentProperty");
298: junit.textui.TestRunner.run(TestDocumentProperty.class);
299: }
300: }
|