summaryrefslogtreecommitdiff
path: root/test/core/RegistryTest.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'test/core/RegistryTest.cpp')
-rw-r--r--test/core/RegistryTest.cpp67
1 files changed, 66 insertions, 1 deletions
diff --git a/test/core/RegistryTest.cpp b/test/core/RegistryTest.cpp
index 45e09d3..21195f2 100644
--- a/test/core/RegistryTest.cpp
+++ b/test/core/RegistryTest.cpp
@@ -20,18 +20,83 @@
#include <sstream>
+#include <core/common/Exceptions.hpp>
+#include <core/parser/Parser.hpp>
+#include <core/parser/ParserContext.hpp>
#include <core/resource/ResourceLocator.hpp>
#include <core/Registry.hpp>
namespace ousia {
+namespace {
+class TestParser : public Parser {
+protected:
+ Rooted<Node> doParse(CharReader &reader, ParserContext &ctx) override
+ {
+ return new Node{ctx.manager};
+ }
+};
+}
+
+static const Rtti rtti1{"rtti1"};
+static const Rtti rtti2{"rtti2"};
+
+TEST(Registry, parsers)
+{
+ Registry registry;
+
+ TestParser parser1;
+ TestParser parser2;
+
+ registry.registerParser({"text/vnd.ousia.oxm", "text/vnd.ousia.oxd"},
+ {&rtti1, &rtti2}, &parser1);
+ registry.registerParser({"text/vnd.ousia.opd"}, {&rtti2}, &parser2);
+
+ ASSERT_THROW(
+ registry.registerParser({"text/vnd.ousia.opd"}, {&rtti2}, &parser1),
+ OusiaException);
+
+ {
+ auto res = registry.getParserForMimetype("text/vnd.ousia.oxm");
+ ASSERT_EQ(&parser1, res.first);
+ ASSERT_EQ(RttiSet({&rtti1, &rtti2}), res.second);
+ }
+
+ {
+ auto res = registry.getParserForMimetype("text/vnd.ousia.opd");
+ ASSERT_EQ(&parser2, res.first);
+ ASSERT_EQ(RttiSet({&rtti2}), res.second);
+ }
+
+ {
+ auto res = registry.getParserForMimetype("application/javascript");
+ ASSERT_EQ(nullptr, res.first);
+ ASSERT_EQ(RttiSet({}), res.second);
+ }
+}
+
+TEST(Registry, extensions)
+{
+ Registry registry;
+
+ registry.registerExtension("oxm", "text/vnd.ousia.oxm");
+ registry.registerExtension("oxd", "text/vnd.ousia.oxd");
+ ASSERT_EQ("text/vnd.ousia.oxm", registry.getMimetypeForExtension("oxm"));
+ ASSERT_EQ("text/vnd.ousia.oxm", registry.getMimetypeForExtension("OXM"));
+ ASSERT_EQ("text/vnd.ousia.oxd", registry.getMimetypeForExtension("OxD"));
+ ASSERT_EQ("", registry.getMimetypeForExtension("pdf"));
+
+ ASSERT_THROW(registry.registerExtension("oxm", "text/vnd.ousia.oxm"),
+ OusiaException);
+}
+
TEST(Registry, locateResource)
{
StaticResourceLocator locator;
locator.store("path", "test");
Registry registry;
- registry.registerResourceLocator(locator);
+ registry.registerResourceLocator(&locator);
Resource res;
ASSERT_TRUE(