src/lib/VDXParser.cpp | 2 - src/lib/VSDCollector.h | 2 - src/lib/VSDContentCollector.cpp | 17 +++++++------ src/lib/VSDContentCollector.h | 3 +- src/lib/VSDDocumentStructure.h | 2 - src/lib/VSDFieldList.cpp | 34 ++++++++++++++++---------- src/lib/VSDFieldList.h | 6 ++-- src/lib/VSDParser.cpp | 15 ++++++----- src/lib/VSDStylesCollector.cpp | 3 +- src/lib/VSDStylesCollector.h | 2 - src/lib/VSDXParser.cpp | 2 - src/lib/tokens.txt | 11 ++++++++ src/test/data/tdf154379-DrawingUnits-type.vsd |binary src/test/importtest.cpp | 16 +++++++++++- 14 files changed, 78 insertions(+), 37 deletions(-)
New commits: commit b86ed4fb2d9c2bfe136972e046a26644938de4d8 Author: Bartosz Kosiorek <[email protected]> AuthorDate: Mon Oct 14 20:38:16 2024 +0200 Commit: Bartosz Kosiorek <[email protected]> CommitDate: Wed Oct 16 19:08:46 2024 +0200 tdf#154379 Add support to DrawingUnits types There is number type DrawingUnits type, where type unit are taken form the DrawingScale cell of the page or master containing the cell. Thit commit implement such behaviour and cover it with tests More information: https://learn.microsoft.com/en-us/office/vba/visio/concepts/about-units-of-measure-visio#default-units-of-measure Change-Id: Ib581e214c80e4f61195860dac83ae763c6398653 Reviewed-on: https://gerrit.libreoffice.org/c/libvisio/+/174909 Tested-by: Bartosz Kosiorek <[email protected]> Reviewed-by: Bartosz Kosiorek <[email protected]> diff --git a/src/lib/VDXParser.cpp b/src/lib/VDXParser.cpp index a5c204d..e15e365 100644 --- a/src/lib/VDXParser.cpp +++ b/src/lib/VDXParser.cpp @@ -788,7 +788,7 @@ void libvisio::VDXParser::readPageProps(xmlTextReaderPtr reader) else if (m_isPageStarted) { double scale = drawingScale > 0 || drawingScale < 0 ? pageScale/drawingScale : 1.0; - m_collector->collectPageProps(0, level, pageWidth, pageHeight, shadowOffsetX, shadowOffsetY, scale); + m_collector->collectPageProps(0, level, pageWidth, pageHeight, shadowOffsetX, shadowOffsetY, scale, 0); } } diff --git a/src/lib/VSDCollector.h b/src/lib/VSDCollector.h index 7b06712..5d4b62f 100644 --- a/src/lib/VSDCollector.h +++ b/src/lib/VSDCollector.h @@ -60,7 +60,7 @@ public: virtual void collectTxtXForm(unsigned level, const XForm &txtxform) = 0; virtual void collectShapesOrder(unsigned id, unsigned level, const std::vector<unsigned> &shapeIds) = 0; virtual void collectForeignDataType(unsigned level, unsigned foreignType, unsigned foreignFormat, double offsetX, double offsetY, double width, double height) = 0; - virtual void collectPageProps(unsigned id, unsigned level, double pageWidth, double pageHeight, double shadowOffsetX, double shadowOffsetY, double scale) = 0; + virtual void collectPageProps(unsigned id, unsigned level, double pageWidth, double pageHeight, double shadowOffsetX, double shadowOffsetY, double scale, unsigned char drawingScaleUnit) = 0; virtual void collectPage(unsigned id, unsigned level, unsigned backgroundPageID, bool isBackgroundPage, const VSDName &pageName) = 0; virtual void collectShape(unsigned id, unsigned level, unsigned parent, unsigned masterPage, unsigned masterShape, unsigned lineStyle, unsigned fillStyle, unsigned textStyle) = 0; virtual void collectSplineStart(unsigned id, unsigned level, double x, double y, double secondKnot, double firstKnot, double lastKnot, unsigned degree) = 0; diff --git a/src/lib/VSDContentCollector.cpp b/src/lib/VSDContentCollector.cpp index 2456ce6..90ae6df 100644 --- a/src/lib/VSDContentCollector.cpp +++ b/src/lib/VSDContentCollector.cpp @@ -124,7 +124,8 @@ libvisio::VSDContentCollector::VSDContentCollector( ) : m_painter(painter), m_isPageStarted(false), m_pageWidth(0.0), m_pageHeight(0.0), m_shadowOffsetX(0.0), m_shadowOffsetY(0.0), - m_scale(1.0), m_x(0.0), m_y(0.0), m_originalX(0.0), m_originalY(0.0), m_xform(), m_txtxform(), m_misc(), + m_scale(1.0), m_defaultDrawingUnit(0), + m_x(0.0), m_y(0.0), m_originalX(0.0), m_originalY(0.0), m_xform(), m_txtxform(), m_misc(), m_currentFillGeometry(), m_currentLineGeometry(), m_groupXForms(groupXFormsSequence.empty() ? nullptr : &groupXFormsSequence[0]), m_currentForeignData(), m_currentOLEData(), m_currentForeignProps(), m_currentShapeId(0), m_foreignType((unsigned)-1), m_foreignFormat(0), m_foreignOffsetX(0.0), m_foreignOffsetY(0.0), m_foreignWidth(0.0), m_foreignHeight(0.0), @@ -2562,7 +2563,8 @@ void libvisio::VSDContentCollector::collectForeignDataType(unsigned level, unsig m_foreignHeight = height; } -void libvisio::VSDContentCollector::collectPageProps(unsigned /* id */, unsigned level, double pageWidth, double pageHeight, double shadowOffsetX, double shadowOffsetY, double scale) +void libvisio::VSDContentCollector::collectPageProps(unsigned /* id */, unsigned level, double pageWidth, double pageHeight, + double shadowOffsetX, double shadowOffsetY, double scale, unsigned char drawingScaleUnit) { _handleLevelChange(level); m_pageWidth = pageWidth; @@ -2570,6 +2572,7 @@ void libvisio::VSDContentCollector::collectPageProps(unsigned /* id */, unsigned m_scale = scale; m_shadowOffsetX = shadowOffsetX; m_shadowOffsetY = shadowOffsetY; + m_defaultDrawingUnit = drawingScaleUnit; m_currentPage.m_pageWidth = m_scale*m_pageWidth; m_currentPage.m_pageHeight = m_scale*m_pageHeight; @@ -2665,7 +2668,7 @@ void libvisio::VSDContentCollector::collectShape(unsigned id, unsigned level, un { VSDFieldListElement *elem = m_stencilFields.getElement(i); if (elem) - m_fields.push_back(elem->getString(m_stencilNames)); + m_fields.push_back(elem->getString(m_stencilNames, m_defaultDrawingUnit)); else m_fields.push_back(librevenge::RVNGString()); } @@ -3490,7 +3493,7 @@ void libvisio::VSDContentCollector::collectTextField(unsigned id, unsigned level if (element) { if (nameId == -2) - m_fields.push_back(element->getString(m_stencilNames)); + m_fields.push_back(element->getString(m_stencilNames, m_defaultDrawingUnit)); else { if (nameId >= 0) @@ -3502,7 +3505,7 @@ void libvisio::VSDContentCollector::collectTextField(unsigned id, unsigned level else { VSDTextField tmpField(id, level, nameId, formatStringId); - m_fields.push_back(tmpField.getString(m_names)); + m_fields.push_back(tmpField.getString(m_names, m_defaultDrawingUnit)); } } @@ -3526,13 +3529,13 @@ void libvisio::VSDContentCollector::collectNumericField(unsigned id, unsigned le if (format != VSD_FIELD_FORMAT_Unknown) element->setFormat(format); - m_fields.push_back(element->getString(m_names)); + m_fields.push_back(element->getString(m_names, m_defaultDrawingUnit)); } } else { VSDNumericField tmpField(id, level, format, cellType, number, formatStringId); - m_fields.push_back(tmpField.getString(m_names)); + m_fields.push_back(tmpField.getString(m_names, m_defaultDrawingUnit)); } } diff --git a/src/lib/VSDContentCollector.h b/src/lib/VSDContentCollector.h index 01f8598..fab81ad 100644 --- a/src/lib/VSDContentCollector.h +++ b/src/lib/VSDContentCollector.h @@ -77,7 +77,7 @@ public: void collectTxtXForm(unsigned level, const XForm &txtxform) override; void collectShapesOrder(unsigned id, unsigned level, const std::vector<unsigned> &shapeIds) override; void collectForeignDataType(unsigned level, unsigned foreignType, unsigned foreignFormat, double offsetX, double offsetY, double width, double height) override; - void collectPageProps(unsigned id, unsigned level, double pageWidth, double pageHeight, double shadowOffsetX, double shadowOffsetY, double scale) override; + void collectPageProps(unsigned id, unsigned level, double pageWidth, double pageHeight, double shadowOffsetX, double shadowOffsetY, double scale, unsigned char drawingScaleUnit) override; void collectPage(unsigned id, unsigned level, unsigned backgroundPageID, bool isBackgroundPage, const VSDName &pageName) override; void collectShape(unsigned id, unsigned level, unsigned parent, unsigned masterPage, unsigned masterShape, unsigned lineStyle, unsigned fillStyle, unsigned textStyle) override; void collectSplineStart(unsigned id, unsigned level, double x, double y, double secondKnot, double firstKnot, double lastKnot, unsigned degree) override; @@ -238,6 +238,7 @@ private: double m_shadowOffsetX; double m_shadowOffsetY; double m_scale; + unsigned char m_defaultDrawingUnit; double m_x; double m_y; double m_originalX; diff --git a/src/lib/VSDDocumentStructure.h b/src/lib/VSDDocumentStructure.h index 93f5ad9..7d1cbba 100644 --- a/src/lib/VSDDocumentStructure.h +++ b/src/lib/VSDDocumentStructure.h @@ -150,8 +150,8 @@ #define CELL_TYPE_Inches 65 #define CELL_TYPE_Feet 66 #define CELL_TYPE_FeetAndInches 67 -#define CELL_TYPE_Centimeters 69 #define CELL_TYPE_Miles 68 +#define CELL_TYPE_Centimeters 69 #define CELL_TYPE_Millimeters 70 #define CELL_TYPE_Meters 71 #define CELL_TYPE_Kilometers 72 diff --git a/src/lib/VSDFieldList.cpp b/src/lib/VSDFieldList.cpp index f16b5f2..e261b58 100644 --- a/src/lib/VSDFieldList.cpp +++ b/src/lib/VSDFieldList.cpp @@ -24,7 +24,7 @@ libvisio::VSDFieldListElement *libvisio::VSDTextField::clone() return new VSDTextField(m_id, m_level, m_nameId, m_formatStringId); } -librevenge::RVNGString libvisio::VSDTextField::getString(const std::map<unsigned, librevenge::RVNGString> &strVec) +librevenge::RVNGString libvisio::VSDTextField::getString(const std::map<unsigned, librevenge::RVNGString> &strVec, unsigned /* defaultUnit */) { //TODO VSD_FIELD_FORMAT_StrNormal 37 //TODO VSD_FIELD_FORMAT_StrLower 38 @@ -154,6 +154,10 @@ double convertNumber(const unsigned short cellType, const double number) } } +/* + * More information about Visio Units: + * https://learn.microsoft.com/en-us/office/vba/visio/concepts/about-units-of-measure-visio +*/ const char *getUnitString(const unsigned short cellType) { switch (cellType) @@ -218,64 +222,70 @@ const char *getUnitString(const unsigned short cellType) } } -librevenge::RVNGString libvisio::VSDNumericField::getString(const std::map<unsigned, librevenge::RVNGString> &) +librevenge::RVNGString libvisio::VSDNumericField::getString(const std::map<unsigned, librevenge::RVNGString> &, unsigned defaultDrawingUnit) { // Augmented BNF for Syntax Specifications: ABNF // http://www.rfc-editor.org/rfc/rfc5234.txt if (m_format == VSD_FIELD_FORMAT_Unknown) return librevenge::RVNGString(); + + auto cell_type = m_cell_type; + if ((m_cell_type == CELL_TYPE_DrawingUnits) || (m_cell_type == CELL_TYPE_PageUnits)) + + cell_type = defaultDrawingUnit; + switch (m_format) { case VSD_FIELD_FORMAT_NumGenNoUnits: { // 0 Format string: 0.#### Example: 30060.9167 - return doubleToString(convertNumber(m_cell_type, m_number), "%.4g%s", ""); + return doubleToString(convertNumber(cell_type, m_number), "%.4g%s", ""); } case VSD_FIELD_FORMAT_NumGenDefUnits: { // 1 Format string: 0.#### u Example: 30060.9167 cm - return doubleToString(convertNumber(m_cell_type, m_number), "%.4g%s", getUnitString(m_cell_type)); + return doubleToString(convertNumber(cell_type, m_number), "%.4g%s", getUnitString(cell_type)); } case VSD_FIELD_FORMAT_0PlNoUnits: { // 2 Format string: 0 Example: 30061 - return doubleToString(convertNumber(m_cell_type, m_number), "%.0f%s", ""); + return doubleToString(convertNumber(cell_type, m_number), "%.0f%s", ""); } case VSD_FIELD_FORMAT_0PlDefUnits: { // 3 Format string: 0 u Example: 30061 cm - return doubleToString(convertNumber(m_cell_type, m_number), "%.0f%s", getUnitString(m_cell_type)); + return doubleToString(convertNumber(cell_type, m_number), "%.0f%s", getUnitString(cell_type)); } case VSD_FIELD_FORMAT_1PlNoUnits: { // 4 Format string: 0.0 Example: 30060.9 - return doubleToString(convertNumber(m_cell_type, m_number), "%.1f%s", ""); + return doubleToString(convertNumber(cell_type, m_number), "%.1f%s", ""); } case VSD_FIELD_FORMAT_1PlDefUnits: { // 5 Format string: 0.0 u Example: 30060.9 cm - return doubleToString(convertNumber(m_cell_type, m_number), "%.1f%s", getUnitString(m_cell_type)); + return doubleToString(convertNumber(cell_type, m_number), "%.1f%s", getUnitString(cell_type)); } case VSD_FIELD_FORMAT_2PlNoUnits: { // 6 Format string: 0.00 Example: 30061.92 - return doubleToString(convertNumber(m_cell_type, m_number), "%.2f%s", ""); + return doubleToString(convertNumber(cell_type, m_number), "%.2f%s", ""); } case VSD_FIELD_FORMAT_2PlDefUnits: { // 7 Format string: 0.00 u Example: 30061.92 cm - return doubleToString(convertNumber(m_cell_type, m_number), "%.2f%s", getUnitString(m_cell_type)); + return doubleToString(convertNumber(cell_type, m_number), "%.2f%s", getUnitString(cell_type)); } case VSD_FIELD_FORMAT_3PlNoUnits: { // 8 Format string: 0.000 Example: 30061.916 - return doubleToString(convertNumber(m_cell_type, m_number), "%.3f%s", ""); + return doubleToString(convertNumber(cell_type, m_number), "%.3f%s", ""); } case VSD_FIELD_FORMAT_3PlDefUnits: { // 9 Format string: 0.000 u Example: 30061.916 cm - return doubleToString(convertNumber(m_cell_type, m_number), "%.3f%s", getUnitString(m_cell_type)); + return doubleToString(convertNumber(cell_type, m_number), "%.3f%s", getUnitString(cell_type)); } //TODO VSD_FIELD_FORMAT_FeetAndInches 10 Format string: <,FEET/INCH>0.000 u //TODO VSD_FIELD_FORMAT_Radians 11 Format string: <,rad>0.#### u diff --git a/src/lib/VSDFieldList.h b/src/lib/VSDFieldList.h index 54560bd..8b98739 100644 --- a/src/lib/VSDFieldList.h +++ b/src/lib/VSDFieldList.h @@ -29,7 +29,7 @@ public: virtual ~VSDFieldListElement() {} virtual void handle(VSDCollector *collector) const = 0; virtual VSDFieldListElement *clone() = 0; - virtual librevenge::RVNGString getString(const std::map<unsigned, librevenge::RVNGString> &) = 0; + virtual librevenge::RVNGString getString(const std::map<unsigned, librevenge::RVNGString> &, unsigned defaultUnit) = 0; virtual void setNameId(int) = 0; virtual void setFormat(unsigned short) = 0; virtual void setCellType(unsigned short) = 0; @@ -47,7 +47,7 @@ public: ~VSDTextField() override {} void handle(VSDCollector *collector) const override; VSDFieldListElement *clone() override; - librevenge::RVNGString getString(const std::map<unsigned, librevenge::RVNGString> &strVec) override; + librevenge::RVNGString getString(const std::map<unsigned, librevenge::RVNGString> &strVec, unsigned defaultUnit) override; void setNameId(int nameId) override; void setFormat(unsigned short) override {} void setCellType(unsigned short) override {} @@ -70,7 +70,7 @@ public: ~VSDNumericField() override {} void handle(VSDCollector *collector) const override; VSDFieldListElement *clone() override; - librevenge::RVNGString getString(const std::map<unsigned, librevenge::RVNGString> &) override; + librevenge::RVNGString getString(const std::map<unsigned, librevenge::RVNGString> &, unsigned defaultUnit) override; void setNameId(int) override {} void setFormat(unsigned short format) override; void setCellType(unsigned short cellType) override; diff --git a/src/lib/VSDParser.cpp b/src/lib/VSDParser.cpp index 03b24fd..0f75fba 100644 --- a/src/lib/VSDParser.cpp +++ b/src/lib/VSDParser.cpp @@ -1257,20 +1257,21 @@ void libvisio::VSDParser::readPageProps(librevenge::RVNGInputStream *input) input->seek(1, librevenge::RVNG_SEEK_CUR); m_shadowOffsetY = readDouble(input); input->seek(1, librevenge::RVNG_SEEK_CUR); - const double numerator = readDouble(input); - input->seek(1, librevenge::RVNG_SEEK_CUR); - double denominator = readDouble(input); - if (VSD_ALMOST_ZERO(denominator)) - denominator = 1; + const double pageScale = readDouble(input); + + const unsigned char drawingScaleUnit = readU8(input); + double drawingScale = readDouble(input); + if (VSD_ALMOST_ZERO(drawingScale)) + drawingScale = 1; - const double scale = std::abs(numerator / denominator); + const double scale = std::abs(pageScale / drawingScale); if (m_isStencilStarted && m_currentStencil) { m_currentStencil->m_shadowOffsetX = m_shadowOffsetX; m_currentStencil->m_shadowOffsetY = m_shadowOffsetY; } - m_collector->collectPageProps(m_header.id, m_header.level, pageWidth, pageHeight, m_shadowOffsetX, m_shadowOffsetY, scale); + m_collector->collectPageProps(m_header.id, m_header.level, pageWidth, pageHeight, m_shadowOffsetX, m_shadowOffsetY, scale, drawingScaleUnit); } void libvisio::VSDParser::readShape(librevenge::RVNGInputStream *input) diff --git a/src/lib/VSDStylesCollector.cpp b/src/lib/VSDStylesCollector.cpp index 0e6a0a5..16c723a 100644 --- a/src/lib/VSDStylesCollector.cpp +++ b/src/lib/VSDStylesCollector.cpp @@ -222,7 +222,8 @@ void libvisio::VSDStylesCollector::collectForeignDataType(unsigned level, unsign } void libvisio::VSDStylesCollector::collectPageProps(unsigned /* id */, unsigned level, double /* pageWidth */, double /* pageHeight */, - double /* shadowOffsetX */, double /* shadowOffsetY */, double /* scale */) + double /* shadowOffsetX */, double /* shadowOffsetY */, double /* scale */, + unsigned char /* drawingScaleUnit */) { _handleLevelChange(level); } diff --git a/src/lib/VSDStylesCollector.h b/src/lib/VSDStylesCollector.h index f52c435..2c838af 100644 --- a/src/lib/VSDStylesCollector.h +++ b/src/lib/VSDStylesCollector.h @@ -71,7 +71,7 @@ public: void collectTxtXForm(unsigned level, const XForm &txtxform) override; void collectShapesOrder(unsigned id, unsigned level, const std::vector<unsigned> &shapeIds) override; void collectForeignDataType(unsigned level, unsigned foreignType, unsigned foreignFormat, double offsetX, double offsetY, double width, double height) override; - void collectPageProps(unsigned id, unsigned level, double pageWidth, double pageHeight, double shadowOffsetX, double shadowOffsetY, double scale) override; + void collectPageProps(unsigned id, unsigned level, double pageWidth, double pageHeight, double shadowOffsetX, double shadowOffsetY, double scale, unsigned char drawingScaleUnit) override; void collectPage(unsigned id, unsigned level, unsigned backgroundPageID, bool isBackgroundPage, const VSDName &pageName) override; void collectShape(unsigned id, unsigned level, unsigned parent, unsigned masterPage, unsigned masterShape, unsigned lineStyle, unsigned fillStyle, unsigned textStyle) override; void collectSplineStart(unsigned id, unsigned level, double x, double y, double secondKnot, double firstKnot, double lastKnot, unsigned degree) override; diff --git a/src/lib/VSDXParser.cpp b/src/lib/VSDXParser.cpp index 46efdd3..6b94181 100644 --- a/src/lib/VSDXParser.cpp +++ b/src/lib/VSDXParser.cpp @@ -668,7 +668,7 @@ void libvisio::VSDXParser::readPageSheetProperties(xmlTextReaderPtr reader) else if (m_isPageStarted) { double scale = drawingScale > 0 || drawingScale < 0 ? pageScale/drawingScale : 1.0; - m_collector->collectPageProps(0, level, pageWidth, pageHeight, shadowOffsetX, shadowOffsetY, scale); + m_collector->collectPageProps(0, level, pageWidth, pageHeight, shadowOffsetX, shadowOffsetY, scale, 0); } } diff --git a/src/lib/tokens.txt b/src/lib/tokens.txt index c15e7ef..23eacaf 100644 --- a/src/lib/tokens.txt +++ b/src/lib/tokens.txt @@ -191,12 +191,23 @@ Properties QuickStyleEffectsMatrix QuickStyleFillColor QuickStyleFillMatrix +QuickStyleFontColor QuickStyleFontMatrix QuickStyleLineColor QuickStyleLineMatrix QuickStyleShadowColor QuickStyleType QuickStyleVariation +Hyperlink +Description +Address +SubAddress +ExtraInfo +Frame +NewWindow +Default +Invisible +SortKey Rel RelCubBezTo RelEllipticalArcTo diff --git a/src/test/data/tdf154379-DrawingUnits-type.vsd b/src/test/data/tdf154379-DrawingUnits-type.vsd new file mode 100644 index 0000000..bfde536 Binary files /dev/null and b/src/test/data/tdf154379-DrawingUnits-type.vsd differ diff --git a/src/test/importtest.cpp b/src/test/importtest.cpp index d26eb08..b38940d 100644 --- a/src/test/importtest.cpp +++ b/src/test/importtest.cpp @@ -187,7 +187,7 @@ xmlDocPtr parse(const char *filename, xmlBufferPtr buffer) xmlTextWriterEndDocument(writer); xmlFreeTextWriter(writer); - //std::cerr << "XML is '" << (const char *)xmlBufferContent(buffer) << "'" << std::endl; + // std::cerr << "XML is '" << (const char *)xmlBufferContent(buffer) << "'" << std::endl; return xmlParseMemory((const char *)xmlBufferContent(buffer), xmlBufferLength(buffer)); } @@ -216,6 +216,7 @@ class ImportTest : public CPPUNIT_NS::TestFixture CPPUNIT_TEST(testVsd11FormatLine); CPPUNIT_TEST(testVsd6TextfieldsWithUnits); CPPUNIT_TEST(testVsd11TextfieldsWithUnits); + CPPUNIT_TEST(testVsd11DrawingUnitsType); CPPUNIT_TEST(testBmpFileHeader); CPPUNIT_TEST(testBmpFileHeader2); CPPUNIT_TEST(testVsdxImportDefaultFillColour); @@ -237,8 +238,10 @@ class ImportTest : public CPPUNIT_NS::TestFixture void testVsdDateTimeFormatting(); void testVsd6TextfieldsWithUnits(); void testVsd11TextfieldsWithUnits(); + void testVsd11DrawingUnitsType(); void testBmpFileHeader(); void testBmpFileHeader2(); + void testVsdxImportDefaultFillColour(); void testVsdxQuickStyleFillMatrix(); void testVsdxQuickStyleFillStyle(); @@ -515,6 +518,17 @@ void ImportTest::testVsd11TextfieldsWithUnits() // TODO assertXPathContent(m_doc, "/document/page/textObject[40]/paragraph[1]/span/insertText", "1 date with currency unit zł 1,00"); } +void ImportTest::testVsd11DrawingUnitsType() +{ + // Without the accompanying fix in place, this test would have failed with: + // Test name: ImportTest::testVsd11DrawingUnitsTypeequality assertion failed + // - Expected: 180.0 cm x 394.0 cm + // - Actual : 70.9 x 394.0 cm + // - XPath '/document/page/textObject[12]/paragraph/span/insertText': contents of child does not match. + m_doc = parse("tdf154379-DrawingUnits-type.vsd", m_buffer); + assertXPathContent(m_doc, "/document/page/textObject[12]/paragraph/span/insertText", "180.0 cm x 394.0 cm"); +} + void ImportTest::testBmpFileHeader() { m_doc = parse("bitmaps.vsd", m_buffer);
