diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport.cxx index e144193fcd57..10fec59698c0 100644 --- a/sw/qa/extras/ooxmlexport/ooxmlexport.cxx +++ b/sw/qa/extras/ooxmlexport/ooxmlexport.cxx @@ -1013,24 +1013,6 @@ DECLARE_OOXMLEXPORT_TEST(testTableFloating, "table-floating.docx") CPPUNIT_ASSERT_EQUAL(sal_Int32(250), getProperty(xFrame, "RightMargin")); } -DECLARE_OOXMLEXPORT_TEST(testTableFloatingMargins, "table-floating-margins.docx") -{ - // In case the table had custom left cell margin, the horizontal position was still incorrect (too small, -199). - uno::Reference xTextFramesSupplier(mxComponent, uno::UNO_QUERY); - uno::Reference xIndexAccess(xTextFramesSupplier->getTextFrames(), uno::UNO_QUERY); - uno::Reference xFrame(xIndexAccess->getByIndex(0), uno::UNO_QUERY); - CPPUNIT_ASSERT_EQUAL(sal_Int32(-499), getProperty(xFrame, "HoriOrientPosition")); - // These were 0 as well, due to lack of import. - CPPUNIT_ASSERT_EQUAL(sal_Int32(1000), getProperty(xFrame, "TopMargin")); - CPPUNIT_ASSERT_EQUAL(sal_Int32(2000), getProperty(xFrame, "BottomMargin")); - - // Paragraph bottom margin wasn't 0 in the A1 cell of the floating table. - xmlDocPtr pXmlDoc = parseExport(); - if (!pXmlDoc) - return; - assertXPath(pXmlDoc, "/w:document/w:body/w:p/w:r/mc:AlternateContent/mc:Fallback/w:pict/v:rect/v:textbox/w:txbxContent/w:tbl/w:tr[1]/w:tc[1]/w:p/w:pPr/w:spacing", "after", "0"); -} - DECLARE_OOXMLEXPORT_TEST(testFdo44689_start_page_0, "fdo44689_start_page_0.docx") { // The problem was that the import & export process did not analyze the 'start from page' attribute of a section @@ -1451,22 +1433,6 @@ DECLARE_OOXMLEXPORT_TEST(testSmartart, "smartart.docx") CPPUNIT_ASSERT_EQUAL(OUString("RenderedShapes"), nValue); // Rendered bitmap has the proper name } -DECLARE_OOXMLEXPORT_TEST(testFdo69636, "fdo69636.docx") -{ - /* - * The problem was that the exporter didn't mirror the workaround of the - * importer, regarding the btLr text frame direction: the - * mso-layout-flow-alt property was completely missing in the output. - */ - xmlDocPtr pXmlDoc = parseExport(); - if (!pXmlDoc) - return; - // VML - CPPUNIT_ASSERT(getXPath(pXmlDoc, "/w:document/w:body/w:p/w:r/mc:AlternateContent/mc:Fallback/w:pict/v:rect/v:textbox", "style").match("mso-layout-flow-alt:bottom-to-top")); - // drawingML - assertXPath(pXmlDoc, "/w:document/w:body/w:p/w:r/mc:AlternateContent/mc:Choice/w:drawing/wp:anchor/a:graphic/a:graphicData/wps:wsp/wps:bodyPr", "vert", "vert270"); -} - DECLARE_OOXMLEXPORT_TEST(testCharHighlight, "char_highlight.docx") { const uno::Reference< text::XTextRange > xPara = getParagraph(1); @@ -1659,26 +1625,6 @@ DECLARE_OOXMLEXPORT_TEST(testPgMargin, "testPgMargin.docx") assertXPath(pXmlDoc, "/w:document/w:body/w:sectPr/w:pgMar", "left", "1440"); } -DECLARE_OOXMLEXPORT_TEST(testVMLData, "TestVMLData.docx") -{ - // The problem was exporter was exporting vml data for shape in w:rPr element. - // vml data shoud not come under w:rPr element. - xmlDocPtr pXmlDoc = parseExport("word/header1.xml"); - if (!pXmlDoc) - return; - CPPUNIT_ASSERT(getXPath(pXmlDoc, "/w:hdr/w:p/w:r/mc:AlternateContent/mc:Fallback/w:pict/v:rect", "stroked").match("f")); -} - -DECLARE_OOXMLEXPORT_TEST(testImageData, "image_data.docx") -{ - // The problem was exporter was exporting v:imagedata data for shape in w:pict as v:fill w element. - - xmlDocPtr pXmlDoc = parseExport("word/header1.xml"); - if (!pXmlDoc) - return; - CPPUNIT_ASSERT(getXPath(pXmlDoc, "/w:hdr/w:p/w:r/mc:AlternateContent/mc:Fallback/w:pict/v:rect/v:imagedata", "detectmouseclick").match("t")); -} - DECLARE_OOXMLEXPORT_TEST(testImageCrop, "ImageCrop.docx") { uno::Reference image = getShape(1); @@ -1695,65 +1641,6 @@ DECLARE_OOXMLEXPORT_TEST(testImageCrop, "ImageCrop.docx") CPPUNIT_ASSERT_EQUAL( sal_Int32( 2290 ), aGraphicCropStruct.Bottom ); } -DECLARE_OOXMLEXPORT_TEST(testFdo70838, "fdo70838.docx") -{ - // The problem was that VMLExport::Commit didn't save the correct width and height, - // and ImplEESdrWriter::ImplFlipBoundingBox made a mistake calculating the position - - xmlDocPtr pXmlDocument = parseExport("word/document.xml"); - if (!pXmlDocument) - return; - - // get styles of the four shapes - OUString aStyles[4]; - aStyles[0] = getXPath( pXmlDocument, "/w:document/w:body/w:p/w:r/mc:AlternateContent[1]/mc:Fallback/w:pict/v:rect", "style"); - // original is: "position:absolute;margin-left:97.6pt;margin-top:165pt;width:283.4pt;height:141.7pt;rotation:285" - aStyles[1] = getXPath( pXmlDocument, "/w:document/w:body/w:p/w:r/mc:AlternateContent[2]/mc:Fallback/w:pict/v:rect", "style"); - // original is: "position:absolute;margin-left:97.6pt;margin-top:164.95pt;width:283.4pt;height:141.7pt;rotation:255" - aStyles[2] = getXPath( pXmlDocument, "/w:document/w:body/w:p/w:r/mc:AlternateContent[3]/mc:Fallback/w:pict/v:rect", "style"); - // original is: "position:absolute;margin-left:97.5pt;margin-top:164.9pt;width:283.4pt;height:141.7pt;rotation:105" - aStyles[3] = getXPath( pXmlDocument, "/w:document/w:body/w:p/w:r/mc:AlternateContent[4]/mc:Fallback/w:pict/v:rect", "style"); - // original is: "position:absolute;margin-left:97.55pt;margin-top:164.95pt;width:283.4pt;height:141.7pt;rotation:75" - - //check the size and position of each of the shapes - for( int i = 0; i < 4; ++i ) - { - CPPUNIT_ASSERT(!aStyles[i].isEmpty()); - - sal_Int32 nextTokenPos = 0; - do - { - OUString aStyleCommand = aStyles[i].getToken( 0, ';', nextTokenPos ); - CPPUNIT_ASSERT(!aStyleCommand.isEmpty()); - - OUString aStyleCommandName = aStyleCommand.getToken( 0, ':' ); - OUString aStyleCommandValue = aStyleCommand.getToken( 1, ':' ); - - if( aStyleCommandName.equals( "margin-left" ) ) - { - float fValue = aStyleCommandValue.getToken( 0, 'p' ).toFloat(); - CPPUNIT_ASSERT_EQUAL(0, abs(97.6 - fValue)); - } - else if( aStyleCommandName.equals( "margin-top" ) ) - { - float fValue = aStyleCommandValue.getToken( 0, 'p' ).toFloat(); - CPPUNIT_ASSERT_EQUAL(0, abs(165 - fValue)); - } - else if( aStyleCommandName.equals( "width" ) ) - { - float fValue = aStyleCommandValue.getToken( 0, 'p' ).toFloat(); - CPPUNIT_ASSERT_EQUAL(0, abs(283.4 - fValue)); - } - else if( aStyleCommandName.equals( "height" ) ) - { - float fValue = aStyleCommandValue.getToken( 0, 'p' ).toFloat(); - CPPUNIT_ASSERT_EQUAL(0, abs(141.7 - fValue)); - } - - } while( nextTokenPos != -1 ); - } -} - DECLARE_OOXMLEXPORT_TEST(testLineSpacingexport, "test_line_spacing.docx") { // The Problem was that the w:line attribute value in w:spacing tag was incorrect @@ -2109,19 +1996,6 @@ DECLARE_OOXMLEXPORT_TEST(testBezier, "bezier.odt") CPPUNIT_ASSERT_EQUAL(sal_Int32(3), xDraws->getCount()); } -DECLARE_OOXMLEXPORT_TEST(testFdo73215, "fdo73215.docx") -{ - xmlDocPtr pXmlDoc = parseExport("word/document.xml"); - if (!pXmlDoc) - return; - // 'rect' was 'pictureFrame', which isn't valid. - assertXPath(pXmlDoc, "/w:document/w:body/w:p[2]/w:r/mc:AlternateContent/mc:Choice/w:drawing/wp:inline/a:graphic/a:graphicData/wpg:wgp/wps:wsp[1]/wps:spPr/a:prstGeom", - "prst", "rect"); - // 'adj1' was 'adj', which is not valid for bentConnector3. - assertXPath(pXmlDoc, "/w:document/w:body/w:p[2]/w:r/mc:AlternateContent/mc:Choice/w:drawing/wp:inline/a:graphic/a:graphicData/wpg:wgp/wps:wsp[9]/wps:spPr/a:prstGeom/a:avLst/a:gd", - "name", "adj1"); -} - DECLARE_OOXMLEXPORT_TEST(testGroupshapeTextbox, "groupshape-textbox.docx") { uno::Reference xGroup(getShape(1), uno::UNO_QUERY); @@ -2155,15 +2029,6 @@ DECLARE_OOXMLEXPORT_TEST(testFormControl, "form-control.docx") getParagraph(1, "Foo [Date] bar."); } -DECLARE_OOXMLEXPORT_TEST(testBehinddoc, "behinddoc.docx") -{ - xmlDocPtr pXmlDoc = parseExport("word/document.xml"); - if (!pXmlDoc) - return; - // This was "0", shape was in the foreground. - assertXPath(pXmlDoc, "/w:document/w:body/w:p/w:r/mc:AlternateContent/mc:Choice/w:drawing/wp:anchor", "behindDoc", "1"); -} - DECLARE_OOXMLEXPORT_TEST(testTrackChangesDeletedParagraphMark, "testTrackChangesDeletedParagraphMark.docx") { xmlDocPtr pXmlDoc = parseExport("word/document.xml"); @@ -2239,28 +2104,6 @@ DECLARE_OOXMLEXPORT_TEST(testFDO73034, "FDO73034.docx") CPPUNIT_ASSERT(getXPath(pXmlDoc, "/w:document/w:body/w:p[1]/w:pPr/w:rPr/w:u", "val").match("single")); } -DECLARE_OOXMLEXPORT_TEST(testSmartArtAnchoredInline, "fdo73227.docx") -{ - /* Given file conatins 3 DrawingML objects as 1Picture,1SmartArt and 1Shape. - * Check for SmartArt. - * SmartArt shoould get written as "Floating Object" i.e. inside tag. - * Also check for value of attribute "id" of . It should be unique for - * all 3 DrawingML objects in a document. - */ - - xmlDocPtr pXmlDoc = parseExport("word/document.xml"); - if (!pXmlDoc) - return; - assertXPath(pXmlDoc, "/w:document/w:body/w:p/w:r/w:drawing[1]/wp:anchor/wp:docPr","id","1"); - assertXPath(pXmlDoc, "/w:document/w:body/w:p/w:r/w:drawing[1]/wp:anchor/wp:docPr","name","Diagram1"); - - assertXPath(pXmlDoc, "/w:document/w:body/w:p/w:r/mc:AlternateContent/mc:Choice/w:drawing/wp:anchor/wp:docPr","id","2"); - assertXPath(pXmlDoc, "/w:document/w:body/w:p/w:r/mc:AlternateContent/mc:Choice/w:drawing/wp:anchor/wp:docPr","name","10-Point Star 3"); - - assertXPath(pXmlDoc, "/w:document/w:body/w:p/w:r/w:drawing[2]/wp:anchor/wp:docPr","id","3"); - assertXPath(pXmlDoc, "/w:document/w:body/w:p/w:r/w:drawing[2]/wp:anchor/wp:docPr","name","Picture"); -} - DECLARE_OOXMLEXPORT_TEST(testFDO71834, "fdo71834.docx") { xmlDocPtr pXmlDoc = parseExport("word/document.xml"); @@ -2351,33 +2194,6 @@ DECLARE_OOXMLEXPORT_TEST(testPreserveXfieldTOC, "PreserveXfieldTOC.docx") CPPUNIT_ASSERT(contents.match(" TOC \\x \\f \\o \"1-3\" \\h")); } -DECLARE_OOXMLEXPORT_TEST(testFdo65833, "fdo65833.docx") -{ - // The "editas" attribute for vml group shape was not preserved. - xmlDocPtr pXmlDoc = parseExport("word/document.xml"); - if (!pXmlDoc) - return; - assertXPath(pXmlDoc, "/w:document/w:body/w:p/w:r/mc:AlternateContent/mc:Fallback/w:pict/v:group", "editas", "canvas"); -} - -DECLARE_OOXMLEXPORT_TEST(testFdo73247, "fdo73247.docx") -{ - xmlDocPtr pXmlDoc = parseExport("word/document.xml"); - if (!pXmlDoc) - return; - assertXPath(pXmlDoc, "/w:document/w:body/w:p[2]/w:r[2]/mc:AlternateContent/mc:Choice/w:drawing/wp:anchor/a:graphic/a:graphicData/wps:wsp/wps:spPr/a:xfrm", - "rot", "1969698"); -} - -DECLARE_OOXMLEXPORT_TEST(testFdo70942, "fdo70942.docx") -{ - xmlDocPtr pXmlDoc = parseExport("word/document.xml"); - if (!pXmlDoc) - return; - assertXPath(pXmlDoc, "/w:document/w:body/w:p[1]/w:r[2]/mc:AlternateContent/mc:Choice/w:drawing/wp:anchor/a:graphic/a:graphicData/wps:wsp/wps:spPr/a:prstGeom", - "prst", "ellipse"); -} - DECLARE_OOXMLEXPORT_TEST(testTrackChangesParagraphProperties, "testTrackChangesParagraphProperties.docx") { xmlDocPtr pXmlDoc = parseExport("word/document.xml"); @@ -2410,20 +2226,6 @@ DECLARE_OOXMLEXPORT_TEST(testFdo73550, "fdo73550.docx") assertXPath(pXmlDocument, "/w:document/w:body/w:p[2]/w:pPr/w:rPr/w:rFonts"); } -DECLARE_OOXMLEXPORT_TEST(testDrawinglayerPicPos, "drawinglayer-pic-pos.docx") -{ - // The problem was that the position of the picture was incorrect, it was shifted towards the bottom right corner. - xmlDocPtr pXmlDocument = parseExport("word/document.xml"); - if (!pXmlDocument) - return; - - OString aXPath("/w:document/w:body/w:p[1]/w:r[1]/mc:AlternateContent/mc:Choice/w:drawing/wp:anchor/a:graphic/a:graphicData/pic:pic/pic:spPr/a:xfrm/a:off"); - // This was 720. - assertXPath(pXmlDocument, aXPath, "x", "0"); - // This was 1828800. - assertXPath(pXmlDocument, aXPath, "y", "0"); -} - DECLARE_OOXMLEXPORT_TEST(testPageRelSize, "pagerelsize.docx") { // First textframe: width is relative from page, but not height. @@ -2443,117 +2245,6 @@ DECLARE_OOXMLEXPORT_TEST(testRelSizeRound, "rel-size-round.docx") CPPUNIT_ASSERT_EQUAL(sal_Int16(10), getProperty(getShape(1), "RelativeHeight")); } -DECLARE_OOXMLEXPORT_TEST(testShapeThemePreservation, "shape-theme-preservation.docx") -{ - xmlDocPtr pXmlDocument = parseExport("word/document.xml"); - if (!pXmlDocument) - return; - - // check shape style has been preserved - assertXPath(pXmlDocument, - "/w:document/w:body/w:p[1]/w:r/mc:AlternateContent/mc:Choice/w:drawing/wp:anchor/a:graphic/a:graphicData/wps:wsp/wps:style/a:fillRef", - "idx", "1"); - assertXPath(pXmlDocument, - "/w:document/w:body/w:p[1]/w:r/mc:AlternateContent/mc:Choice/w:drawing/wp:anchor/a:graphic/a:graphicData/wps:wsp/wps:style/a:fillRef/a:schemeClr", - "val", "accent1"); - assertXPath(pXmlDocument, - "/w:document/w:body/w:p[3]/w:r/mc:AlternateContent/mc:Choice/w:drawing/wp:anchor/a:graphic/a:graphicData/wps:wsp/wps:style/a:fillRef", - "idx", "1"); - assertXPath(pXmlDocument, - "/w:document/w:body/w:p[3]/w:r/mc:AlternateContent/mc:Choice/w:drawing/wp:anchor/a:graphic/a:graphicData/wps:wsp/wps:style/a:fillRef/a:schemeClr", - "val", "accent1"); - assertXPath(pXmlDocument, - "/w:document/w:body/w:p[5]/w:r/mc:AlternateContent/mc:Choice/w:drawing/wp:anchor/a:graphic/a:graphicData/wps:wsp/wps:style/a:fillRef", - "idx", "1"); - assertXPath(pXmlDocument, - "/w:document/w:body/w:p[5]/w:r/mc:AlternateContent/mc:Choice/w:drawing/wp:anchor/a:graphic/a:graphicData/wps:wsp/wps:style/a:fillRef/a:schemeClr", - "val", "accent1"); - assertXPath(pXmlDocument, - "/w:document/w:body/w:p[5]/w:r/mc:AlternateContent/mc:Choice/w:drawing/wp:anchor/a:graphic/a:graphicData/wps:wsp/wps:style/a:lnRef", - "idx", "2"); - assertXPath(pXmlDocument, - "/w:document/w:body/w:p[5]/w:r/mc:AlternateContent/mc:Choice/w:drawing/wp:anchor/a:graphic/a:graphicData/wps:wsp/wps:style/a:lnRef/a:schemeClr", - "val", "accent1"); - assertXPath(pXmlDocument, - "/w:document/w:body/w:p[5]/w:r/mc:AlternateContent/mc:Choice/w:drawing/wp:anchor/a:graphic/a:graphicData/wps:wsp/wps:style/a:lnRef/a:schemeClr/a:shade", - "val", "50000"); - assertXPath(pXmlDocument, - "/w:document/w:body/w:p[5]/w:r/mc:AlternateContent/mc:Choice/w:drawing/wp:anchor/a:graphic/a:graphicData/wps:wsp/wps:style/a:effectRef", - "idx", "0"); - assertXPath(pXmlDocument, - "/w:document/w:body/w:p[5]/w:r/mc:AlternateContent/mc:Choice/w:drawing/wp:anchor/a:graphic/a:graphicData/wps:wsp/wps:style/a:effectRef/a:schemeClr", - "val", "accent1"); - - // check shape style hasn't been overwritten - assertXPath(pXmlDocument, - "/w:document/w:body/w:p[1]/w:r/mc:AlternateContent/mc:Choice/w:drawing/wp:anchor/a:graphic/a:graphicData/wps:wsp/wps:spPr/a:solidFill", - 0); - assertXPath(pXmlDocument, - "/w:document/w:body/w:p[1]/w:r/mc:AlternateContent/mc:Choice/w:drawing/wp:anchor/a:graphic/a:graphicData/wps:wsp/wps:spPr/a:ln/a:solidFill", - 0); - - // check direct theme assignments have been preserved - assertXPath(pXmlDocument, - "/w:document/w:body/w:p[3]/w:r/mc:AlternateContent/mc:Choice/w:drawing/wp:anchor/a:graphic/a:graphicData/wps:wsp/wps:spPr/a:solidFill/a:schemeClr", - "val", "accent6"); - assertXPath(pXmlDocument, - "/w:document/w:body/w:p[3]/w:r/mc:AlternateContent/mc:Choice/w:drawing/wp:anchor/a:graphic/a:graphicData/wps:wsp/wps:spPr/a:ln/a:solidFill/a:schemeClr", - "val", "accent3"); - - // check color transformations applied to theme colors have been preserved - assertXPath(pXmlDocument, - "/w:document/w:body/w:p[3]/w:r/mc:AlternateContent/mc:Choice/w:drawing/wp:anchor/a:graphic/a:graphicData/wps:wsp/wps:spPr/a:solidFill/a:schemeClr/a:lumMod", - "val", "40000"); - assertXPath(pXmlDocument, - "/w:document/w:body/w:p[3]/w:r/mc:AlternateContent/mc:Choice/w:drawing/wp:anchor/a:graphic/a:graphicData/wps:wsp/wps:spPr/a:solidFill/a:schemeClr/a:lumOff", - "val", "60000"); - assertXPath(pXmlDocument, - "/w:document/w:body/w:p[3]/w:r/mc:AlternateContent/mc:Choice/w:drawing/wp:anchor/a:graphic/a:graphicData/wps:wsp/wps:spPr/a:ln/a:solidFill/a:schemeClr/a:lumMod", - "val", "50000"); - - // check direct color assignments have been preserved - OUString sFillColor = getXPath(pXmlDocument, - "/w:document/w:body/w:p[5]/w:r/mc:AlternateContent/mc:Choice/w:drawing/wp:anchor/a:graphic/a:graphicData/wps:wsp/wps:spPr/a:solidFill/a:srgbClr", - "val"); - CPPUNIT_ASSERT_EQUAL(sFillColor.toInt32(16), sal_Int32(0x00b050)); - sal_Int32 nLineColor = getXPath(pXmlDocument, - "/w:document/w:body/w:p[5]/w:r/mc:AlternateContent/mc:Choice/w:drawing/wp:anchor/a:graphic/a:graphicData/wps:wsp/wps:spPr/a:ln/a:solidFill/a:srgbClr", - "val").toInt32(16); - CPPUNIT_ASSERT_EQUAL(sal_Int32(0xff0000), nLineColor); - - // check direct line type assignments have been preserved - sal_Int32 nLineWidth = getXPath(pXmlDocument, - "/w:document/w:body/w:p[5]/w:r/mc:AlternateContent/mc:Choice/w:drawing/wp:anchor/a:graphic/a:graphicData/wps:wsp/wps:spPr/a:ln", - "w").toInt32(); - CPPUNIT_ASSERT(abs(63500 - nLineWidth) < 1000); //some rounding errors in the conversion ooxml -> libo -> ooxml are tolerated - assertXPath(pXmlDocument, - "/w:document/w:body/w:p[5]/w:r/mc:AlternateContent/mc:Choice/w:drawing/wp:anchor/a:graphic/a:graphicData/wps:wsp/wps:spPr/a:ln/a:miter", - 1); - assertXPath(pXmlDocument, - "/w:document/w:body/w:p[5]/w:r/mc:AlternateContent/mc:Choice/w:drawing/wp:anchor/a:graphic/a:graphicData/wps:wsp/wps:spPr/a:ln/a:custDash", - 1); - - uno::Reference xShape1 = getShape(1); - uno::Reference xShape2 = getShape(2); - uno::Reference xShape3 = getShape(3); - - // check colors are properly applied to shapes on import - CPPUNIT_ASSERT_EQUAL(sal_Int32(0x4f81bd), getProperty(xShape1, "FillColor")); - CPPUNIT_ASSERT_EQUAL(sal_Int32(0xfcd5b5), getProperty(xShape2, "FillColor")); - CPPUNIT_ASSERT_EQUAL(sal_Int32(0x00b050), getProperty(xShape3, "FillColor")); - CPPUNIT_ASSERT_EQUAL(sal_Int32(0x3a5f8b), getProperty(xShape1, "LineColor")); - CPPUNIT_ASSERT_EQUAL(sal_Int32(0x4f6228), getProperty(xShape2, "LineColor")); - CPPUNIT_ASSERT_EQUAL(sal_Int32(0xff0000), getProperty(xShape3, "LineColor")); - - // check line properties are properly applied to shapes on import - CPPUNIT_ASSERT_EQUAL(drawing::LineStyle_SOLID, getProperty(xShape1, "LineStyle")); - CPPUNIT_ASSERT_EQUAL(drawing::LineStyle_SOLID, getProperty(xShape2, "LineStyle")); - CPPUNIT_ASSERT_EQUAL(drawing::LineStyle_DASH, getProperty(xShape3, "LineStyle")); - CPPUNIT_ASSERT_EQUAL(drawing::LineJoint_ROUND, getProperty(xShape1, "LineJoint")); - CPPUNIT_ASSERT_EQUAL(drawing::LineJoint_ROUND, getProperty(xShape2, "LineJoint")); - CPPUNIT_ASSERT_EQUAL(drawing::LineJoint_MITER, getProperty(xShape3, "LineJoint")); -} - DECLARE_OOXMLEXPORT_TEST(testTOCFlag_u,"testTOCFlag_u.docx") { // DOCX contaning TOC should preserve code field '\u'. @@ -2585,23 +2276,6 @@ DECLARE_OOXMLEXPORT_TEST(testTableRowDataDisplayedTwice,"table-row-data-displaye CPPUNIT_ASSERT_EQUAL(sal_Int16(2), xCursor->getPage()); } -DECLARE_OOXMLEXPORT_TEST(testFDO73546, "FDO73546.docx") -{ - xmlDocPtr pXmlDoc = parseExport("word/header1.xml"); - if (!pXmlDoc) - return; - assertXPath(pXmlDoc, "/w:hdr/w:p[1]/w:r[3]/mc:AlternateContent/mc:Choice/w:drawing/wp:anchor", "distL","0"); -} - -DECLARE_OOXMLEXPORT_TEST(testFdo69616, "fdo69616.docx") -{ - xmlDocPtr pXmlDoc = parseExport(); - if (!pXmlDoc) - return; - // VML - CPPUNIT_ASSERT(getXPath(pXmlDoc, "/w:document/w:body/w:p[1]/w:r[1]/mc:AlternateContent/mc:Fallback/w:pict/v:group", "coordorigin").match("696,725")); -} - DECLARE_OOXMLEXPORT_TEST(testFdo73556,"fdo73556.docx") { /* @@ -2623,66 +2297,6 @@ DECLARE_OOXMLEXPORT_TEST(testFdo73556,"fdo73556.docx") CPPUNIT_ASSERT_EQUAL(sal_Int32(3751), tableWidth); } -DECLARE_OOXMLEXPORT_TEST(testAlignForShape,"Shape.docx") -{ - //fdo73545:Shape Horizontal and vertical orientation is wrong - //The wp:align tag is missing after roundtrip - xmlDocPtr pXmlDoc = parseExport("word/document.xml"); - if (!pXmlDoc) - return; - assertXPath(pXmlDoc, "/w:document/w:body/w:p[1]/w:r[1]/mc:AlternateContent/mc:Choice/w:drawing/wp:anchor/wp:positionH/wp:align","1"); -} - -DECLARE_OOXMLEXPORT_TEST(testLineStyle_DashType, "LineStyle_DashType.docx") -{ - /* DOCX contatining Shape with LineStyle as Dash Type should get preserved inside - * an XMl tag with value "dash". - */ - xmlDocPtr pXmlDoc = parseExport("word/document.xml"); - if (!pXmlDoc) - return; - assertXPath(pXmlDoc, "/w:document/w:body/w:p/w:r[2]/mc:AlternateContent/mc:Choice/w:drawing/wp:anchor/a:graphic/a:graphicData/wps:wsp/wps:spPr/a:ln/a:prstDash", "val", "dash"); -} - -DECLARE_OOXMLEXPORT_TEST(testGradientFillPreservation, "gradient-fill-preservation.docx") -{ - xmlDocPtr pXmlDocument = parseExport("word/document.xml"); - if (!pXmlDocument) - return; - - // check rgb colors for every step in the gradient of the first shape - assertXPath(pXmlDocument, - "/w:document/w:body/w:p/w:r/mc:AlternateContent[1]/mc:Choice/w:drawing/wp:anchor/a:graphic/a:graphicData/wps:wsp/wps:spPr/a:gradFill/a:gsLst/a:gs[1]/a:srgbClr", - "val", "ffff00"); - assertXPath(pXmlDocument, - "/w:document/w:body/w:p/w:r/mc:AlternateContent[1]/mc:Choice/w:drawing/wp:anchor/a:graphic/a:graphicData/wps:wsp/wps:spPr/a:gradFill/a:gsLst/a:gs[2]/a:srgbClr", - "val", "ffff33"); - assertXPath(pXmlDocument, - "/w:document/w:body/w:p/w:r/mc:AlternateContent[1]/mc:Choice/w:drawing/wp:anchor/a:graphic/a:graphicData/wps:wsp/wps:spPr/a:gradFill/a:gsLst/a:gs[3]/a:srgbClr", - "val", "ff0000"); - - // check theme colors for every step in the gradient of the second shape - assertXPath(pXmlDocument, - "/w:document/w:body/w:p/w:r/mc:AlternateContent[2]/mc:Choice/w:drawing/wp:anchor/a:graphic/a:graphicData/wps:wsp/wps:spPr/a:gradFill/a:gsLst/a:gs[@pos='0']/a:schemeClr", - "val", "accent5"); - assertXPath(pXmlDocument, - "/w:document/w:body/w:p/w:r/mc:AlternateContent[2]/mc:Choice/w:drawing/wp:anchor/a:graphic/a:graphicData/wps:wsp/wps:spPr/a:gradFill/a:gsLst/a:gs[@pos='50000']/a:schemeClr", - "val", "accent1"); - assertXPath(pXmlDocument, - "/w:document/w:body/w:p/w:r/mc:AlternateContent[2]/mc:Choice/w:drawing/wp:anchor/a:graphic/a:graphicData/wps:wsp/wps:spPr/a:gradFill/a:gsLst/a:gs[@pos='100000']/a:schemeClr", - "val", "accent1"); - - assertXPath(pXmlDocument, - "/w:document/w:body/w:p/w:r/mc:AlternateContent[1]/mc:Choice/w:drawing/wp:anchor/a:graphic/a:graphicData/wps:wsp/wps:spPr/a:gradFill/a:gsLst/a:gs[@pos='50000']/a:srgbClr/a:alpha", - "val", "20000"); - assertXPath(pXmlDocument, - "/w:document/w:body/w:p/w:r/mc:AlternateContent[2]/mc:Choice/w:drawing/wp:anchor/a:graphic/a:graphicData/wps:wsp/wps:spPr/a:gradFill/a:gsLst/a:gs[@pos='50000']/a:schemeClr/a:tint", - "val", "44500"); - assertXPath(pXmlDocument, - "/w:document/w:body/w:p/w:r/mc:AlternateContent[2]/mc:Choice/w:drawing/wp:anchor/a:graphic/a:graphicData/wps:wsp/wps:spPr/a:gradFill/a:gsLst/a:gs[@pos='50000']/a:schemeClr/a:satMod", - "val", "160000"); -} - /* FIXME this still crashes DECLARE_OOXMLEXPORT_TEST(testSegFaultWhileSave, "test_segfault_while_save.docx") { @@ -2702,17 +2316,6 @@ DECLARE_OOXMLEXPORT_TEST(fdo69656, "Table_cell_auto_width_fdo69656.docx") assertXPath(pXmlDoc, "/w:document/w:body/w:tbl/w:tblPr/w:tblW","type","auto"); } -DECLARE_OOXMLEXPORT_TEST(testLineStyle_DashType_VML, "LineStyle_DashType_VML.docx") -{ - /* DOCX contatining "Shape with text inside" having Line Style as "Dash Type" should get - * preserved inside an XML tag with attribute dashstyle having value "dash". - */ - xmlDocPtr pXmlDoc = parseExport("word/document.xml"); - if (!pXmlDoc) - return; - assertXPath(pXmlDoc, "/w:document/w:body/w:p/w:r[2]/mc:AlternateContent/mc:Fallback/w:pict/v:rect/v:stroke", "dashstyle", "dash"); -} - DECLARE_OOXMLEXPORT_TEST(testFdo73541,"fdo73541.docx") { // fdo#73541: The mirrored margins were not imported and mapped correctly in Page Layout @@ -2739,22 +2342,6 @@ DECLARE_OOXMLEXPORT_TEST(testFDO74215, "FDO74215.docx") assertXPath(pXmlDoc, "/w:numbering/w:numPicBullet[2]/w:pict/v:shape", "style", "width:6.4pt;height:6.4pt"); } -DECLARE_OOXMLEXPORT_TEST(testFdo74110,"fdo74110.docx") -{ - /* - The File contains word art which is being exported as shape and the mapping is defaulted to - shape type rect since the actual shape type(s) is/are commented out for some reason. - The actual shape type(s) has/have adjustment value(s) where as rect does not have adjustment value. - Hence the following test case. - */ - xmlDocPtr pXmlDoc = parseExport("word/document.xml"); - if (!pXmlDoc) - return; - assertXPath(pXmlDoc, "/w:document/w:body/w:p[1]/w:r[1]/mc:AlternateContent/mc:Choice/w:drawing[1]/wp:inline[1]/a:graphic[1]/a:graphicData[1]/wps:wsp[1]/wps:spPr[1]/a:prstGeom[1]", - "prst", "rect"); - assertXPath(pXmlDoc, "/w:document/w:body/w:p[1]/w:r[1]/mc:AlternateContent/mc:Choice/w:drawing[1]/wp:inline[1]/a:graphic[1]/a:graphicData[1]/wps:wsp[1]/wps:spPr[1]/a:prstGeom[1]/a:avLst[1]/a:gd[1]",0); -} - DECLARE_OOXMLEXPORT_TEST(testColumnBreak_ColumnCountIsZero,"fdo74153.docx") { /* fdo73545: Column Break with Column_count = 0 was not getting preserved. @@ -2833,37 +2420,6 @@ DECLARE_OOXMLEXPORT_TEST(testCaption4, "TableWithAboveCaptions.docx") CPPUNIT_ASSERT(contents.match(" SEQ Table \\* ARABIC")); } -DECLARE_OOXMLEXPORT_TEST(testOuterShdw,"testOuterShdw.docx") -{ - xmlDocPtr pXmlDoc = parseExport("word/document.xml"); - if (!pXmlDoc) - return; - assertXPath(pXmlDoc, "/w:document[1]/w:body[1]/w:p[1]/w:r[3]/mc:AlternateContent[1]/mc:Choice[1]/w:drawing[1]/wp:anchor[1]/a:graphic[1]/a:graphicData[1]/wps:wsp[1]/wps:spPr[1]/a:effectLst[1]/a:outerShdw[1]", "dist", "57811035"); -} - -DECLARE_OOXMLEXPORT_TEST(testExtentValue, "fdo74605.docx") -{ - xmlDocPtr pXmlDoc = parseExport(); - if (!pXmlDoc) - return; - assertXPath(pXmlDoc, "/w:document/w:body/w:p[2]/w:r[1]/mc:AlternateContent[1]/mc:Choice[1]/w:drawing[1]/wp:anchor[1]/wp:extent","cx","0"); -} - -DECLARE_OOXMLEXPORT_TEST( testChildNodesOfCubicBezierTo, "FDO74774.docx") -{ - /* Number of children required by cubicBexTo is 3 of type "pt". - While exporting, sometimes the child nodes are less than 3. - The test case ensures that there are 3 child nodes of type "pt" - for cubicBexTo - */ - xmlDocPtr pXmlDoc = parseExport("word/document.xml"); - if (!pXmlDoc) - return; - - assertXPath( pXmlDoc, - "/w:document/w:body/w:p[2]/w:r[1]/mc:AlternateContent[1]/mc:Choice/w:drawing[1]/wp:inline[1]/a:graphic[1]/a:graphicData[1]/wpg:wgp[1]/wps:wsp[3]/wps:spPr[1]/a:custGeom[1]/a:pathLst[1]/a:path[1]/a:cubicBezTo[2]/a:pt[3]"); -} - DECLARE_OOXMLEXPORT_TEST(testChartInFooter, "chart-in-footer.docx") { // fdo#73872: document contains chart in footer. @@ -3202,15 +2758,6 @@ DECLARE_OOXMLEXPORT_TEST(testBibliography,"FDO75133.docx") CPPUNIT_ASSERT(contents.match(" BIBLIOGRAPHY ")); } -DECLARE_OOXMLEXPORT_TEST(testMSwordHang,"test_msword_hang.docx") -{ - // fdo#74771: - xmlDocPtr pXmlDoc = parseExport("word/document.xml"); - if (!pXmlDoc) - return; - assertXPath(pXmlDoc, "/w:document/w:body/w:p[2]/w:r[2]/mc:AlternateContent/mc:Choice/w:drawing/wp:anchor/a:graphic/a:graphicData/wps:wsp/wps:txbx/w:txbxContent/w:p/w:r[2]/w:drawing/wp:inline", "distT", "0"); -} - #endif CPPUNIT_PLUGIN_IMPLEMENT(); diff --git a/sw/qa/extras/ooxmlexport/ooxmlsdrexport.cxx b/sw/qa/extras/ooxmlexport/ooxmlsdrexport.cxx index 3a823472689f..038b40415cb8 100644 --- a/sw/qa/extras/ooxmlexport/ooxmlsdrexport.cxx +++ b/sw/qa/extras/ooxmlexport/ooxmlsdrexport.cxx @@ -16,6 +16,7 @@ #include #include #include +#include #include #include #include @@ -425,6 +426,459 @@ DECLARE_OOXMLEXPORT_TEST(testDMLGroupShapeParaSpacing, "dml-groupshape-paraspaci CPPUNIT_ASSERT_EQUAL(sal_Int32(0), getProperty(xRun, "ParaBottomMargin")); } +DECLARE_OOXMLEXPORT_TEST(testTableFloatingMargins, "table-floating-margins.docx") +{ + // In case the table had custom left cell margin, the horizontal position was still incorrect (too small, -199). + uno::Reference xTextFramesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xIndexAccess(xTextFramesSupplier->getTextFrames(), uno::UNO_QUERY); + uno::Reference xFrame(xIndexAccess->getByIndex(0), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(sal_Int32(-499), getProperty(xFrame, "HoriOrientPosition")); + // These were 0 as well, due to lack of import. + CPPUNIT_ASSERT_EQUAL(sal_Int32(1000), getProperty(xFrame, "TopMargin")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(2000), getProperty(xFrame, "BottomMargin")); + + // Paragraph bottom margin wasn't 0 in the A1 cell of the floating table. + xmlDocPtr pXmlDoc = parseExport(); + if (!pXmlDoc) + return; + assertXPath(pXmlDoc, "/w:document/w:body/w:p/w:r/mc:AlternateContent/mc:Fallback/w:pict/v:rect/v:textbox/w:txbxContent/w:tbl/w:tr[1]/w:tc[1]/w:p/w:pPr/w:spacing", "after", "0"); +} + +DECLARE_OOXMLEXPORT_TEST(testFdo69636, "fdo69636.docx") +{ + /* + * The problem was that the exporter didn't mirror the workaround of the + * importer, regarding the btLr text frame direction: the + * mso-layout-flow-alt property was completely missing in the output. + */ + xmlDocPtr pXmlDoc = parseExport(); + if (!pXmlDoc) + return; + // VML + CPPUNIT_ASSERT(getXPath(pXmlDoc, "/w:document/w:body/w:p/w:r/mc:AlternateContent/mc:Fallback/w:pict/v:rect/v:textbox", "style").match("mso-layout-flow-alt:bottom-to-top")); + // drawingML + assertXPath(pXmlDoc, "/w:document/w:body/w:p/w:r/mc:AlternateContent/mc:Choice/w:drawing/wp:anchor/a:graphic/a:graphicData/wps:wsp/wps:bodyPr", "vert", "vert270"); +} + +DECLARE_OOXMLEXPORT_TEST(testVMLData, "TestVMLData.docx") +{ + // The problem was exporter was exporting vml data for shape in w:rPr element. + // vml data shoud not come under w:rPr element. + xmlDocPtr pXmlDoc = parseExport("word/header1.xml"); + if (!pXmlDoc) + return; + CPPUNIT_ASSERT(getXPath(pXmlDoc, "/w:hdr/w:p/w:r/mc:AlternateContent/mc:Fallback/w:pict/v:rect", "stroked").match("f")); +} + +DECLARE_OOXMLEXPORT_TEST(testImageData, "image_data.docx") +{ + // The problem was exporter was exporting v:imagedata data for shape in w:pict as v:fill w element. + + xmlDocPtr pXmlDoc = parseExport("word/header1.xml"); + if (!pXmlDoc) + return; + CPPUNIT_ASSERT(getXPath(pXmlDoc, "/w:hdr/w:p/w:r/mc:AlternateContent/mc:Fallback/w:pict/v:rect/v:imagedata", "detectmouseclick").match("t")); +} + +DECLARE_OOXMLEXPORT_TEST(testFdo70838, "fdo70838.docx") +{ + // The problem was that VMLExport::Commit didn't save the correct width and height, + // and ImplEESdrWriter::ImplFlipBoundingBox made a mistake calculating the position + + xmlDocPtr pXmlDocument = parseExport("word/document.xml"); + if (!pXmlDocument) + return; + + // get styles of the four shapes + OUString aStyles[4]; + aStyles[0] = getXPath( pXmlDocument, "/w:document/w:body/w:p/w:r/mc:AlternateContent[1]/mc:Fallback/w:pict/v:rect", "style"); + // original is: "position:absolute;margin-left:97.6pt;margin-top:165pt;width:283.4pt;height:141.7pt;rotation:285" + aStyles[1] = getXPath( pXmlDocument, "/w:document/w:body/w:p/w:r/mc:AlternateContent[2]/mc:Fallback/w:pict/v:rect", "style"); + // original is: "position:absolute;margin-left:97.6pt;margin-top:164.95pt;width:283.4pt;height:141.7pt;rotation:255" + aStyles[2] = getXPath( pXmlDocument, "/w:document/w:body/w:p/w:r/mc:AlternateContent[3]/mc:Fallback/w:pict/v:rect", "style"); + // original is: "position:absolute;margin-left:97.5pt;margin-top:164.9pt;width:283.4pt;height:141.7pt;rotation:105" + aStyles[3] = getXPath( pXmlDocument, "/w:document/w:body/w:p/w:r/mc:AlternateContent[4]/mc:Fallback/w:pict/v:rect", "style"); + // original is: "position:absolute;margin-left:97.55pt;margin-top:164.95pt;width:283.4pt;height:141.7pt;rotation:75" + + //check the size and position of each of the shapes + for( int i = 0; i < 4; ++i ) + { + CPPUNIT_ASSERT(!aStyles[i].isEmpty()); + + sal_Int32 nextTokenPos = 0; + do + { + OUString aStyleCommand = aStyles[i].getToken( 0, ';', nextTokenPos ); + CPPUNIT_ASSERT(!aStyleCommand.isEmpty()); + + OUString aStyleCommandName = aStyleCommand.getToken( 0, ':' ); + OUString aStyleCommandValue = aStyleCommand.getToken( 1, ':' ); + + if( aStyleCommandName.equals( "margin-left" ) ) + { + float fValue = aStyleCommandValue.getToken( 0, 'p' ).toFloat(); + CPPUNIT_ASSERT_EQUAL(0, abs(97.6 - fValue)); + } + else if( aStyleCommandName.equals( "margin-top" ) ) + { + float fValue = aStyleCommandValue.getToken( 0, 'p' ).toFloat(); + CPPUNIT_ASSERT_EQUAL(0, abs(165 - fValue)); + } + else if( aStyleCommandName.equals( "width" ) ) + { + float fValue = aStyleCommandValue.getToken( 0, 'p' ).toFloat(); + CPPUNIT_ASSERT_EQUAL(0, abs(283.4 - fValue)); + } + else if( aStyleCommandName.equals( "height" ) ) + { + float fValue = aStyleCommandValue.getToken( 0, 'p' ).toFloat(); + CPPUNIT_ASSERT_EQUAL(0, abs(141.7 - fValue)); + } + + } while( nextTokenPos != -1 ); + } +} + +DECLARE_OOXMLEXPORT_TEST(testFdo73215, "fdo73215.docx") +{ + xmlDocPtr pXmlDoc = parseExport("word/document.xml"); + if (!pXmlDoc) + return; + // 'rect' was 'pictureFrame', which isn't valid. + assertXPath(pXmlDoc, "/w:document/w:body/w:p[2]/w:r/mc:AlternateContent/mc:Choice/w:drawing/wp:inline/a:graphic/a:graphicData/wpg:wgp/wps:wsp[1]/wps:spPr/a:prstGeom", + "prst", "rect"); + // 'adj1' was 'adj', which is not valid for bentConnector3. + assertXPath(pXmlDoc, "/w:document/w:body/w:p[2]/w:r/mc:AlternateContent/mc:Choice/w:drawing/wp:inline/a:graphic/a:graphicData/wpg:wgp/wps:wsp[9]/wps:spPr/a:prstGeom/a:avLst/a:gd", + "name", "adj1"); +} + +DECLARE_OOXMLEXPORT_TEST(testBehinddoc, "behinddoc.docx") +{ + xmlDocPtr pXmlDoc = parseExport("word/document.xml"); + if (!pXmlDoc) + return; + // This was "0", shape was in the foreground. + assertXPath(pXmlDoc, "/w:document/w:body/w:p/w:r/mc:AlternateContent/mc:Choice/w:drawing/wp:anchor", "behindDoc", "1"); +} + +DECLARE_OOXMLEXPORT_TEST(testSmartArtAnchoredInline, "fdo73227.docx") +{ + /* Given file conatins 3 DrawingML objects as 1Picture,1SmartArt and 1Shape. + * Check for SmartArt. + * SmartArt shoould get written as "Floating Object" i.e. inside tag. + * Also check for value of attribute "id" of . It should be unique for + * all 3 DrawingML objects in a document. + */ + + xmlDocPtr pXmlDoc = parseExport("word/document.xml"); + if (!pXmlDoc) + return; + assertXPath(pXmlDoc, "/w:document/w:body/w:p/w:r/w:drawing[1]/wp:anchor/wp:docPr","id","1"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p/w:r/w:drawing[1]/wp:anchor/wp:docPr","name","Diagram1"); + + assertXPath(pXmlDoc, "/w:document/w:body/w:p/w:r/mc:AlternateContent/mc:Choice/w:drawing/wp:anchor/wp:docPr","id","2"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p/w:r/mc:AlternateContent/mc:Choice/w:drawing/wp:anchor/wp:docPr","name","10-Point Star 3"); + + assertXPath(pXmlDoc, "/w:document/w:body/w:p/w:r/w:drawing[2]/wp:anchor/wp:docPr","id","3"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p/w:r/w:drawing[2]/wp:anchor/wp:docPr","name","Picture"); +} + +DECLARE_OOXMLEXPORT_TEST(testFdo65833, "fdo65833.docx") +{ + // The "editas" attribute for vml group shape was not preserved. + xmlDocPtr pXmlDoc = parseExport("word/document.xml"); + if (!pXmlDoc) + return; + assertXPath(pXmlDoc, "/w:document/w:body/w:p/w:r/mc:AlternateContent/mc:Fallback/w:pict/v:group", "editas", "canvas"); +} + +DECLARE_OOXMLEXPORT_TEST(testFdo73247, "fdo73247.docx") +{ + xmlDocPtr pXmlDoc = parseExport("word/document.xml"); + if (!pXmlDoc) + return; + assertXPath(pXmlDoc, "/w:document/w:body/w:p[2]/w:r[2]/mc:AlternateContent/mc:Choice/w:drawing/wp:anchor/a:graphic/a:graphicData/wps:wsp/wps:spPr/a:xfrm", + "rot", "1969698"); +} + +DECLARE_OOXMLEXPORT_TEST(testFdo70942, "fdo70942.docx") +{ + xmlDocPtr pXmlDoc = parseExport("word/document.xml"); + if (!pXmlDoc) + return; + assertXPath(pXmlDoc, "/w:document/w:body/w:p[1]/w:r[2]/mc:AlternateContent/mc:Choice/w:drawing/wp:anchor/a:graphic/a:graphicData/wps:wsp/wps:spPr/a:prstGeom", + "prst", "ellipse"); +} + +DECLARE_OOXMLEXPORT_TEST(testDrawinglayerPicPos, "drawinglayer-pic-pos.docx") +{ + // The problem was that the position of the picture was incorrect, it was shifted towards the bottom right corner. + xmlDocPtr pXmlDocument = parseExport("word/document.xml"); + if (!pXmlDocument) + return; + + OString aXPath("/w:document/w:body/w:p[1]/w:r[1]/mc:AlternateContent/mc:Choice/w:drawing/wp:anchor/a:graphic/a:graphicData/pic:pic/pic:spPr/a:xfrm/a:off"); + // This was 720. + assertXPath(pXmlDocument, aXPath, "x", "0"); + // This was 1828800. + assertXPath(pXmlDocument, aXPath, "y", "0"); +} + +DECLARE_OOXMLEXPORT_TEST(testShapeThemePreservation, "shape-theme-preservation.docx") +{ + xmlDocPtr pXmlDocument = parseExport("word/document.xml"); + if (!pXmlDocument) + return; + + // check shape style has been preserved + assertXPath(pXmlDocument, + "/w:document/w:body/w:p[1]/w:r/mc:AlternateContent/mc:Choice/w:drawing/wp:anchor/a:graphic/a:graphicData/wps:wsp/wps:style/a:fillRef", + "idx", "1"); + assertXPath(pXmlDocument, + "/w:document/w:body/w:p[1]/w:r/mc:AlternateContent/mc:Choice/w:drawing/wp:anchor/a:graphic/a:graphicData/wps:wsp/wps:style/a:fillRef/a:schemeClr", + "val", "accent1"); + assertXPath(pXmlDocument, + "/w:document/w:body/w:p[3]/w:r/mc:AlternateContent/mc:Choice/w:drawing/wp:anchor/a:graphic/a:graphicData/wps:wsp/wps:style/a:fillRef", + "idx", "1"); + assertXPath(pXmlDocument, + "/w:document/w:body/w:p[3]/w:r/mc:AlternateContent/mc:Choice/w:drawing/wp:anchor/a:graphic/a:graphicData/wps:wsp/wps:style/a:fillRef/a:schemeClr", + "val", "accent1"); + assertXPath(pXmlDocument, + "/w:document/w:body/w:p[5]/w:r/mc:AlternateContent/mc:Choice/w:drawing/wp:anchor/a:graphic/a:graphicData/wps:wsp/wps:style/a:fillRef", + "idx", "1"); + assertXPath(pXmlDocument, + "/w:document/w:body/w:p[5]/w:r/mc:AlternateContent/mc:Choice/w:drawing/wp:anchor/a:graphic/a:graphicData/wps:wsp/wps:style/a:fillRef/a:schemeClr", + "val", "accent1"); + assertXPath(pXmlDocument, + "/w:document/w:body/w:p[5]/w:r/mc:AlternateContent/mc:Choice/w:drawing/wp:anchor/a:graphic/a:graphicData/wps:wsp/wps:style/a:lnRef", + "idx", "2"); + assertXPath(pXmlDocument, + "/w:document/w:body/w:p[5]/w:r/mc:AlternateContent/mc:Choice/w:drawing/wp:anchor/a:graphic/a:graphicData/wps:wsp/wps:style/a:lnRef/a:schemeClr", + "val", "accent1"); + assertXPath(pXmlDocument, + "/w:document/w:body/w:p[5]/w:r/mc:AlternateContent/mc:Choice/w:drawing/wp:anchor/a:graphic/a:graphicData/wps:wsp/wps:style/a:lnRef/a:schemeClr/a:shade", + "val", "50000"); + assertXPath(pXmlDocument, + "/w:document/w:body/w:p[5]/w:r/mc:AlternateContent/mc:Choice/w:drawing/wp:anchor/a:graphic/a:graphicData/wps:wsp/wps:style/a:effectRef", + "idx", "0"); + assertXPath(pXmlDocument, + "/w:document/w:body/w:p[5]/w:r/mc:AlternateContent/mc:Choice/w:drawing/wp:anchor/a:graphic/a:graphicData/wps:wsp/wps:style/a:effectRef/a:schemeClr", + "val", "accent1"); + + // check shape style hasn't been overwritten + assertXPath(pXmlDocument, + "/w:document/w:body/w:p[1]/w:r/mc:AlternateContent/mc:Choice/w:drawing/wp:anchor/a:graphic/a:graphicData/wps:wsp/wps:spPr/a:solidFill", + 0); + assertXPath(pXmlDocument, + "/w:document/w:body/w:p[1]/w:r/mc:AlternateContent/mc:Choice/w:drawing/wp:anchor/a:graphic/a:graphicData/wps:wsp/wps:spPr/a:ln/a:solidFill", + 0); + + // check direct theme assignments have been preserved + assertXPath(pXmlDocument, + "/w:document/w:body/w:p[3]/w:r/mc:AlternateContent/mc:Choice/w:drawing/wp:anchor/a:graphic/a:graphicData/wps:wsp/wps:spPr/a:solidFill/a:schemeClr", + "val", "accent6"); + assertXPath(pXmlDocument, + "/w:document/w:body/w:p[3]/w:r/mc:AlternateContent/mc:Choice/w:drawing/wp:anchor/a:graphic/a:graphicData/wps:wsp/wps:spPr/a:ln/a:solidFill/a:schemeClr", + "val", "accent3"); + + // check color transformations applied to theme colors have been preserved + assertXPath(pXmlDocument, + "/w:document/w:body/w:p[3]/w:r/mc:AlternateContent/mc:Choice/w:drawing/wp:anchor/a:graphic/a:graphicData/wps:wsp/wps:spPr/a:solidFill/a:schemeClr/a:lumMod", + "val", "40000"); + assertXPath(pXmlDocument, + "/w:document/w:body/w:p[3]/w:r/mc:AlternateContent/mc:Choice/w:drawing/wp:anchor/a:graphic/a:graphicData/wps:wsp/wps:spPr/a:solidFill/a:schemeClr/a:lumOff", + "val", "60000"); + assertXPath(pXmlDocument, + "/w:document/w:body/w:p[3]/w:r/mc:AlternateContent/mc:Choice/w:drawing/wp:anchor/a:graphic/a:graphicData/wps:wsp/wps:spPr/a:ln/a:solidFill/a:schemeClr/a:lumMod", + "val", "50000"); + + // check direct color assignments have been preserved + OUString sFillColor = getXPath(pXmlDocument, + "/w:document/w:body/w:p[5]/w:r/mc:AlternateContent/mc:Choice/w:drawing/wp:anchor/a:graphic/a:graphicData/wps:wsp/wps:spPr/a:solidFill/a:srgbClr", + "val"); + CPPUNIT_ASSERT_EQUAL(sFillColor.toInt32(16), sal_Int32(0x00b050)); + sal_Int32 nLineColor = getXPath(pXmlDocument, + "/w:document/w:body/w:p[5]/w:r/mc:AlternateContent/mc:Choice/w:drawing/wp:anchor/a:graphic/a:graphicData/wps:wsp/wps:spPr/a:ln/a:solidFill/a:srgbClr", + "val").toInt32(16); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0xff0000), nLineColor); + + // check direct line type assignments have been preserved + sal_Int32 nLineWidth = getXPath(pXmlDocument, + "/w:document/w:body/w:p[5]/w:r/mc:AlternateContent/mc:Choice/w:drawing/wp:anchor/a:graphic/a:graphicData/wps:wsp/wps:spPr/a:ln", + "w").toInt32(); + CPPUNIT_ASSERT(abs(63500 - nLineWidth) < 1000); //some rounding errors in the conversion ooxml -> libo -> ooxml are tolerated + assertXPath(pXmlDocument, + "/w:document/w:body/w:p[5]/w:r/mc:AlternateContent/mc:Choice/w:drawing/wp:anchor/a:graphic/a:graphicData/wps:wsp/wps:spPr/a:ln/a:miter", + 1); + assertXPath(pXmlDocument, + "/w:document/w:body/w:p[5]/w:r/mc:AlternateContent/mc:Choice/w:drawing/wp:anchor/a:graphic/a:graphicData/wps:wsp/wps:spPr/a:ln/a:custDash", + 1); + + uno::Reference xShape1 = getShape(1); + uno::Reference xShape2 = getShape(2); + uno::Reference xShape3 = getShape(3); + + // check colors are properly applied to shapes on import + CPPUNIT_ASSERT_EQUAL(sal_Int32(0x4f81bd), getProperty(xShape1, "FillColor")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0xfcd5b5), getProperty(xShape2, "FillColor")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0x00b050), getProperty(xShape3, "FillColor")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0x3a5f8b), getProperty(xShape1, "LineColor")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0x4f6228), getProperty(xShape2, "LineColor")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0xff0000), getProperty(xShape3, "LineColor")); + + // check line properties are properly applied to shapes on import + CPPUNIT_ASSERT_EQUAL(drawing::LineStyle_SOLID, getProperty(xShape1, "LineStyle")); + CPPUNIT_ASSERT_EQUAL(drawing::LineStyle_SOLID, getProperty(xShape2, "LineStyle")); + CPPUNIT_ASSERT_EQUAL(drawing::LineStyle_DASH, getProperty(xShape3, "LineStyle")); + CPPUNIT_ASSERT_EQUAL(drawing::LineJoint_ROUND, getProperty(xShape1, "LineJoint")); + CPPUNIT_ASSERT_EQUAL(drawing::LineJoint_ROUND, getProperty(xShape2, "LineJoint")); + CPPUNIT_ASSERT_EQUAL(drawing::LineJoint_MITER, getProperty(xShape3, "LineJoint")); +} + +DECLARE_OOXMLEXPORT_TEST(testFDO73546, "FDO73546.docx") +{ + xmlDocPtr pXmlDoc = parseExport("word/header1.xml"); + if (!pXmlDoc) + return; + assertXPath(pXmlDoc, "/w:hdr/w:p[1]/w:r[3]/mc:AlternateContent/mc:Choice/w:drawing/wp:anchor", "distL","0"); +} + +DECLARE_OOXMLEXPORT_TEST(testFdo69616, "fdo69616.docx") +{ + xmlDocPtr pXmlDoc = parseExport(); + if (!pXmlDoc) + return; + // VML + CPPUNIT_ASSERT(getXPath(pXmlDoc, "/w:document/w:body/w:p[1]/w:r[1]/mc:AlternateContent/mc:Fallback/w:pict/v:group", "coordorigin").match("696,725")); +} + +DECLARE_OOXMLEXPORT_TEST(testAlignForShape,"Shape.docx") +{ + //fdo73545:Shape Horizontal and vertical orientation is wrong + //The wp:align tag is missing after roundtrip + xmlDocPtr pXmlDoc = parseExport("word/document.xml"); + if (!pXmlDoc) + return; + assertXPath(pXmlDoc, "/w:document/w:body/w:p[1]/w:r[1]/mc:AlternateContent/mc:Choice/w:drawing/wp:anchor/wp:positionH/wp:align","1"); +} + +DECLARE_OOXMLEXPORT_TEST(testLineStyle_DashType, "LineStyle_DashType.docx") +{ + /* DOCX contatining Shape with LineStyle as Dash Type should get preserved inside + * an XMl tag with value "dash". + */ + xmlDocPtr pXmlDoc = parseExport("word/document.xml"); + if (!pXmlDoc) + return; + assertXPath(pXmlDoc, "/w:document/w:body/w:p/w:r[2]/mc:AlternateContent/mc:Choice/w:drawing/wp:anchor/a:graphic/a:graphicData/wps:wsp/wps:spPr/a:ln/a:prstDash", "val", "dash"); +} + +DECLARE_OOXMLEXPORT_TEST(testGradientFillPreservation, "gradient-fill-preservation.docx") +{ + xmlDocPtr pXmlDocument = parseExport("word/document.xml"); + if (!pXmlDocument) + return; + + // check rgb colors for every step in the gradient of the first shape + assertXPath(pXmlDocument, + "/w:document/w:body/w:p/w:r/mc:AlternateContent[1]/mc:Choice/w:drawing/wp:anchor/a:graphic/a:graphicData/wps:wsp/wps:spPr/a:gradFill/a:gsLst/a:gs[1]/a:srgbClr", + "val", "ffff00"); + assertXPath(pXmlDocument, + "/w:document/w:body/w:p/w:r/mc:AlternateContent[1]/mc:Choice/w:drawing/wp:anchor/a:graphic/a:graphicData/wps:wsp/wps:spPr/a:gradFill/a:gsLst/a:gs[2]/a:srgbClr", + "val", "ffff33"); + assertXPath(pXmlDocument, + "/w:document/w:body/w:p/w:r/mc:AlternateContent[1]/mc:Choice/w:drawing/wp:anchor/a:graphic/a:graphicData/wps:wsp/wps:spPr/a:gradFill/a:gsLst/a:gs[3]/a:srgbClr", + "val", "ff0000"); + + // check theme colors for every step in the gradient of the second shape + assertXPath(pXmlDocument, + "/w:document/w:body/w:p/w:r/mc:AlternateContent[2]/mc:Choice/w:drawing/wp:anchor/a:graphic/a:graphicData/wps:wsp/wps:spPr/a:gradFill/a:gsLst/a:gs[@pos='0']/a:schemeClr", + "val", "accent5"); + assertXPath(pXmlDocument, + "/w:document/w:body/w:p/w:r/mc:AlternateContent[2]/mc:Choice/w:drawing/wp:anchor/a:graphic/a:graphicData/wps:wsp/wps:spPr/a:gradFill/a:gsLst/a:gs[@pos='50000']/a:schemeClr", + "val", "accent1"); + assertXPath(pXmlDocument, + "/w:document/w:body/w:p/w:r/mc:AlternateContent[2]/mc:Choice/w:drawing/wp:anchor/a:graphic/a:graphicData/wps:wsp/wps:spPr/a:gradFill/a:gsLst/a:gs[@pos='100000']/a:schemeClr", + "val", "accent1"); + + assertXPath(pXmlDocument, + "/w:document/w:body/w:p/w:r/mc:AlternateContent[1]/mc:Choice/w:drawing/wp:anchor/a:graphic/a:graphicData/wps:wsp/wps:spPr/a:gradFill/a:gsLst/a:gs[@pos='50000']/a:srgbClr/a:alpha", + "val", "20000"); + assertXPath(pXmlDocument, + "/w:document/w:body/w:p/w:r/mc:AlternateContent[2]/mc:Choice/w:drawing/wp:anchor/a:graphic/a:graphicData/wps:wsp/wps:spPr/a:gradFill/a:gsLst/a:gs[@pos='50000']/a:schemeClr/a:tint", + "val", "44500"); + assertXPath(pXmlDocument, + "/w:document/w:body/w:p/w:r/mc:AlternateContent[2]/mc:Choice/w:drawing/wp:anchor/a:graphic/a:graphicData/wps:wsp/wps:spPr/a:gradFill/a:gsLst/a:gs[@pos='50000']/a:schemeClr/a:satMod", + "val", "160000"); +} + +DECLARE_OOXMLEXPORT_TEST(testLineStyle_DashType_VML, "LineStyle_DashType_VML.docx") +{ + /* DOCX contatining "Shape with text inside" having Line Style as "Dash Type" should get + * preserved inside an XML tag with attribute dashstyle having value "dash". + */ + xmlDocPtr pXmlDoc = parseExport("word/document.xml"); + if (!pXmlDoc) + return; + assertXPath(pXmlDoc, "/w:document/w:body/w:p/w:r[2]/mc:AlternateContent/mc:Fallback/w:pict/v:rect/v:stroke", "dashstyle", "dash"); +} + +DECLARE_OOXMLEXPORT_TEST(testFdo74110,"fdo74110.docx") +{ + /* + The File contains word art which is being exported as shape and the mapping is defaulted to + shape type rect since the actual shape type(s) is/are commented out for some reason. + The actual shape type(s) has/have adjustment value(s) where as rect does not have adjustment value. + Hence the following test case. + */ + xmlDocPtr pXmlDoc = parseExport("word/document.xml"); + if (!pXmlDoc) + return; + assertXPath(pXmlDoc, "/w:document/w:body/w:p[1]/w:r[1]/mc:AlternateContent/mc:Choice/w:drawing[1]/wp:inline[1]/a:graphic[1]/a:graphicData[1]/wps:wsp[1]/wps:spPr[1]/a:prstGeom[1]", + "prst", "rect"); + assertXPath(pXmlDoc, "/w:document/w:body/w:p[1]/w:r[1]/mc:AlternateContent/mc:Choice/w:drawing[1]/wp:inline[1]/a:graphic[1]/a:graphicData[1]/wps:wsp[1]/wps:spPr[1]/a:prstGeom[1]/a:avLst[1]/a:gd[1]",0); +} + +DECLARE_OOXMLEXPORT_TEST(testOuterShdw,"testOuterShdw.docx") +{ + xmlDocPtr pXmlDoc = parseExport("word/document.xml"); + if (!pXmlDoc) + return; + assertXPath(pXmlDoc, "/w:document[1]/w:body[1]/w:p[1]/w:r[3]/mc:AlternateContent[1]/mc:Choice[1]/w:drawing[1]/wp:anchor[1]/a:graphic[1]/a:graphicData[1]/wps:wsp[1]/wps:spPr[1]/a:effectLst[1]/a:outerShdw[1]", "dist", "57811035"); +} + +DECLARE_OOXMLEXPORT_TEST(testExtentValue, "fdo74605.docx") +{ + xmlDocPtr pXmlDoc = parseExport(); + if (!pXmlDoc) + return; + assertXPath(pXmlDoc, "/w:document/w:body/w:p[2]/w:r[1]/mc:AlternateContent[1]/mc:Choice[1]/w:drawing[1]/wp:anchor[1]/wp:extent","cx","0"); +} + +DECLARE_OOXMLEXPORT_TEST( testChildNodesOfCubicBezierTo, "FDO74774.docx") +{ + /* Number of children required by cubicBexTo is 3 of type "pt". + While exporting, sometimes the child nodes are less than 3. + The test case ensures that there are 3 child nodes of type "pt" + for cubicBexTo + */ + xmlDocPtr pXmlDoc = parseExport("word/document.xml"); + if (!pXmlDoc) + return; + + assertXPath( pXmlDoc, + "/w:document/w:body/w:p[2]/w:r[1]/mc:AlternateContent[1]/mc:Choice/w:drawing[1]/wp:inline[1]/a:graphic[1]/a:graphicData[1]/wpg:wgp[1]/wps:wsp[3]/wps:spPr[1]/a:custGeom[1]/a:pathLst[1]/a:path[1]/a:cubicBezTo[2]/a:pt[3]"); +} + +DECLARE_OOXMLEXPORT_TEST(testMSwordHang,"test_msword_hang.docx") +{ + // fdo#74771: + xmlDocPtr pXmlDoc = parseExport("word/document.xml"); + if (!pXmlDoc) + return; + assertXPath(pXmlDoc, "/w:document/w:body/w:p[2]/w:r[2]/mc:AlternateContent/mc:Choice/w:drawing/wp:anchor/a:graphic/a:graphicData/wps:wsp/wps:txbx/w:txbxContent/w:p/w:r[2]/w:drawing/wp:inline", "distT", "0"); +} + #endif CPPUNIT_PLUGIN_IMPLEMENT();