diff options
27 files changed, 129 insertions, 115 deletions
diff --git a/slicer/db/Jamfile.jam b/slicer/db/Jamfile.jam index 664b6b1..f73d3f8 100644 --- a/slicer/db/Jamfile.jam +++ b/slicer/db/Jamfile.jam @@ -6,17 +6,23 @@ lib adhocutil : : : : <include>/usr/include/adhocutil ; lib boost_system ; lib boost_filesystem ; lib boost_utf : : <name>boost_unit_test_framework ; +lib pthread ; +lib Ice ; lib IceUtil ; lib slicer-db : [ glob *.cpp : test*.cpp ] + [ glob *.ice ] : <include>.. + <library>pthread + <library>Ice <library>IceUtil <library>dbppcore <library>../..//glibmm <library>adhocutil <library>../slicer//slicer + <implicit-dependency>../slicer//slicer : : <library>dbppcore ; @@ -28,6 +34,7 @@ run testSelect.cpp <define>ROOT=\"$(me)\" <define>BOOST_TEST_DYN_LINK <library>slicer-db + <implicit-dependency>slicer-db <library>dbpp-postgresql <library>boost_system <library>boost_filesystem @@ -35,6 +42,7 @@ run testSelect.cpp <library>../test//slicer-test <library>../test//common <library>../slicer//slicer + <implicit-dependency>../slicer//slicer <include>.. <dependency>slicer.sql <dependency>../test//compilation @@ -54,6 +62,7 @@ run testInsert.cpp <library>../test//slicer-test <library>../test//common <library>../slicer//slicer + <implicit-dependency>../slicer//slicer <include>.. <dependency>slicer.sql <dependency>../test//compilation @@ -66,6 +75,7 @@ run testUpdate.cpp <define>ROOT=\"$(me)\" <define>BOOST_TEST_DYN_LINK <library>slicer-db + <implicit-dependency>slicer-db <library>dbpp-postgresql <library>boost_system <library>boost_filesystem @@ -73,6 +83,7 @@ run testUpdate.cpp <library>../test//slicer-test <library>../test//common <library>../slicer//slicer + <implicit-dependency>../slicer//slicer <include>.. <dependency>slicer.sql <dependency>../test//compilation diff --git a/slicer/db/exceptions.cpp b/slicer/db/exceptions.cpp deleted file mode 100644 index 50099bd..0000000 --- a/slicer/db/exceptions.cpp +++ /dev/null @@ -1,6 +0,0 @@ -#include "exceptions.h" - -namespace Slicer { - UnsupportedModelType::UnsupportedModelType() : std::invalid_argument("Unspported model type") { } -} - diff --git a/slicer/db/exceptions.h b/slicer/db/exceptions.h deleted file mode 100644 index 8673627..0000000 --- a/slicer/db/exceptions.h +++ /dev/null @@ -1,14 +0,0 @@ -#ifndef SLICER_DB_EXCEPTIONS_H -#define SLICER_DB_EXCEPTIONS_H - -#include <stdexcept> - -namespace Slicer { - class UnsupportedModelType : public std::invalid_argument { - public: - UnsupportedModelType(); - }; -} - -#endif - diff --git a/slicer/db/sqlExceptions.ice b/slicer/db/sqlExceptions.ice new file mode 100644 index 0000000..a392876 --- /dev/null +++ b/slicer/db/sqlExceptions.ice @@ -0,0 +1,17 @@ +#ifndef SLICER_XML +#define SLICER_XML + +#include <common.ice> + +module Slicer { + exception TooManyRowsReturned extends DeserializerError {}; + exception NoRowsReturned extends DeserializerError {}; + exception NoRowsFound extends SerializerError {}; + exception UnsuitableIdFieldType extends SerializerError { + string type; + }; +}; + +#endif + + diff --git a/slicer/db/sqlInsertSerializer.cpp b/slicer/db/sqlInsertSerializer.cpp index 0ff0038..f5c4c4f 100644 --- a/slicer/db/sqlInsertSerializer.cpp +++ b/slicer/db/sqlInsertSerializer.cpp @@ -1,5 +1,6 @@ #include "sqlInsertSerializer.h" -#include "exceptions.h" +#include <common.h> +#include <sqlExceptions.h> #include "sqlBinder.h" #include <buffer.h> #include <modifycommand.h> @@ -65,7 +66,7 @@ namespace Slicer { } #define NonNumType(T) \ - void set(T &) const override { throw std::runtime_error("Can't store Id in " #T " type field"); } + void set(T &) const override { throw UnsuitableIdFieldType(#T); } #define NumType(T) \ void set(T & v) const override { v = boost::numeric_cast<T>(connection->insertId()); } diff --git a/slicer/db/sqlSelectDeserializer.cpp b/slicer/db/sqlSelectDeserializer.cpp index 7836c63..5e32f75 100644 --- a/slicer/db/sqlSelectDeserializer.cpp +++ b/slicer/db/sqlSelectDeserializer.cpp @@ -1,13 +1,10 @@ #include "sqlSelectDeserializer.h" #include "sqlSource.h" -#include "exceptions.h" +#include <sqlExceptions.h> +#include <common.h> #include <boost/algorithm/string/predicate.hpp> namespace Slicer { - NoRowsReturned::NoRowsReturned() : std::runtime_error("No rows returned") { } - - TooManyRowsReturned::TooManyRowsReturned() : std::runtime_error("Too many rows returned") { } - SqlSelectDeserializer::SqlSelectDeserializer(DB::SelectCommand & c, IceUtil::Optional<std::string> tc) : cmd(c), typeIdColName(tc) diff --git a/slicer/db/sqlSelectDeserializer.h b/slicer/db/sqlSelectDeserializer.h index 3d73c94..c520090 100644 --- a/slicer/db/sqlSelectDeserializer.h +++ b/slicer/db/sqlSelectDeserializer.h @@ -6,16 +6,6 @@ #include <visibility.h> namespace Slicer { - class NoRowsReturned : public std::runtime_error { - public: - NoRowsReturned(); - }; - - class TooManyRowsReturned : public std::runtime_error { - public: - TooManyRowsReturned(); - }; - class DLL_PUBLIC SqlSelectDeserializer : public Slicer::Deserializer { public: SqlSelectDeserializer(DB::SelectCommand &, IceUtil::Optional<std::string> typeIdCol = IceUtil::Optional<std::string>()); diff --git a/slicer/db/sqlUpdateSerializer.cpp b/slicer/db/sqlUpdateSerializer.cpp index 65889ab..867b9fb 100644 --- a/slicer/db/sqlUpdateSerializer.cpp +++ b/slicer/db/sqlUpdateSerializer.cpp @@ -1,13 +1,12 @@ #include "sqlUpdateSerializer.h" -#include "exceptions.h" +#include <sqlExceptions.h> +#include <common.h> #include "sqlBinder.h" #include <buffer.h> #include <modifycommand.h> #include <slicer/metadata.h> namespace Slicer { - NoRowsFound::NoRowsFound() : std::runtime_error("No rows found") { } - const std::string md_pkey = "db:pkey"; SqlUpdateSerializer::SqlUpdateSerializer(DB::Connection * const c, const std::string & t) : diff --git a/slicer/db/sqlUpdateSerializer.h b/slicer/db/sqlUpdateSerializer.h index cbd8d65..83a5e04 100644 --- a/slicer/db/sqlUpdateSerializer.h +++ b/slicer/db/sqlUpdateSerializer.h @@ -6,11 +6,6 @@ #include <visibility.h> namespace Slicer { - class NoRowsFound : public std::runtime_error { - public: - NoRowsFound(); - }; - class DLL_PUBLIC SqlUpdateSerializer : public Slicer::Serializer { public: typedef boost::shared_ptr<DB::ModifyCommand> ModifyPtr; diff --git a/slicer/db/testInsert.cpp b/slicer/db/testInsert.cpp index e2118b8..ef37e66 100644 --- a/slicer/db/testInsert.cpp +++ b/slicer/db/testInsert.cpp @@ -7,7 +7,7 @@ #include "sqlInsertSerializer.h" #include "sqlSelectDeserializer.h" #include <types.h> -#include "exceptions.h" +#include <common.h> // LCOV_EXCL_START BOOST_TEST_DONT_PRINT_LOG_VALUE(TestModule::DateTime); diff --git a/slicer/db/testSelect.cpp b/slicer/db/testSelect.cpp index 6cade1d..c1e2121 100644 --- a/slicer/db/testSelect.cpp +++ b/slicer/db/testSelect.cpp @@ -6,7 +6,8 @@ #include <definedDirs.h> #include "sqlSelectDeserializer.h" #include <types.h> -#include "exceptions.h" +#include <common.h> +#include <sqlExceptions.h> class StandardMockDatabase : public PQ::Mock { public: diff --git a/slicer/db/testUpdate.cpp b/slicer/db/testUpdate.cpp index 159cb5e..1bf917e 100644 --- a/slicer/db/testUpdate.cpp +++ b/slicer/db/testUpdate.cpp @@ -8,7 +8,8 @@ #include "sqlSelectDeserializer.h" #include "sqlUpdateSerializer.h" #include <types.h> -#include "exceptions.h" +#include <common.h> +#include <sqlExceptions.h> class StandardMockDatabase : public PQ::Mock { public: diff --git a/slicer/slicer/Jamfile.jam b/slicer/slicer/Jamfile.jam index 7def868..d6fc70f 100644 --- a/slicer/slicer/Jamfile.jam +++ b/slicer/slicer/Jamfile.jam @@ -1,15 +1,23 @@ +lib pthread ; +lib Ice ; lib IceUtil ; lib boost_system ; +lib boost_filesystem ; lib adhocutil : : : : <include>/usr/include/adhocutil ; lib slicer : [ glob *.cpp ] + [ glob *.ice ] : + <library>pthread + <library>Ice <library>IceUtil <library>boost_system <library>adhocutil <include>.. : : <include>.. + <include>. <library>boost_system + <library>boost_filesystem ; diff --git a/slicer/slicer/common.ice b/slicer/slicer/common.ice new file mode 100644 index 0000000..5d87d0a --- /dev/null +++ b/slicer/slicer/common.ice @@ -0,0 +1,32 @@ +#ifndef SLICER +#define SLICER + +module Slicer { + exception CompilerError { + string what; + }; + exception RuntimeError { }; + exception SerializerError extends RuntimeError { }; + exception DeserializerError extends RuntimeError { }; + exception IncorrectElementName extends DeserializerError { + string name; + }; + exception UnsupportedModelType extends RuntimeError { }; + exception NoConversionFound extends RuntimeError { + string type; + }; + exception UnknownType extends DeserializerError { + string type; + }; + exception InvalidEnumerationValue extends SerializerError { + int value; + string type; + }; + exception InvalidEnumerationSymbol extends DeserializerError { + string symbol; + string type; + }; +}; + +#endif + diff --git a/slicer/slicer/modelParts.cpp b/slicer/slicer/modelParts.cpp index 2e144fa..b53997e 100644 --- a/slicer/slicer/modelParts.cpp +++ b/slicer/slicer/modelParts.cpp @@ -4,24 +4,6 @@ namespace Slicer { const Metadata emptyMetadata; - IncorrectElementName::IncorrectElementName(const std::string & n) : - std::invalid_argument(n) - { - } - - UnknownType::UnknownType(const std::string & n) : - std::invalid_argument(n) - { - } - InvalidEnumerationValue::InvalidEnumerationValue(const std::string & n, const std::string & e) : - std::invalid_argument("No such value '" + n + "' in " + e) { } - - InvalidEnumerationValue::InvalidEnumerationValue(::Ice::Int n, const std::string & e) : - std::invalid_argument("Invalid value " + boost::lexical_cast<std::string>(n) + " in " + e) { } - - NoConversionFound::NoConversionFound(const std::string & n) : - std::runtime_error("Could not convert to/from model for type " + n) { } - ClassNameMap * & classNameMap() { diff --git a/slicer/slicer/modelParts.h b/slicer/slicer/modelParts.h index 3533cc7..c9a0995 100644 --- a/slicer/slicer/modelParts.h +++ b/slicer/slicer/modelParts.h @@ -22,27 +22,6 @@ namespace Slicer { return p.get(); } - class DLL_PUBLIC IncorrectElementName : public std::invalid_argument { - public: - IncorrectElementName(const std::string & n); - }; - - class DLL_PUBLIC UnknownType : public std::invalid_argument { - public: - UnknownType(const std::string & n); - }; - - class DLL_PUBLIC InvalidEnumerationValue : public std::invalid_argument { - public: - InvalidEnumerationValue(const std::string & n, const std::string & e); - InvalidEnumerationValue(::Ice::Int n, const std::string & e); - }; - - class DLL_PUBLIC NoConversionFound : public std::runtime_error { - public: - NoConversionFound(const std::string & n); - }; - template <typename T> class TValueTarget { public: diff --git a/slicer/slicer/modelPartsTypes.impl.h b/slicer/slicer/modelPartsTypes.impl.h index d598bbf..2c9e20f 100644 --- a/slicer/slicer/modelPartsTypes.impl.h +++ b/slicer/slicer/modelPartsTypes.impl.h @@ -2,6 +2,7 @@ #define SLICER_MODELPARTSTYPES_IMPL_H #include "modelPartsTypes.h" +#include <common.h> #define MODELPARTFOR(Type, ModelPartType) \ template<> ModelPartPtr ModelPart::CreateFor(Type & s) { return new ModelPartType<Type>(s); } \ @@ -325,7 +326,7 @@ namespace Slicer { { auto i = enumerations.right.find(val); if (i == enumerations.right.end()) { - throw InvalidEnumerationValue(val, typeid(T).name()); + throw InvalidEnumerationSymbol(val, typeid(T).name()); } return i->second; } diff --git a/slicer/test/Jamfile.jam b/slicer/test/Jamfile.jam index b6e2834..253ab2b 100644 --- a/slicer/test/Jamfile.jam +++ b/slicer/test/Jamfile.jam @@ -84,8 +84,8 @@ run serializers.cpp <dependency>preprocess <library>slicer-test <library>common - <include>.. <library>../slicer//slicer + <implicit-dependency>../slicer//slicer <library>../xml//slicer-xml <library>../json//slicer-json : diff --git a/slicer/test/preprocessor.cpp b/slicer/test/preprocessor.cpp index 3eb50f6..b715d50 100644 --- a/slicer/test/preprocessor.cpp +++ b/slicer/test/preprocessor.cpp @@ -69,7 +69,7 @@ BOOST_AUTO_TEST_CASE( slicer_test_ice ) BOOST_TEST_CHECKPOINT("cpp: " << cpp); fs::remove(cpp); const std::string doslice = stringbf( - "%s -I%s %s %s", + "%s -I%s --headerPrefix='\"\"' %s %s", root.parent_path() / "tool" / bjamout / "slicer", included, slice, cpp); @@ -78,11 +78,13 @@ BOOST_AUTO_TEST_CASE( slicer_test_ice ) const fs::path obj = fs::change_extension(tmp / base, ".o"); const std::string compile = stringbf( - "g++ -Os -fPIC -c -std=c++1y -fvisibility=hidden -I tmp -I /usr/include/adhocutil -I /usr/include/Ice -I /usr/include/IceUtil -I %s -I %s -I %s -I %s %s -o %s", + "g++ -Os -fPIC -c -std=c++1y -fvisibility=hidden -I%s -I tmp -I /usr/include/adhocutil -I /usr/include/Ice -I /usr/include/IceUtil -I %s -I %s -I %s -I %s -I %s %s -o %s", + root.parent_path() / "slicer", root / bjamout, root, included / bjamout, - root / "..", + root.parent_path(), + root.parent_path() / "slicer" / bjamout, cpp, obj); BOOST_TEST_CHECKPOINT("compile: " << compile); system(compile); diff --git a/slicer/test/serializers.cpp b/slicer/test/serializers.cpp index 8f569d8..9c4b406 100644 --- a/slicer/test/serializers.cpp +++ b/slicer/test/serializers.cpp @@ -2,8 +2,9 @@ #include <boost/test/unit_test.hpp> #include <tool/parser.h> -#include <slicer/slicer.h> -#include <slicer/modelParts.h> +#include <common.h> +#include <slicer.h> +#include <modelParts.h> #include <xml/serializer.h> #include <libxml2/libxml/parser.h> #include <json/serializer.h> @@ -493,10 +494,10 @@ BOOST_AUTO_TEST_CASE( xml_streams ) BOOST_AUTO_TEST_CASE( invalid_enum ) { Slicer::DeserializerPtr jdeserializer = new Slicer::JsonFileDeserializer(root / "initial" / "invalidEnum.json"); - BOOST_REQUIRE_THROW(Slicer::DeserializeAnyWith<TestModule::SomeNumbers>(jdeserializer), Slicer::InvalidEnumerationValue); + BOOST_REQUIRE_THROW(Slicer::DeserializeAnyWith<TestModule::SomeNumbers>(jdeserializer), Slicer::InvalidEnumerationSymbol); Slicer::DeserializerPtr xdeserializer = new Slicer::XmlFileDeserializer(root / "initial" / "invalidEnum.xml"); - BOOST_REQUIRE_THROW(Slicer::DeserializeAnyWith<TestModule::SomeNumbers>(xdeserializer), Slicer::InvalidEnumerationValue); + BOOST_REQUIRE_THROW(Slicer::DeserializeAnyWith<TestModule::SomeNumbers>(xdeserializer), Slicer::InvalidEnumerationSymbol); } BOOST_AUTO_TEST_SUITE_END(); diff --git a/slicer/tool/Jamfile.jam b/slicer/tool/Jamfile.jam index d34828c..5362382 100644 --- a/slicer/tool/Jamfile.jam +++ b/slicer/tool/Jamfile.jam @@ -1,4 +1,5 @@ lib Slice ; +lib Ice ; lib IceUtil ; lib po : : <name>boost_program_options ; lib adhocutil : : : : <include>/usr/include/adhocutil ; @@ -9,11 +10,13 @@ lib slicer-compiler : parser.cpp : <library>Slice + <library>Ice <library>IceUtil <library>boost_system <library>boost_filesystem <library>adhocutil <library>../slicer//slicer + <implicit-dependency>../slicer//slicer <include>.. : : <include>.. diff --git a/slicer/tool/parser.cpp b/slicer/tool/parser.cpp index d6cb6c0..1144391 100644 --- a/slicer/tool/parser.cpp +++ b/slicer/tool/parser.cpp @@ -1,5 +1,6 @@ #include "parser.h" -#include <slicer/metadata.h> +#include <metadata.h> +#include <common.h> #include <Slice/Parser.h> #include <Slice/Preprocessor.h> #include <boost/algorithm/string/predicate.hpp> @@ -118,7 +119,8 @@ namespace Slicer { fprintbf(cpp, "// Begin Slicer code\n\n"); fprintbf(cpp, "#include <%s>\n\n", fs::change_extension(topLevelFile.filename(), ".h").string()); - fprintbf(cpp, "#include <%s>\n\n", (headerPrefix / "modelPartsTypes.impl.h").string()); + fprintbf(cpp, "#include <%s>\n", (headerPrefix / "modelPartsTypes.impl.h").string()); + fprintbf(cpp, "#include <%s>\n\n", (headerPrefix / "common.h").string()); fprintbf(cpp, "namespace Slicer {\n"); return true; } @@ -391,7 +393,7 @@ namespace Slicer { s->scoped()); auto iname = metaDataValue("slicer:item:", s->getMetaData()); if (iname) { - fprintbf(cpp, "\tif (!name.empty() && name != \"%s\") { throw IncorrectElementName(); }\n", + fprintbf(cpp, "\tif (!name.empty() && name != \"%s\") { throw IncorrectElementName(name); }\n", *iname); } else { @@ -562,7 +564,7 @@ namespace Slicer { for (const auto & conversion : conversions) { auto split = metaDataSplit(conversion); if (split.size() < 3) { - throw std::runtime_error("conversion needs at least 3 parts type:toModelFunc:toExchangeFunc[:options]"); + throw CompilerError("conversion needs at least 3 parts type:toModelFunc:toExchangeFunc[:options]"); } for (auto & pi : {0, 1, 2}) { boost::algorithm::replace_all(split[pi], ".", "::"); @@ -582,13 +584,13 @@ namespace Slicer { Slicer::Execute() { if (cpp != NULL && !cppPath.empty()) { - throw std::runtime_error("Both file handle and path provided."); + throw CompilerError("Both file handle and path provided."); } FilePtr cppfile( cpp || cppPath.empty() ? cpp : fopen(cppPath.string(), "a"), cppPath.empty() ? fflush : fclose); if (!cppfile && !cppPath.empty()) { - throw std::runtime_error("Failed to open output file"); + throw CompilerError("Failed to open output file"); } cpp = cppfile.get(); Slicer::Slicer::Args args; @@ -601,7 +603,7 @@ namespace Slicer { FILE * cppHandle = icecpp->preprocess(false); if (cppHandle == NULL) { - throw std::runtime_error("preprocess failed"); + throw CompilerError("preprocess failed"); } Slice::UnitPtr u = Slice::Unit::createUnit(false, false, allowIcePrefix, false); @@ -609,11 +611,11 @@ namespace Slicer { int parseStatus = u->parse(slicePath.string(), cppHandle, false); if (!icecpp->close()) { - throw std::runtime_error("preprocess close failed"); + throw CompilerError("preprocess close failed"); } if (parseStatus == EXIT_FAILURE) { - throw std::runtime_error("unit parse failed"); + throw CompilerError("unit parse failed"); } u->visit(this, false); diff --git a/slicer/xml/Jamfile.jam b/slicer/xml/Jamfile.jam index 76b97af..28e8aab 100644 --- a/slicer/xml/Jamfile.jam +++ b/slicer/xml/Jamfile.jam @@ -1,4 +1,6 @@ import testing ; +lib pthread ; +lib Ice ; lib boost_system ; lib boost_filesystem ; lib boost_utf : : <name>boost_unit_test_framework ; @@ -7,14 +9,18 @@ lib adhocutil : : : : <include>/usr/include/adhocutil ; lib slicer-xml : [ glob *.cpp : test*.cpp ] + [ glob *.ice ] : <include>.. <library>boost_system <library>boost_filesystem + <library>pthread + <library>Ice <library>IceUtil <library>../..//libxmlpp <library>adhocutil <library>../slicer//slicer + <implicit-dependency>../slicer//slicer : : <library>../..//libxmlpp ; @@ -23,6 +29,7 @@ run testSpecifics.cpp : : : <define>BOOST_TEST_DYN_LINK <library>slicer-xml + <implicit-dependency>slicer-xml <library>boost_utf <library>../test//slicer-test <library>../test//common diff --git a/slicer/xml/serializer.cpp b/slicer/xml/serializer.cpp index c6c6c5f..c1e4023 100644 --- a/slicer/xml/serializer.cpp +++ b/slicer/xml/serializer.cpp @@ -1,4 +1,5 @@ #include "serializer.h" +#include <xmlExceptions.h> #include <slicer/metadata.h> #include <libxml++/document.h> #include <libxml++/parsers/domparser.h> @@ -19,11 +20,6 @@ namespace Slicer { const std::string md_bare = "xml:bare"; const auto defaultElementCreator = boost::bind(&xmlpp::Element::add_child, _1, _2, Glib::ustring()); - BadBooleanValue::BadBooleanValue(const Glib::ustring &) : - std::invalid_argument("Bad boolean value") - { - } - static const Glib::ustring TrueText("true"); static const Glib::ustring FalseText("false"); diff --git a/slicer/xml/serializer.h b/slicer/xml/serializer.h index 054b308..cdb20f5 100644 --- a/slicer/xml/serializer.h +++ b/slicer/xml/serializer.h @@ -6,11 +6,6 @@ #include <visibility.h> namespace Slicer { - class BadBooleanValue : public std::invalid_argument { - public: - BadBooleanValue(const Glib::ustring &); - }; - class DLL_PUBLIC XmlSerializer : public Serializer { protected: typedef boost::function<xmlpp::Element *(xmlpp::Element *, const Glib::ustring &)> ElementCreator; diff --git a/slicer/xml/testSpecifics.cpp b/slicer/xml/testSpecifics.cpp index 001cfb0..d20ea09 100644 --- a/slicer/xml/testSpecifics.cpp +++ b/slicer/xml/testSpecifics.cpp @@ -4,6 +4,7 @@ #include "serializer.h" #include <libxml++/parsers/domparser.h> #include <types.h> +#include <xmlExceptions.h> template <typename T, typename ... P> T diff --git a/slicer/xml/xmlExceptions.ice b/slicer/xml/xmlExceptions.ice new file mode 100644 index 0000000..e03fbe7 --- /dev/null +++ b/slicer/xml/xmlExceptions.ice @@ -0,0 +1,13 @@ +#ifndef SLICER_XML +#define SLICER_XML + +#include <common.ice> + +module Slicer { + exception BadBooleanValue extends DeserializerError { + string text; + }; +}; + +#endif + |