[Libreoffice-commits] libvisio.git: 3 commits - src/lib src/test

Miklos Vajna vmiklos at collabora.co.uk
Wed Dec 31 06:30:14 PST 2014


 src/lib/VSDXMetaData.cpp         |    6 ++++++
 src/lib/tokens.txt               |    1 +
 src/test/importtest.cpp          |   27 +++++++++++++++++++++++++++
 src/test/xmldrawinggenerator.cpp |   24 +++++++++++++++++++++++-
 4 files changed, 57 insertions(+), 1 deletion(-)

New commits:
commit 5753f7e98d02bde80d9e712d298372933c4a28e6
Author: Miklos Vajna <vmiklos at collabora.co.uk>
Date:   Wed Dec 31 14:43:48 2014 +0100

    VSDX: import <cp:category>
    
    Change-Id: If1f520da6d9180862409af63296a1f90bad971e1

diff --git a/src/lib/VSDXMetaData.cpp b/src/lib/VSDXMetaData.cpp
index 8516690..b7e485d 100644
--- a/src/lib/VSDXMetaData.cpp
+++ b/src/lib/VSDXMetaData.cpp
@@ -82,6 +82,9 @@ void libvisio::VSDXMetaData::readCoreProperties(xmlTextReaderPtr reader)
     case XML_CP_LASTMODIFIEDBY:
       m_metaData.insert("dc:creator", readString(reader, XML_CP_LASTMODIFIEDBY));
       break;
+    case XML_CP_CATEGORY:
+      m_metaData.insert("meta:user-defined:category", readString(reader, XML_CP_CATEGORY));
+      break;
     default:
       break;
     }
diff --git a/src/lib/tokens.txt b/src/lib/tokens.txt
index 2d0022b..6b01690 100644
--- a/src/lib/tokens.txt
+++ b/src/lib/tokens.txt
@@ -235,3 +235,4 @@ dcterms:created
 dcterms:modified
 dc:description
 cp:lastModifiedBy
+cp:category
diff --git a/src/test/importtest.cpp b/src/test/importtest.cpp
index ad3722b..3e20d7a 100644
--- a/src/test/importtest.cpp
+++ b/src/test/importtest.cpp
@@ -174,6 +174,7 @@ void ImportTest::testVsdxMetadataTitle()
   assertXPath(m_doc, "/document/setDocumentMetaData", "keyword", "mytag");
   assertXPath(m_doc, "/document/setDocumentMetaData", "description", "mycomment");
   assertXPath(m_doc, "/document/setDocumentMetaData", "creator", "vmiklos modifier");
+  assertXPathContent(m_doc, "/document/setDocumentMetaData/user-defined[@name='category']", "mycategory");
 }
 
 void ImportTest::testVsdMetadataTitleMs1252()
commit d6f6a4f6d7444177eaebc00198ed166f30540cbb
Author: Miklos Vajna <vmiklos at collabora.co.uk>
Date:   Wed Dec 31 14:41:52 2014 +0100

    libvisio::XmlDrawingGenerator: handle user-defined metadata
    
    Change-Id: I63c4cf75009ae8303efd031c66570514180f2d9d

diff --git a/src/test/importtest.cpp b/src/test/importtest.cpp
index 85a7175..ad3722b 100644
--- a/src/test/importtest.cpp
+++ b/src/test/importtest.cpp
@@ -66,6 +66,32 @@ void assertXPath(xmlDocPtr doc, const librevenge::RVNGString &xpath, const libre
   CPPUNIT_ASSERT_EQUAL_MESSAGE(message.cstr(), expectedValue, actualValue);
 }
 
