summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CMakeLists.txt13
-rw-r--r--src/plugins/html/DemoOutput.cpp26
-rw-r--r--test/plugins/html/DemoOutputTest.cpp49
3 files changed, 73 insertions, 15 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index ddb087e..10e43ea 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -241,6 +241,16 @@ IF(TEST)
ousia_css
)
+ ADD_EXECUTABLE(ousia_test_html
+ test/plugins/html/DemoOutputTest
+ )
+
+ TARGET_LINK_LIBRARIES(ousia_test_html
+ ${GTEST_LIBRARIES}
+ ousia_core
+ ousia_html
+ )
+
ADD_EXECUTABLE(ousia_test_xml
test/plugins/xml/XmlParserTest
)
@@ -264,8 +274,9 @@ IF(TEST)
# Register the unit tests
ADD_TEST(ousia_test_core ousia_test_core)
ADD_TEST(ousia_test_boost ousia_test_boost)
- ADD_TEST(ousia_test_xml ousia_test_xml)
ADD_TEST(ousia_test_css ousia_test_css)
+ ADD_TEST(ousia_test_html ousia_test_html)
+ ADD_TEST(ousia_test_xml ousia_test_xml)
# ADD_TEST(ousia_test_mozjs ousia_test_mozjs)
ENDIF()
diff --git a/src/plugins/html/DemoOutput.cpp b/src/plugins/html/DemoOutput.cpp
index 6b9b3a4..463a5d2 100644
--- a/src/plugins/html/DemoOutput.cpp
+++ b/src/plugins/html/DemoOutput.cpp
@@ -31,7 +31,7 @@ void DemoHTMLTransformer::writeHTML(Handle<model::Document> doc,
out << "<?xml version=\" 1.0 \"?>\n";
out << "<html>\n";
out << "\t<head>\n";
- out << "\t\t<title>Test HTML Output for" << doc->getName() << "</title>\n";
+ out << "\t\t<title>Test HTML Output for " << doc->getName() << "</title>\n";
out << "\t</head>\n";
out << "\t<body>\n";
@@ -76,10 +76,9 @@ void DemoHTMLTransformer::writeSection(Handle<model::StructuredEntity> sec,
// if the input node is no section, we ignore it.
return;
}
- // get the fields.
- std::vector<NodeVector<model::StructuredEntity>> &fields = sec->getFields();
// check if we have a heading.
- if (fields.size() > 1 && fields[1].size() > 0) {
+ if (sec->hasField("heading")) {
+ Rooted<model::StructuredEntity> heading = sec->getField("heading")[0];
out << "\t\t";
switch (type) {
case SectionType::BOOK:
@@ -99,7 +98,7 @@ void DemoHTMLTransformer::writeSection(Handle<model::StructuredEntity> sec,
break;
}
// the second field marks the heading. So let's write it.
- writeParagraph(fields[1][0], out, false);
+ writeParagraph(heading, out, false);
// close the heading tag.
switch (type) {
case SectionType::BOOK:
@@ -122,7 +121,8 @@ void DemoHTMLTransformer::writeSection(Handle<model::StructuredEntity> sec,
}
// then write the section content recursively.
- for (auto &n : fields[0]) {
+ NodeVector<model::StructuredEntity> mainField = sec->getField();
+ for (auto &n : mainField) {
/*
* Strictly speaking this is the wrong mechanism, because we would have
* to make an "isa" call here because we can not rely on our knowledge
@@ -149,15 +149,13 @@ void DemoHTMLTransformer::writeParagraph(Handle<model::StructuredEntity> par,
if (par->getDescriptor()->getName() != "paragraph") {
throw OusiaException("Expected paragraph!");
}
- // get the fields.
- std::vector<NodeVector<model::StructuredEntity>> &fields = par->getFields();
- // write heading if its there.
// check if we have a heading.
- if (fields.size() > 1 && fields[1].size() > 0) {
+ if (par->hasField("heading")) {
+ Rooted<model::StructuredEntity> heading = par->getField("heading")[0];
// start the heading tag
out << "\t\t<h5>";
// the second field marks the heading. So let's write it.
- writeParagraph(fields[1][0], out, false);
+ writeParagraph(heading, out, false);
// close the heading tag.
out << "</h5>\n";
}
@@ -167,13 +165,13 @@ void DemoHTMLTransformer::writeParagraph(Handle<model::StructuredEntity> par,
}
// write content
// TODO: What about emphasis?
- for (auto &text : fields[0]) {
+ for (auto &text : par->getField()) {
if (text->getDescriptor()->getName() != "text") {
throw OusiaException("Expected text!");
}
Handle<model::DocumentPrimitive> primitive =
- text->getFields()[0][0].cast<model::DocumentPrimitive>();
- if (primitive == nullptr) {
+ text->getField()[0].cast<model::DocumentPrimitive>();
+ if (primitive.isNull()) {
throw OusiaException("Text field is not primitive!");
}
out << primitive->getContent().asString();
diff --git a/test/plugins/html/DemoOutputTest.cpp b/test/plugins/html/DemoOutputTest.cpp
new file mode 100644
index 0000000..b81a001
--- /dev/null
+++ b/test/plugins/html/DemoOutputTest.cpp
@@ -0,0 +1,49 @@
+/*
+ Ousía
+ Copyright (C) 2014, 2015 Benjamin Paaßen, Andreas Stöckel
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include <gtest/gtest.h>
+
+#include <iostream>
+
+#include <plugins/html/DemoOutput.hpp>
+
+#include <core/model/Document.hpp>
+#include <core/model/Domain.hpp>
+
+#include <core/model/TestDocument.hpp>
+#include <core/model/TestDomain.hpp>
+
+namespace ousia {
+namespace html {
+
+TEST(DemoHTMLTransformer, writeHTML)
+{
+ // Construct Manager
+ Logger logger;
+ Manager mgr{1};
+ // Get the domain.
+ Rooted<model::Domain> domain = model::constructBookDomain(mgr, logger);
+ // Construct the document.
+ Rooted<model::Document> doc = model::constructBookDocument(mgr, domain);
+
+ // print it
+ DemoHTMLTransformer transformer;
+ transformer.writeHTML(doc, std::cout);
+}
+}
+}