1 2 17 18 19 package org.apache.poi.poifs.property; 20 21 import java.io.*; 22 23 import java.util.*; 24 25 import junit.framework.*; 26 27 import org.apache.poi.poifs.property.DocumentProperty; 28 29 34 35 public class TestDocumentProperty 36 extends TestCase 37 { 38 39 44 45 public TestDocumentProperty(String name) 46 { 47 super(name); 48 } 49 50 55 56 public void testConstructor() 57 throws IOException 58 { 59 60 verifyProperty("foo", 1234); 62 63 verifyProperty("A.really.long.long.long.name123", 2345); 65 66 verifyProperty("A.really.long.long.long.name1234", 4095); 68 69 verifyProperty("A.really.long.long.long.name123", 4096); 71 } 72 73 78 79 public void testReadingConstructor() 80 throws IOException 81 { 82 byte[] input = 83 { 84 ( byte ) 0x52, ( byte ) 0x00, ( byte ) 0x6F, ( byte ) 0x00, 85 ( byte ) 0x6F, ( byte ) 0x00, ( byte ) 0x74, ( byte ) 0x00, 86 ( byte ) 0x20, ( byte ) 0x00, ( byte ) 0x45, ( byte ) 0x00, 87 ( byte ) 0x6E, ( byte ) 0x00, ( byte ) 0x74, ( byte ) 0x00, 88 ( byte ) 0x72, ( byte ) 0x00, ( byte ) 0x79, ( byte ) 0x00, 89 ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, 90 ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, 91 ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, 92 ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, 93 ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, 94 ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, 95 ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, 96 ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, 97 ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, 98 ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, 99 ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, 100 ( byte ) 0x16, ( byte ) 0x00, ( byte ) 0x05, ( byte ) 0x01, 101 ( byte ) 0xFF, ( byte ) 0xFF, ( byte ) 0xFF, ( byte ) 0xFF, 102 ( byte ) 0xFF, ( byte ) 0xFF, ( byte ) 0xFF, ( byte ) 0xFF, 103 ( byte ) 0x02, ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, 104 ( byte ) 0x20, ( byte ) 0x08, ( byte ) 0x02, ( byte ) 0x00, 105 ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, 106 ( byte ) 0xC0, ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, 107 ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x46, 108 ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, 109 ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, 110 ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, 111 ( byte ) 0xC0, ( byte ) 0x5C, ( byte ) 0xE8, ( byte ) 0x23, 112 ( byte ) 0x9E, ( byte ) 0x6B, ( byte ) 0xC1, ( byte ) 0x01, 113 ( byte ) 0xFE, ( byte ) 0xFF, ( byte ) 0xFF, ( byte ) 0xFF, 114 ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, 115 ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, 116 117 ( byte ) 0x57, ( byte ) 0x00, ( byte ) 0x6F, ( byte ) 0x00, 118 ( byte ) 0x72, ( byte ) 0x00, ( byte ) 0x6B, ( byte ) 0x00, 119 ( byte ) 0x62, ( byte ) 0x00, ( byte ) 0x6F, ( byte ) 0x00, 120 ( byte ) 0x6F, ( byte ) 0x00, ( byte ) 0x6B, ( 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 ) 0x00, ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, 125 ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, 126 ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, 127 ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, 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 ) 0x12, ( byte ) 0x00, ( byte ) 0x02, ( byte ) 0x01, 134 ( byte ) 0xFF, ( byte ) 0xFF, ( byte ) 0xFF, ( byte ) 0xFF, 135 ( byte ) 0xFF, ( byte ) 0xFF, ( byte ) 0xFF, ( byte ) 0xFF, 136 ( byte ) 0xFF, ( byte ) 0xFF, ( byte ) 0xFF, ( byte ) 0xFF, 137 ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, 138 ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, 139 ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, 140 ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, 141 ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, 142 ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, 143 ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, 144 ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, 145 ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, 146 ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, 147 ( byte ) 0x00, ( byte ) 0x10, ( byte ) 0x00, ( byte ) 0x00, 148 ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, 149 150 ( byte ) 0x05, ( byte ) 0x00, ( byte ) 0x53, ( byte ) 0x00, 151 ( byte ) 0x75, ( byte ) 0x00, ( byte ) 0x6D, ( byte ) 0x00, 152 ( byte ) 0x6D, ( byte ) 0x00, ( byte ) 0x61, ( byte ) 0x00, 153 ( byte ) 0x72, ( byte ) 0x00, ( byte ) 0x79, ( byte ) 0x00, 154 ( byte ) 0x49, ( byte ) 0x00, ( byte ) 0x6E, ( byte ) 0x00, 155 ( byte ) 0x66, ( byte ) 0x00, ( byte ) 0x6F, ( byte ) 0x00, 156 ( byte ) 0x72, ( byte ) 0x00, ( byte ) 0x6D, ( byte ) 0x00, 157 ( byte ) 0x61, ( byte ) 0x00, ( byte ) 0x74, ( byte ) 0x00, 158 ( byte ) 0x69, ( byte ) 0x00, ( byte ) 0x6F, ( byte ) 0x00, 159 ( byte ) 0x6E, ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, 160 ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, 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 ) 0x28, ( byte ) 0x00, ( byte ) 0x02, ( byte ) 0x01, 167 ( byte ) 0x01, ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, 168 ( byte ) 0x03, ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, 169 ( byte ) 0xFF, ( byte ) 0xFF, ( byte ) 0xFF, ( byte ) 0xFF, 170 ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, 171 ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, 172 ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, 173 ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, 174 ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, 175 ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, 176 ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, 177 ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, 178 ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, 179 ( byte ) 0x08, ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, 180 ( byte ) 0x00, ( byte ) 0x10, ( byte ) 0x00, ( byte ) 0x00, 181 ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, 182 183 ( byte ) 0x05, ( byte ) 0x00, ( byte ) 0x44, ( byte ) 0x00, 184 ( byte ) 0x6F, ( byte ) 0x00, ( byte ) 0x63, ( byte ) 0x00, 185 ( byte ) 0x75, ( byte ) 0x00, ( byte ) 0x6D, ( byte ) 0x00, 186 ( byte ) 0x65, ( byte ) 0x00, ( byte ) 0x6E, ( byte ) 0x00, 187 ( byte ) 0x74, ( byte ) 0x00, ( byte ) 0x53, ( byte ) 0x00, 188 ( byte ) 0x75, ( byte ) 0x00, ( byte ) 0x6D, ( byte ) 0x00, 189 ( byte ) 0x6D, ( byte ) 0x00, ( byte ) 0x61, ( byte ) 0x00, 190 ( byte ) 0x72, ( byte ) 0x00, ( byte ) 0x79, ( byte ) 0x00, 191 ( byte ) 0x49, ( byte ) 0x00, ( byte ) 0x6E, ( byte ) 0x00, 192 ( byte ) 0x66, ( byte ) 0x00, ( byte ) 0x6F, ( byte ) 0x00, 193 ( byte ) 0x72, ( byte ) 0x00, ( byte ) 0x6D, ( byte ) 0x00, 194 ( byte ) 0x61, ( byte ) 0x00, ( byte ) 0x74, ( byte ) 0x00, 195 ( byte ) 0x69, ( byte ) 0x00, ( byte ) 0x6F, ( byte ) 0x00, 196 ( byte ) 0x6E, ( 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 ) 0x38, ( byte ) 0x00, ( byte ) 0x02, ( byte ) 0x01, 200 ( byte ) 0xFF, ( byte ) 0xFF, ( byte ) 0xFF, ( byte ) 0xFF, 201 ( byte ) 0xFF, ( byte ) 0xFF, ( byte ) 0xFF, ( byte ) 0xFF, 202 ( byte ) 0xFF, ( byte ) 0xFF, ( byte ) 0xFF, ( byte ) 0xFF, 203 ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, 204 ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, 205 ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, 206 ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, 207 ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, 208 ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, 209 ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, 210 ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, 211 ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, 212 ( byte ) 0x10, ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, 213 ( byte ) 0x00, ( byte ) 0x10, ( byte ) 0x00, ( byte ) 0x00, 214 ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00, ( byte ) 0x00 215 }; 216 217 verifyReadingProperty(1, input, 128, "Workbook"); 218 verifyReadingProperty(2, input, 256, "\005SummaryInformation"); 219 verifyReadingProperty(3, input, 384, 220 "\005DocumentSummaryInformation"); 221 } 222 223 private void verifyReadingProperty(int index, byte [] input, int offset, 224 String name) 225 throws IOException 226 { 227 DocumentProperty property = new DocumentProperty(index, input, 228 offset); 229 ByteArrayOutputStream stream = new ByteArrayOutputStream(128); 230 byte[] expected = new byte[ 128 ]; 231 232 System.arraycopy(input, offset, expected, 0, 128); 233 property.writeData(stream); 234 byte[] output = stream.toByteArray(); 235 236 assertEquals(128, output.length); 237 for (int j = 0; j < 128; j++) 238 { 239 assertEquals("mismatch at offset " + j, expected[ j ], 240 output[ j ]); 241 } 242 assertEquals(index, property.getIndex()); 243 assertEquals(name, property.getName()); 244 } 245 246 private void verifyProperty(String name, int size) 247 throws IOException 248 { 249 DocumentProperty property = new DocumentProperty(name, size); 250 251 if (size >= 4096) 252 { 253 assertTrue(!property.shouldUseSmallBlocks()); 254 } 255 else 256 { 257 assertTrue(property.shouldUseSmallBlocks()); 258 } 259 byte[] testblock = new byte[ 128 ]; 260 int index = 0; 261 262 for (; index < 0x40; index++) 263 { 264 testblock[ index ] = ( byte ) 0; 265 } 266 int limit = Math.min(31, name.length()); 267 268 testblock[ index++ ] = ( byte ) (2 * (limit + 1)); 269 testblock[ index++ ] = ( byte ) 0; 270 testblock[ index++ ] = ( byte ) 2; 271 testblock[ index++ ] = ( byte ) 1; 272 for (; index < 0x50; index++) 273 { 274 testblock[ index ] = ( byte ) 0xFF; 275 } 276 for (; index < 0x78; index++) 277 { 278 testblock[ index ] = ( byte ) 0; 279 } 280 int sz = size; 281 282 testblock[ index++ ] = ( byte ) sz; 283 sz /= 256; 284 testblock[ index++ ] = ( byte ) sz; 285 sz /= 256; 286 testblock[ index++ ] = ( byte ) sz; 287 sz /= 256; 288 testblock[ index++ ] = ( byte ) sz; 289 for (; index < 0x80; index++) 290 { 291 testblock[ index ] = ( byte ) 0x0; 292 } 293 byte[] name_bytes = name.getBytes(); 294 295 for (index = 0; index < limit; index++) 296 { 297 testblock[ index * 2 ] = name_bytes[ index ]; 298 } 299 ByteArrayOutputStream stream = new ByteArrayOutputStream(512); 300 301 property.writeData(stream); 302 byte[] output = stream.toByteArray(); 303 304 assertEquals(testblock.length, output.length); 305 for (int j = 0; j < testblock.length; j++) 306 { 307 assertEquals("mismatch at offset " + j, testblock[ j ], 308 output[ j ]); 309 } 310 } 311 312 317 318 public static void main(String [] ignored_args) 319 { 320 System.out.println( 321 "Testing org.apache.poi.poifs.property.DocumentProperty"); 322 junit.textui.TestRunner.run(TestDocumentProperty.class); 323 } 324 } 325 | Popular Tags |