From d909e0998c66e670fbadc03e76808a8c5236ad37 Mon Sep 17 00:00:00 2001 From: Dominik Stadler Date: Fri, 2 Jan 2015 22:38:52 +0000 Subject: [PATCH] Add verifying test-case for bug 52420 git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1649147 13f79535-47bb-0310-9956-ffa450edef68 --- .../converter/TestWordToHtmlConverter.java | 157 +++++++++--------- test-data/document/52420.doc | Bin 0 -> 32768 bytes 2 files changed, 83 insertions(+), 74 deletions(-) create mode 100644 test-data/document/52420.doc diff --git a/src/scratchpad/testcases/org/apache/poi/hwpf/converter/TestWordToHtmlConverter.java b/src/scratchpad/testcases/org/apache/poi/hwpf/converter/TestWordToHtmlConverter.java index 277689533..af56c9495 100644 --- a/src/scratchpad/testcases/org/apache/poi/hwpf/converter/TestWordToHtmlConverter.java +++ b/src/scratchpad/testcases/org/apache/poi/hwpf/converter/TestWordToHtmlConverter.java @@ -39,18 +39,18 @@ public class TestWordToHtmlConverter extends POITestCase private static String getHtmlText( final String sampleFileName ) throws Exception { - return getHtmlText( sampleFileName, false ); + return getHtmlText( sampleFileName, false); } private static String getHtmlText( final String sampleFileName, boolean emulatePictureStorage ) throws Exception { HWPFDocument hwpfDocument = new HWPFDocument( POIDataSamples - .getDocumentInstance().openResourceAsStream( sampleFileName ) ); + .getDocumentInstance().openResourceAsStream( sampleFileName )); Document newDocument = XMLHelper.getDocumentBuilderFactory().newDocumentBuilder().newDocument(); WordToHtmlConverter wordToHtmlConverter = new WordToHtmlConverter( - newDocument ); + newDocument); if ( emulatePictureStorage ) { @@ -62,21 +62,21 @@ public class TestWordToHtmlConverter extends POITestCase { return suggestedName; } - } ); + }); } - wordToHtmlConverter.processDocument( hwpfDocument ); + wordToHtmlConverter.processDocument( hwpfDocument); StringWriter stringWriter = new StringWriter(); Transformer transformer = TransformerFactory.newInstance() .newTransformer(); - transformer.setOutputProperty( OutputKeys.INDENT, "yes" ); - transformer.setOutputProperty( OutputKeys.ENCODING, "utf-8" ); - transformer.setOutputProperty( OutputKeys.METHOD, "html" ); + transformer.setOutputProperty( OutputKeys.INDENT, "yes"); + transformer.setOutputProperty( OutputKeys.ENCODING, "utf-8"); + transformer.setOutputProperty( OutputKeys.METHOD, "html"); transformer.transform( new DOMSource( wordToHtmlConverter.getDocument() ), - new StreamResult( stringWriter ) ); + new StreamResult( stringWriter )); String result = stringWriter.toString(); return result; @@ -84,172 +84,181 @@ public class TestWordToHtmlConverter extends POITestCase public void testAIOOBTap() throws Exception { - String result = getHtmlText( "AIOOB-Tap.doc" ); - assertContains( result.substring( 0, 6000 ), "" ); + String result = getHtmlText( "AIOOB-Tap.doc"); + assertContains(result.substring( 0, 6000 ), "
"); } public void testBug33519() throws Exception { - String result = getHtmlText( "Bug33519.doc" ); + String result = getHtmlText( "Bug33519.doc"); assertContains( result, - "\u041F\u043B\u0430\u043D\u0438\u043D\u0441\u043A\u0438 \u0442\u0443\u0440\u043E\u0432\u0435" ); - assertContains( result, - "\u042F\u0432\u043E\u0440 \u0410\u0441\u0435\u043D\u043E\u0432" ); + "\u041F\u043B\u0430\u043D\u0438\u043D\u0441\u043A\u0438 \u0442\u0443\u0440\u043E\u0432\u0435"); + assertContains(result, + "\u042F\u0432\u043E\u0440 \u0410\u0441\u0435\u043D\u043E\u0432"); } public void testBug46610_2() throws Exception { - String result = getHtmlText( "Bug46610_2.doc" ); + String result = getHtmlText( "Bug46610_2.doc"); assertContains( result, - "012345678911234567892123456789312345678941234567890123456789112345678921234567893123456789412345678" ); + "012345678911234567892123456789312345678941234567890123456789112345678921234567893123456789412345678"); } public void testBug46817() throws Exception { - String result = getHtmlText( "Bug46817.doc" ); + String result = getHtmlText( "Bug46817.doc"); final String substring = "
"; - assertContains( result, substring ); + assertContains(result, substring); } public void testBug47286() throws Exception { - String result = getHtmlText( "Bug47286.doc" ); + String result = getHtmlText( "Bug47286.doc"); - assertFalse( result.contains( "FORMTEXT" ) ); + assertFalse(result.contains( "FORMTEXT" )); - assertContains( result, "color:#4f6228;" ); - assertContains( result, "Passport No and the date of expire" ); - assertContains( result, "mfa.gov.cy" ); + assertContains(result, "color:#4f6228;"); + assertContains(result, "Passport No and the date of expire"); + assertContains(result, "mfa.gov.cy"); } public void testBug48075() throws Exception { - getHtmlText( "Bug48075.doc" ); + getHtmlText( "Bug48075.doc"); } public void testBug52583() throws Exception { - String result = getHtmlText( "Bug52583.doc" ); + String result = getHtmlText( "Bug52583.doc"); assertContains( result, - "" ); + ""); } public void testBug53182() throws Exception { - String result = getHtmlText( "Bug53182.doc" ); - assertFalse( result.contains( "italic" ) ); + String result = getHtmlText( "Bug53182.doc"); + assertFalse(result.contains( "italic" )); } public void testDocumentProperties() throws Exception { - String result = getHtmlText( "documentProperties.doc" ); + String result = getHtmlText( "documentProperties.doc"); - assertContains( result, "This is document title" ); - assertContains( result, - "" ); + assertContains(result, "This is document title"); + assertContains(result, + ""); } public void testEmailhyperlink() throws Exception { - String result = getHtmlText( "Bug47286.doc" ); + String result = getHtmlText( "Bug47286.doc"); final String substring = "provisastpet@mfa.gov.cy"; - assertContains( result, substring ); + assertContains(result, substring); } public void testEndnote() throws Exception { - String result = getHtmlText( "endingnote.doc" ); + String result = getHtmlText( "endingnote.doc"); assertContains( result, - "1" ); + "1"); assertContains( result, - "11 " ); + assertContains(result, ""); } public void testHyperlink() throws Exception { - String result = getHtmlText( "hyperlink.doc" ); + String result = getHtmlText( "hyperlink.doc"); - assertContains( result, "Before text; Hyperlink text" ); - assertContains( result, "; after text" ); + assertContains(result, "Before text; Hyperlink text"); + assertContains(result, "; after text"); } public void testInnerTable() throws Exception { - getHtmlText( "innertable.doc" ); + getHtmlText( "innertable.doc"); } public void testListsMargins() throws Exception { - String result = getHtmlText( "lists-margins.doc" ); + String result = getHtmlText( "lists-margins.doc"); - assertContains( result, - ".s1{display: inline-block; text-indent: 0; min-width: 0.4861111in;}" ); - assertContains( result, - ".s2{display: inline-block; text-indent: 0; min-width: 0.23055555in;}" ); - assertContains( result, - ".s3{display: inline-block; text-indent: 0; min-width: 0.28541666in;}" ); - assertContains( result, - ".s4{display: inline-block; text-indent: 0; min-width: 0.28333333in;}" ); - assertContains( result, - ".p4{text-indent:-0.59652776in;margin-left:-0.70069444in;" ); + assertContains(result, + ".s1{display: inline-block; text-indent: 0; min-width: 0.4861111in;}"); + assertContains(result, + ".s2{display: inline-block; text-indent: 0; min-width: 0.23055555in;}"); + assertContains(result, + ".s3{display: inline-block; text-indent: 0; min-width: 0.28541666in;}"); + assertContains(result, + ".s4{display: inline-block; text-indent: 0; min-width: 0.28333333in;}"); + assertContains(result, + ".p4{text-indent:-0.59652776in;margin-left:-0.70069444in;"); } public void testO_kurs_doc() throws Exception { - getHtmlText( "o_kurs.doc" ); + getHtmlText( "o_kurs.doc"); } public void testPageref() throws Exception { - String result = getHtmlText( "pageref.doc" ); + String result = getHtmlText( "pageref.doc"); - assertContains( result, "" ); - assertContains( result, "" ); - assertContains( result, "1" ); + assertContains(result, ""); + assertContains(result, ""); + assertContains(result, "1"); } public void testPicture() throws Exception { - String result = getHtmlText( "picture.doc", true ); + String result = getHtmlText( "picture.doc", true); // picture - assertContains( result, "src=\"0.emf\"" ); + assertContains(result, "src=\"0.emf\""); // visible size - assertContains( result, "width:3.1305554in;height:1.7250001in;" ); + assertContains(result, "width:3.1305554in;height:1.7250001in;"); // shift due to crop - assertContains( result, "left:-0.09375;top:-0.25694445;" ); + assertContains(result, "left:-0.09375;top:-0.25694445;"); // size without crop - assertContains( result, "width:3.4125in;height:2.325in;" ); + assertContains(result, "width:3.4125in;height:2.325in;"); } public void testPicturesEscher() throws Exception { - String result = getHtmlText( "pictures_escher.doc", true ); - assertContains( result, "" ); - assertContains( result, "" ); + String result = getHtmlText( "pictures_escher.doc", true); + assertContains(result, ""); + assertContains(result, ""); } public void testTableMerges() throws Exception { - String result = getHtmlText( "table-merges.doc" ); + String result = getHtmlText( "table-merges.doc"); - assertContains( result, "
" ); - assertContains( result, "" ); + assertContains(result, ""); + assertContains(result, ""); + } + + public void testBug52420() throws Exception { + String result = getHtmlText( "52420.doc"); + + assertFalse(result.contains( "FORMTEXT" )); + + assertContains(result, "\u0417\u0410\u0414\u0410\u041d\u0418\u0415"); + assertContains(result, "\u041f\u0440\u0435\u043f\u043e\u0434\u0430\u0432\u0430\u0442\u0435\u043b\u044c"); } } diff --git a/test-data/document/52420.doc b/test-data/document/52420.doc new file mode 100644 index 0000000000000000000000000000000000000000..f059d2acaff61671f7843983503a9a7544b11f0a GIT binary patch literal 32768 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 voSNglm>oAo@a;