Mercurial > dedupe
changeset 73:c9447697609f
Fixed some issues with raise.
100% function code coverage for Exceptions.
| author | Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no> |
|---|---|
| date | Thu, 31 Jan 2013 20:33:01 +0100 |
| parents | b4185273c14a |
| children | 19d8825ec501 |
| files | CMakeLists.txt Exception/Exception.hpp Exception/IOException.cpp Exception/IOException.hpp Exception/InvalidDataException.cpp Exception/InvalidDataException.hpp Exception/NoSuchValueException.cpp Exception/NoSuchValueException.hpp Exception/PermissionException.cpp Exception/PermissionException.hpp Exception/SQLException.cpp Exception/SQLException.hpp Exception/TestIOException.cpp Exception/TestInvalidDataException.cpp Exception/TestNoSuchValueException.cpp Exception/TestPermissionException.cpp Exception/TestSQLException.cpp Exception/TestValueExistsException.cpp Exception/ValueExistsException.cpp Exception/ValueExistsException.hpp MemoryDBLink.cpp TestMemoryDBLink.cpp |
| diffstat | 22 files changed, 215 insertions(+), 11 deletions(-) [+] |
line wrap: on
line diff
--- a/CMakeLists.txt Thu Jan 31 17:26:21 2013 +0100 +++ b/CMakeLists.txt Thu Jan 31 20:33:01 2013 +0100 @@ -10,9 +10,10 @@ ENDIF() MACRO(NEW_TEST file) - ADD_EXECUTABLE(${file} ${file}.cpp ${TEST_SOURCES}) - ADD_TEST(${file} ${file}) - TARGET_LINK_LIBRARIES(${file} ${QT_LIBRARIES} ${Boost_LIBRARIES} ${COVERAGE_FLAGS}) + STRING(REPLACE "/" "_" TARGET ${file}) + ADD_EXECUTABLE(${TARGET} ${file}.cpp ${TEST_SOURCES}) + ADD_TEST(${TARGET} ${TARGET}) + TARGET_LINK_LIBRARIES(${TARGET} ${QT_LIBRARIES} ${Boost_LIBRARIES} ${COVERAGE_FLAGS}) ENDMACRO() SET(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/CMake_Modules/") @@ -52,7 +53,11 @@ DataController.cpp EditDistance.cpp Exception/IOException.cpp + Exception/NoSuchValueException.cpp + Exception/ValueExistsException.cpp + Exception/InvalidDataException.cpp Exception/SQLException.cpp + Exception/PermissionException.cpp FastBitDecoder.cpp FileDBLink.cpp HuffmanSet.cpp @@ -138,6 +143,12 @@ ) ENABLE_TESTING() +NEW_TEST(Exception/TestIOException) +NEW_TEST(Exception/TestInvalidDataException) +NEW_TEST(Exception/TestSQLException) +NEW_TEST(Exception/TestNoSuchValueException) +NEW_TEST(Exception/TestValueExistsException) +NEW_TEST(Exception/TestPermissionException) NEW_TEST(TestBitArray) NEW_TEST(TestBitDecoder) NEW_TEST(TestDBCache) @@ -145,6 +156,7 @@ NEW_TEST(TestFastBitDecoder) NEW_TEST(TestHuffmanString) NEW_TEST(TestRBTree) +NEW_TEST(TestMemoryDBLink) NEW_TEST(TestSqliteDBLink) #ADD_PRECOMPILED_HEADER(TestEditDistance TestFramework.hpp)
--- a/Exception/Exception.hpp Thu Jan 31 17:26:21 2013 +0100 +++ b/Exception/Exception.hpp Thu Jan 31 20:33:01 2013 +0100 @@ -1,6 +1,8 @@ #ifndef EXCEPTION_HPP #define EXCEPTION_HPP +#define NORETURN __attribute__ ((noreturn)) + #include <QtCore/QString> class Exception { @@ -12,11 +14,8 @@ { return errorMsg_; } - void raise() const - { - throw *this; - } + virtual void raise() const NORETURN = 0; protected: Exception(const string_t& errorMsg = string_t()) : errorMsg_(errorMsg) {}
--- a/Exception/IOException.cpp Thu Jan 31 17:26:21 2013 +0100 +++ b/Exception/IOException.cpp Thu Jan 31 20:33:01 2013 +0100 @@ -3,3 +3,8 @@ IOException::IOException(const QString& errorMsg) : Exception(errorMsg) { } + +void IOException::raise() const +{ + throw *this; +}
--- a/Exception/IOException.hpp Thu Jan 31 17:26:21 2013 +0100 +++ b/Exception/IOException.hpp Thu Jan 31 20:33:01 2013 +0100 @@ -6,6 +6,7 @@ class IOException : public Exception { public: IOException(const string_t& errMsg); + virtual void raise() const NORETURN; }; #endif //IOEXCEPTION_HPP
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Exception/InvalidDataException.cpp Thu Jan 31 20:33:01 2013 +0100 @@ -0,0 +1,11 @@ +#include "InvalidDataException.hpp" + +InvalidDataException::InvalidDataException(const QString& errorMsg) : + Exception(errorMsg) +{ +} + +void InvalidDataException::raise() const +{ + throw *this; +}
--- a/Exception/InvalidDataException.hpp Thu Jan 31 17:26:21 2013 +0100 +++ b/Exception/InvalidDataException.hpp Thu Jan 31 20:33:01 2013 +0100 @@ -5,6 +5,9 @@ class InvalidDataException : public Exception { +public: + InvalidDataException(const string_t& errMsg = string_t()); + virtual void raise() const; }; #endif //INVALIDDATAEXCEPTION_HPP
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Exception/NoSuchValueException.cpp Thu Jan 31 20:33:01 2013 +0100 @@ -0,0 +1,11 @@ +#include "NoSuchValueException.hpp" + +NoSuchValueException::NoSuchValueException(const QString& errorMsg) : + Exception(errorMsg) +{ +} + +void NoSuchValueException::raise() const +{ + throw *this; +}
--- a/Exception/NoSuchValueException.hpp Thu Jan 31 17:26:21 2013 +0100 +++ b/Exception/NoSuchValueException.hpp Thu Jan 31 20:33:01 2013 +0100 @@ -5,6 +5,9 @@ class NoSuchValueException : public Exception { +public: + NoSuchValueException(const string_t& errMsg = string_t()); + virtual void raise() const; }; #endif //NOSUCHVALUEEXCEPTION_HPP
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Exception/PermissionException.cpp Thu Jan 31 20:33:01 2013 +0100 @@ -0,0 +1,12 @@ +#include "PermissionException.hpp" + +PermissionException::PermissionException(const QString& errorMsg) + : IOException(errorMsg) +{ +} + +void PermissionException::raise() const +{ + throw *this; + __builtin_unreachable(); +}
--- a/Exception/PermissionException.hpp Thu Jan 31 17:26:21 2013 +0100 +++ b/Exception/PermissionException.hpp Thu Jan 31 20:33:01 2013 +0100 @@ -5,8 +5,8 @@ class PermissionException : public IOException { public: - PermissionException(const string_t& errorMsg) : IOException(errorMsg) {} - + PermissionException(const string_t& errorMsg = string_t()); + virtual void raise() const NORETURN; }; #endif //PERMISSIONEXCEPTION_HPP
--- a/Exception/SQLException.cpp Thu Jan 31 17:26:21 2013 +0100 +++ b/Exception/SQLException.cpp Thu Jan 31 20:33:01 2013 +0100 @@ -11,3 +11,8 @@ Exception(errorQuery.lastError().text() + ":" + errorQuery.lastQuery()) { } + +void SQLException::raise() const +{ + throw *this; +}
--- a/Exception/SQLException.hpp Thu Jan 31 17:26:21 2013 +0100 +++ b/Exception/SQLException.hpp Thu Jan 31 20:33:01 2013 +0100 @@ -8,6 +8,8 @@ public: SQLException(const string_t& errMsg); SQLException(const QSqlQuery& error); + + virtual void raise() const; }; #endif //IOEXCEPTION_HPP
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Exception/TestIOException.cpp Thu Jan 31 20:33:01 2013 +0100 @@ -0,0 +1,13 @@ +#include "Exception/IOException.hpp" +#include "TestFramework.hpp" + +BOOST_AUTO_TEST_CASE( Create ) +{ + try { + throw IOException("Hello"); + } + catch (IOException & e) { + BOOST_REQUIRE_EQUAL(e.toString(), "Hello"); + BOOST_REQUIRE_THROW(e.raise(), IOException); + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Exception/TestInvalidDataException.cpp Thu Jan 31 20:33:01 2013 +0100 @@ -0,0 +1,12 @@ +#include "Exception/InvalidDataException.hpp" +#include "TestFramework.hpp" + +BOOST_AUTO_TEST_CASE( Create ) +{ + try { + throw InvalidDataException(); + } + catch (InvalidDataException & e) { + BOOST_REQUIRE_THROW(e.raise(), InvalidDataException); + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Exception/TestNoSuchValueException.cpp Thu Jan 31 20:33:01 2013 +0100 @@ -0,0 +1,14 @@ +#include "Exception/NoSuchValueException.hpp" + +#include "TestFramework.hpp" + +BOOST_AUTO_TEST_CASE( Create ) +{ + try { + throw NoSuchValueException("Hello"); + } + catch (NoSuchValueException & e) { + BOOST_REQUIRE_EQUAL(e.toString(), "Hello"); + BOOST_REQUIRE_THROW(e.raise(), NoSuchValueException); + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Exception/TestPermissionException.cpp Thu Jan 31 20:33:01 2013 +0100 @@ -0,0 +1,12 @@ +#include "Exception/PermissionException.hpp" +#include "TestFramework.hpp" + +BOOST_AUTO_TEST_CASE( Create ) +{ + try { + throw PermissionException(); + } + catch (PermissionException & e) { + BOOST_REQUIRE_THROW(e.raise(), PermissionException); + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Exception/TestSQLException.cpp Thu Jan 31 20:33:01 2013 +0100 @@ -0,0 +1,26 @@ +#include "Exception/SQLException.hpp" + +#include <QtSql/QSqlQuery> + +#include "TestFramework.hpp" + +BOOST_AUTO_TEST_CASE( Create ) +{ + try { + throw SQLException("Hello"); + } + catch (SQLException & e) { + BOOST_REQUIRE_EQUAL(e.toString(), "Hello"); + BOOST_REQUIRE_THROW(e.raise(), SQLException); + } +} + +BOOST_AUTO_TEST_CASE( CreateWithSql ) +{ + try { + throw SQLException(QSqlQuery()); + } + catch (SQLException & e) { + BOOST_REQUIRE_THROW(e.raise(), SQLException); + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Exception/TestValueExistsException.cpp Thu Jan 31 20:33:01 2013 +0100 @@ -0,0 +1,12 @@ +#include "Exception/ValueExistsException.hpp" +#include "TestFramework.hpp" + +BOOST_AUTO_TEST_CASE( Create ) +{ + try { + throw ValueExistsException(); + } + catch (ValueExistsException & e) { + BOOST_REQUIRE_THROW(e.raise(), ValueExistsException); + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Exception/ValueExistsException.cpp Thu Jan 31 20:33:01 2013 +0100 @@ -0,0 +1,6 @@ +#include "ValueExistsException.hpp" + +void ValueExistsException::raise() const +{ + throw *this; +}
--- a/Exception/ValueExistsException.hpp Thu Jan 31 17:26:21 2013 +0100 +++ b/Exception/ValueExistsException.hpp Thu Jan 31 20:33:01 2013 +0100 @@ -5,6 +5,12 @@ class ValueExistsException : public Exception { +public: + ValueExistsException(const string_t& errorMsg = string_t()) + : Exception(errorMsg) + {} + + virtual void raise() const; }; #endif //VALUEEXISTSEXCEPTION_HPP
--- a/MemoryDBLink.cpp Thu Jan 31 17:26:21 2013 +0100 +++ b/MemoryDBLink.cpp Thu Jan 31 20:33:01 2013 +0100 @@ -1,5 +1,5 @@ #include "MemoryDBLink.hpp" - +#include "Exception/ValueExistsException.hpp" #include <QtCore/QStringList> void MemoryDBLink::addFile(const QString& path, qint64 size, @@ -22,7 +22,8 @@ void MemoryDBLink::addFile(const DBInfo& dbinfo) { if (!tryAddFile(dbinfo)) { - abort(); //Should throw exception + QString msg = QString("Trying to add '%1', which already exists").arg(dbinfo.path()); + throw ValueExistsException(msg); } }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TestMemoryDBLink.cpp Thu Jan 31 20:33:01 2013 +0100 @@ -0,0 +1,38 @@ +#include "MemoryDBLink.hpp" +#include "Exception/ValueExistsException.hpp" +#include "TestFramework.hpp" + +BOOST_AUTO_TEST_CASE( AddUpdateDeleteFile ) +{ + MemoryDBLink link; + + QDateTime time1; + QDateTime time2 = time1.addSecs(1); + + BOOST_REQUIRE_EQUAL(link.existsWithMtime("test", time1), FileDBLink::NONE); + link.addFile("test", 1, time1, "a"); + BOOST_REQUIRE_EQUAL(link.existsWithMtime("test", time1), FileDBLink::SAME); + BOOST_REQUIRE_THROW(link.addFile("test", 1, time1, "a"), + ValueExistsException); + + link.updateFile("test", 1, time2, "a"); + BOOST_REQUIRE_EQUAL(link.existsWithMtime("test", time1), FileDBLink::MTIME_DIFFERENT); + BOOST_REQUIRE_THROW(link.addFile("test", 1, time1, "a"), + ValueExistsException); + + /* + BOOST_REQUIRE(!map.find(k4)); + map.insert(k4); + BOOST_WARN_EQUAL(map.depth(), 2u); + BOOST_WARN_EQUAL(map.total_depth(), 8u); + BOOST_REQUIRE_EQUAL(map.size(), 4u); + BOOST_REQUIRE_EQUAL(map.optimal_depth(), 3u); + BOOST_REQUIRE_THROW(map.insert(k4), ValueExistsException); + BOOST_REQUIRE(map.find(k1)); + BOOST_REQUIRE_EQUAL(*map.find(k1), k1); + BOOST_REQUIRE(map.find(k2)); + BOOST_REQUIRE_EQUAL(*map.find(k2), k2); + BOOST_REQUIRE(map.find(k4)); + BOOST_REQUIRE_EQUAL(*map.find(k4), k4); + */ +}
