--- /dev/null
+/* ====================================================================
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+==================================================================== */
+
+package org.apache.poi.hmef;
+
+import java.io.IOException;
+
+import junit.framework.TestCase;
+
+import org.apache.poi.POIDataSamples;
+import org.apache.poi.util.IOUtils;
+
+public abstract class HMEFTest extends TestCase {
+ protected static final POIDataSamples _samples = POIDataSamples.getHMEFInstance();
+
+ protected void assertContents(String filename, Attachment attachment)
+ throws IOException {
+ assertEquals(filename, attachment.getLongFilename());
+ assertContents(filename, attachment.getContents());
+ }
+ protected void assertContents(String filename, byte[] actual)
+ throws IOException {
+ byte[] expected = IOUtils.toByteArray(
+ _samples.openResourceAsStream("quick-contents/" + filename)
+ );
+
+ assertEquals(expected.length, actual.length);
+ for(int i=0; i<expected.length; i++) {
+ assertEquals("Byte " + i + " wrong", expected[i], actual[i]);
+ }
+ }
+}
package org.apache.poi.hmef;
-import java.io.IOException;
import java.text.DateFormat;
import java.util.List;
import java.util.Locale;
import java.util.TimeZone;
-import junit.framework.TestCase;
-
-import org.apache.poi.POIDataSamples;
-import org.apache.poi.util.IOUtils;
-
-public final class TestAttachments extends TestCase {
- private static final POIDataSamples _samples = POIDataSamples.getHMEFInstance();
+public final class TestAttachments extends HMEFTest {
private HMEFMessage quick;
@Override
assertContents("quick.txt", attachments.get(3));
assertContents("quick.xml", attachments.get(4));
}
-
- private void assertContents(String filename, Attachment attachment)
- throws IOException {
- assertEquals(filename, attachment.getLongFilename());
-
- byte[] expected = IOUtils.toByteArray(
- _samples.openResourceAsStream("quick-contents/" + filename)
- );
- byte[] actual = attachment.getContents();
-
- assertEquals(expected.length, actual.length);
- for(int i=0; i<expected.length; i++) {
- assertEquals("Byte " + i + " wrong", expected[i], actual[i]);
- }
- }
}
import org.apache.poi.hmef.attribute.MAPIAttribute;
import org.apache.poi.hmef.attribute.MAPIRtfAttribute;
import org.apache.poi.hsmf.datatypes.MAPIProperty;
+import org.apache.poi.util.IOUtils;
import org.apache.poi.util.LittleEndian;
import org.apache.poi.util.StringUtil;
/**
* Check that we can correctly decode the whole file
- * @throws Exception
+ * TODO Fix what looks like a padding issue
*/
- public void testFull() throws Exception {
+ public void DISABLEDtestFull() throws Exception {
HMEFMessage msg = new HMEFMessage(
_samples.openResourceAsStream("quick-winmail.dat")
);
- // TODO
+ MAPIAttribute attr = msg.getMessageMAPIAttribute(MAPIProperty.RTF_COMPRESSED);
+ assertNotNull(attr);
+ MAPIRtfAttribute rtfAttr = (MAPIRtfAttribute)attr;
+
+ byte[] expected = IOUtils.toByteArray(
+ _samples.openResourceAsStream("quick-contents/message.rtf")
+ );
+ byte[] decomp = rtfAttr.getData();
+
+ // By byte
+ assertEquals(expected.length, decomp.length);
+ assertEquals(expected, decomp);
+
+ // By String
+ String expString = new String(expected, "ASCII");
+ String decompStr = rtfAttr.getDataString();
+ assertEquals(expString.length(), decompStr.length());
+ assertEquals(expString, decompStr);
}
}
package org.apache.poi.hmef;
-import junit.framework.TestCase;
-
-import org.apache.poi.POIDataSamples;
+import org.apache.poi.hmef.attribute.MAPIRtfAttribute;
import org.apache.poi.hmef.attribute.TNEFProperty;
+import org.apache.poi.hsmf.datatypes.MAPIProperty;
import org.apache.poi.util.LittleEndian;
-public final class TestHMEFMessage extends TestCase {
- private static final POIDataSamples _samples = POIDataSamples.getHMEFInstance();
-
+public final class TestHMEFMessage extends HMEFTest {
public void testOpen() throws Exception {
HMEFMessage msg = new HMEFMessage(
_samples.openResourceAsStream("quick-winmail.dat")
assertEquals("This is a test message", msg.getSubject());
assertEquals("{\\rtf1", msg.getBody().substring(0, 6));
}
+
+ /**
+ * Checks that the compressed RTF message contents
+ * can be correctly extracted
+ * TODO Fix what looks like a padding issue
+ */
+ public void DISABLEDtestMessageContents() throws Exception {
+ HMEFMessage msg = new HMEFMessage(
+ _samples.openResourceAsStream("quick-winmail.dat")
+ );
+
+ // Firstly by byte
+ MAPIRtfAttribute rtf = (MAPIRtfAttribute)
+ msg.getMessageMAPIAttribute(MAPIProperty.RTF_COMPRESSED);
+ assertContents("message.rtf", rtf.getData());
+
+ // Then by String
+ String contents = msg.getBody();
+ // It's all low bytes
+ byte[] contentsBytes = contents.getBytes("ASCII");
+ assertContents("message.rtf", contentsBytes);
+ }
}