diff options
author | Dan Goodliffe <dan@randomdan.homeip.net> | 2016-09-24 13:26:22 +0100 |
---|---|---|
committer | Dan Goodliffe <dan@randomdan.homeip.net> | 2016-09-24 14:03:59 +0100 |
commit | 5d06059ccb60f8babf72c551f14500ad63cc6080 (patch) | |
tree | 5d90ff95c42dae949f304b288999648e713be234 | |
parent | Build test case libs with bjam, not a messy set of tests (diff) | |
download | slicer-5d06059ccb60f8babf72c551f14500ad63cc6080.tar.bz2 slicer-5d06059ccb60f8babf72c551f14500ad63cc6080.tar.xz slicer-5d06059ccb60f8babf72c551f14500ad63cc6080.zip |
Support for custom model parts
-rw-r--r-- | slicer/slicer/modelPartsTypes.impl.h | 2 | ||||
-rw-r--r-- | slicer/test/conversions.cpp | 40 | ||||
-rw-r--r-- | slicer/test/conversions.h | 18 | ||||
-rw-r--r-- | slicer/test/initial/isodate.xml | 6 | ||||
-rw-r--r-- | slicer/test/serializers.cpp | 11 | ||||
-rw-r--r-- | slicer/test/types.ice | 2 | ||||
-rw-r--r-- | slicer/tool/parser.cpp | 4 |
7 files changed, 80 insertions, 3 deletions
diff --git a/slicer/slicer/modelPartsTypes.impl.h b/slicer/slicer/modelPartsTypes.impl.h index e38d307..a7b43bd 100644 --- a/slicer/slicer/modelPartsTypes.impl.h +++ b/slicer/slicer/modelPartsTypes.impl.h @@ -2,7 +2,7 @@ #define SLICER_MODELPARTSTYPES_IMPL_H #include "modelPartsTypes.h" -#include <common.h> +#include "common.h" #define MODELPARTFOR(Type, ModelPartType) \ template class ModelPartType<Type>; \ diff --git a/slicer/test/conversions.cpp b/slicer/test/conversions.cpp index 9f79f2e..af3afcd 100644 --- a/slicer/test/conversions.cpp +++ b/slicer/test/conversions.cpp @@ -1,4 +1,4 @@ -#include "types.h" +#include "conversions.h" #include <boost/numeric/conversion/cast.hpp> #include <visibility.h> @@ -104,3 +104,41 @@ namespace Slicer { } } +namespace TestModule { + int completions = 0; + + AbValidator::AbValidator(ClassTypePtr & m) : + Slicer::ModelPartForClass<ClassTypePtr>(m) + { + } + + void + AbValidator::Complete() + { + if (this->Model->a == 0 || this->Model->b == 0) { + // LCOV_EXCL_START + throw std::runtime_error("Mock error"); + // LCOV_EXCL_STOP + } + Slicer::ModelPartForClass<ClassTypePtr>::Complete(); + completions += 1; + } + + MonthValidator::MonthValidator(::Ice::Short & m) : + Slicer::ModelPartForSimple<::Ice::Short>(m) + { + } + + void + MonthValidator::Complete() + { + if (this->Model < 1 || this->Model > 12) { + // LCOV_EXCL_START + throw std::runtime_error("This date smells fishy."); + // LCOV_EXCL_STOP + } + Slicer::ModelPartForSimple<::Ice::Short>::Complete(); + completions += 1; + } +} + diff --git a/slicer/test/conversions.h b/slicer/test/conversions.h index 4fa2527..e33b670 100644 --- a/slicer/test/conversions.h +++ b/slicer/test/conversions.h @@ -3,9 +3,25 @@ #include <boost/date_time/posix_time/posix_time_types.hpp> #include <visibility.h> +#include <slicer/modelPartsTypes.h> +#include <types.h> namespace TestModule { - class DateTime; + DLL_PUBLIC extern int completions; + + class DLL_PUBLIC AbValidator : public Slicer::ModelPartForClass<ClassTypePtr> { + public: + AbValidator(ClassTypePtr &); + + void Complete() override; + }; + + class DLL_PUBLIC MonthValidator : public Slicer::ModelPartForSimple<::Ice::Short> { + public: + MonthValidator(::Ice::Short &); + + void Complete() override; + }; } namespace Slicer { DLL_PUBLIC diff --git a/slicer/test/initial/isodate.xml b/slicer/test/initial/isodate.xml new file mode 100644 index 0000000..9cc2f7c --- /dev/null +++ b/slicer/test/initial/isodate.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="UTF-8"?> +<IsoDate> + <year>2016</year> + <month>6</month> + <day>31</day> +</IsoDate> diff --git a/slicer/test/serializers.cpp b/slicer/test/serializers.cpp index 9c4b406..65bc8cd 100644 --- a/slicer/test/serializers.cpp +++ b/slicer/test/serializers.cpp @@ -16,6 +16,7 @@ #include <fstream> #include "helpers.h" #include "fileStructure.h" +#include "conversions.h" namespace fs = boost::filesystem; @@ -515,6 +516,11 @@ BOOST_AUTO_TEST_CASE( optionals_areset_xml ) verifyByHelper<TestModule::OptionalsPtr, Slicer::XmlDocumentDeserializer, Slicer::XmlDocumentSerializer, xmlpp::Document *>("optionals-areset.xml", readXml, writeXml, freeXml, checkOptionals_areset); } +BOOST_AUTO_TEST_CASE( simple_complete_validator ) +{ + verifyByHelper<TestModule::IsoDate, Slicer::XmlDocumentDeserializer, Slicer::XmlDocumentSerializer, xmlpp::Document *>("isodate.xml", readXml, writeXml, freeXml); +} + BOOST_AUTO_TEST_CASE( missingConversion ) { auto in = json::parseValue("{\"conv\": \"2016-06-30 12:34:56\"}"); @@ -576,3 +582,8 @@ BOOST_AUTO_TEST_SUITE_END(); BOOST_AUTO_TEST_SUITE_END(); +BOOST_AUTO_TEST_CASE( customerModelPartCounters ) +{ + BOOST_REQUIRE_EQUAL(7, TestModule::completions); +} + diff --git a/slicer/test/types.ice b/slicer/test/types.ice index e7811d0..bdc8da8 100644 --- a/slicer/test/types.ice +++ b/slicer/test/types.ice @@ -20,6 +20,7 @@ module TestModule { [ "slicer:conversion:std.string:stringToIsoDate:isoDateToString" ] struct IsoDate { short year; + [ "slicer:custommodelpart:TestModule.MonthValidator" ] short month; short day; }; @@ -42,6 +43,7 @@ module TestModule { double mdouble; string mstring; }; + [ "slicer:custommodelpart:TestModule.AbValidator" ] class ClassType { int a; int b; diff --git a/slicer/tool/parser.cpp b/slicer/tool/parser.cpp index 425e688..99d3f5f 100644 --- a/slicer/tool/parser.cpp +++ b/slicer/tool/parser.cpp @@ -492,6 +492,10 @@ namespace Slicer { boost::algorithm::trim_right_copy_if(dm->container()->thisScope(), ispunct), dm->scoped()); } + else if (auto cmp = metaDataValue("slicer:custommodelpart:", md)) { + fprintbf(cpp, "%s", + boost::algorithm::replace_all_copy(*cmp, ".", "::")); + } else { if (auto builtin = Slice::BuiltinPtr::dynamicCast(type)) { fprintbf(cpp, "ModelPartForSimple"); |