+/// Same as the assertXPathContent(), but don't assert: return the string instead.
+librevenge::RVNGString getXPathContent(xmlDocPtr doc, const librevenge::RVNGString &xpath)
+{
+  xmlXPathObjectPtr xpathObject = getXPathNode(doc, xpath);
+  xmlNodeSetPtr nodeset = xpathObject->nodesetval;
+
+  librevenge::RVNGString message("XPath '");
+  message.append(xpath);
+  message.append("': not found.");
+  CPPUNIT_ASSERT_MESSAGE(message.cstr(), xmlXPathNodeSetGetLength(nodeset) > 0);
+
+  xmlNodePtr node = nodeset->nodeTab[0];
+  librevenge::RVNGString s(reinterpret_cast<char *>((node->children[0]).content));
+  xmlXPathFreeObject(xpathObject);
+  return s;
+}
+
+/// Assert that xpath exists, and its content equals to content.
+void assertXPathContent(xmlDocPtr doc, const librevenge::RVNGString &xpath, const librevenge::RVNGString &content)
+{
+  librevenge::RVNGString message("XPath '");
+  message.append(xpath);
+  message.append("': contents of child does not match.");
+  CPPUNIT_ASSERT_EQUAL_MESSAGE(message.cstr(), content, getXPathContent(doc, xpath));
+}
+
 /// Paints an XML representation of filename into buffer, then returns the parsed buffer content.
 xmlDocPtr parse(const char *filename, xmlBufferPtr buffer)
 {
diff --git a/src/test/xmldrawinggenerator.cpp b/src/test/xmldrawinggenerator.cpp
index 5711c64..78484e0 100644
--- a/src/test/xmldrawinggenerator.cpp
+++ b/src/test/xmldrawinggenerator.cpp
@@ -9,6 +9,11 @@
 
 #include "xmldrawinggenerator.h"
 
+#include <cstring>
+#include <string>
+#include <utility>
+#include <vector>
+
 namespace libvisio
 {
 
@@ -45,8 +50,25 @@ void XmlDrawingGenerator::setDocumentMetaData(const librevenge::RVNGPropertyList
 {
   xmlTextWriterStartElement(m_writer, BAD_CAST("setDocumentMetaData"));
   librevenge::RVNGPropertyList::Iter i(propList);
+  std::vector< std::pair<std::string, std::string> > userDefined;
   for (i.rewind(); i.next();)
-    xmlTextWriterWriteFormatAttribute(m_writer, BAD_CAST(i.key()), "%s", i()->getStr().cstr());
+  {
+    if (strncmp(i.key(), "meta:user-defined:", 18))
+      xmlTextWriterWriteFormatAttribute(m_writer, BAD_CAST(i.key()), "%s", i()->getStr().cstr());
+    else
+      userDefined.push_back(std::make_pair(i.key() + 18, i()->getStr().cstr()));
+  }
+
+  if (!userDefined.empty())
+  {
+    for (size_t idx = 0; idx < userDefined.size(); ++idx)
+    {
+      xmlTextWriterStartElement(m_writer, BAD_CAST("user-defined"));
+      xmlTextWriterWriteAttribute(m_writer, BAD_CAST("name"), BAD_CAST(userDefined[idx].first.c_str()));
+      xmlTextWriterWriteString(m_writer, BAD_CAST(userDefined[idx].second.c_str()));
+      xmlTextWriterEndElement(m_writer);
+    }
+  }
   xmlTextWriterEndElement(m_writer);
 }
 
commit ce94c3eda0f65e965001fdb946b3db829fea2fbd
Author: Miklos Vajna <vmiklos at collabora.co.uk>
Date:   Wed Dec 31 13:22:11 2014 +0100

    VSDXMetaData: missing breaks
    
    Change-Id: I6f1c1827761a532941fc699e912054966561978a

diff --git a/src/lib/VSDXMetaData.cpp b/src/lib/VSDXMetaData.cpp
index fd38811..8516690 100644
--- a/src/lib/VSDXMetaData.cpp
+++ b/src/lib/VSDXMetaData.cpp
@@ -75,10 +75,13 @@ void libvisio::VSDXMetaData::readCoreProperties(xmlTextReaderPtr reader)
       break;
     case XML_CP_KEYWORDS:
       m_metaData.insert("meta:keyword", readString(reader, XML_CP_KEYWORDS));
+      break;
     case XML_DC_DESCRIPTION:
       m_metaData.insert("dc:description", readString(reader, XML_DC_DESCRIPTION));
+      break;
     case XML_CP_LASTMODIFIEDBY:
       m_metaData.insert("dc:creator", readString(reader, XML_CP_LASTMODIFIEDBY));
+      break;
     default:
       break;
     }


More information about the Libreoffice-commits mailing list