]> git.stg.codes - stg.git/commitdiff
Finalize transition to Boost.UnitTest.
authorMaksym Mamontov <madf@madf.info>
Fri, 19 Aug 2022 08:36:42 +0000 (11:36 +0300)
committerMaksym Mamontov <madf@madf.info>
Fri, 19 Aug 2022 08:36:42 +0000 (11:36 +0300)
30 files changed:
tests/CMakeLists.txt
tests/main.cpp [deleted file]
tests/raw_ip_packet_old.h
tests/test_conffiles.cpp
tests/test_disable_session_log.cpp
tests/test_fee_charge_rules.cpp
tests/test_filter_params_log.cpp
tests/test_raw_ip.cpp
tests/test_reconnect_on_tariff_change.cpp
tests/testauth.h
tests/testservices.h
tests/testsettings.h
tests/teststore.h
tests/testtariffs.h
tests/testusers.h
tests/tut/tut.hpp [deleted file]
tests/tut/tut_assert.hpp [deleted file]
tests/tut/tut_config.hpp [deleted file]
tests/tut/tut_console_reporter.hpp [deleted file]
tests/tut/tut_cppunit_reporter.hpp [deleted file]
tests/tut/tut_exception.hpp [deleted file]
tests/tut/tut_fpt.hpp [deleted file]
tests/tut/tut_macros.hpp [deleted file]
tests/tut/tut_main.hpp [deleted file]
tests/tut/tut_posix.hpp [deleted file]
tests/tut/tut_reporter.hpp [deleted file]
tests/tut/tut_restartable.hpp [deleted file]
tests/tut/tut_result.hpp [deleted file]
tests/tut/tut_runner.hpp [deleted file]
tests/tut/tut_xml_reporter.hpp [deleted file]

index 2f9283a80df31693673a2ff0504d8d3c53bc5ea8..aeacfcc48275c2a6f14d243d3a2e3b6805562d2f 100644 (file)
@@ -1,13 +1,3 @@
-set ( CPP_FILES main.cpp
-                test_conffiles.cpp
-                test_fee_charge_rules.cpp
-                test_reconnect_on_tariff_change.cpp
-                test_disable_session_log.cpp
-                test_filter_params_log.cpp
-                ../projects/stargazer/tariff_impl.cpp
-                ../projects/stargazer/user_impl.cpp
-                ../projects/stargazer/user_property.cpp )
-
 set ( THREADS_PREFER_PTHREAD_FLAG ON )
 find_package ( Threads REQUIRED )
 find_package ( Boost REQUIRED unit_test_framework )
 set ( THREADS_PREFER_PTHREAD_FLAG ON )
 find_package ( Threads REQUIRED )
 find_package ( Boost REQUIRED unit_test_framework )
@@ -36,10 +26,26 @@ target_link_libraries ( test_tariff crypto common Boost::unit_test_framework )
 target_include_directories ( test_tariff PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ../projects/stargazer )
 add_test ( tariff test_tariff )
 
 target_include_directories ( test_tariff PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ../projects/stargazer )
 add_test ( tariff test_tariff )
 
-add_executable ( tests ${CPP_FILES} )
-
-target_link_libraries ( tests conffiles crypto logger scriptexecuter common Threads::Threads )
-
-target_include_directories ( tests PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ../projects/stargazer )
-
-add_test ( tests tests )
+add_executable ( test_conffiles test_conffiles.cpp )
+target_link_libraries ( test_conffiles conffiles Boost::unit_test_framework )
+add_test ( stgconffiles test_conffiles )
+
+add_executable ( test_fee_charge_rules test_fee_charge_rules.cpp ../projects/stargazer/user_impl.cpp ../projects/stargazer/tariff_impl.cpp ../projects/stargazer/user_property.cpp )
+target_link_libraries ( test_fee_charge_rules logger scriptexecuter common Boost::unit_test_framework )
+target_include_directories ( test_fee_charge_rules PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ../projects/stargazer )
+add_test ( fee_charge_rules test_fee_charge_rules )
+
+add_executable ( test_reconnect_on_tariff_change test_reconnect_on_tariff_change.cpp ../projects/stargazer/user_impl.cpp ../projects/stargazer/tariff_impl.cpp ../projects/stargazer/user_property.cpp )
+target_link_libraries ( test_reconnect_on_tariff_change logger scriptexecuter common Boost::unit_test_framework )
+target_include_directories ( test_reconnect_on_tariff_change PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ../projects/stargazer )
+add_test ( reconnect_on_tariff_change test_reconnect_on_tariff_change )
+
+add_executable ( test_disable_session_log test_disable_session_log.cpp ../projects/stargazer/user_impl.cpp ../projects/stargazer/tariff_impl.cpp ../projects/stargazer/user_property.cpp )
+target_link_libraries ( test_disable_session_log logger scriptexecuter common Boost::unit_test_framework )
+target_include_directories ( test_disable_session_log PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ../projects/stargazer )
+add_test ( disable_session_log test_disable_session_log )
+
+add_executable ( test_filter_params_log test_filter_params_log.cpp ../projects/stargazer/user_impl.cpp ../projects/stargazer/tariff_impl.cpp ../projects/stargazer/user_property.cpp )
+target_link_libraries ( test_filter_params_log logger scriptexecuter common Boost::unit_test_framework )
+target_include_directories ( test_filter_params_log PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ../projects/stargazer )
+add_test ( filter_params_log test_filter_params_log )
diff --git a/tests/main.cpp b/tests/main.cpp
deleted file mode 100644 (file)
index 8827d6d..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-#include "tut/tut.hpp"
-#include "tut/tut_reporter.hpp"
-
-namespace tut
-{
-    test_runner_singleton runner;
-}
-
-volatile time_t stgTime = 0;
-
-int main()
-{
-    tut::reporter reporter;
-    tut::runner.get().set_callback(&reporter);
-
-    tut::runner.get().run_tests();
-
-    return !reporter.all_ok();
-}
index adf91a090ad9c6d9eeb56d8a67ee08eaed409999..7c4a2a473ee236af89e94628bcaf5f74baeb31e3 100644 (file)
-#ifndef RAW_IP_PACKET_OLD_H
-#define RAW_IP_PACKET_OLD_H
+#pragma once
 
 
-#include <netinet/in.h> // for htons
-//#include <netinet/ip.h> // for struct ip
+#include "stg/const.h"
 
 #include <cstring>
 
 #include <cstring>
+#include <cstdint>
 
 
-#include "stg/const.h"
-
-#define IPv4 (2)
+#include <netinet/in.h> // for htons
 
 enum { pcktSizeOLD = 68 }; //60(max) ip + 8 udp or tcp (part of tcp or udp header to ports)
 //-----------------------------------------------------------------------------
 
 enum { pcktSizeOLD = 68 }; //60(max) ip + 8 udp or tcp (part of tcp or udp header to ports)
 //-----------------------------------------------------------------------------
-struct RAW_PACKET_OLD
+struct RawPacketOld
 {
 {
-    RAW_PACKET_OLD()
+    RawPacketOld()
         : dataLen(-1)
     {
         : dataLen(-1)
     {
-    memset(pckt, 0, pcktSizeOLD);
+        memset(pckt, 0, pcktSizeOLD);
     }
 
     }
 
-    RAW_PACKET_OLD(const RAW_PACKET_OLD & rp)
+    RawPacketOld(const RawPacketOld& rp)
         : dataLen(rp.dataLen)
     {
         : dataLen(rp.dataLen)
     {
-    memcpy(pckt, rp.pckt, pcktSizeOLD);
+        memcpy(pckt, rp.pckt, pcktSizeOLD);
     }
 
     }
 
-uint16_t    GetIPVersion() const;
-uint8_t     GetHeaderLen() const;
-uint8_t     GetProto() const;
-uint32_t    GetLen() const;
-uint32_t    GetSrcIP() const;
-uint32_t    GetDstIP() const;
-uint16_t    GetSrcPort() const;
-uint16_t    GetDstPort() const;
-
-uint8_t     pckt[pcktSizeOLD];         // îÁÞÁÌÏ ÐÁËÅÔÁ ÚÁÈ×ÁÞÅÎÎÏÇÏ ÉÚ ÓÅÔÉ
-int32_t     dataLen;                // äÌÉÎÁ IP ÐÁËÅÔÁ. åÓÌÉ -1, ÔÏ ÉÓÐÏÌØÚÏ×ÁÔØ ÄÌÉÎÕ ÉÚ ÚÁÇÏÌÏ×ËÁ ÓÁÍÏÇÏ ÐÁËÅÔÁ.
+    uint16_t GetIPVersion() const
+    {
+        return pckt[0] >> 4;
+    }
+    uint8_t  GetHeaderLen() const
+    {
+        return (pckt[0] & 0x0F) * 4;
+    }
+    uint8_t  GetProto() const
+    {
+        return pckt[9];
+    }
+    uint32_t GetLen() const
+    {
+        if (dataLen != -1)
+            return dataLen;
+        return ntohs(*reinterpret_cast<const uint16_t*>(pckt + 2));
+    }
+    uint32_t GetSrcIP() const
+    {
+        return *reinterpret_cast<const uint32_t*>(pckt + 12);
+    }
+    uint32_t GetDstIP() const
+    {
+        return *reinterpret_cast<const uint32_t*>(pckt + 16);
+    }
+    uint16_t GetSrcPort() const
+    {
+        if (GetProto() == 1) // for icmp proto return port 0
+            return 0;
+        return ntohs(*reinterpret_cast<const uint16_t*>(pckt + GetHeaderLen()));
+    }
+    uint16_t GetDstPort() const
+    {
+        if (GetProto() == 1) // for icmp proto return port 0
+            return 0;
+        return ntohs(*reinterpret_cast<const uint16_t*>(pckt + GetHeaderLen() + 2));
+    }
+
+    uint8_t  pckt[pcktSizeOLD];         // îÁÞÁÌÏ ÐÁËÅÔÁ ÚÁÈ×ÁÞÅÎÎÏÇÏ ÉÚ ÓÅÔÉ
+    int32_t  dataLen;                // äÌÉÎÁ IP ÐÁËÅÔÁ. åÓÌÉ -1, ÔÏ ÉÓÐÏÌØÚÏ×ÁÔØ ÄÌÉÎÕ ÉÚ ÚÁÇÏÌÏ×ËÁ ÓÁÍÏÇÏ ÐÁËÅÔÁ.
 };
 //-----------------------------------------------------------------------------
 };
 //-----------------------------------------------------------------------------
-inline uint16_t RAW_PACKET_OLD::GetIPVersion() const
-{
-return pckt[0] >> 4;
-}
-//-----------------------------------------------------------------------------
-inline uint8_t RAW_PACKET_OLD::GetHeaderLen() const
+inline bool operator==(const RawPacketOld& lhs, const RawPacketOld& rhs)
 {
 {
-return (pckt[0] & 0x0F) * 4;
-}
-//-----------------------------------------------------------------------------
-inline uint8_t RAW_PACKET_OLD::GetProto() const
-{
-return pckt[9];
-}
-//-----------------------------------------------------------------------------
-inline uint32_t RAW_PACKET_OLD::GetLen() const
-{
-if (dataLen != -1)
-    return dataLen;
-return ntohs(*(uint16_t*)(pckt + 2));
-}
-//-----------------------------------------------------------------------------
-inline uint32_t RAW_PACKET_OLD::GetSrcIP() const
-{
-return *(uint32_t*)(pckt + 12);
-}
-//-----------------------------------------------------------------------------
-inline uint32_t RAW_PACKET_OLD::GetDstIP() const
-{
-return *(uint32_t*)(pckt + 16);
-}
-//-----------------------------------------------------------------------------
-inline uint16_t RAW_PACKET_OLD::GetSrcPort() const
-{
-if (GetProto() == 1) // for icmp proto return port 0
-    return 0;
-return ntohs(*((uint16_t*)(pckt + GetHeaderLen())));
-}
-//-----------------------------------------------------------------------------
-inline uint16_t RAW_PACKET_OLD::GetDstPort() const
-{
-if (GetProto() == 1) // for icmp proto return port 0
-    return 0;
-return ntohs(*((uint16_t*)(pckt + GetHeaderLen() + 2)));
-}
-//-----------------------------------------------------------------------------
-inline bool operator==(const RAW_PACKET_OLD & lhs, const RAW_PACKET_OLD & rhs) 
-{
-if (lhs.GetSrcIP() != rhs.GetSrcIP())
-    return false;
+    if (lhs.GetSrcIP() != rhs.GetSrcIP())
+        return false;
 
 
-if (lhs.GetDstIP() != rhs.GetDstIP())
-    return false;
+    if (lhs.GetDstIP() != rhs.GetDstIP())
+        return false;
 
 
-if (lhs.GetSrcPort() != rhs.GetSrcPort())
-    return false;
+    if (lhs.GetSrcPort() != rhs.GetSrcPort())
+        return false;
 
 
-if (lhs.GetDstPort() != rhs.GetDstPort())
-    return false;
+    if (lhs.GetDstPort() != rhs.GetDstPort())
+        return false;
 
 
-if (lhs.GetProto() != rhs.GetProto())
-    return false;
+    if (lhs.GetProto() != rhs.GetProto())
+        return false;
 
 
-return true;
+    return true;
 }
 //-----------------------------------------------------------------------------
 }
 //-----------------------------------------------------------------------------
-inline bool operator<(const RAW_PACKET_OLD & lhs, const RAW_PACKET_OLD & rhs)
+inline bool operator<(const RawPacketOld& lhs, const RawPacketOld& rhs)
 {
 {
-if (lhs.GetSrcIP() < rhs.GetSrcIP()) 
-    return true;
-if (lhs.GetSrcIP() > rhs.GetSrcIP()) 
-    return false;
+    if (lhs.GetSrcIP() < rhs.GetSrcIP())
+        return true;
+    if (lhs.GetSrcIP() > rhs.GetSrcIP())
+        return false;
 
 
-if (lhs.GetDstIP() < rhs.GetDstIP()) 
-    return true;
-if (lhs.GetDstIP() > rhs.GetDstIP()) 
-    return false;
+    if (lhs.GetDstIP() < rhs.GetDstIP())
+        return true;
+    if (lhs.GetDstIP() > rhs.GetDstIP())
+        return false;
 
 
-if (lhs.GetSrcPort() < rhs.GetSrcPort()) 
-    return true;
-if (lhs.GetSrcPort() > rhs.GetSrcPort()) 
-    return false;
+    if (lhs.GetSrcPort() < rhs.GetSrcPort())
+        return true;
+    if (lhs.GetSrcPort() > rhs.GetSrcPort())
+        return false;
 
 
-if (lhs.GetDstPort() < rhs.GetDstPort()) 
-    return true;
-if (lhs.GetDstPort() > rhs.GetDstPort()) 
-    return false;
+    if (lhs.GetDstPort() < rhs.GetDstPort())
+        return true;
+    if (lhs.GetDstPort() > rhs.GetDstPort())
+        return false;
 
 
-if (lhs.GetProto() < rhs.GetProto()) 
-    return true;
+    if (lhs.GetProto() < rhs.GetProto())
+        return true;
 
 
-/*
-Last compare
+    /*
+    Last compare
 
 
-if (lhs.GetProto() > rhs.GetProto())
-    return false;
+    if (lhs.GetProto() > rhs.GetProto())
+        return false;
 
 
-don't needed
-*/
+    don't needed
+    */
 
 
-return false;
+    return false;
 }
 }
-//-----------------------------------------------------------------------------
-
-#endif
index 5936ad36552456c5bbbdefb304e80596554405ed..688ad346a77f8eb580babb25bd0140d5941af777 100644 (file)
@@ -1,96 +1,89 @@
-#include <unistd.h> // unlink
+#define BOOST_TEST_MODULE STGConfFiles
+
+#include "stg/conffiles.h"
+
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wold-style-cast"
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#pragma GCC diagnostic ignored "-Wsign-compare"
+#pragma GCC diagnostic ignored "-Wparentheses"
+#include <boost/test/unit_test.hpp>
+#pragma GCC diagnostic pop
 
 #include <string>
 #include <fstream>
 
 
 #include <string>
 #include <fstream>
 
-#include "tut/tut.hpp"
+#include <unistd.h> // unlink
 
 
-#include "stg/conffiles.h"
+BOOST_AUTO_TEST_SUITE(ConfFiles)
 
 
-namespace tut
+BOOST_AUTO_TEST_CASE(ReadWrite)
 {
 {
-    struct conffile_data {
-    };
+    {
+        CONFIGFILE cf("/tmp/test.cf", true);
 
 
-    typedef test_group<conffile_data> tg;
-    tg conffile_test_group("CONIGFILE tests group");
+        BOOST_CHECK_EQUAL(cf.Error(), 0);
 
 
-    typedef tg::object testobject;
+        cf.WriteString("a", "a-string");
+        cf.WriteInt("b", 0);
+        cf.WriteDouble("e", 2.718281828);
 
 
-    template<>
-    template<>
-    void testobject::test<1>()
-    {
-        set_test_name("Check read/write");
+        BOOST_CHECK_EQUAL(cf.Flush(), 0);
+    }
 
 
-        {
-            CONFIGFILE cf("/tmp/test.cf", true);
+    {
+        CONFIGFILE cf("/tmp/test.cf");
 
 
-            ensure_equals("Correct construction", cf.Error(), 0);
+        BOOST_CHECK_EQUAL(cf.Error(), 0);
 
 
-            cf.WriteString("a", "a-string");
-            cf.WriteInt("b", 0);
-            cf.WriteDouble("e", 2.718281828);
+        std::string svalue;
+        BOOST_CHECK_EQUAL(cf.ReadString("a", &svalue, "a-default"), 0);
+        int ivalue;
+        BOOST_CHECK_EQUAL(cf.ReadInt("b", &ivalue, -1), 0);
+        double dvalue = 0;
+        BOOST_CHECK_EQUAL(cf.ReadDouble("e", &dvalue, 0), 0);
 
 
-            ensure_equals("Correct data flushing", cf.Flush(), 0);
-        }
+        BOOST_CHECK_EQUAL(svalue, "a-string");
+        BOOST_CHECK_EQUAL(ivalue, 0);
+        BOOST_CHECK(dvalue != 0);
+    }
 
 
-        {
-            CONFIGFILE cf("/tmp/test.cf");
+    BOOST_CHECK_EQUAL(unlink("/tmp/test.cf"), 0);
+}
 
 
-            ensure_equals("Correct construction (part 2)", cf.Error(), 0);
-            
-            std::string svalue;
-            ensure_equals("Correct reading 'a' param as string", cf.ReadString("a", &svalue, "a-default"), 0);
-            int ivalue;
-            ensure_equals("Correct reading 'b' param as integer", cf.ReadInt("b", &ivalue, -1), 0);
-            double dvalue = 0;
-            ensure_equals("Correct reading 'e' param as double", cf.ReadDouble("e", &dvalue, 0), 0);
+BOOST_AUTO_TEST_CASE(EmptyLinesAndComments)
+{
+    {
+        std::ofstream f("/tmp/test.cf");
 
 
-            ensure_equals("Correct 'a' value", svalue, "a-string");
-            ensure_equals("Correct 'b' value", ivalue, 0);
-            ensure("Correct 'e' value", dvalue != 0);
-        }
+        BOOST_CHECK(static_cast<bool>(f));
 
 
-        ensure_equals("Correct temporary file unlinking", unlink("/tmp/test.cf"), 0);
+        f << "\n"
+          << "a=a-string# a string\n"
+          << "              \n"
+          << "b=0\n"
+          << "#abc\n"
+          << "e=2.718281828\n";
     }
 
     }
 
-    template<>
-    template<>
-    void testobject::test<2>()
     {
     {
-        set_test_name("Check empty lines and comments");
-
-        {
-            std::ofstream f("/tmp/test.cf");
-
-            ensure("Correct construction (part 3)", static_cast<bool>(f));
-
-            f << "\n"
-              << "a=a-string# a string\n"
-              << "              \n"
-              << "b=0\n"
-              << "#abc\n"
-              << "e=2.718281828\n";
-        }
-
-        {
-            CONFIGFILE cf("/tmp/test.cf");
-
-            ensure_equals("Correct construction (part 4)", cf.Error(), 0);
-            
-            std::string svalue;
-            ensure_equals("Correct reading 'a' param as string", cf.ReadString("a", &svalue, "a-default"), 0);
-            int ivalue;
-            ensure_equals("Correct reading 'b' param as integer", cf.ReadInt("b", &ivalue, -1), 0);
-            double dvalue = 0;
-            ensure_equals("Correct reading 'e' param as double", cf.ReadDouble("e", &dvalue, 0), 0);
-
-            ensure_equals("Correct 'a' value", svalue, "a-string");
-            ensure_equals("Correct 'b' value", ivalue, 0);
-            ensure("Correct 'e' value", dvalue != 0);
-        }
-
-        ensure_equals("Correct temporary file unlinking", unlink("/tmp/test.cf"), 0);
+        CONFIGFILE cf("/tmp/test.cf");
+
+        BOOST_CHECK_EQUAL(cf.Error(), 0);
+
+        std::string svalue;
+        BOOST_CHECK_EQUAL(cf.ReadString("a", &svalue, "a-default"), 0);
+        int ivalue;
+        BOOST_CHECK_EQUAL(cf.ReadInt("b", &ivalue, -1), 0);
+        double dvalue = 0;
+        BOOST_CHECK_EQUAL(cf.ReadDouble("e", &dvalue, 0), 0);
+
+        BOOST_CHECK_EQUAL(svalue, "a-string");
+        BOOST_CHECK_EQUAL(ivalue, 0);
+        BOOST_CHECK(dvalue != 0);
     }
     }
+
+    BOOST_CHECK_EQUAL(unlink("/tmp/test.cf"), 0);
 }
 }
+
+BOOST_AUTO_TEST_SUITE_END()
index 449f1f7841d6b562d6de83f36136e2ff13a7c2f6..7dac14ed79ffab45412c93d461ce801823c2466d 100644 (file)
@@ -1,4 +1,4 @@
-#include "tut/tut.hpp"
+#define BOOST_TEST_MODULE STGAdminConf
 
 #include "stg/admin.h"
 #include "stg/user_property.h"
 
 #include "stg/admin.h"
 #include "stg/user_property.h"
 #include "testusers.h"
 #include "testservices.h"
 
 #include "testusers.h"
 #include "testservices.h"
 
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wold-style-cast"
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#pragma GCC diagnostic ignored "-Wsign-compare"
+#pragma GCC diagnostic ignored "-Wparentheses"
+#include <boost/test/unit_test.hpp>
+#pragma GCC diagnostic pop
+
+volatile time_t stgTime = 0;
+
 namespace
 {
 
 namespace
 {
 
-class TEST_STORE_LOCAL : public TEST_STORE {
-public:
-    TEST_STORE_LOCAL()
-        : connects(0),
-          disconnects(0)
-    {}
-    int WriteUserConnect(const std::string & /*login*/, uint32_t /*ip*/) const override { ++connects; return 0; }
-
-    int WriteUserDisconnect(const std::string & /*login*/,
-                            const STG::DirTraff & /*up*/,
-                            const STG::DirTraff & /*down*/,
-                            const STG::DirTraff & /*sessionUp*/,
-                            const STG::DirTraff & /*sessionDown*/,
-                            double /*cash*/,
-                            double /*freeMb*/,
-                            const std::string & /*reason*/) const override { ++disconnects; return 0; }
-
-    size_t GetConnects() const { return connects; }
-    size_t GetDisconnects() const { return disconnects; }
-
-private:
-    mutable size_t connects;
-    mutable size_t disconnects;
-};
-
-class TEST_SETTINGS_LOCAL : public TEST_SETTINGS {
+class Store : public TestStore
+{
     public:
     public:
-        TEST_SETTINGS_LOCAL(bool _disableSessionLog)
-            : disableSessionLog(_disableSessionLog)
+        Store()
+            : m_connects(0),
+              m_disconnects(0)
         {}
         {}
+        int WriteUserConnect(const std::string& /*login*/, uint32_t /*ip*/) const override { ++m_connects; return 0; }
 
 
-        bool GetDisableSessionLog() const { return disableSessionLog; }
+        int WriteUserDisconnect(const std::string& /*login*/,
+                                const STG::DirTraff& /*up*/,
+                                const STG::DirTraff& /*down*/,
+                                const STG::DirTraff& /*sessionUp*/,
+                                const STG::DirTraff& /*sessionDown*/,
+                                double /*cash*/,
+                                double /*freeMb*/,
+                                const std::string& /*reason*/) const override { ++m_disconnects; return 0; }
+
+        size_t connects() const { return m_connects; }
+        size_t disconnects() const { return m_disconnects; }
 
     private:
 
     private:
-        bool disableSessionLog;
+        mutable size_t m_connects;
+        mutable size_t m_disconnects;
 };
 
 };
 
-}
-
-namespace tut
+class Settings : public TestSettings
 {
 {
-    struct disable_session_log_data {
-    };
-
-    typedef test_group<disable_session_log_data> tg;
-    tg disable_session_log_test_group("Disable session log tests group");
+    public:
+        Settings(bool disableSessionLog)
+            : m_disableSessionLog(disableSessionLog)
+        {}
 
 
-    typedef tg::object testobject;
+        bool GetDisableSessionLog() const { return m_disableSessionLog; }
 
 
-    template<>
-    template<>
-    void testobject::test<1>()
-    {
-        set_test_name("Check normal behaviour");
+    private:
+        bool m_disableSessionLog;
+};
 
 
-        TEST_SETTINGS_LOCAL settings(false);
-        TEST_TARIFFS tariffs;
-        STG::Admin admin(STG::Priv(0xFFFF), {}, {});
-        TEST_STORE_LOCAL store;
-        TEST_AUTH auth;
-        TEST_USERS users;
-        TEST_SERVICES services;
-        STG::UserImpl user(&settings, &store, &tariffs, &admin, &users, services);
+}
 
 
-        STG::UserProperty<STG::UserIPs> & ips(user.GetProperties().ips);
+BOOST_AUTO_TEST_SUITE(DisableSessionLog)
 
 
-        ips = STG::UserIPs::parse("*");
+BOOST_AUTO_TEST_CASE(NormalBehavior)
+{
+    Settings settings(false);
+    TestTariffs tariffs;
+    STG::Admin admin(STG::Priv(0xFFFF), {}, {});
+    Store store;
+    TestAuth auth;
+    TestUsers users;
+    TestServices services;
+    STG::UserImpl user(&settings, &store, &tariffs, &admin, &users, services);
 
 
-        ensure_equals("user.connected = false", user.GetConnected(), false);
-        ensure_equals("connects = 0", store.GetConnects(), static_cast<size_t>(0));
-        ensure_equals("disconnects = 0", store.GetDisconnects(), static_cast<size_t>(0));
+    STG::UserProperty<STG::UserIPs> & ips(user.GetProperties().ips);
 
 
-        user.Authorize(inet_strington("127.0.0.1"), 0, &auth);
-        user.Run();
+    ips = STG::UserIPs::parse("*");
 
 
-        ensure_equals("user.authorised_by = true", user.IsAuthorizedBy(&auth), true);
+    BOOST_CHECK_EQUAL(user.GetConnected(), false);
+    BOOST_CHECK_EQUAL(store.connects(), static_cast<size_t>(0));
+    BOOST_CHECK_EQUAL(store.disconnects(), static_cast<size_t>(0));
 
 
-        ensure_equals("user.connected = true", user.GetConnected(), true);
-        ensure_equals("connects = 1", store.GetConnects(), static_cast<size_t>(1));
-        ensure_equals("disconnects = 0", store.GetDisconnects(), static_cast<size_t>(0));
+    user.Authorize(inet_strington("127.0.0.1"), 0, &auth);
+    user.Run();
 
 
-        user.Unauthorize(&auth);
-        user.Run();
+    BOOST_CHECK_EQUAL(user.IsAuthorizedBy(&auth), true);
 
 
-        ensure_equals("user.authorised_by = false", user.IsAuthorizedBy(&auth), false);
+    BOOST_CHECK_EQUAL(user.GetConnected(), true);
+    BOOST_CHECK_EQUAL(store.connects(), static_cast<size_t>(1));
+    BOOST_CHECK_EQUAL(store.disconnects(), static_cast<size_t>(0));
 
 
-        ensure_equals("user.connected = false", user.GetConnected(), false);
-        ensure_equals("connects = 1", store.GetConnects(), static_cast<size_t>(1));
-        ensure_equals("disconnects = 1", store.GetDisconnects(), static_cast<size_t>(1));
-    }
+    user.Unauthorize(&auth);
+    user.Run();
 
 
+    BOOST_CHECK_EQUAL(user.IsAuthorizedBy(&auth), false);
 
 
-    template<>
-    template<>
-    void testobject::test<2>()
-    {
-        set_test_name("Check disabled session log");
+    BOOST_CHECK_EQUAL(user.GetConnected(), false);
+    BOOST_CHECK_EQUAL(store.connects(), static_cast<size_t>(1));
+    BOOST_CHECK_EQUAL(store.disconnects(), static_cast<size_t>(1));
+}
 
 
-        TEST_SETTINGS_LOCAL settings(true);
-        TEST_TARIFFS tariffs;
-        STG::Admin admin(STG::Priv(0xFFFF), {}, {});
-        TEST_STORE_LOCAL store;
-        TEST_AUTH auth;
-        TEST_USERS users;
-        TEST_SERVICES services;
-        STG::UserImpl user(&settings, &store, &tariffs, &admin, &users, services);
+BOOST_AUTO_TEST_CASE(DisabledSessionLog)
+{
+    Settings settings(true);
+    TestTariffs tariffs;
+    STG::Admin admin(STG::Priv(0xFFFF), {}, {});
+    Store store;
+    TestAuth auth;
+    TestUsers users;
+    TestServices services;
+    STG::UserImpl user(&settings, &store, &tariffs, &admin, &users, services);
 
 
-        STG::UserProperty<STG::UserIPs> & ips(user.GetProperties().ips);
+    STG::UserProperty<STG::UserIPs> & ips(user.GetProperties().ips);
 
 
-        ips = STG::UserIPs::parse("*");
+    ips = STG::UserIPs::parse("*");
 
 
-        ensure_equals("user.connected = false", user.GetConnected(), false);
-        ensure_equals("connects = 0", store.GetConnects(), static_cast<size_t>(0));
-        ensure_equals("disconnects = 0", store.GetDisconnects(), static_cast<size_t>(0));
+    BOOST_CHECK_EQUAL(user.GetConnected(), false);
+    BOOST_CHECK_EQUAL(store.connects(), static_cast<size_t>(0));
+    BOOST_CHECK_EQUAL(store.disconnects(), static_cast<size_t>(0));
 
 
-        user.Authorize(inet_strington("127.0.0.1"), 0, &auth);
-        user.Run();
+    user.Authorize(inet_strington("127.0.0.1"), 0, &auth);
+    user.Run();
 
 
-        ensure_equals("user.authorised_by = true", user.IsAuthorizedBy(&auth), true);
+    BOOST_CHECK_EQUAL(user.IsAuthorizedBy(&auth), true);
 
 
-        ensure_equals("user.connected = true", user.GetConnected(), true);
-        ensure_equals("connects = 0", store.GetConnects(), static_cast<size_t>(0));
-        ensure_equals("disconnects = 0", store.GetDisconnects(), static_cast<size_t>(0));
+    BOOST_CHECK_EQUAL(user.GetConnected(), true);
+    BOOST_CHECK_EQUAL(store.connects(), static_cast<size_t>(0));
+    BOOST_CHECK_EQUAL(store.disconnects(), static_cast<size_t>(0));
 
 
-        user.Unauthorize(&auth);
-        user.Run();
+    user.Unauthorize(&auth);
+    user.Run();
 
 
-        ensure_equals("user.authorised_by = false", user.IsAuthorizedBy(&auth), false);
+    BOOST_CHECK_EQUAL(user.IsAuthorizedBy(&auth), false);
 
 
-        ensure_equals("user.connected = false", user.GetConnected(), false);
-        ensure_equals("connects = 0", store.GetConnects(), static_cast<size_t>(0));
-        ensure_equals("disconnects = 0", store.GetDisconnects(), static_cast<size_t>(0));
-    }
+    BOOST_CHECK_EQUAL(user.GetConnected(), false);
+    BOOST_CHECK_EQUAL(store.connects(), static_cast<size_t>(0));
+    BOOST_CHECK_EQUAL(store.disconnects(), static_cast<size_t>(0));
 }
 }
+
+BOOST_AUTO_TEST_SUITE_END()
index 1fe1542fce7a9782c87b98236dc95ebe69b2eb18..9dac157587e8408f2d4114fe3498a202cf10ced6 100644 (file)
@@ -1,4 +1,4 @@
-#include "tut/tut.hpp"
+#define BOOST_TEST_MODULE STGFeeChargeRules
 
 #include "stg/admin.h"
 #include "stg/user_property.h"
 
 #include "stg/admin.h"
 #include "stg/user_property.h"
 #include "teststore.h"
 #include "testservices.h"
 
 #include "teststore.h"
 #include "testservices.h"
 
-namespace tut
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wold-style-cast"
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#pragma GCC diagnostic ignored "-Wsign-compare"
+#pragma GCC diagnostic ignored "-Wparentheses"
+#include <boost/test/unit_test.hpp>
+#pragma GCC diagnostic pop
+
+volatile time_t stgTime = 0;
+
+namespace
+{
+
+class Settings : public TestSettings
+{
+    public:
+        Settings(unsigned feeChargeType)
+            : m_feeChargeType(feeChargeType)
+        {}
+
+        unsigned GetFeeChargeType() const { return m_feeChargeType; }
+
+    private:
+        unsigned m_feeChargeType;
+};
+
+}
+
+BOOST_AUTO_TEST_SUITE(FeeChargeRules)
+
+BOOST_AUTO_TEST_CASE(ClassicRules)
+{
+    Settings settings(0);
+    TestTariffs tariffs;
+    STG::Admin admin(STG::Priv(0xFFFF), {}, {});
+    TestStore store;
+    TestServices services;
+    STG::UserImpl user(&settings, &store, &tariffs, &admin, NULL, services);
+
+    STG::UserProperty<double>& cash = user.GetProperties().cash;
+    STG::UserProperty<std::string>& tariffName = user.GetProperties().tariffName;
+
+    BOOST_CHECK_EQUAL(user.GetProperties().cash, 0);
+    cash = 100;
+    BOOST_CHECK_EQUAL(user.GetProperties().cash, 100);
+
+    tariffs.SetFee(50);
+    tariffName = "test";
+    BOOST_CHECK_EQUAL(user.GetProperties().tariffName.ConstData(), "test");
+    user.ProcessDayFee();
+    BOOST_CHECK_EQUAL(user.GetProperties().cash, 50);
+    user.ProcessDayFee();
+    BOOST_CHECK_EQUAL(user.GetProperties().cash, 0);
+    user.ProcessDayFee();
+    BOOST_CHECK_EQUAL(user.GetProperties().cash, -50);
+    user.ProcessDayFee();
+    BOOST_CHECK_EQUAL(user.GetProperties().cash, -100);
+}
+
+BOOST_AUTO_TEST_CASE(PositiveCashRules)
 {
 {
-    struct fee_charge_rules_data {
-    };
-
-    typedef test_group<fee_charge_rules_data> tg;
-    tg fee_charge_rules_test_group("Fee charge rules tests group");
-
-    typedef tg::object testobject;
-
-    class TEST_SETTINGS_LOCAL : public TEST_SETTINGS {
-        public:
-            TEST_SETTINGS_LOCAL(unsigned _feeChargeType)
-                : feeChargeType(_feeChargeType)
-            {}
-
-            unsigned GetFeeChargeType() const { return feeChargeType; }
-
-        private:
-            unsigned feeChargeType;
-    };
-
-    template<>
-    template<>
-    void testobject::test<1>()
-    {
-        set_test_name("Check classic rules");
-
-        TEST_SETTINGS_LOCAL settings(0);
-        TEST_TARIFFS tariffs;
-        STG::Admin admin(STG::Priv(0xFFFF), {}, {});
-        TEST_STORE store;
-        TEST_SERVICES services;
-        STG::UserImpl user(&settings, &store, &tariffs, &admin, NULL, services);
-
-        STG::UserProperty<double> & cash(user.GetProperties().cash);
-        STG::UserProperty<std::string> & tariffName(user.GetProperties().tariffName);
-
-        ensure_equals("user.cash == 0 (initial value)", user.GetProperties().cash, 0);
-        cash = 100;
-        ensure_equals("user.cash == 100 (explicitly set)", user.GetProperties().cash, 100);
-
-        tariffs.SetFee(50);
-        tariffName = "test";
-        ensure_equals("user.tariffName == 'test' (explicitly set)", user.GetProperties().tariffName.ConstData(), "test");
-        user.ProcessDayFee();
-        ensure_equals("user.cash == 50 (first fee charge)", user.GetProperties().cash, 50);
-        user.ProcessDayFee();
-        ensure_equals("user.cash == 0 (second fee charge)", user.GetProperties().cash, 0);
-        user.ProcessDayFee();
-        ensure_equals("user.cash == -50 (third fee charge)", user.GetProperties().cash, -50);
-        user.ProcessDayFee();
-        ensure_equals("user.cash == -100 (fourth fee charge)", user.GetProperties().cash, -100);
-    }
-
-    template<>
-    template<>
-    void testobject::test<2>()
-    {
-        set_test_name("Check second rules (allow fee if cash value is positive)");
-
-        TEST_SETTINGS_LOCAL settings(1);
-        TEST_TARIFFS tariffs;
-        STG::Admin admin(STG::Priv(0xFFFF), {}, {});
-        TEST_STORE store;
-        TEST_SERVICES services;
-        STG::UserImpl user(&settings, &store, &tariffs, &admin, NULL, services);
-
-        STG::UserProperty<double> & cash(user.GetProperties().cash);
-        STG::UserProperty<double> & credit(user.GetProperties().credit);
-        STG::UserProperty<std::string> & tariffName(user.GetProperties().tariffName);
-
-        ensure_equals("user.cash == 0 (initial value)", user.GetProperties().cash, 0);
-        ensure_equals("user.credit == 0 (initial value)", user.GetProperties().credit, 0);
-        cash = 100;
-        ensure_equals("user.cash == 100 (explicitly set)", user.GetProperties().cash, 100);
-
-        tariffs.SetFee(50);
-        tariffName = "test";
-        ensure_equals("user.tariffName == 'test' (explicitly set)", user.GetProperties().tariffName.ConstData(), "test");
-        user.ProcessDayFee();
-        ensure_equals("user.cash == 50 (first fee charge)", user.GetProperties().cash, 50);
-        user.ProcessDayFee();
-        ensure_equals("user.cash == 0 (second fee charge)", user.GetProperties().cash, 0);
-        user.ProcessDayFee();
-        ensure_equals("user.cash == -50 (third fee charge)", user.GetProperties().cash, -50);
-        user.ProcessDayFee();
-        ensure_equals("user.cash == -50 (not charging `cause value is negative)", user.GetProperties().cash, -50);
-        cash = 49;
-        ensure_equals("user.cash == 49 (explicitly set)", user.GetProperties().cash, 49);
-        user.ProcessDayFee();
-        ensure_equals("user.cash == -1 (charge to negative value)", user.GetProperties().cash, -1);
-        user.ProcessDayFee();
-        ensure_equals("user.cash == -1 (not charging `cause value is negative)", user.GetProperties().cash, -1);
-        credit = 50;
-        ensure_equals("user.credit == 50 (explicitly set)", user.GetProperties().credit, 50);
-        user.ProcessDayFee();
-        ensure_equals("user.cash == -51 (charging `cause value + credit gives us a positive value)", user.GetProperties().cash, -51);
-        user.ProcessDayFee();
-        ensure_equals("user.cash == -51 (not charging `cause credit now is not enoght)", user.GetProperties().cash, -51);
-    }
-
-    template<>
-    template<>
-    void testobject::test<3>()
-    {
-        set_test_name("Check third rules (allow fee if cash value is greater than fee)");
-
-        TEST_SETTINGS_LOCAL settings(2);
-        TEST_TARIFFS tariffs;
-        STG::Admin admin(STG::Priv(0xFFFF), {}, {});
-        TEST_STORE store;
-        TEST_SERVICES services;
-        STG::UserImpl user(&settings, &store, &tariffs, &admin, NULL, services);
-
-        STG::UserProperty<double> & cash(user.GetProperties().cash);
-        STG::UserProperty<double> & credit(user.GetProperties().credit);
-        STG::UserProperty<std::string> & tariffName(user.GetProperties().tariffName);
-
-        ensure_equals("user.cash == 0 (initial value)", user.GetProperties().cash, 0);
-        cash = 100;
-        ensure_equals("user.cash == 100 (explicitly set)", user.GetProperties().cash, 100);
-
-        tariffs.SetFee(50);
-        tariffName = "test";
-        ensure_equals("user.tariffName == 'test' (explicitly set)", user.GetProperties().tariffName.ConstData(), "test");
-        user.ProcessDayFee();
-        ensure_equals("user.cash == 50 (first fee charge)", user.GetProperties().cash, 50);
-        user.ProcessDayFee();
-        ensure_equals("user.cash == 0 (second fee charge)", user.GetProperties().cash, 0);
-        user.ProcessDayFee();
-        ensure_equals("user.cash == 0 (not charging `cause value is lower than fee)", user.GetProperties().cash, 0);
-        cash = 50;
-        ensure_equals("user.cash == 50 (explicitly set)", user.GetProperties().cash, 50);
-        tariffs.SetFee(51);
-        user.ProcessDayFee();
-        ensure_equals("user.cash == 50 (not charging `cause value is lower than fee)", user.GetProperties().cash, 50);
-        cash = 0;
-        ensure_equals("user.cash == 0 (explicitly set)", user.GetProperties().cash, 0);
-        credit = 51;
-        ensure_equals("user.credit == 51 (explicitly set)", user.GetProperties().credit, 51);
-        user.ProcessDayFee();
-        ensure_equals("user.cash == -51 (charging `cause value + credit gives us a value greater than fee)", user.GetProperties().cash, -51);
-        user.ProcessDayFee();
-        ensure_equals("user.cash == -51 (not charging `cause credit now is not enought)", user.GetProperties().cash, -51);
-    }
+    Settings settings(1);
+    TestTariffs tariffs;
+    STG::Admin admin(STG::Priv(0xFFFF), {}, {});
+    TestStore store;
+    TestServices services;
+    STG::UserImpl user(&settings, &store, &tariffs, &admin, NULL, services);
+
+    STG::UserProperty<double> & cash(user.GetProperties().cash);
+    STG::UserProperty<double> & credit(user.GetProperties().credit);
+    STG::UserProperty<std::string> & tariffName(user.GetProperties().tariffName);
+
+    BOOST_CHECK_EQUAL(user.GetProperties().cash, 0);
+    BOOST_CHECK_EQUAL(user.GetProperties().credit, 0);
+    cash = 100;
+    BOOST_CHECK_EQUAL(user.GetProperties().cash, 100);
+
+    tariffs.SetFee(50);
+    tariffName = "test";
+    BOOST_CHECK_EQUAL(user.GetProperties().tariffName.ConstData(), "test");
+    user.ProcessDayFee();
+    BOOST_CHECK_EQUAL(user.GetProperties().cash, 50);
+    user.ProcessDayFee();
+    BOOST_CHECK_EQUAL(user.GetProperties().cash, 0);
+    user.ProcessDayFee();
+    BOOST_CHECK_EQUAL(user.GetProperties().cash, -50);
+    user.ProcessDayFee();
+    BOOST_CHECK_EQUAL(user.GetProperties().cash, -50);
+    cash = 49;
+    BOOST_CHECK_EQUAL(user.GetProperties().cash, 49);
+    user.ProcessDayFee();
+    BOOST_CHECK_EQUAL(user.GetProperties().cash, -1);
+    user.ProcessDayFee();
+    BOOST_CHECK_EQUAL(user.GetProperties().cash, -1);
+    credit = 50;
+    BOOST_CHECK_EQUAL(user.GetProperties().credit, 50);
+    user.ProcessDayFee();
+    BOOST_CHECK_EQUAL(user.GetProperties().cash, -51);
+    user.ProcessDayFee();
+    BOOST_CHECK_EQUAL(user.GetProperties().cash, -51);
 }
 }
+
+BOOST_AUTO_TEST_CASE(GreaterThanFeeRules)
+{
+    Settings settings(2);
+    TestTariffs tariffs;
+    STG::Admin admin(STG::Priv(0xFFFF), {}, {});
+    TestStore store;
+    TestServices services;
+    STG::UserImpl user(&settings, &store, &tariffs, &admin, NULL, services);
+
+    STG::UserProperty<double> & cash(user.GetProperties().cash);
+    STG::UserProperty<double> & credit(user.GetProperties().credit);
+    STG::UserProperty<std::string> & tariffName(user.GetProperties().tariffName);
+
+    BOOST_CHECK_EQUAL(user.GetProperties().cash, 0);
+    cash = 100;
+    BOOST_CHECK_EQUAL(user.GetProperties().cash, 100);
+
+    tariffs.SetFee(50);
+    tariffName = "test";
+    BOOST_CHECK_EQUAL(user.GetProperties().tariffName.ConstData(), "test");
+    user.ProcessDayFee();
+    BOOST_CHECK_EQUAL(user.GetProperties().cash, 50);
+    user.ProcessDayFee();
+    BOOST_CHECK_EQUAL(user.GetProperties().cash, 0);
+    user.ProcessDayFee();
+    BOOST_CHECK_EQUAL(user.GetProperties().cash, 0);
+    cash = 50;
+    BOOST_CHECK_EQUAL(user.GetProperties().cash, 50);
+    tariffs.SetFee(51);
+    user.ProcessDayFee();
+    BOOST_CHECK_EQUAL(user.GetProperties().cash, 50);
+    cash = 0;
+    BOOST_CHECK_EQUAL(user.GetProperties().cash, 0);
+    credit = 51;
+    BOOST_CHECK_EQUAL(user.GetProperties().credit, 51);
+    user.ProcessDayFee();
+    BOOST_CHECK_EQUAL(user.GetProperties().cash, -51);
+    user.ProcessDayFee();
+    BOOST_CHECK_EQUAL(user.GetProperties().cash, -51);
+}
+
+BOOST_AUTO_TEST_SUITE_END()
index 430005fcb7ed6e849d048092be3d9a60a7e8e024..c7c3bbbba9124c10f209bd58fe9f35b2138f537f 100644 (file)
@@ -1,4 +1,4 @@
-#include "tut/tut.hpp"
+#define BOOST_TEST_MODULE STGFilterParamsLog
 
 #include "stg/admin.h"
 #include "stg/user_property.h"
 
 #include "stg/admin.h"
 #include "stg/user_property.h"
 #include "testusers.h"
 #include "testservices.h"
 
 #include "testusers.h"
 #include "testservices.h"
 
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wold-style-cast"
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#pragma GCC diagnostic ignored "-Wsign-compare"
+#pragma GCC diagnostic ignored "-Wparentheses"
+#include <boost/test/unit_test.hpp>
+#pragma GCC diagnostic pop
+
+volatile time_t stgTime = 0;
+
 namespace
 {
 
 namespace
 {
 
-class TEST_STORE_LOCAL : public TEST_STORE {
-public:
-    TEST_STORE_LOCAL()
-        : entries(0)
-    {}
+class Store : public TestStore
+{
+    public:
+        Store()
+            : m_entries(0)
+        {}
 
 
-    int WriteUserChgLog(const std::string & /*login*/,
-                        const std::string & /*admLogin*/,
-                        uint32_t /*admIP*/,
-                        const std::string & /*paramName*/,
-                        const std::string & /*oldValue*/,
-                        const std::string & /*newValue*/,
-                        const std::string & /*message*/) const override { ++entries; return 0; }
+        int WriteUserChgLog(const std::string& /*login*/,
+                            const std::string& /*admLogin*/,
+                            uint32_t /*admIP*/,
+                            const std::string& /*paramName*/,
+                            const std::string& /*oldValue*/,
+                            const std::string& /*newValue*/,
+                            const std::string& /*message*/) const override { ++m_entries; return 0; }
 
 
-    size_t GetEntries() const { return entries; }
+        size_t GetEntries() const { return m_entries; }
 
 
-private:
-    mutable size_t entries;
+    private:
+        mutable size_t m_entries;
 };
 
 };
 
-class TEST_SETTINGS_LOCAL : public TEST_SETTINGS {
+class Settings : public TestSettings
+{
     public:
     public:
-        void addFilter(const std::string& field) { filter.push_back(field); }
+        void addFilter(const std::string& field) { m_filter.push_back(field); }
 
 
-        const std::vector<std::string>& GetFilterParamsLog() const { return filter; }
+        const std::vector<std::string>& GetFilterParamsLog() const { return m_filter; }
 
     private:
 
     private:
-        std::vector<std::string> filter;
+        std::vector<std::string> m_filter;
 };
 
 }
 
 };
 
 }
 
-namespace tut
-{
-    struct filter_params_log_data {
-    };
-
-    typedef test_group<filter_params_log_data> tg;
-    tg filter_params_log_test_group("Filter params log tests group");
-
-    typedef tg::object testobject;
-
-    template<>
-    template<>
-    void testobject::test<1>()
-    {
-        set_test_name("Check normal behaviour");
-
-        TEST_SETTINGS_LOCAL settings;
-        settings.addFilter("*"); // Allow everything by default.
-        TEST_TARIFFS tariffs;
-        tariffs.ReadTariffs();
-        STG::Admin admin(STG::Priv(0xFFFF), {}, {});
-        TEST_STORE_LOCAL store;
-        TEST_AUTH auth;
-        TEST_USERS users;
-        TEST_SERVICES services;
-        STG::UserImpl user(&settings, &store, &tariffs, &admin, &users, services);
+BOOST_AUTO_TEST_SUITE(FilterParamsLog)
 
 
-        auto & address = user.GetProperties().address;
-        auto & note = user.GetProperties().note;
-        auto & group = user.GetProperties().group;
-
-        address.Set("address", admin, "", store, "");
-        note.Set("note", admin, "", store, "");
-        group.Set("group", admin, "", store, "");
-
-        ensure_equals("entries = 3", store.GetEntries(), 3);
-
-        note.Set("another note", admin, "", store, "");
+BOOST_AUTO_TEST_CASE(NormalBehavior)
+{
+    Settings settings;
+    settings.addFilter("*"); // Allow everything by default.
+    TestTariffs tariffs;
+    tariffs.ReadTariffs();
+    STG::Admin admin(STG::Priv(0xFFFF), {}, {});
+    Store store;
+    TestAuth auth;
+    TestUsers users;
+    TestServices services;
+    STG::UserImpl user(&settings, &store, &tariffs, &admin, &users, services);
 
 
-        ensure_equals("entries = 4", store.GetEntries(), 4);
+    auto & address = user.GetProperties().address;
+    auto & note = user.GetProperties().note;
+    auto & group = user.GetProperties().group;
 
 
-        address.Set("new address", admin, "", store, "");
+    address.Set("address", admin, "", store, "");
+    note.Set("note", admin, "", store, "");
+    group.Set("group", admin, "", store, "");
 
 
-        ensure_equals("entries = 5", store.GetEntries(), 5);
+    BOOST_CHECK_EQUAL(store.GetEntries(), 3);
 
 
-        group.Set("administrative group", admin, "", store, "");
+    note.Set("another note", admin, "", store, "");
 
 
-        ensure_equals("entries = 6", store.GetEntries(), 6);
-    }
+    BOOST_CHECK_EQUAL(store.GetEntries(), 4);
 
 
+    address.Set("new address", admin, "", store, "");
 
 
-    template<>
-    template<>
-    void testobject::test<2>()
-    {
-        set_test_name("Check single filter entry.");
+    BOOST_CHECK_EQUAL(store.GetEntries(), 5);
 
 
-        TEST_SETTINGS_LOCAL settings;
-        settings.addFilter("address"); // Allow everything by default.
-        TEST_TARIFFS tariffs;
-        STG::Admin admin(STG::Priv(0xFFFF), {}, {});
-        TEST_STORE_LOCAL store;
-        TEST_AUTH auth;
-        TEST_USERS users;
-        TEST_SERVICES services;
-        STG::UserImpl user(&settings, &store, &tariffs, &admin, &users, services);
+    group.Set("administrative group", admin, "", store, "");
 
 
-        auto & address = user.GetProperties().address;
-        auto & note = user.GetProperties().note;
-        auto & group = user.GetProperties().group;
+    BOOST_CHECK_EQUAL(store.GetEntries(), 6);
+}
 
 
-        address.Set("address", admin, "", store, "");
-        note.Set("note", admin, "", store, "");
-        group.Set("group", admin, "", store, "");
+BOOST_AUTO_TEST_CASE(SingleFilterEntry)
+{
+    Settings settings;
+    settings.addFilter("address"); // Allow everything by default.
+    TestTariffs tariffs;
+    STG::Admin admin(STG::Priv(0xFFFF), {}, {});
+    Store store;
+    TestAuth auth;
+    TestUsers users;
+    TestServices services;
+    STG::UserImpl user(&settings, &store, &tariffs, &admin, &users, services);
 
 
-        ensure_equals("entries = 1", store.GetEntries(), 1);
+    auto & address = user.GetProperties().address;
+    auto & note = user.GetProperties().note;
+    auto & group = user.GetProperties().group;
 
 
-        note.Set("another note", admin, "", store, "");
+    address.Set("address", admin, "", store, "");
+    note.Set("note", admin, "", store, "");
+    group.Set("group", admin, "", store, "");
 
 
-        ensure_equals("entries = 1", store.GetEntries(), 1);
+    BOOST_CHECK_EQUAL(store.GetEntries(), 1);
 
 
-        address.Set("new address", admin, "", store, "");
+    note.Set("another note", admin, "", store, "");
 
 
-        ensure_equals("entries = 2", store.GetEntries(), 2);
+    BOOST_CHECK_EQUAL(store.GetEntries(), 1);
 
 
-        group.Set("administrative group", admin, "", store, "");
+    address.Set("new address", admin, "", store, "");
 
 
-        ensure_equals("entries = 2", store.GetEntries(), 2);
-    }
+    BOOST_CHECK_EQUAL(store.GetEntries(), 2);
 
 
-    template<>
-    template<>
-    void testobject::test<3>()
-    {
-        set_test_name("Check multiple filter entries.");
+    group.Set("administrative group", admin, "", store, "");
 
 
-        TEST_SETTINGS_LOCAL settings;
-        settings.addFilter("address"); // Allow everything by default.
-        settings.addFilter("group"); // Allow everything by default.
-        TEST_TARIFFS tariffs;
-        STG::Admin admin(STG::Priv(0xFFFF), {}, {});
-        TEST_STORE_LOCAL store;
-        TEST_AUTH auth;
-        TEST_USERS users;
-        TEST_SERVICES services;
-        STG::UserImpl user(&settings, &store, &tariffs, &admin, &users, services);
+    BOOST_CHECK_EQUAL(store.GetEntries(), 2);
+}
 
 
-        auto & address = user.GetProperties().address;
-        auto & note = user.GetProperties().note;
-        auto & group = user.GetProperties().group;
+BOOST_AUTO_TEST_CASE(MultipleFilterEntries)
+{
+    Settings settings;
+    settings.addFilter("address"); // Allow everything by default.
+    settings.addFilter("group"); // Allow everything by default.
+    TestTariffs tariffs;
+    STG::Admin admin(STG::Priv(0xFFFF), {}, {});
+    Store store;
+    TestAuth auth;
+    TestUsers users;
+    TestServices services;
+    STG::UserImpl user(&settings, &store, &tariffs, &admin, &users, services);
 
 
-        address.Set("address", admin, "", store, "");
-        note.Set("note", admin, "", store, "");
-        group.Set("group", admin, "", store, "");
+    auto & address = user.GetProperties().address;
+    auto & note = user.GetProperties().note;
+    auto & group = user.GetProperties().group;
 
 
-        ensure_equals("entries = 2", store.GetEntries(), 2);
+    address.Set("address", admin, "", store, "");
+    note.Set("note", admin, "", store, "");
+    group.Set("group", admin, "", store, "");
 
 
-        note.Set("another note", admin, "", store, "");
+    BOOST_CHECK_EQUAL(store.GetEntries(), 2);
 
 
-        ensure_equals("entries = 2", store.GetEntries(), 2);
+    note.Set("another note", admin, "", store, "");
 
 
-        address.Set("new address", admin, "", store, "");
+    BOOST_CHECK_EQUAL(store.GetEntries(), 2);
 
 
-        ensure_equals("entries = 3", store.GetEntries(), 3);
+    address.Set("new address", admin, "", store, "");
 
 
-        group.Set("administrative group", admin, "", store, "");
+    BOOST_CHECK_EQUAL(store.GetEntries(), 3);
 
 
-        ensure_equals("entries = 4", store.GetEntries(), 4);
-    }
+    group.Set("administrative group", admin, "", store, "");
 
 
-    template<>
-    template<>
-    void testobject::test<4>()
-    {
-        set_test_name("Check empty filter.");
+    BOOST_CHECK_EQUAL(store.GetEntries(), 4);
+}
 
 
-        TEST_SETTINGS_LOCAL settings;
-        TEST_TARIFFS tariffs;
-        STG::Admin admin(STG::Priv(0xFFFF), {}, {});
-        TEST_STORE_LOCAL store;
-        TEST_AUTH auth;
-        TEST_USERS users;
-        TEST_SERVICES services;
-        STG::UserImpl user(&settings, &store, &tariffs, &admin, &users, services);
+BOOST_AUTO_TEST_CASE(EmptyFilter)
+{
+    Settings settings;
+    TestTariffs tariffs;
+    STG::Admin admin(STG::Priv(0xFFFF), {}, {});
+    Store store;
+    TestAuth auth;
+    TestUsers users;
+    TestServices services;
+    STG::UserImpl user(&settings, &store, &tariffs, &admin, &users, services);
 
 
-        auto & address = user.GetProperties().address;
-        auto & note = user.GetProperties().note;
-        auto & group = user.GetProperties().group;
+    auto & address = user.GetProperties().address;
+    auto & note = user.GetProperties().note;
+    auto & group = user.GetProperties().group;
 
 
-        address.Set("address", admin, "", store, "");
-        note.Set("note", admin, "", store, "");
-        group.Set("group", admin, "", store, "");
+    address.Set("address", admin, "", store, "");
+    note.Set("note", admin, "", store, "");
+    group.Set("group", admin, "", store, "");
 
 
-        ensure_equals("entries = 0", store.GetEntries(), 0);
+    BOOST_CHECK_EQUAL(store.GetEntries(), 0);
 
 
-        note.Set("another note", admin, "", store, "");
+    note.Set("another note", admin, "", store, "");
 
 
-        ensure_equals("entries = 0", store.GetEntries(), 0);
+    BOOST_CHECK_EQUAL(store.GetEntries(), 0);
 
 
-        address.Set("new address", admin, "", store, "");
+    address.Set("new address", admin, "", store, "");
 
 
-        ensure_equals("entries = 0", store.GetEntries(), 0);
+    BOOST_CHECK_EQUAL(store.GetEntries(), 0);
 
 
-        group.Set("administrative group", admin, "", store, "");
+    group.Set("administrative group", admin, "", store, "");
 
 
-        ensure_equals("entries = 0", store.GetEntries(), 0);
-    }
+    BOOST_CHECK_EQUAL(store.GetEntries(), 0);
 }
 }
+
+BOOST_AUTO_TEST_SUITE_END()
index a7b3e8a5bb0a845c82c586ab5aa7c92f82a939a0..4c7ce121c5e05a83f02ed594d996fa8fd5d85807 100644 (file)
@@ -28,7 +28,7 @@ constexpr size_t ITERATIONS = 1000;
 std::array<uint8_t, 68> genVector()
 {
     std::array<uint8_t, 68> res;
 std::array<uint8_t, 68> genVector()
 {
     std::array<uint8_t, 68> res;
-    for (size_t i = 0; i < 68; ++i)
+    for (size_t i = 0; i < res.size(); ++i)
         res[i] = rand() % 256;
     res[0] = (res[0] & 0xF0) | 0x05; // Fix header length
     return res;
         res[i] = rand() % 256;
     res[0] = (res[0] & 0xF0) | 0x05; // Fix header length
     return res;
@@ -82,7 +82,7 @@ BOOST_AUTO_TEST_CASE(RandomTests)
     srand(time(NULL));
     for (size_t i = 0; i < ITERATIONS; ++i)
     {
     srand(time(NULL));
     for (size_t i = 0; i < ITERATIONS; ++i)
     {
-        RAW_PACKET_OLD p1;
+        RawPacketOld p1;
         STG::RawPacket p2;
         STG::RawPacket p3;
 
         STG::RawPacket p2;
         STG::RawPacket p3;
 
index 60e36ffa64df3d0c15836d8dc7b7fb125741a786..ca03d6c2f44be5abdcc8c394cc6d7cea51a30e86 100644 (file)
@@ -1,4 +1,4 @@
-#include "tut/tut.hpp"
+#define BOOST_TEST_MODULE STGReconnectOnTariffChange
 
 #include "stg/admin.h"
 #include "stg/user_property.h"
 
 #include "stg/admin.h"
 #include "stg/user_property.h"
 #include "testusers.h"
 #include "testservices.h"
 
 #include "testusers.h"
 #include "testservices.h"
 
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wold-style-cast"
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#pragma GCC diagnostic ignored "-Wsign-compare"
+#pragma GCC diagnostic ignored "-Wparentheses"
+#include <boost/test/unit_test.hpp>
+#pragma GCC diagnostic pop
+
+volatile time_t stgTime = 0;
+
 namespace
 {
 
 namespace
 {
 
-class AFTER_CONNECTED_NOTIFIER : public STG::PropertyNotifierBase<bool> {
-public:
-    AFTER_CONNECTED_NOTIFIER()
-        : connects(0),
-          disconnects(0)
-    {}
-    void Notify(const bool & oldValue, const bool & newValue);
+class AfterConnectedNotifier : public STG::PropertyNotifierBase<bool>
+{
+    public:
+        AfterConnectedNotifier()
+            : m_connects(0),
+              m_disconnects(0)
+        {}
+
+        void Notify(const bool& oldValue, const bool& newValue) override
+        {
+            if (!oldValue && newValue)
+                ++m_connects;
+            if (oldValue && !newValue)
+                ++m_disconnects;
+        }
 
 
-    size_t GetConnects() const { return connects; }
-    size_t GetDisconnects() const { return disconnects; }
+        size_t connects() const { return m_connects; }
+        size_t disconnects() const { return m_disconnects; }
 
 
-private:
-    size_t connects;
-    size_t disconnects;
+    private:
+        size_t m_connects;
+        size_t m_disconnects;
 };
 
 };
 
-class TEST_SETTINGS_LOCAL : public TEST_SETTINGS {
+class Settings : public TestSettings
+{
     public:
     public:
-        TEST_SETTINGS_LOCAL(bool _reconnectOnTariffChange)
-            : TEST_SETTINGS(),
-              reconnectOnTariffChange(_reconnectOnTariffChange)
+        Settings(bool reconnectOnTariffChange)
+            : m_reconnectOnTariffChange(reconnectOnTariffChange)
         {}
 
         {}
 
-        bool GetReconnectOnTariffChange() const { return reconnectOnTariffChange; }
+        bool GetReconnectOnTariffChange() const { return m_reconnectOnTariffChange; }
 
     private:
 
     private:
-        bool reconnectOnTariffChange;
+        bool m_reconnectOnTariffChange;
 };
 
 }
 
 };
 
 }
 
-namespace tut
-{
-    struct reconnect_on_tariff_change_data {
-    };
-
-    typedef test_group<reconnect_on_tariff_change_data> tg;
-    tg reconnect_on_tariff_change_test_group("Reconnect on tariff change tests group");
+BOOST_AUTO_TEST_SUITE(ReconnectOnTariffChange)
 
 
-    typedef tg::object testobject;
-
-    template<>
-    template<>
-    void testobject::test<1>()
-    {
-        set_test_name("Check normal behaviour");
-
-        TEST_SETTINGS_LOCAL settings(false);
-        TEST_TARIFFS tariffs;
-        tariffs.ReadTariffs();
-        STG::Admin admin(STG::Priv(0xFFFF), {}, {});
-        TEST_STORE store;
-        TEST_AUTH auth;
-        TEST_USERS users;
-        TEST_SERVICES services;
-        STG::UserImpl user(&settings, &store, &tariffs, &admin, &users, services);
-
-        AFTER_CONNECTED_NOTIFIER connectionNotifier;
-
-        user.AddConnectedAfterNotifier(&connectionNotifier);
+BOOST_AUTO_TEST_CASE(NormalBehavior)
+{
+    Settings settings(false);
+    TestTariffs tariffs;
+    tariffs.ReadTariffs();
+    STG::Admin admin(STG::Priv(0xFFFF), {}, {});
+    TestStore store;
+    TestAuth auth;
+    TestUsers users;
+    TestServices services;
+    STG::UserImpl user(&settings, &store, &tariffs, &admin, &users, services);
 
 
-        STG::UserProperty<std::string> & tariffName = user.GetProperties().tariffName;
-        STG::UserProperty<STG::UserIPs> & ips = user.GetProperties().ips;
+    AfterConnectedNotifier connectionNotifier;
 
 
-        ips = STG::UserIPs::parse("*");
+    user.AddConnectedAfterNotifier(&connectionNotifier);
 
 
-        ensure_equals("user.connected = false", user.GetConnected(), false);
-        ensure_equals("connects = 0", connectionNotifier.GetConnects(), static_cast<size_t>(0));
-        ensure_equals("disconnects = 0", connectionNotifier.GetDisconnects(), static_cast<size_t>(0));
+    STG::UserProperty<std::string> & tariffName = user.GetProperties().tariffName;
+    STG::UserProperty<STG::UserIPs> & ips = user.GetProperties().ips;
 
 
-        ensure_equals("user.tariffName == NO_TARIFF_NAME", user.GetProperties().tariffName.ConstData(), NO_TARIFF_NAME);
+    ips = STG::UserIPs::parse("*");
 
 
-        user.Authorize(inet_strington("127.0.0.1"), 0, &auth);
-        user.Run();
+    BOOST_CHECK_EQUAL(user.GetConnected(), false);
+    BOOST_CHECK_EQUAL(connectionNotifier.connects(), static_cast<size_t>(0));
+    BOOST_CHECK_EQUAL(connectionNotifier.disconnects(), static_cast<size_t>(0));
 
 
-        ensure_equals("user.authorised_by = true", user.IsAuthorizedBy(&auth), true);
+    BOOST_CHECK_EQUAL(user.GetProperties().tariffName.ConstData(), NO_TARIFF_NAME);
 
 
-        ensure_equals("user.connected = true", user.GetConnected(), true);
-        ensure_equals("connects = 1", connectionNotifier.GetConnects(), static_cast<size_t>(1));
-        ensure_equals("disconnects = 0", connectionNotifier.GetDisconnects(), static_cast<size_t>(0));
+    user.Authorize(inet_strington("127.0.0.1"), 0, &auth);
+    user.Run();
 
 
-        tariffName = "test";
-        ensure_equals("user.tariffName == 'test'", user.GetProperties().tariffName.ConstData(), "test");
+    BOOST_CHECK_EQUAL(user.IsAuthorizedBy(&auth), true);
 
 
-        ensure_equals("user.authorised_by = true", user.IsAuthorizedBy(&auth), true);
+    BOOST_CHECK_EQUAL(user.GetConnected(), true);
+    BOOST_CHECK_EQUAL(connectionNotifier.connects(), static_cast<size_t>(1));
+    BOOST_CHECK_EQUAL(connectionNotifier.disconnects(), static_cast<size_t>(0));
 
 
-        ensure_equals("user.connected = true", user.GetConnected(), true);
-        ensure_equals("connects = 1", connectionNotifier.GetConnects(), static_cast<size_t>(1));
-        ensure_equals("disconnects = 0", connectionNotifier.GetDisconnects(), static_cast<size_t>(0));
-    }
+    tariffName = "test";
+    BOOST_CHECK_EQUAL(user.GetProperties().tariffName.ConstData(), "test");
 
 
+    BOOST_CHECK_EQUAL(user.IsAuthorizedBy(&auth), true);
 
 
-    template<>
-    template<>
-    void testobject::test<2>()
-    {
-        set_test_name("Check reconnect on tariff change");
+    BOOST_CHECK_EQUAL(user.GetConnected(), true);
+    BOOST_CHECK_EQUAL(connectionNotifier.connects(), static_cast<size_t>(1));
+    BOOST_CHECK_EQUAL(connectionNotifier.disconnects(), static_cast<size_t>(0));
+}
 
 
-        TEST_SETTINGS_LOCAL settings(true);
+BOOST_AUTO_TEST_CASE(Reconnect)
+{
+    Settings settings(true);
 
 
-        TEST_SETTINGS * s1 = &settings;
-        STG::Settings * s2 = &settings;
+    TestSettings * s1 = &settings;
+    STG::Settings * s2 = &settings;
 
 
-        ensure("settings.GetReconnectOnTariffChange() == true", settings.GetReconnectOnTariffChange());
-        ensure("s1->GetReconnectOnTariffChange() == true", s1->GetReconnectOnTariffChange());
-        ensure("s2->GetReconnectOnTariffChange() == true", s2->GetReconnectOnTariffChange());
+    BOOST_CHECK(settings.GetReconnectOnTariffChange());
+    BOOST_CHECK(s1->GetReconnectOnTariffChange());
+    BOOST_CHECK(s2->GetReconnectOnTariffChange());
 
 
-        TEST_TARIFFS tariffs;
-        STG::Admin admin(STG::Priv(0xFFFF), {}, {});
-        TEST_STORE store;
-        TEST_AUTH auth;
-        TEST_USERS users;
-        TEST_SERVICES services;
-        STG::UserImpl user(&settings, &store, &tariffs, &admin, &users, services);
+    TestTariffs tariffs;
+    STG::Admin admin(STG::Priv(0xFFFF), {}, {});
+    TestStore store;
+    TestAuth auth;
+    TestUsers users;
+    TestServices services;
+    STG::UserImpl user(&settings, &store, &tariffs, &admin, &users, services);
 
 
-        AFTER_CONNECTED_NOTIFIER connectionNotifier;
+    AfterConnectedNotifier connectionNotifier;
 
 
-        user.AddConnectedAfterNotifier(&connectionNotifier);
+    user.AddConnectedAfterNotifier(&connectionNotifier);
 
 
-        STG::UserProperty<std::string> & tariffName = user.GetProperties().tariffName;
-        STG::UserProperty<STG::UserIPs> & ips = user.GetProperties().ips;
+    STG::UserProperty<std::string> & tariffName = user.GetProperties().tariffName;
+    STG::UserProperty<STG::UserIPs> & ips = user.GetProperties().ips;
 
 
-        ips = STG::UserIPs::parse("*");
+    ips = STG::UserIPs::parse("*");
 
 
-        ensure_equals("user.connected = false", user.GetConnected(), false);
-        ensure_equals("connects = 0", connectionNotifier.GetConnects(), static_cast<size_t>(0));
-        ensure_equals("disconnects = 0", connectionNotifier.GetDisconnects(), static_cast<size_t>(0));
+    BOOST_CHECK_EQUAL(user.GetConnected(), false);
+    BOOST_CHECK_EQUAL(connectionNotifier.connects(), static_cast<size_t>(0));
+    BOOST_CHECK_EQUAL(connectionNotifier.disconnects(), static_cast<size_t>(0));
 
 
-        ensure_equals("user.tariffName == NO_TARIFF_NAME", user.GetProperties().tariffName.ConstData(), NO_TARIFF_NAME);
+    BOOST_CHECK_EQUAL(user.GetProperties().tariffName.ConstData(), NO_TARIFF_NAME);
 
 
-        user.Authorize(inet_strington("127.0.0.1"), 0, &auth);
-        user.Run();
+    user.Authorize(inet_strington("127.0.0.1"), 0, &auth);
+    user.Run();
 
 
-        ensure_equals("user.authorised_by = true", user.IsAuthorizedBy(&auth), true);
+    BOOST_CHECK_EQUAL(user.IsAuthorizedBy(&auth), true);
 
 
-        ensure_equals("user.connected = true", user.GetConnected(), true);
-        ensure_equals("connects = 1", connectionNotifier.GetConnects(), static_cast<size_t>(1));
-        ensure_equals("disconnects = 0", connectionNotifier.GetDisconnects(), static_cast<size_t>(0));
+    BOOST_CHECK_EQUAL(user.GetConnected(), true);
+    BOOST_CHECK_EQUAL(connectionNotifier.connects(), static_cast<size_t>(1));
+    BOOST_CHECK_EQUAL(connectionNotifier.disconnects(), static_cast<size_t>(0));
 
 
-        tariffName = "test";
-        ensure_equals("user.tariffName == 'test'", user.GetProperties().tariffName.ConstData(), "test");
+    tariffName = "test";
+    BOOST_CHECK_EQUAL(user.GetProperties().tariffName.ConstData(), "test");
 
 
-        ensure_equals("user.authorised_by = true", user.IsAuthorizedBy(&auth), true);
+    BOOST_CHECK_EQUAL(user.IsAuthorizedBy(&auth), true);
 
 
-        ensure_equals("user.connected = true", user.GetConnected(), true);
-        ensure_equals("connects = 2", connectionNotifier.GetConnects(), static_cast<size_t>(2));
-        ensure_equals("disconnects = 1", connectionNotifier.GetDisconnects(), static_cast<size_t>(1));
-    }
+    BOOST_CHECK_EQUAL(user.GetConnected(), true);
+    BOOST_CHECK_EQUAL(connectionNotifier.connects(), static_cast<size_t>(2));
+    BOOST_CHECK_EQUAL(connectionNotifier.disconnects(), static_cast<size_t>(1));
 }
 
 }
 
-void AFTER_CONNECTED_NOTIFIER::Notify(const bool & oldValue, const bool & newValue)
-{
-    if (!oldValue && newValue)
-        ++connects;
-    if (oldValue && !newValue)
-        ++disconnects;
-}
+BOOST_AUTO_TEST_SUITE_END()
index f82f4981721b1a36c329fb8a3b3ad46ef6eef883..f24d2effca25a4b84f61345af447a76381705823 100644 (file)
@@ -1,34 +1,32 @@
-#ifndef __TEST_AUTH_H__
-#define __TEST_AUTH_H__
+#pragma once
 
 #include "stg/auth.h"
 
 
 #include "stg/auth.h"
 
-class TEST_AUTH : public STG::Auth {
+class TestAuth : public STG::Auth
+{
     public:
     public:
-        TEST_AUTH() {}
+        TestAuth() {}
 
 
-        void SetUsers(STG::Users * /*u*/) override {}
-        void SetTariffs(STG::Tariffs * /*t*/) override {}
-        void SetAdmins(STG::Admins * /*a*/) override {}
-        void SetTraffcounter(STG::TraffCounter * /*tc*/) override {}
-        void SetStore(STG::Store * /*st*/) override {}
-        void SetStgSettings(const STG::Settings * /*s*/) override {}
-        void SetSettings(const STG::ModuleSettings & /*s*/) override {}
+        void SetUsers(STG::Users* /*u*/) override {}
+        void SetTariffs(STG::Tariffs* /*t*/) override {}
+        void SetAdmins(STG::Admins* /*a*/) override {}
+        void SetTraffcounter(STG::TraffCounter* /*tc*/) override {}
+        void SetStore(STG::Store* /*st*/) override {}
+        void SetStgSettings(const STG::Settings* /*s*/) override {}
+        void SetSettings(const STG::ModuleSettings& /*s*/) override {}
         int ParseSettings() override { return 0; }
 
         int Start() override { return 0; }
         int Stop() override { return 0; }
         int Reload(const STG::ModuleSettings&) override { return 0; }
         bool IsRunning() override { return true; }
         int ParseSettings() override { return 0; }
 
         int Start() override { return 0; }
         int Stop() override { return 0; }
         int Reload(const STG::ModuleSettings&) override { return 0; }
         bool IsRunning() override { return true; }
-        const std::string & GetStrError() const override { return strError; }
+        const std::string& GetStrError() const override { return m_errorStr; }
         std::string GetVersion() const override { return ""; }
         uint16_t GetStartPosition() const override { return 0; }
         uint16_t GetStopPosition() const override { return 0; }
 
         std::string GetVersion() const override { return ""; }
         uint16_t GetStartPosition() const override { return 0; }
         uint16_t GetStopPosition() const override { return 0; }
 
-        int SendMessage(const STG::Message & /*msg*/, uint32_t /*ip*/) const override { return 0; }
+        int SendMessage(const STG::Message& /*msg*/, uint32_t /*ip*/) const override { return 0; }
 
     private:
 
     private:
-        std::string strError;
+        std::string m_errorStr;
 };
 };
-
-#endif
index ace3c8633e5d6226fcc49c66bc21f04d02952706..6282c660a3f39ebcfb268fc0dd489c912f2e3da5 100644 (file)
@@ -1,26 +1,23 @@
-#ifndef __TEST_SERVICES__
-#define __TEST_SERVICES__
+#pragma once
 
 #include "stg/services.h"
 
 
 #include "stg/services.h"
 
-class TEST_SERVICES : public STG::Services
+class TestServices : public STG::Services
 {
     public:
 {
     public:
-        virtual int Add(const STG::ServiceConf & /*service*/, const STG::Admin * /*admin*/) { return 0; }
-        virtual int Del(const std::string & /*name*/, const STG::Admin * /*admin*/) { return 0; }
-        virtual int Change(const STG::ServiceConf & /*service*/, const STG::Admin * /*admin*/) { return 0; }
-        virtual bool Find(const std::string & /*name*/, STG::ServiceConf * /*service*/) const { return false; }
-        virtual bool Find(const std::string & /*name*/, STG::ServiceConfOpt * /*service*/) const { return false; }
-        virtual bool Exists(const std::string & /*name*/) const { return false; }
-        virtual const std::string & GetStrError() const { return m_errorStr; }
-        virtual size_t Count() const { return 0; }
+        int Add(const STG::ServiceConf& /*service*/, const STG::Admin* /*admin*/) override { return 0; }
+        int Del(const std::string& /*name*/, const STG::Admin* /*admin*/) override { return 0; }
+        int Change(const STG::ServiceConf& /*service*/, const STG::Admin* /*admin*/) override { return 0; }
+        bool Find(const std::string& /*name*/, STG::ServiceConf* /*service*/) const override { return false; }
+        bool Find(const std::string& /*name*/, STG::ServiceConfOpt* /*service*/) const override { return false; }
+        bool Exists(const std::string& /*name*/) const override { return false; }
+        const std::string& GetStrError() const override { return m_errorStr; }
+        size_t Count() const override { return 0; }
 
 
-        virtual int OpenSearch() const { return 0; }
-        virtual int SearchNext(int, STG::ServiceConf * /*service*/) const { return 0; }
-        virtual int CloseSearch(int) const { return 0; }
+        int OpenSearch() const override { return 0; }
+        int SearchNext(int /*handle*/, STG::ServiceConf* /*service*/) const override { return 0; }
+        int CloseSearch(int /*handle*/) const override { return 0; }
 
     private:
         std::string m_errorStr;
 };
 
     private:
         std::string m_errorStr;
 };
-
-#endif
index 62b7b10140fc98f012cc3a621e205a2bc3b9d1fa..1eadb8ec80d146e61fc1cd5aefadad731886e9f8 100644 (file)
@@ -1,14 +1,14 @@
-#ifndef __TEST_SETTINGS_H__
-#define __TEST_SETTINGS_H__
+#pragma once
 
 #include "stg/settings.h"
 
 
 #include "stg/settings.h"
 
-class TEST_SETTINGS : public STG::Settings {
+class TestSettings : public STG::Settings
+{
     public:
     public:
-        TEST_SETTINGS() { filterParamsLog.push_back("*"); }
+        TestSettings() { m_filterParamsLog.push_back("*"); }
 
 
-        const std::string & GetDirName(size_t) const override { return dirName; }
-        const std::string & GetScriptsDir() const override { return scriptsDir; }
+        const std::string&  GetDirName(size_t) const override { return m_dirName; }
+        const std::string&  GetScriptsDir() const override { return m_scriptsDir; }
         unsigned            GetDetailStatWritePeriod() const override { return 10; }
         unsigned            GetStatWritePeriod() const override { return 10; }
         unsigned            GetDayFee() const override { return 0; }
         unsigned            GetDetailStatWritePeriod() const override { return 10; }
         unsigned            GetStatWritePeriod() const override { return 10; }
         unsigned            GetDayFee() const override { return 0; }
@@ -22,18 +22,16 @@ class TEST_SETTINGS : public STG::Settings {
         unsigned            GetMessageTimeout() const override { return 0; }
         unsigned            GetFeeChargeType() const override { return 0; }
         bool                GetReconnectOnTariffChange() const override { return false; }
         unsigned            GetMessageTimeout() const override { return 0; }
         unsigned            GetFeeChargeType() const override { return 0; }
         bool                GetReconnectOnTariffChange() const override { return false; }
-        const std::string & GetMonitorDir() const override { return monitorDir; }
+        const std::string&  GetMonitorDir() const override { return m_monitorDir; }
         bool                GetMonitoring() const override { return false; }
         bool                GetMonitoring() const override { return false; }
-        const std::vector<std::string> & GetScriptParams() const override { return scriptParams; }
+        const std::vector<std::string>& GetScriptParams() const override { return m_scriptParams; }
         bool                GetDisableSessionLog() const override { return false; }
         bool                GetDisableSessionLog() const override { return false; }
-        const std::vector<std::string>& GetFilterParamsLog() const override { return filterParamsLog; }
+        const std::vector<std::string>& GetFilterParamsLog() const override { return m_filterParamsLog; }
 
     private:
 
     private:
-        std::string dirName;
-        std::string scriptsDir;
-        std::string monitorDir;
-        std::vector<std::string> scriptParams;
-        std::vector<std::string> filterParamsLog;
+        std::string m_dirName;
+        std::string m_scriptsDir;
+        std::string m_monitorDir;
+        std::vector<std::string> m_scriptParams;
+        std::vector<std::string> m_filterParamsLog;
 };
 };
-
-#endif
index 59b6a47ebdab9fc4ff21a2f9ffdc7073a7617772..b7894c00bed01cf5d6751495872cc3894c61defa 100644 (file)
@@ -1,83 +1,81 @@
-#ifndef __TEST_STORE_H__
-#define __TEST_STORE_H__
+#pragma once
 
 #include "stg/store.h"
 
 
 #include "stg/store.h"
 
-class TEST_STORE : public STG::Store {
+class TestStore : public STG::Store
+{
     public:
     public:
-        TEST_STORE() {}
-
-        int GetUsersList(std::vector<std::string> * /*usersList*/) const override { return 0; }
-        int AddUser(const std::string & /*login*/) const override { return 0; }
-        int DelUser(const std::string & /*login*/) const override { return 0; }
-        int SaveUserStat(const STG::UserStat & /*stat*/, const std::string & /*login*/) const override { return 0; }
-        int SaveUserConf(const STG::UserConf & /*conf*/, const std::string & /*login*/) const override { return 0; }
-        int RestoreUserStat(STG::UserStat * /*stat*/, const std::string & /*login*/) const override { return 0; }
-        int RestoreUserConf(STG::UserConf * /*conf*/, const std::string & /*login*/) const override { return 0; }
-
-        int WriteUserChgLog(const std::string & /*login*/,
-                            const std::string & /*admLogin*/,
+        TestStore() {}
+
+        int GetUsersList(std::vector<std::string>* /*usersList*/) const override { return 0; }
+        int AddUser(const std::string& /*login*/) const override { return 0; }
+        int DelUser(const std::string& /*login*/) const override { return 0; }
+        int SaveUserStat(const STG::UserStat& /*stat*/, const std::string& /*login*/) const override { return 0; }
+        int SaveUserConf(const STG::UserConf& /*conf*/, const std::string& /*login*/) const override { return 0; }
+        int RestoreUserStat(STG::UserStat* /*stat*/, const std::string& /*login*/) const override { return 0; }
+        int RestoreUserConf(STG::UserConf* /*conf*/, const std::string& /*login*/) const override { return 0; }
+
+        int WriteUserChgLog(const std::string& /*login*/,
+                            const std::string& /*admLogin*/,
                             uint32_t /*admIP*/,
                             uint32_t /*admIP*/,
-                            const std::string & /*paramName*/,
-                            const std::string & /*oldValue*/,
-                            const std::string & /*newValue*/,
-                            const std::string & /*message*/) const override { return 0; }
-
-        int WriteUserConnect(const std::string & /*login*/, uint32_t /*ip*/) const override { return 0; }
-
-        int WriteUserDisconnect(const std::string & /*login*/,
-                                const STG::DirTraff & /*up*/,
-                                const STG::DirTraff & /*down*/,
-                                const STG::DirTraff & /*sessionUp*/,
-                                const STG::DirTraff & /*sessionDown*/,
+                            const std::string& /*paramName*/,
+                            const std::string& /*oldValue*/,
+                            const std::string& /*newValue*/,
+                            const std::string& /*message*/) const override { return 0; }
+
+        int WriteUserConnect(const std::string& /*login*/, uint32_t /*ip*/) const override { return 0; }
+
+        int WriteUserDisconnect(const std::string& /*login*/,
+                                const STG::DirTraff& /*up*/,
+                                const STG::DirTraff& /*down*/,
+                                const STG::DirTraff& /*sessionUp*/,
+                                const STG::DirTraff& /*sessionDown*/,
                                 double /*cash*/,
                                 double /*freeMb*/,
                                 double /*cash*/,
                                 double /*freeMb*/,
-                                const std::string & /*reason*/) const override { return 0; }
+                                const std::string& /*reason*/) const override { return 0; }
 
 
-        int WriteDetailedStat(const STG::TraffStat & /*statTree*/,
+        int WriteDetailedStat(const STG::TraffStat& /*statTree*/,
                               time_t /*lastStat*/,
                               time_t /*lastStat*/,
-                              const std::string & /*login*/) const override { return 0; }
-
-        int AddMessage(STG::Message * /*msg*/, const std::string & /*login*/) const override { return 0; }
-        int EditMessage(const STG::Message & /*msg*/, const std::string & /*login*/) const override { return 0; }
-        int GetMessage(uint64_t /*id*/, STG::Message * /*msg*/, const std::string & /*login*/) const override { return 0; }
-        int DelMessage(uint64_t /*id*/, const std::string & /*login*/) const override { return 0; }
-        int GetMessageHdrs(std::vector<STG::Message::Header> * /*hdrsList*/, const std::string & /*login*/) const override { return 0; }
-
-        int SaveMonthStat(const STG::UserStat & /*stat*/, int /*month*/, int /*year*/, const std::string & /*login*/) const override { return 0; }
-
-        int GetAdminsList(std::vector<std::string> * /*adminsList*/) const override { return 0; }
-        int SaveAdmin(const STG::AdminConf & /*ac*/) const override { return 0; }
-        int RestoreAdmin(STG::AdminConf * /*ac*/, const std::string & /*login*/) const override { return 0; }
-        int AddAdmin(const std::string & /*login*/) const override { return 0; }
-        int DelAdmin(const std::string & /*login*/) const override { return 0; }
-
-        int GetTariffsList(std::vector<std::string> * /*tariffsList*/) const override { return 0; }
-        int AddTariff(const std::string & /*name*/) const override { return 0; }
-        int DelTariff(const std::string & /*name*/) const override { return 0; }
-        int SaveTariff(const STG::TariffData & /*td*/, const std::string & /*tariffName*/) const override { return 0; }
-        int RestoreTariff(STG::TariffData * /*td*/, const std::string & /*tariffName*/) const override { return 0; }
-
-        int GetCorpsList(std::vector<std::string> * /*corpsList*/) const override { return 0; }
-        int SaveCorp(const STG::CorpConf & /*cc*/) const override { return 0; }
-        int RestoreCorp(STG::CorpConf * /*cc*/, const std::string & /*name*/) const override { return 0; }
-        int AddCorp(const std::string & /*name*/) const override { return 0; }
-        int DelCorp(const std::string & /*name*/) const override { return 0; }
-
-        int GetServicesList(std::vector<std::string> * /*corpsList*/) const override { return 0; }
-        int SaveService(const STG::ServiceConf & /*sc*/) const override { return 0; }
-        int RestoreService(STG::ServiceConf * /*sc*/, const std::string & /*name*/) const override { return 0; }
-        int AddService(const std::string & /*name*/) const override { return 0; }
-        int DelService(const std::string & /*name*/) const override { return 0; }
-
-        void SetSettings(const STG::ModuleSettings & /*s*/) override {}
+                              const std::string& /*login*/) const override { return 0; }
+
+        int AddMessage(STG::Message* /*msg*/, const std::string& /*login*/) const override { return 0; }
+        int EditMessage(const STG::Message& /*msg*/, const std::string& /*login*/) const override { return 0; }
+        int GetMessage(uint64_t /*id*/, STG::Message* /*msg*/, const std::string& /*login*/) const override { return 0; }
+        int DelMessage(uint64_t /*id*/, const std::string& /*login*/) const override { return 0; }
+        int GetMessageHdrs(std::vector<STG::Message::Header>* /*hdrsList*/, const std::string& /*login*/) const override { return 0; }
+
+        int SaveMonthStat(const STG::UserStat& /*stat*/, int /*month*/, int /*year*/, const std::string& /*login*/) const override { return 0; }
+
+        int GetAdminsList(std::vector<std::string>* /*adminsList*/) const override { return 0; }
+        int SaveAdmin(const STG::AdminConf& /*ac*/) const override { return 0; }
+        int RestoreAdmin(STG::AdminConf* /*ac*/, const std::string& /*login*/) const override { return 0; }
+        int AddAdmin(const std::string& /*login*/) const override { return 0; }
+        int DelAdmin(const std::string& /*login*/) const override { return 0; }
+
+        int GetTariffsList(std::vector<std::string>* /*tariffsList*/) const override { return 0; }
+        int AddTariff(const std::string& /*name*/) const override { return 0; }
+        int DelTariff(const std::string& /*name*/) const override { return 0; }
+        int SaveTariff(const STG::TariffData& /*td*/, const std::string& /*tariffName*/) const override { return 0; }
+        int RestoreTariff(STG::TariffData* /*td*/, const std::string& /*tariffName*/) const override { return 0; }
+
+        int GetCorpsList(std::vector<std::string>* /*corpsList*/) const override { return 0; }
+        int SaveCorp(const STG::CorpConf& /*cc*/) const override { return 0; }
+        int RestoreCorp(STG::CorpConf* /*cc*/, const std::string& /*name*/) const override { return 0; }
+        int AddCorp(const std::string& /*name*/) const override { return 0; }
+        int DelCorp(const std::string& /*name*/) const override { return 0; }
+
+        int GetServicesList(std::vector<std::string>* /*corpsList*/) const override { return 0; }
+        int SaveService(const STG::ServiceConf& /*sc*/) const override { return 0; }
+        int RestoreService(STG::ServiceConf* /*sc*/, const std::string& /*name*/) const override { return 0; }
+        int AddService(const std::string& /*name*/) const override { return 0; }
+        int DelService(const std::string& /*name*/) const override { return 0; }
+
+        void SetSettings(const STG::ModuleSettings& /*s*/) override {}
         int ParseSettings() override { return 0; }
         int ParseSettings() override { return 0; }
-        const std::string & GetStrError() const override { return strError; }
-        const std::string & GetVersion() const override { return version; }
+        const std::string& GetStrError() const override { return m_errorStr; }
+        const std::string& GetVersion() const override { return m_version; }
 
     private:
 
     private:
-        std::string strError;
-        std::string version;
+        std::string m_errorStr;
+        std::string m_version;
 };
 };
-
-#endif
index 8d02d881846ee51220aad28304181ab878f62ee5..30f26a5d9f7e10f115963f390e68b7639e2e9e6e 100644 (file)
@@ -1,46 +1,41 @@
-#ifndef __TEST_TARIFFS_H__
-#define __TEST_TARIFFS_H__
+#pragma once
 
 #include "stg/tariffs.h"
 
 #include "tariff_impl.h"
 
 
 #include "stg/tariffs.h"
 
 #include "tariff_impl.h"
 
-class TEST_TARIFFS : public STG::Tariffs {
+class TestTariffs : public STG::Tariffs
+{
     public:
     public:
-        TEST_TARIFFS() : testTariff("") {}
+        TestTariffs() : m_tariff("") {}
 
         int            ReadTariffs() override { return 0; }
 
         int            ReadTariffs() override { return 0; }
-        const STG::Tariff * FindByName(const std::string & /*name*/) const override { return &testTariff; }
-        const STG::Tariff * GetNoTariff() const override { return NULL; }
-        int            Del(const std::string & /*name*/, const STG::Admin * /*admin*/) override { return 0; }
-        int            Add(const std::string & /*name*/, const STG::Admin * /*admin*/) override { return 0; }
-        int            Chg(const STG::TariffData & /*td*/, const STG::Admin * /*admin*/) override { return 0; }
+        const STG::Tariff* FindByName(const std::string& /*name*/) const override { return &m_tariff; }
+        const STG::Tariff* GetNoTariff() const override { return NULL; }
+        int            Del(const std::string& /*name*/, const STG::Admin* /*admin*/) override { return 0; }
+        int            Add(const std::string& /*name*/, const STG::Admin* /*admin*/) override { return 0; }
+        int            Chg(const STG::TariffData& /*td*/, const STG::Admin* /*admin*/) override { return 0; }
 
 
-        void AddNotifierAdd(STG::NotifierBase<STG::TariffData> *) override {}
-        void DelNotifierAdd(STG::NotifierBase<STG::TariffData> *) override {}
+        void AddNotifierAdd(STG::NotifierBase<STG::TariffData>*) override {}
+        void DelNotifierAdd(STG::NotifierBase<STG::TariffData>*) override {}
 
 
-        void AddNotifierDel(STG::NotifierBase<STG::TariffData> *) override {}
-        void DelNotifierDel(STG::NotifierBase<STG::TariffData> *) override {}
+        void AddNotifierDel(STG::NotifierBase<STG::TariffData>*) override {}
+        void DelNotifierDel(STG::NotifierBase<STG::TariffData>*) override {}
 
 
-        void           GetTariffsData(std::vector<STG::TariffData> * /*tdl*/) const override {}
+        void           GetTariffsData(std::vector<STG::TariffData>* /*tdl*/) const override {}
 
         size_t         Count() const override { return 0; }
 
 
         size_t         Count() const override { return 0; }
 
-        const std::string & GetStrError() const override { return strError; }
+        const std::string& GetStrError() const override { return m_errorStr; }
 
 
-        void           SetFee(double fee);
+        void           SetFee(double fee)
+        {
+            STG::TariffData td(m_tariff.GetTariffData());
+            td.tariffConf.fee = fee;
+            m_tariff = td;
+        }
 
     private:
 
     private:
-        std::string strError;
-        STG::TariffImpl testTariff;
+        std::string m_errorStr;
+        STG::TariffImpl m_tariff;
 };
 };
-
-inline
-void TEST_TARIFFS::SetFee(double fee)
-{
-    STG::TariffData td(testTariff.GetTariffData());
-    td.tariffConf.fee = fee;
-    testTariff = td;
-}
-
-#endif
index 4fc141000e4193c164171d5e30add0ed6810fd00..adc0507e0dfef63f266543df1f89da7ef3c28491 100644 (file)
@@ -1,55 +1,50 @@
-#ifndef __TEST_USERS_H__
-#define __TEST_USERS_H__
+#pragma once
 
 #include "stg/users.h"
 
 
 #include "stg/users.h"
 
-class TEST_USERS : public STG::Users {
-    public:
-        TEST_USERS() {}
+struct TestUsers : public STG::Users
+{
+    TestUsers() {}
 
 
-        using UserPtr = STG::User*;
-        using ConstUserPtr = const STG::User*;
+    using UserPtr = STG::User*;
+    using ConstUserPtr = const STG::User*;
 
 
-        int  FindByName(const std::string & /*login*/, UserPtr * /*user*/) override
-        { return -1; }
-        int  FindByName(const std::string & /*login*/, ConstUserPtr * /*user*/) const override
-        { return -1; }
+    int  FindByName(const std::string& /*login*/, UserPtr* /*user*/) override
+    { return -1; }
+    int  FindByName(const std::string& /*login*/, ConstUserPtr* /*user*/) const override
+    { return -1; }
 
 
-        bool TariffInUse(const std::string & /*tariffName*/) const override
-        { return -1; }
+    bool TariffInUse(const std::string& /*tariffName*/) const override
+    { return -1; }
 
 
-        void AddNotifierUserAdd(STG::NotifierBase<UserPtr> * /*notifier*/) override {}
-        void DelNotifierUserAdd(STG::NotifierBase<UserPtr> * /*notifier*/) override {}
+    void AddNotifierUserAdd(STG::NotifierBase<UserPtr>* /*notifier*/) override {}
+    void DelNotifierUserAdd(STG::NotifierBase<UserPtr>* /*notifier*/) override {}
 
 
-        void AddNotifierUserDel(STG::NotifierBase<UserPtr> * /*notifier*/) override {}
-        void DelNotifierUserDel(STG::NotifierBase<UserPtr> * /*notifier*/) override {}
+    void AddNotifierUserDel(STG::NotifierBase<UserPtr>* /*notifier*/) override {}
+    void DelNotifierUserDel(STG::NotifierBase<UserPtr>* /*notifier*/) override {}
 
 
-        int  Add(const std::string & /*login*/, const STG::Admin * /*admin*/) override
-        { return 0; }
-        void Del(const std::string & /*login*/, const STG::Admin * /*admin*/) override {}
+    int  Add(const std::string& /*login*/, const STG::Admin* /*admin*/) override
+    { return 0; }
+    void Del(const std::string& /*login*/, const STG::Admin* /*admin*/) override {}
 
 
-        bool Authorize(const std::string &, uint32_t, uint32_t, const STG::Auth *) override
-        { return false; }
-        bool Unauthorize(const std::string &, const STG::Auth *, const std::string &) override
-        { return false; }
+    bool Authorize(const std::string&, uint32_t, uint32_t, const STG::Auth*) override
+    { return false; }
+    bool Unauthorize(const std::string&, const STG::Auth*, const std::string&) override
+    { return false; }
 
 
-        int  ReadUsers() override { return 0; }
-        virtual size_t Count() const override { return 0; };
+    int  ReadUsers() override { return 0; }
+    virtual size_t Count() const override { return 0; };
 
 
-        int  FindByIPIdx(uint32_t /*ip*/, UserPtr * /*user*/) const override
-        { return -1; }
-        bool IsIPInIndex(uint32_t /*ip*/) const override { return false; }
-        bool IsIPInUse(uint32_t, const std::string &, ConstUserPtr *) const override { return false; }
-        bool Exists(const std::string &) const override { return false; }
+    int  FindByIPIdx(uint32_t /*ip*/, UserPtr* /*user*/) const override
+    { return -1; }
+    bool IsIPInIndex(uint32_t /*ip*/) const override { return false; }
+    bool IsIPInUse(uint32_t, const std::string&, ConstUserPtr*) const override { return false; }
+    bool Exists(const std::string&) const override { return false; }
 
 
-        unsigned int  OpenSearch() override { return 0; }
-        int  SearchNext(int /*handle*/, UserPtr * /*u*/) override { return -1; }
-        int  CloseSearch(int /*handle*/) override { return 0; }
+    unsigned int  OpenSearch() override { return 0; }
+    int  SearchNext(int /*handle*/, UserPtr* /*u*/) override { return -1; }
+    int  CloseSearch(int /*handle*/) override { return 0; }
 
 
-        int  Start() override { return 0; }
-        int  Stop() override { return 0; }
-
-    private:
+    int  Start() override { return 0; }
+    int  Stop() override { return 0; }
 };
 };
-
-#endif
diff --git a/tests/tut/tut.hpp b/tests/tut/tut.hpp
deleted file mode 100644 (file)
index 52f9643..0000000
+++ /dev/null
@@ -1,571 +0,0 @@
-#ifndef TUT_H_GUARD
-#define TUT_H_GUARD
-#include <tut/tut_config.hpp>
-
-#include <iostream>
-#include <map>
-#include <vector>
-#include <set>
-#include <string>
-#include <sstream>
-#include <iterator>
-#include <algorithm>
-
-#include "tut_exception.hpp"
-#include "tut_result.hpp"
-#include "tut_posix.hpp"
-#include "tut_assert.hpp"
-#include "tut_runner.hpp"
-
-#if defined(TUT_USE_SEH)
-#include <windows.h>
-#include <winbase.h>
-#endif
-
-/**
- * Template Unit Tests Framework for C++.
- * http://tut.dozen.ru
- *
- * @author Vladimir Dyuzhev, Vladimir.Dyuzhev@gmail.com
- */
-namespace tut
-{
-
-template <class, int>
-class test_group;
-
-/**
- * Test object. Contains data test run upon and default test method
- * implementation. Inherited from Data to allow tests to
- * access test data as members.
- */
-template <class Data>
-class test_object : public Data, public test_object_posix
-{
-    template<class D, int M>
-    friend class test_group;
-
-    void set_test_group(const char *group)
-    {
-        current_test_group_ = group;
-    }
-
-    void set_test_id(int current_test_id)
-    {
-        current_test_id_ = current_test_id;
-    }
-
-public:
-
-    /**
-     * Default constructor
-     */
-    test_object()
-        : called_method_was_a_dummy_test_(false),
-          current_test_id_(0),
-          current_test_name_(),
-          current_test_group_()
-    {
-    }
-
-    void set_test_name(const std::string& current_test_name)
-    {
-        current_test_name_ = current_test_name;
-    }
-
-    const std::string& get_test_name() const
-    {
-        return current_test_name_;
-    }
-
-    const std::string& get_test_group() const
-    {
-        return current_test_group_;
-    }
-
-    int get_test_id() const
-    {
-        return current_test_id_;
-    }
-
-    /**
-     * Default do-nothing test.
-     */
-    template <int n>
-    void test()
-    {
-        called_method_was_a_dummy_test_ = true;
-    }
-
-    /**
-     * The flag is set to true by default (dummy) test.
-     * Used to detect usused test numbers and avoid unnecessary
-     * test object creation which may be time-consuming depending
-     * on operations described in Data::Data() and Data::~Data().
-     */
-    bool called_method_was_a_dummy_test_;
-
-    virtual ~test_object()
-    {
-    }
-
-private:
-    int             current_test_id_;
-    std::string     current_test_name_;
-    std::string     current_test_group_;
-};
-
-
-/**
- * Walks through test tree and stores address of each
- * test method in group. Instantiation stops at 0.
- */
-template <class Test, class Group, int n>
-struct tests_registerer
-{
-    static void reg(Group& group)
-    {
-        group.reg(n, &Test::template test<n>);
-        tests_registerer<Test, Group, n - 1>::reg(group);
-    }
-};
-
-template <class Test, class Group>
-struct tests_registerer<Test, Group, 0>
-{
-    static void reg(Group&)
-    {
-    }
-};
-
-/**
- * Test group; used to recreate test object instance for
- * each new test since we have to have reinitialized
- * Data base class.
- */
-template <class Data, int MaxTestsInGroup = 50>
-class test_group : public group_base, public test_group_posix
-{
-    test_group(const test_group&);
-    void operator=(const test_group&);
-
-    const char* name_;
-
-    typedef void (test_object<Data>::*testmethod)();
-    typedef std::map<int, testmethod> tests;
-    typedef typename tests::iterator tests_iterator;
-    typedef typename tests::const_iterator tests_const_iterator;
-    typedef typename tests::const_reverse_iterator
-    tests_const_reverse_iterator;
-    typedef typename tests::size_type size_type;
-
-    tests tests_;
-    tests_iterator current_test_;
-
-    enum seh_result
-    {
-        SEH_OK,
-#if defined(TUT_USE_SEH)
-        SEH_CTOR,
-        SEH_TEST,
-#endif
-        SEH_DUMMY
-    };
-
-    /**
-     * Exception-in-destructor-safe smart-pointer class.
-     */
-    template <class T>
-    class safe_holder
-    {
-        T* p_;
-        bool permit_throw_in_dtor;
-
-        safe_holder(const safe_holder&);
-        safe_holder& operator=(const safe_holder&);
-
-    public:
-        safe_holder()
-            : p_(0),
-              permit_throw_in_dtor(false)
-        {
-        }
-
-        ~safe_holder()
-        {
-            release();
-        }
-
-        T* operator->() const
-        {
-            return p_;
-        }
-
-        T* get() const
-        {
-            return p_;
-        }
-
-        /**
-         * Tell ptr it can throw from destructor. Right way is to
-         * use std::uncaught_exception(), but some compilers lack
-         * correct implementation of the function.
-         */
-        void permit_throw()
-        {
-            permit_throw_in_dtor = true;
-        }
-
-        /**
-         * Specially treats exceptions in test object destructor;
-         * if test itself failed, exceptions in destructor
-         * are ignored; if test was successful and destructor failed,
-         * warning exception throwed.
-         */
-        void release()
-        {
-            try
-            {
-#if defined(TUT_USE_SEH)
-                if (delete_obj() == false)
-                {
-                    throw warning("destructor of test object raised"
-                        " an SEH exception");
-                }
-#else
-                bool d = delete_obj();
-                assert(d && "delete failed with SEH disabled: runtime bug?");
-#endif
-            }
-            catch (const std::exception& ex)
-            {
-                if (permit_throw_in_dtor)
-                {
-                    std::string msg = "destructor of test object raised"
-                        " exception: ";
-                    msg += ex.what();
-                    throw warning(msg);
-                }
-            }
-            catch( ... )
-            {
-                if (permit_throw_in_dtor)
-                {
-                    throw warning("destructor of test object raised an"
-                        " exception");
-                }
-            }
-        }
-
-        /**
-         * Re-init holder to get brand new object.
-         */
-        void reset()
-        {
-            release();
-            permit_throw_in_dtor = false;
-            p_ = new T();
-        }
-
-        bool delete_obj()
-        {
-#if defined(TUT_USE_SEH)
-            __try
-            {
-#endif
-                T* p = p_;
-                p_ = 0;
-                delete p;
-#if defined(TUT_USE_SEH)
-            }
-            __except(handle_seh_(::GetExceptionCode()))
-            {
-                if (permit_throw_in_dtor)
-                {
-                    return false;
-                }
-            }
-#endif
-            return true;
-        }
-    };
-
-public:
-
-    typedef test_object<Data> object;
-
-    /**
-     * Creates and registers test group with specified name.
-     */
-    test_group(const char* name)
-        : name_(name),
-          tests_(),
-          current_test_()
-    {
-        // register itself
-        runner.get().register_group(name_,this);
-
-        // register all tests
-        tests_registerer<object, test_group, MaxTestsInGroup>::reg(*this);
-    }
-
-    /**
-     * This constructor is used in self-test run only.
-     */
-    test_group(const char* name, test_runner& another_runner)
-        : name_(name),
-          tests_(),
-          current_test_()
-    {
-        // register itself
-        another_runner.register_group(name_, this);
-
-        // register all tests
-        tests_registerer<test_object<Data>, test_group,
-            MaxTestsInGroup>::reg(*this);
-    };
-
-    /**
-     * Registers test method under given number.
-     */
-    void reg(int n, testmethod tm)
-    {
-        tests_[n] = tm;
-    }
-
-    /**
-     * Reset test position before first test.
-     */
-    void rewind()
-    {
-        current_test_ = tests_.begin();
-    }
-
-    /**
-     * Runs next test.
-     */
-    bool run_next(test_result &tr)
-    {
-        if (current_test_ == tests_.end())
-        {
-            return false;
-        }
-
-        // find next user-specialized test
-        safe_holder<object> obj;
-        while (current_test_ != tests_.end())
-        {
-            tests_iterator current_test = current_test_++;
-
-            if(run_test_(current_test, obj, tr) && tr.result != test_result::dummy)
-            {
-                return true;
-            }
-        }
-
-        return false;
-    }
-
-    /**
-     * Runs one test by position.
-     */
-    bool run_test(int n, test_result &tr)
-    {
-        if (tests_.rbegin() == tests_.rend() ||
-            tests_.rbegin()->first < n)
-        {
-            return false;
-        }
-
-        // withing scope; check if given test exists
-        tests_iterator ti = tests_.find(n);
-        if (ti == tests_.end())
-        {
-            return false;
-        }
-
-        safe_holder<object> obj;
-        return run_test_(ti, obj, tr);
-    }
-
-    /**
-     * VC allows only one exception handling type per function,
-     * so I have to split the method.
-     */
-    bool run_test_(const tests_iterator& ti, safe_holder<object>& obj, test_result &tr)
-    {
-        std::string current_test_name;
-
-        tr = test_result(name_, ti->first, current_test_name, test_result::ok);
-
-        try
-        {
-            switch (run_test_seh_(ti->second, obj, current_test_name, ti->first))
-            {
-#if defined(TUT_USE_SEH)
-                case SEH_CTOR:
-                    throw bad_ctor("seh");
-                    break;
-
-                case SEH_TEST:
-                    throw seh("seh");
-                    break;
-#endif
-                case SEH_DUMMY:
-                    tr.result = test_result::dummy;
-                    break;
-
-                case SEH_OK:
-                    // ok
-                    break;
-            }
-        }
-        catch (const rethrown& ex)
-        {
-            tr = ex.tr;
-            tr.result = test_result::rethrown;
-        }
-        catch (const tut_error& ex)
-        {
-            tr.result = ex.result();
-            tr.exception_typeid = ex.type();
-            tr.message = ex.what();
-        }
-        catch (const std::exception& ex)
-        {
-            tr.result = test_result::ex;
-            tr.exception_typeid = type_name(ex);
-            tr.message = ex.what();
-        }
-        catch (...)
-        {
-            // test failed with unknown exception
-            tr.result = test_result::ex;
-        }
-
-        if (obj.get())
-        {
-            tr.name = obj->get_test_name();
-
-            // try to report to parent, if exists
-            send_result_(obj.get(), tr);
-        }
-        else
-        {
-            tr.name = current_test_name;
-        }
-
-        return true;
-    }
-
-    /**
-     * Runs one under SEH if platform supports it.
-     */
-    seh_result run_test_seh_(testmethod tm, safe_holder<object>& obj,
-                             std::string& current_test_name, int current_test_id)
-    {
-#if defined(TUT_USE_SEH)
-        __try
-        {
-#endif
-            if (obj.get() == 0)
-            {
-                reset_holder_(obj);
-            }
-
-            obj->called_method_was_a_dummy_test_ = false;
-
-#if defined(TUT_USE_SEH)
-
-            __try
-            {
-#endif
-                obj.get()->set_test_id(current_test_id);
-                obj.get()->set_test_group(name_);
-                (obj.get()->*tm)();
-#if defined(TUT_USE_SEH)
-            }
-            __except(handle_seh_(::GetExceptionCode()))
-            {
-                current_test_name = obj->get_test_name();
-                return SEH_TEST;
-            }
-#endif
-
-            if (obj->called_method_was_a_dummy_test_)
-            {
-                // do not call obj.release(); reuse object
-                return SEH_DUMMY;
-            }
-
-            current_test_name = obj->get_test_name();
-            obj.permit_throw();
-            obj.release();
-#if defined(TUT_USE_SEH)
-        }
-        __except(handle_seh_(::GetExceptionCode()))
-        {
-            return SEH_CTOR;
-        }
-#endif
-        return SEH_OK;
-    }
-
-    void reset_holder_(safe_holder<object>& obj)
-    {
-        try
-        {
-            obj.reset();
-        }
-        catch (const std::exception& ex)
-        {
-            throw bad_ctor(ex.what());
-        }
-        catch (...)
-        {
-            throw bad_ctor("test constructor has generated an exception;"
-                " group execution is terminated");
-        }
-    }
-};
-
-#if defined(TUT_USE_SEH)
-/**
- * Decides should we execute handler or ignore SE.
- */
-inline int handle_seh_(DWORD excode)
-{
-    switch(excode)
-    {
-    case EXCEPTION_ACCESS_VIOLATION:
-    case EXCEPTION_DATATYPE_MISALIGNMENT:
-    case EXCEPTION_BREAKPOINT:
-    case EXCEPTION_SINGLE_STEP:
-    case EXCEPTION_ARRAY_BOUNDS_EXCEEDED:
-    case EXCEPTION_FLT_DENORMAL_OPERAND:
-    case EXCEPTION_FLT_DIVIDE_BY_ZERO:
-    case EXCEPTION_FLT_INEXACT_RESULT:
-    case EXCEPTION_FLT_INVALID_OPERATION:
-    case EXCEPTION_FLT_OVERFLOW:
-    case EXCEPTION_FLT_STACK_CHECK:
-    case EXCEPTION_FLT_UNDERFLOW:
-    case EXCEPTION_INT_DIVIDE_BY_ZERO:
-    case EXCEPTION_INT_OVERFLOW:
-    case EXCEPTION_PRIV_INSTRUCTION:
-    case EXCEPTION_IN_PAGE_ERROR:
-    case EXCEPTION_ILLEGAL_INSTRUCTION:
-    case EXCEPTION_NONCONTINUABLE_EXCEPTION:
-    case EXCEPTION_STACK_OVERFLOW:
-    case EXCEPTION_INVALID_DISPOSITION:
-    case EXCEPTION_GUARD_PAGE:
-    case EXCEPTION_INVALID_HANDLE:
-        return EXCEPTION_EXECUTE_HANDLER;
-    };
-
-    return EXCEPTION_CONTINUE_SEARCH;
-}
-#endif
-}
-
-#endif // TUT_H_GUARD
-
diff --git a/tests/tut/tut_assert.hpp b/tests/tut/tut_assert.hpp
deleted file mode 100644 (file)
index c195901..0000000
+++ /dev/null
@@ -1,306 +0,0 @@
-#ifndef TUT_ASSERT_H_GUARD
-#define TUT_ASSERT_H_GUARD
-#include <tut/tut_config.hpp>
-
-#include <limits>
-#include <iomanip>
-#include <iterator>
-#include <cassert>
-#include <cmath>
-
-#if defined(TUT_USE_POSIX)
-#include <errno.h>
-#include <cstring>
-#endif
-
-#include "tut_exception.hpp"
-
-namespace tut
-{
-
-    namespace detail
-    {
-        template<typename M>
-        std::ostringstream &msg_prefix(std::ostringstream &str, const M &msg)
-        {
-            std::ostringstream ss;
-            ss << msg;
-
-            if(!ss.str().empty())
-            {
-                str << msg << ": ";
-            }
-
-            return str;
-        }
-    }
-
-
-namespace
-{
-
-/**
- * Tests provided condition.
- * Throws if false.
- */
-void ensure(bool cond)
-{
-    if (!cond)
-    {
-        // TODO: default ctor?
-        throw failure("");
-    }
-}
-
-/**
- * Tests provided condition.
- * Throws if true.
- */
-void ensure_not(bool cond)
-{
-    ensure(!cond);
-}
-
-/**
- * Tests provided condition.
- * Throws if false.
- */
-template <typename M>
-void ensure(const M& msg, bool cond)
-{
-    if (!cond)
-    {
-        throw failure(msg);
-    }
-}
-
-/**
- * Tests provided condition.
- * Throws if true.
- */
-template <typename M>
-void ensure_not(const M& msg, bool cond)
-{
-    ensure(msg, !cond);
-}
-
-/**
- * Tests two objects for being equal.
- * Throws if false.
- *
- * NB: both LHS and RHS must have operator << defined somewhere, or
- * client code will not compile at all!
- */
-template <typename M, typename LHS, typename RHS>
-void ensure_equals(const M& msg, const LHS& actual, const RHS& expected)
-{
-    if (expected != actual)
-    {
-        std::ostringstream ss;
-        detail::msg_prefix(ss,msg)
-           << "expected `"
-           << expected
-           << "` actual `"
-           << actual
-           << "`";
-        throw failure(ss.str());
-    }
-}
-
-/**
- * Tests two pointers for being equal.
- * Throws if false.
- *
- * NB: both T and Q must have operator << defined somewhere, or
- * client code will not compile at all!
- */
-template <typename M, typename LHS, typename RHS>
-void ensure_equals(const M& msg, const LHS * const actual, const RHS * const expected)
-{
-    if (expected != actual)
-    {
-        std::ostringstream ss;
-        detail::msg_prefix(ss,msg)
-           << "expected `"
-           << (void*)expected
-           << "` actual `"
-           << (void*)actual
-           << "`";
-        throw failure(ss.str());
-    }
-}
-
-template<typename M>
-void ensure_equals(const M& msg, const double& actual, const double& expected, const double& epsilon)
-{
-    const double diff = actual - expected;
-
-    if ( (actual != expected) && !((diff <= epsilon) && (diff >= -epsilon )) )
-    {
-        std::ostringstream ss;
-        detail::msg_prefix(ss,msg)
-           << std::scientific
-           << std::showpoint
-           << std::setprecision(16)
-           << "expected `" << expected
-           << "` actual `" << actual
-           << "` with precision `" << epsilon << "`";
-        throw failure(ss.str());
-    }
-}
-
-template<typename M>
-void ensure_equals(const M& msg, const double& actual, const double& expected)
-{
-    ensure_equals(msg, actual, expected, std::numeric_limits<double>::epsilon());
-}
-
-template <typename LHS, typename RHS>
-void ensure_equals(const LHS& actual, const RHS& expected)
-{
-    ensure_equals("Values are not equal", actual, expected);
-}
-
-
-template<typename LhsIterator, typename RhsIterator>
-void ensure_equals(const std::string &msg,
-                   const LhsIterator &lhs_begin, const LhsIterator &lhs_end,
-                   const RhsIterator &rhs_begin, const RhsIterator &rhs_end)
-{
-    typename std::iterator_traits<LhsIterator>::difference_type lhs_size = std::distance(lhs_begin, lhs_end);
-    typename std::iterator_traits<RhsIterator>::difference_type rhs_size = std::distance(rhs_begin, rhs_end);
-
-    if(lhs_size < rhs_size)
-    {
-        ensure_equals(msg + ": range is too short", lhs_size, rhs_size);
-    }
-
-    if(lhs_size > rhs_size)
-    {
-        ensure_equals(msg + ": range is too long", lhs_size, rhs_size);
-    }
-
-    assert(lhs_size == rhs_size);
-
-    LhsIterator lhs_i = lhs_begin;
-    RhsIterator rhs_i = rhs_begin;
-    while( (lhs_i != lhs_end) && (rhs_i != rhs_end) )
-    {
-        if(*lhs_i != *rhs_i)
-        {
-            std::ostringstream ss;
-            detail::msg_prefix(ss,msg)
-                << "expected `" << *rhs_i
-                << "` actual `" << *lhs_i
-                << "` at offset " << std::distance(lhs_begin, lhs_i);
-            throw failure(ss.str());
-        }
-
-        lhs_i++;
-        rhs_i++;
-    }
-
-    assert(lhs_i == lhs_end);
-    assert(rhs_i == rhs_end);
-}
-
-template<typename LhsIterator, typename RhsIterator>
-void ensure_equals(const LhsIterator &lhs_begin, const LhsIterator &lhs_end,
-                   const RhsIterator &rhs_begin, const RhsIterator &rhs_end)
-{
-    ensure_equals("Ranges are not equal", lhs_begin, lhs_end, rhs_begin, rhs_end);
-}
-
-template<typename LhsType, typename RhsType>
-void ensure_equals(const LhsType *lhs_begin, const LhsType *lhs_end,
-                   const RhsType *rhs_begin, const RhsType *rhs_end)
-{
-    ensure_equals("Ranges are not equal", lhs_begin, lhs_end, rhs_begin, rhs_end);
-}
-
-/**
- * Tests two objects for being at most in given distance one from another.
- * Borders are excluded.
- * Throws if false.
- *
- * NB: T must have operator << defined somewhere, or
- * client code will not compile at all! Also, T shall have
- * operators + and -, and be comparable.
- *
- * TODO: domains are wrong, T - T might not yield T, but Q
- */
-template <typename M, class T>
-void ensure_distance(const M& msg, const T& actual, const T& expected, const T& distance)
-{
-    if (expected-distance >= actual || expected+distance <= actual)
-    {
-        std::ostringstream ss;
-        detail::msg_prefix(ss,msg)
-            << " expected `"
-            << expected-distance
-            << "` - `"
-            << expected+distance
-            << "` actual `"
-            << actual
-            << "`";
-        throw failure(ss.str());
-    }
-}
-
-template <class T>
-void ensure_distance(const T& actual, const T& expected, const T& distance)
-{
-    ensure_distance<>("Distance is wrong", actual, expected, distance);
-}
-
-template<typename M>
-void ensure_errno(const M& msg, bool cond)
-{
-    if(!cond)
-    {
-#if defined(TUT_USE_POSIX)
-        char e[512];
-        std::ostringstream ss;
-        detail::msg_prefix(ss,msg)
-           << strerror_r(errno, e, sizeof(e));
-        throw failure(ss.str());
-#else
-        throw failure(msg);
-#endif
-    }
-}
-
-/**
- * Unconditionally fails with message.
- */
-void fail(const char* msg = "")
-{
-    throw failure(msg);
-}
-
-template<typename M>
-void fail(const M& msg)
-{
-    throw failure(msg);
-}
-
-/**
- * Mark test case as known failure and skip execution.
- */
-void skip(const char* msg = "")
-{
-    throw skipped(msg);
-}
-
-template<typename M>
-void skip(const M& msg)
-{
-    throw skipped(msg);
-}
-
-} // end of namespace
-
-}
-
-#endif
-
diff --git a/tests/tut/tut_config.hpp b/tests/tut/tut_config.hpp
deleted file mode 100644 (file)
index d698c1c..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-#ifndef TUT_CONFIG_H_GUARD
-#define TUT_CONFIG_H_GUARD
-
-#define TUT_USE_RTTI 1
-
-#endif
diff --git a/tests/tut/tut_console_reporter.hpp b/tests/tut/tut_console_reporter.hpp
deleted file mode 100644 (file)
index 33856db..0000000
+++ /dev/null
@@ -1,274 +0,0 @@
-#ifndef TUT_CONSOLE_REPORTER
-#define TUT_CONSOLE_REPORTER
-#include <tut/tut.hpp>
-#include <cassert>
-
-/**
- * Template Unit Tests Framework for C++.
- * http://tut.dozen.ru
- *
- * @author Vladimir Dyuzhev, Vladimir.Dyuzhev@gmail.com
- */
-namespace
-{
-
-std::ostream& operator<<(std::ostream& os, const tut::test_result& tr)
-{
-    switch(tr.result)
-    {
-        case tut::test_result::ok:
-            os << '.';
-            break;
-        case tut::test_result::fail:
-            os << '[' << tr.test << "=F]";
-            break;
-        case tut::test_result::ex_ctor:
-            os << '[' << tr.test << "=C]";
-            break;
-        case tut::test_result::ex:
-            os << '[' << tr.test << "=X]";
-            break;
-        case tut::test_result::warn:
-            os << '[' << tr.test << "=W]";
-            break;
-        case tut::test_result::term:
-            os << '[' << tr.test << "=T]";
-            break;
-        case tut::test_result::rethrown:
-            os << '[' << tr.test << "=P]";
-            break;
-        case tut::test_result::skipped:
-            os << '[' << tr.test << "=S]";
-            break;
-        case tut::test_result::dummy:
-            throw tut::tut_error("console reporter called for dummy test result");
-    }
-
-    return os;
-}
-
-} // end of namespace
-
-namespace tut
-{
-
-/**
- * Default TUT callback handler.
- */
-class console_reporter : public tut::callback
-{
-    std::string current_group;
-    typedef std::vector<tut::test_result> not_passed_list;
-    not_passed_list not_passed;
-    std::ostream& os;
-
-    console_reporter(const console_reporter &);
-    console_reporter &operator=(const console_reporter &);
-public:
-
-    int ok_count;
-    int exceptions_count;
-    int failures_count;
-    int terminations_count;
-    int warnings_count;
-    int skipped_count;
-
-    console_reporter()
-        : current_group(),
-          not_passed(),
-          os(std::cout),
-          ok_count(0),
-          exceptions_count(0),
-          failures_count(0),
-          terminations_count(0),
-          warnings_count(0),
-          skipped_count(0)
-    {
-        init();
-    }
-
-    console_reporter(std::ostream& out)
-        : current_group(),
-          not_passed(),
-          os(out),
-          ok_count(0),
-          exceptions_count(0),
-          failures_count(0),
-          terminations_count(0),
-          warnings_count(0),
-          skipped_count(0)
-
-    {
-        init();
-    }
-
-    void run_started()
-    {
-        init();
-    }
-
-    void test_completed(const tut::test_result& tr)
-    {
-        if (tr.group != current_group)
-        {
-            os << std::endl << tr.group << ": " << std::flush;
-            current_group = tr.group;
-        }
-
-        os << tr << std::flush;
-
-        // update global statistics
-        switch (tr.result) {
-            case test_result::ok:
-                ok_count++;
-                break;
-            case test_result::fail:
-            case test_result::rethrown:
-                failures_count++;
-                break;
-            case test_result::ex:
-            case test_result::ex_ctor:
-                exceptions_count++;
-                break;
-            case test_result::warn:
-                warnings_count++;
-                break;
-            case test_result::term:
-                terminations_count++;
-                break;
-            case test_result::skipped:
-                skipped_count++;
-                break;
-            case tut::test_result::dummy:
-                assert( (tr.result != tut::test_result::dummy) && "Should never be called");
-        } // switch
-
-        if ( (tr.result != tut::test_result::ok) &&
-             (tr.result != tut::test_result::skipped) )
-        {
-            not_passed.push_back(tr);
-        }
-    }
-
-    void run_completed()
-    {
-        os << std::endl;
-
-        if (not_passed.size() > 0)
-        {
-            not_passed_list::const_iterator i = not_passed.begin();
-            while (i != not_passed.end())
-            {
-                tut::test_result tr = *i;
-
-                os << std::endl;
-
-                os << "---> " << "group: " << tr.group
-                << ", test: test<" << tr.test << ">"
-                << (!tr.name.empty() ? (std::string(" : ") + tr.name) : std::string())
-                << std::endl;
-
-#if defined(TUT_USE_POSIX)
-                if(tr.pid != getpid())
-                {
-                    os << "     child pid: " << tr.pid << std::endl;
-                }
-#endif
-                os << "     problem: ";
-                switch(tr.result)
-                {
-                case test_result::rethrown:
-                    os << "assertion failed in child" << std::endl;
-                    break;
-                case test_result::fail:
-                    os << "assertion failed" << std::endl;
-                    break;
-                case test_result::ex:
-                case test_result::ex_ctor:
-                    os << "unexpected exception" << std::endl;
-                    if( tr.exception_typeid != "" )
-                    {
-                        os << "     exception typeid: "
-                        << tr.exception_typeid << std::endl;
-                    }
-                    break;
-                case test_result::term:
-                    os << "would be terminated" << std::endl;
-                    break;
-                case test_result::warn:
-                    os << "test passed, but cleanup code (destructor) raised"
-                        " an exception" << std::endl;
-                    break;
-                default:
-                    break;
-                }
-
-                if (!tr.message.empty())
-                {
-                    if (tr.result == test_result::fail)
-                    {
-                        os << "     failed assertion: `" << tr.message << "`"
-                            << std::endl;
-                    }
-                    else
-                    {
-                        os << "     message: `" << tr.message << "`"
-                            << std::endl;
-                    }
-                }
-
-                ++i;
-            }
-        }
-
-        os << std::endl;
-
-        os << "tests summary:";
-        if (terminations_count > 0)
-        {
-            os << " terminations:" << terminations_count;
-        }
-        if (exceptions_count > 0)
-        {
-            os << " exceptions:" << exceptions_count;
-        }
-        if (failures_count > 0)
-        {
-            os << " failures:" << failures_count;
-        }
-        if (warnings_count > 0)
-        {
-            os << " warnings:" << warnings_count;
-        }
-
-        os << " ok:" << ok_count;
-
-        if(skipped_count > 0)
-        {
-            os << " skipped:" << skipped_count;
-        }
-        os << std::endl;
-    }
-
-    virtual bool all_ok() const
-    {
-        return not_passed.empty();
-    }
-
-private:
-
-    void init()
-    {
-        ok_count = 0;
-        exceptions_count = 0;
-        failures_count = 0;
-        terminations_count = 0;
-        warnings_count = 0;
-        skipped_count = 0;
-        not_passed.clear();
-    }
-};
-
-}
-
-#endif
diff --git a/tests/tut/tut_cppunit_reporter.hpp b/tests/tut/tut_cppunit_reporter.hpp
deleted file mode 100644 (file)
index 62646b0..0000000
+++ /dev/null
@@ -1,218 +0,0 @@
-\r
-#ifndef TUT_CPPUNIT_REPORTER\r
-#define TUT_CPPUNIT_REPORTER\r
-\r
-#include <tut/tut.hpp>\r
-#include <string>\r
-#include <fstream>\r
-#include <vector>\r
-#include <stdexcept>\r
-#include <memory>\r
-\r
-namespace tut\r
-{\r
-\r
-/**\r
- * CppUnit TUT reporter\r
- */\r
-class cppunit_reporter : public tut::callback\r
-{\r
-    std::vector<tut::test_result> failed_tests_;\r
-    std::vector<tut::test_result> passed_tests_;\r
-    const std::string filename_;\r
-    std::auto_ptr<std::ostream> stream_;\r
-\r
-\r
-    cppunit_reporter(const cppunit_reporter &);\r
-    cppunit_reporter &operator=(const cppunit_reporter &);\r
-\r
-public:\r
-    explicit cppunit_reporter(const std::string &filename = "testResult.xml")\r
-        : failed_tests_(),\r
-          passed_tests_(),\r
-          filename_(filename),\r
-          stream_(new std::ofstream(filename_.c_str()))\r
-    {\r
-        if (!stream_->good()) {\r
-            throw tut_error("Cannot open output file `" + filename_ + "`");\r
-        }\r
-    }\r
-\r
-    explicit cppunit_reporter(std::ostream &stream)\r
-        : failed_tests_(),\r
-          passed_tests_(),\r
-          filename_(),\r
-          stream_(&stream)\r
-    {\r
-    }\r
-\r
-    ~cppunit_reporter()\r
-    {\r
-        if(filename_.empty())\r
-        {\r
-            stream_.release();\r
-        }\r
-    }\r
-\r
-    void run_started()\r
-    {\r
-        failed_tests_.clear();\r
-        passed_tests_.clear();\r
-    }\r
-\r
-    void test_completed(const tut::test_result& tr)\r
-    {\r
-        assert(tr.result != test_result::dummy );\r
-        if ( (tr.result == test_result::ok) ||\r
-             (tr.result == test_result::skipped) )\r
-        {\r
-            passed_tests_.push_back(tr);\r
-        }\r
-        else\r
-        {\r
-            failed_tests_.push_back(tr);\r
-        }\r
-    }\r
-\r
-    void run_completed()\r
-    {\r
-        int errors = 0;\r
-        int failures = 0;\r
-        std::string failure_type;\r
-        std::string failure_msg;\r
-\r
-        *stream_ << "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\" ?>" << std::endl\r
-                 << "<TestRun>" << std::endl;\r
-\r
-        if (failed_tests_.size() > 0)\r
-        {\r
-            *stream_ << "  <FailedTests>" << std::endl;\r
-\r
-            for (unsigned int i=0; i<failed_tests_.size(); i++)\r
-            {\r
-                switch (failed_tests_[i].result)\r
-                {\r
-                    case test_result::fail:\r
-                        failure_type = "Assertion";\r
-                        failure_msg  = "";\r
-                        failures++;\r
-                        break;\r
-                    case test_result::ex:\r
-                        failure_type = "Assertion";\r
-                        failure_msg  = "Thrown exception: " + failed_tests_[i].exception_typeid + '\n';\r
-                        failures++;\r
-                        break;\r
-                    case test_result::warn:\r
-                        failure_type = "Assertion";\r
-                        failure_msg  = "Destructor failed\n";\r
-                        failures++;\r
-                        break;\r
-                    case test_result::term:\r
-                        failure_type = "Error";\r
-                        failure_msg  = "Test application terminated abnormally\n";\r
-                        errors++;\r
-                        break;\r
-                    case test_result::ex_ctor:\r
-                        failure_type = "Error";\r
-                        failure_msg  = "Constructor has thrown an exception: " + failed_tests_[i].exception_typeid + '\n';\r
-                        errors++;\r
-                        break;\r
-                    case test_result::rethrown:\r
-                        failure_type = "Assertion";\r
-                        failure_msg  = "Child failed\n";\r
-                        failures++;\r
-                        break;\r
-                    default: // ok, skipped, dummy\r
-                        failure_type = "Error";\r
-                        failure_msg  = "Unknown test status, this should have never happened. "\r
-                                       "You may just have found a bug in TUT, please report it immediately.\n";\r
-                        errors++;\r
-                        break;\r
-                }\r
-\r
-                *stream_ << "    <FailedTest id=\"" << failed_tests_[i].test << "\">" << std::endl\r
-                            << "      <Name>" << encode(failed_tests_[i].group) + "::" + encode(failed_tests_[i].name) << "</Name>" << std::endl\r
-                            << "      <FailureType>" << failure_type << "</FailureType>" << std::endl\r
-                            << "      <Location>" << std::endl\r
-                            << "        <File>Unknown</File>" << std::endl\r
-                            << "        <Line>Unknown</Line>" << std::endl\r
-                            << "      </Location>" << std::endl\r
-                            << "      <Message>" << encode(failure_msg + failed_tests_[i].message) << "</Message>" << std::endl\r
-                            << "    </FailedTest>" << std::endl;\r
-            }\r
-\r
-            *stream_ << "  </FailedTests>" << std::endl;\r
-        }\r
-\r
-        /* *********************** passed tests ***************************** */\r
-        if (passed_tests_.size() > 0) {\r
-            *stream_ << "  <SuccessfulTests>" << std::endl;\r
-\r
-            for (unsigned int i=0; i<passed_tests_.size(); i++)\r
-            {\r
-                *stream_ << "    <Test id=\"" << passed_tests_[i].test << "\">" << std::endl\r
-                            << "      <Name>" << encode(passed_tests_[i].group) + "::" + encode(passed_tests_[i].name) << "</Name>" << std::endl\r
-                            << "    </Test>" << std::endl;\r
-            }\r
-\r
-            *stream_ << "  </SuccessfulTests>" << std::endl;\r
-        }\r
-\r
-        /* *********************** statistics ***************************** */\r
-        *stream_ << "  <Statistics>" << std::endl\r
-                    << "    <Tests>" << (failed_tests_.size() + passed_tests_.size()) << "</Tests>" << std::endl\r
-                    << "    <FailuresTotal>" << failed_tests_.size() << "</FailuresTotal>" << std::endl\r
-                    << "    <Errors>" << errors << "</Errors>" << std::endl\r
-                    << "    <Failures>" << failures << "</Failures>" << std::endl\r
-                    << "  </Statistics>" << std::endl;\r
-\r
-        /* *********************** footer ***************************** */\r
-        *stream_ << "</TestRun>" << std::endl;\r
-    }\r
-\r
-    virtual bool all_ok() const\r
-    {\r
-        return failed_tests_.empty();\r
-    }\r
-\r
-    /**\r
-     * \brief Encodes text to XML\r
-     * XML-reserved characters (e.g. "<") are encoded according to specification\r
-     * @param text text to be encoded\r
-     * @return encoded string\r
-     */\r
-    static std::string encode(const std::string & text)\r
-    {\r
-        std::string out;\r
-\r
-        for (unsigned int i=0; i<text.length(); ++i) {\r
-            char c = text[i];\r
-            switch (c) {\r
-                case '<':\r
-                    out += "&lt;";\r
-                    break;\r
-                case '>':\r
-                    out += "&gt;";\r
-                    break;\r
-                case '&':\r
-                    out += "&amp;";\r
-                    break;\r
-                case '\'':\r
-                    out += "&apos;";\r
-                    break;\r
-                case '"':\r
-                    out += "&quot;";\r
-                    break;\r
-                default:\r
-                    out += c;\r
-            }\r
-        }\r
-\r
-        return out;\r
-    }\r
-};\r
-\r
-}\r
-\r
-#endif\r
-\r
diff --git a/tests/tut/tut_exception.hpp b/tests/tut/tut_exception.hpp
deleted file mode 100644 (file)
index 1ebea34..0000000
+++ /dev/null
@@ -1,237 +0,0 @@
-#ifndef TUT_EXCEPTION_H_GUARD
-#define TUT_EXCEPTION_H_GUARD
-
-#include <stdexcept>
-#include "tut_result.hpp"
-
-namespace tut
-{
-
-/**
- * The base for all TUT exceptions.
- */
-struct tut_error : public std::exception
-{
-    explicit tut_error(const std::string& msg)
-        : err_msg(msg)
-    {
-    }
-
-    virtual test_result::result_type result() const
-    {
-        return test_result::ex;
-    }
-
-    virtual std::string type() const
-    {
-        return "tut::tut_error";
-    }
-
-    const char* what() const throw()
-    {
-        return err_msg.c_str();
-    }
-
-    ~tut_error() throw()
-    {
-    }
-
-private:
-    void operator=(const tut_error &);
-
-    const std::string err_msg;
-};
-
-/**
- * Group not found exception.
- */
-struct no_such_group : public tut_error
-{
-    explicit no_such_group(const std::string& grp)
-        : tut_error(grp)
-    {
-    }
-
-    virtual std::string type() const
-    {
-        return "tut::no_such_group";
-    }
-
-    ~no_such_group() throw()
-    {
-    }
-};
-
-/**
- * Test not found exception.
- */
-struct no_such_test : public tut_error
-{
-    explicit no_such_test(const std::string& grp)
-        : tut_error(grp)
-    {
-    }
-
-    virtual std::string type() const
-    {
-        return "tut::no_such_test";
-    }
-
-    ~no_such_test() throw()
-    {
-    }
-};
-
-/**
- * Internal exception to be throwed when
- * test constructor has failed.
- */
-struct bad_ctor : public tut_error
-{
-    explicit bad_ctor(const std::string& msg)
-        : tut_error(msg)
-    {
-    }
-
-    test_result::result_type result() const
-    {
-        return test_result::ex_ctor;
-    }
-
-    virtual std::string type() const
-    {
-        return "tut::bad_ctor";
-    }
-
-    ~bad_ctor() throw()
-    {
-    }
-};
-
-/**
- * Exception to be throwed when ensure() fails or fail() called.
- */
-struct failure : public tut_error
-{
-    explicit failure(const std::string& msg)
-        : tut_error(msg)
-    {
-    }
-
-    test_result::result_type result() const
-    {
-        return test_result::fail;
-    }
-
-    virtual std::string type() const
-    {
-        return "tut::failure";
-    }
-
-    ~failure() throw()
-    {
-    }
-};
-
-/**
- * Exception to be throwed when test desctructor throwed an exception.
- */
-struct warning : public tut_error
-{
-    explicit warning(const std::string& msg)
-        : tut_error(msg)
-    {
-    }
-
-    test_result::result_type result() const
-    {
-        return test_result::warn;
-    }
-
-    virtual std::string type() const
-    {
-        return "tut::warning";
-    }
-
-    ~warning() throw()
-    {
-    }
-};
-
-/**
- * Exception to be throwed when test issued SEH (Win32)
- */
-struct seh : public tut_error
-{
-    explicit seh(const std::string& msg)
-        : tut_error(msg)
-    {
-    }
-
-    virtual test_result::result_type result() const
-    {
-        return test_result::term;
-    }
-
-    virtual std::string type() const
-    {
-        return "tut::seh";
-    }
-
-    ~seh() throw()
-    {
-    }
-};
-
-/**
- * Exception to be throwed when child processes fail.
- */
-struct rethrown : public failure
-{
-    explicit rethrown(const test_result &result)
-        : failure(result.message), tr(result)
-    {
-    }
-
-    virtual test_result::result_type result() const
-    {
-        return test_result::rethrown;
-    }
-
-    virtual std::string type() const
-    {
-        return "tut::rethrown";
-    }
-
-    ~rethrown() throw()
-    {
-    }
-
-    const test_result tr;
-};
-
-struct skipped : public tut_error
-{
-    explicit skipped(const std::string& msg)
-        : tut_error(msg)
-    {
-    }
-
-    virtual test_result::result_type result() const
-    {
-        return test_result::skipped;
-    }
-
-    virtual std::string type() const
-    {
-        return "tut::skipped";
-    }
-
-    ~skipped() throw()
-    {
-    }
-};
-
-}
-
-#endif
diff --git a/tests/tut/tut_fpt.hpp b/tests/tut/tut_fpt.hpp
deleted file mode 100644 (file)
index e8df8b0..0000000
+++ /dev/null
@@ -1,185 +0,0 @@
-/**
- * @brief  Additional ensures for scientific/engineering applications.
- * @author Joerg <yogi2005@users.sourceforge.net>
- * @date   07/04/2008
- */
-#ifndef TUT_Float_H_GUARD
-#define TUT_Float_H_GUARD
-
-#include <limits>
-#include <iostream>
-
-namespace tut
-{
-    namespace detail
-    {
-        template<bool Predicate, typename Then, typename Else>
-        struct If
-        {
-            typedef Else type;
-        };
-
-        template<typename Then, typename Else>
-        struct If<true,Then,Else>
-        {
-            typedef Then type;
-        };
-
-        template<typename T>
-        struct fpt_traits
-        {
-            struct StdNumericLimitsNotAvailable {};
-            static const StdNumericLimitsNotAvailable static_check[ std::numeric_limits<T>::is_specialized ];
-
-            static const T zero;
-
-            typedef typename If<std::numeric_limits<T>::is_integer,
-                                double,
-                                T>::type Result;
-
-            static T abs(const T &arg)
-            {
-                if(arg < zero)
-                    return zero - arg;
-                else
-                    return arg;
-            }
-
-            static T sig(const T &arg)
-            {
-                if(arg < zero)
-                    return -1;
-                else
-                    return 1;
-            }
-
-            static inline Result div(const Result &number, const T &divisor)
-            {
-                static_cast<void>(static_check);
-
-                if(number == zero && divisor == zero)
-                    return std::numeric_limits<Result>::quiet_NaN();
-
-                if(number == zero)
-                    return zero;
-
-                if(divisor == zero)
-                    return sig(number) * std::numeric_limits<Result>::infinity();
-
-                assert(zero < number);
-                assert(zero < divisor);
-
-                // Avoid underflow
-                if(static_cast<T>(1) < abs(divisor))
-                {
-                    // number / divisor < min <=> number < min * divisor
-                    if( abs(number) < abs(divisor) * std::numeric_limits<T>::min())
-                    {
-                        return sig(divisor) * sig(number) * std::numeric_limits<T>::min();
-                    }
-                }
-
-                // Avoid overflow
-                if( abs(divisor) < static_cast<T>(1))
-                {
-                    // number / divisor > max <=> number > max * divisor
-                    if( abs(divisor) * std::numeric_limits<T>::max() < abs(number))
-                    {
-                        return sig(divisor) * sig(number) * std::numeric_limits<T>::max();
-                    }
-                }
-
-                return number / divisor;
-            }
-        };
-
-        template<typename T>
-        const typename fpt_traits<T>::StdNumericLimitsNotAvailable
-            fpt_traits<T>::static_check[ std::numeric_limits<T>::is_specialized ] = { {} };
-
-        template<typename T>
-        const T fpt_traits<T>::zero = static_cast<T>(0);
-
-        template<typename T, typename U>
-        bool check_tolerance(T actual, T expected, U fraction)
-        {
-            typename fpt_traits<T>::Result diff = fpt_traits<T>::div( fpt_traits<T>::abs( expected - actual ),
-                                                                      fpt_traits<T>::abs( expected ) );
-
-            return (diff == fraction) || (diff < fraction);
-        }
-
-    } // namespace detail
-
-    template<typename T, typename U>
-    void ensure_close(const char* msg, const T& actual, const T& expected, const U& tolerance )
-    {
-        typedef detail::fpt_traits<U> Traits;
-
-        typename Traits::Result fraction = Traits::div( Traits::abs(static_cast<typename Traits::Result>(tolerance)),
-                                                        static_cast<typename Traits::Result>(100) );
-        if( !detail::check_tolerance(actual, expected, fraction) )
-        {
-            std::ostringstream ss;
-            ss << ( msg ? msg : "" )
-            << ( msg ? ": " : "" )
-            << "expected `"
-            << expected
-            << "` and actual `"
-            << actual
-            << "` differ more than "
-            << tolerance
-            << "%";
-             throw failure( ss.str().c_str() );
-        }
-    }
-
-    template<typename T, typename Tolerance>
-    void ensure_close(const T& actual, const T& expected, const Tolerance& tolerance )
-    {
-        ensure_close( 0, actual, expected, tolerance );
-    }
-
-    template<typename T, typename U>
-    void ensure_close_fraction(const char* msg, const T& actual, const T& expected, const U& fraction)
-    {
-        typedef char StdNumericLimitsNotAvailable;
-        const StdNumericLimitsNotAvailable static_check[ std::numeric_limits<U>::is_specialized ] = { 0 };
-        static_cast<void>(static_check);
-
-        typedef typename detail::If<std::numeric_limits<U>::is_integer,
-                                    double,
-                                    U>::type Tolerance;
-
-        if( !detail::check_tolerance(actual, expected, fraction) )
-        {
-            std::ostringstream ss;
-            ss << ( msg ? msg : "" )
-            << ( msg ? ": " : "" )
-            << "expected `"
-            << expected
-            << "` and actual `"
-            << actual
-            << "` differ more than fraction `"
-            << fraction
-            << "`";
-            throw failure( ss.str().c_str() );
-        }
-    }
-
-    template<typename T>
-    void ensure_close_fraction( const char* msg, const T& actual, const T& expected, const int& tolerance )
-    {
-        ensure_close(msg, actual, expected, double(tolerance));
-    }
-
-    template< typename T, typename Tolerance>
-    void ensure_close_fraction(const T& actual, const T& expected, const Tolerance& fraction)
-    {
-        ensure_close_fraction( 0, actual, expected, fraction );
-    }
-
-} // namespace tut
-
-#endif
-
diff --git a/tests/tut/tut_macros.hpp b/tests/tut/tut_macros.hpp
deleted file mode 100644 (file)
index ed517d6..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-#ifndef TUT_MACROS_HPP
-#define TUT_MACROS_HPP
-
-#include <tut/tut.hpp>
-
-#ifdef ensure_THROW
-#error ensure_THROW macro is already defined
-#endif
-
-/** Helper macros to ensure that a call throws exception.
- * \code
- *  #include <tut_macros.h>
- *  ensure_THROW( this_function_should_throw_bad_alloc(), std::bad_alloc );
- * \endcode
- */
-#define ensure_THROW( x, e ) \
-try         \
-{           \
-    x;      \
-    fail(#x " has not thrown expected exception " #e); \
-}                \
-catch(const e &) \
-{                \
-}                \
-catch(const std::exception &ex)  \
-{           \
-    fail( std::string(#x " has thrown unexpected exception ")+tut::type_name(ex)+": "+ex.what()); \
-} \
-catch(...)       \
-{                \
-    fail(#x " has thrown unexpected unknown exception"); \
-}
-
-#ifdef ensure_NO_THROW
-#error ensure_NO_THROW macro is already defined
-#endif
-
-/** Helper macro to ensure a call does not throw any exceptions.
- * \code
- *  #include <tut_macros.h>
- *  ensure_NO_THROW( this_function_should_never_throw() );
- * \endcode
- */
-#define ensure_NO_THROW( x ) \
-try         \
-{           \
-    x;      \
-}           \
-catch(const std::exception &ex)  \
-{           \
-    fail( std::string(#x " has thrown unexpected exception ")+tut::type_name(ex)+": "+ex.what()); \
-} \
-catch(...)  \
-{           \
-    fail(#x " has thrown unexpected unknown exception"); \
-}
-
-#ifdef __COUNTER__
-#define TUT_TESTCASE(object) template<> template<> void object::test<__COUNTER__>()
-#endif
-
-#endif
-
diff --git a/tests/tut/tut_main.hpp b/tests/tut/tut_main.hpp
deleted file mode 100644 (file)
index c6955bb..0000000
+++ /dev/null
@@ -1,111 +0,0 @@
-#ifndef TUT_MAIN_H
-#define TUT_MAIN_H
-
-#include <tut/tut.hpp>
-#include <tut/tut_console_reporter.hpp>
-#include <tut/tut_cppunit_reporter.hpp>
-#include <iostream>
-#include <cstring>
-
-namespace tut
-{
-
-/** Helper function to make test binaries simpler.
- *
- * Example of basic usage follows.
- *
- * @code
- *  namespace tut { test_runner_singleton runner; }
- *
- *  int main(int argc, char **argv)
- *  {
- *      if( tut_main(argc, argv) )
- *          return 0;
- *      else
- *          return -1;
- *  }
- * @endcode
- *
- * It is also possible to do some generic initialization before
- * running any tests and cleanup before exiting application.
- * Note that tut_main can throw tut::no_such_group or tut::no_such_test.
- *
- * @code
- *  namespace tut { test_runner_singleton runner; }
- *
- *  int main(int argc, char **argv)
- *  {
- *      tut::xml_reporter reporter;
- *      tut::runner.get().insert_callback(&reporter);
- *
- *      MyInit();
- *      try
- *      {
- *          tut_main(argc, argv);
- *      }
- *      catch(const tut::tut_error &ex)
- *      {
- *          std::cerr << "TUT error: " << ex.what() << std::endl;
- *      }
- *      MyCleanup();
- *  }
- * @endcode
- */
-inline bool tut_main(int argc, const char * const * const argv, std::ostream &os = std::cerr)
-{
-    std::stringstream usage;
-    usage << "Usage: " << argv[0] << " [group] [testcase]" << std::endl;
-    groupnames gr = runner.get().list_groups();
-    usage << "Available test groups:" << std::endl;
-    for(groupnames::const_iterator i = gr.begin(); i != gr.end(); ++i)
-    {
-        usage << "    " << *i << std::endl;
-    }
-
-    if(argc>1)
-    {
-        if(std::string(argv[1]) == "-h" ||
-           std::string(argv[1]) == "--help" ||
-           std::string(argv[1]) == "/?" ||
-           argc > 3)
-        {
-            os << usage.rdbuf();
-            return false;
-        }
-    }
-
-    // Check command line options.
-    switch(argc)
-    {
-        case 1:
-            runner.get().run_tests();
-        break;
-
-        case 2:
-            runner.get().run_tests(argv[1]);
-        break;
-
-        case 3:
-        {
-            char *end;
-            int t = strtol(argv[2], &end, 10);
-            if(end != argv[2] + strlen(argv[2]))
-            {
-                throw no_such_test("`" + std::string(argv[2]) + "` should be a number");
-            }
-
-            test_result tr;
-            if(!runner.get().run_test(argv[1], t, tr) || tr.result == test_result::dummy)
-            {
-                throw no_such_test("No testcase `" + std::string(argv[2]) + "` in group `" + argv[1] + "`");
-            }
-        }
-        break;
-    }
-
-    return true;
-} // tut_main()
-
-}
-
-#endif
diff --git a/tests/tut/tut_posix.hpp b/tests/tut/tut_posix.hpp
deleted file mode 100644 (file)
index c7cfe57..0000000
+++ /dev/null
@@ -1,485 +0,0 @@
-#ifndef TUT_FORK_H_GUARD
-#define TUT_FORK_H_GUARD
-#include <tut/tut_config.hpp>
-
-#if defined(TUT_USE_POSIX)
-#include <errno.h>
-#include <unistd.h>
-#include <signal.h>
-#include <sys/wait.h>
-#include <sys/time.h>
-#include <sys/types.h>
-
-#include <cstring>
-#include <cstdlib>
-#include <map>
-#include <iterator>
-#include <functional>
-
-#include "tut_result.hpp"
-#include "tut_assert.hpp"
-#include "tut_runner.hpp"
-
-namespace tut
-{
-
-template<typename, int>
-class test_group;
-
-template<typename T>
-class test_object;
-
-class test_group_posix
-{
-private:
-    template<typename, int>
-    friend class test_group;
-
-    template<typename T>
-    void send_result_(const T *obj, const test_result &tr)
-    {
-        if(obj->get_pipe_() == -1)
-        {
-            return;
-        }
-
-        if(tr.result != test_result::ok)
-        {
-            std::ostringstream ss;
-            ss << int(tr.result) << "\n"
-                << tr.group << "\n"
-                << tr.test << "\n"
-                << tr.name << "\n"
-                << tr.exception_typeid << "\n";
-            std::copy( tr.message.begin(), tr.message.end(), std::ostreambuf_iterator<char>(ss.rdbuf()) );
-
-            int size = ss.str().length();
-            int w = write(obj->get_pipe_(), ss.str().c_str(), size);
-            ensure_errno("write() failed", w == size);
-        }
-    }
-
-    virtual ~test_group_posix()
-    {
-    }
-};
-
-template<typename T>
-struct tut_posix
-{
-    pid_t fork()
-    {
-        test_object<T> *self = dynamic_cast< tut::test_object<T>* >(this);
-        ensure("trying to call 'tut_fork' in ctor of test object", self != NULL);
-
-        return self->fork_();
-    }
-
-    pid_t waitpid(pid_t pid, int *status, int flags = 0)
-    {
-        test_object<T> *self = dynamic_cast< tut::test_object<T>* >(this);
-        ensure("trying to call 'tut_waitpid' in ctor of test object", self != NULL);
-
-        return self->waitpid_(pid, status, flags);
-    }
-
-    void ensure_child_exit(pid_t pid, int exit_status = 0)
-    {
-        test_object<T> *self = dynamic_cast< tut::test_object<T>* >(this);
-        ensure("trying to call 'ensure_child_exit' in ctor of test object", self != NULL);
-
-        int status;
-        self->waitpid_(pid, &status);
-
-        self->ensure_child_exit_(status, exit_status);
-    }
-
-
-    void ensure_child_signal(pid_t pid, int signal = SIGTERM)
-    {
-        test_object<T> *self = dynamic_cast< tut::test_object<T>* >(this);
-        ensure("trying to call 'ensure_child_signal' in ctor of test object", self != NULL);
-
-        int status;
-        self->waitpid_(pid, &status);
-
-        self->ensure_child_signal_(status, signal);
-    }
-
-    std::set<pid_t> get_pids() const
-    {
-        using namespace std;
-
-        const test_object<T> *self = dynamic_cast< const tut::test_object<T>* >(this);
-        ensure("trying to call 'get_pids' in ctor of test object", self != NULL);
-
-        return self->get_pids_();
-    }
-
-    virtual ~tut_posix()
-    {
-    }
-
-};
-
-class test_object_posix
-{
-public:
-    typedef std::map<pid_t, int> pid_map;
-
-    /**
-     * Default constructor
-     */
-    test_object_posix()
-        : pids_(),
-          pipe_(-1)
-    {
-    }
-
-
-    virtual ~test_object_posix()
-    {
-        // we have forked
-        if(pipe_ != -1)
-        {
-            // in child, force exit
-            std::exit(0);
-        }
-
-        if(!pids_.empty())
-        {
-            std::ostringstream ss;
-
-            // in parent, reap children
-            for(std::map<pid_t, int>::iterator i = pids_.begin(); i != pids_.end(); ++i)
-            {
-                try {
-                    kill_child_(i->first);
-                } catch(const rethrown &ex) {
-                    ss << std::endl << "child " << ex.tr.pid << " has thrown an exception: " << ex.what();
-                } catch(const failure &ex) {
-                    ss << std::endl << ex.what();
-                }
-            }
-
-            if(!ss.str().empty())
-            {
-                fail(ss.str().c_str());
-            }
-        }
-    }
-
-private:
-    template<typename T>
-    friend class tut_posix;
-
-    friend class test_group_posix;
-
-    int get_pipe_() const
-    {
-        return pipe_;
-    }
-
-
-    pid_t fork_()
-    {
-        // create pipe
-        int fds[2];
-        ensure_errno("pipe() failed", ::pipe(fds) == 0);
-
-        pid_t pid = ::fork();
-
-        ensure_errno("fork() failed", pid >= 0);
-
-        if(pid != 0)
-        {
-            // in parent, register pid
-            ensure("duplicated child", pids_.insert( std::make_pair(pid, fds[0]) ).second);
-
-            // close writing side
-            close(fds[1]);
-        }
-        else
-        {
-            // in child, shutdown reporter
-            tut::runner.get().clear_callbacks();
-
-            // close reading side
-            close(fds[0]);
-            pipe_ = fds[1];
-        }
-
-        return pid;
-    }
-
-    void kill_child_(pid_t pid)
-    {
-        int status;
-
-        if(waitpid_(pid, &status, WNOHANG) == pid)
-        {
-            ensure_child_exit_(status, 0);
-            return;
-        }
-
-        if(::kill(pid, SIGTERM) != 0)
-        {
-            if(errno == ESRCH)
-            {
-                // no such process
-                return;
-            }
-            else
-            {
-                // cannot kill, we are in trouble
-                std::ostringstream ss;
-                char e[1024];
-                ss << "child " << pid << " could not be killed with SIGTERM, " << strerror_r(errno, e, sizeof(e)) << std::endl;
-                fail(ss.str());
-            }
-        }
-
-        if(waitpid_(pid, &status, WNOHANG) == pid)
-        {
-            // child killed, check signal
-            ensure_child_signal_(status, SIGTERM);
-
-            ensure_equals("child process exists after SIGTERM", ::kill(pid, 0), -1);
-            return;
-        }
-
-        // child seems to be still exiting, give it some time
-        sleep(2);
-
-        if(waitpid_(pid, &status, WNOHANG) != pid)
-        {
-            // child is still running, kill it
-            if(::kill(pid, SIGKILL) != 0)
-            {
-                if(errno == ESRCH)
-                {
-                    // no such process
-                    return;
-                }
-                else
-                {
-                    std::ostringstream ss;
-                    char e[1024];
-                    ss << "child " << pid << " could not be killed with SIGKILL, " << strerror_r(errno, e, sizeof(e)) << std::endl;
-                    fail(ss.str());
-                }
-            }
-
-            ensure_equals("wait after SIGKILL", waitpid_(pid, &status), pid);
-            ensure_child_signal_(status, SIGKILL);
-
-            ensure_equals("child process exists after SIGKILL", ::kill(pid, 0), -1);
-
-            std::ostringstream ss;
-            ss << "child " << pid << " had to be killed with SIGKILL";
-            fail(ss.str());
-        }
-    }
-
-    test_result receive_result_(std::istream &ss, pid_t pid)
-    {
-        test_result tr;
-
-        int type;
-        ss >> type;
-        tr.result = test_result::result_type(type);
-        ss.ignore(1024, '\n');
-
-        std::getline(ss, tr.group);
-        ss >> tr.test;
-        ss.ignore(1024, '\n');
-        std::getline(ss, tr.name);
-        std::getline(ss, tr.exception_typeid);
-        std::copy( std::istreambuf_iterator<char>(ss.rdbuf()),
-                   std::istreambuf_iterator<char>(),
-                   std::back_inserter(tr.message) );
-
-        tr.pid = pid;
-
-        return tr;
-    }
-
-    struct fdclose
-    {
-        fdclose(int fd): fd_(fd) { }
-        ~fdclose()
-        {
-            close(fd_);
-        }
-    private:
-        int fd_;
-    };
-
-    pid_t waitpid_(pid_t pid, int *status, int flags = 0)
-    {
-
-        ensure("trying to wait for unknown pid", pids_.count(pid) > 0);
-
-        pid_t p = ::waitpid(pid, status, flags);
-        if( (flags & WNOHANG) && (p != pid) )
-        {
-            return p;
-        }
-
-        // read child result from pipe
-        fd_set fdset;
-        timeval tv;
-        tv.tv_sec = 0;
-        tv.tv_usec = 0;
-
-        FD_ZERO(&fdset);
-
-        int pipe = pids_[pid];
-        fdclose guard(pipe);
-
-        FD_SET(pipe, &fdset);
-
-        int result = select(pipe+1, &fdset, NULL, NULL, &tv);
-        ensure_errno("sanity check on select() failed", result >= 0);
-
-        if(result > 0)
-        {
-            ensure("sanity check on FD_ISSET() failed", FD_ISSET(pipe, &fdset) );
-
-            std::stringstream ss;
-
-            //TODO: max failure length
-            char buffer[1024];
-            int r = read(pipe, buffer, sizeof(buffer));
-            ensure_errno("sanity check on read() failed", r >= 0);
-
-            if(r > 0)
-            {
-                ss.write(buffer, r);
-                throw rethrown( receive_result_(ss, pid) );
-            }
-        }
-
-        return pid;
-    }
-
-    void ensure_child_exit_(int status, int exit_status)
-    {
-        if(WIFSIGNALED(status))
-        {
-            std::ostringstream ss;
-            ss << "child killed by signal " << WTERMSIG(status)
-                << ": expected exit with code " << exit_status;
-
-            throw failure(ss.str().c_str());
-        }
-
-        if(WIFEXITED(status))
-        {
-            if(WEXITSTATUS(status) != exit_status)
-            {
-                std::ostringstream ss;
-                ss << "child exited, expected '"
-                    << exit_status
-                    << "' actual '"
-                    << WEXITSTATUS(status)
-                    << '\'';
-
-                throw failure(ss.str().c_str());
-            }
-        }
-
-        if(WIFSTOPPED(status))
-        {
-            std::ostringstream ss;
-            ss << "child stopped by signal " << WTERMSIG(status)
-                << ": expected exit with code " << exit_status;
-            throw failure(ss.str().c_str());
-        }
-    }
-
-    void ensure_child_signal_(int status, int signal)
-    {
-        if(WIFSIGNALED(status))
-        {
-            if(WTERMSIG(status) != signal)
-            {
-                std::ostringstream ss;
-                ss << "child killed by signal, expected '"
-                    << signal
-                    << "' actual '"
-                    << WTERMSIG(status)
-                    << '\'';
-                throw failure(ss.str().c_str());
-            }
-        }
-
-        if(WIFEXITED(status))
-        {
-            std::ostringstream ss;
-            ss << "child exited with code " << WEXITSTATUS(status)
-                << ": expected signal " << signal;
-
-            throw failure(ss.str().c_str());
-        }
-
-        if(WIFSTOPPED(status))
-        {
-            std::ostringstream ss;
-            ss << "child stopped by signal " << WTERMSIG(status)
-                << ": expected kill by signal " << signal;
-
-            throw failure(ss.str().c_str());
-        }
-    }
-
-    std::set<pid_t> get_pids_() const
-    {
-        using namespace std;
-
-        set<pid_t> pids;
-        for(pid_map::const_iterator i = pids_.begin(); i != pids_.end(); ++i)
-        {
-            pids.insert( i->first );
-        }
-
-        return pids;
-    }
-
-    pid_map         pids_;
-    int             pipe_;
-};
-
-} // namespace tut
-
-#else
-
-namespace tut
-{
-
-struct test_object_posix
-{
-    virtual ~test_object_posix()
-    {
-    }
-};
-
-struct test_group_posix
-{
-    template<typename T>
-    void send_result_(const T*, const test_result &)
-    {
-    }
-
-    virtual ~test_group_posix()
-    {
-    }
-};
-
-} // namespace tut
-
-#endif
-
-
-#endif
-
diff --git a/tests/tut/tut_reporter.hpp b/tests/tut/tut_reporter.hpp
deleted file mode 100644 (file)
index 56731d8..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-#ifndef TUT_REPORTER
-#define TUT_REPORTER
-
-#include <tut/tut_console_reporter.hpp>
-
-namespace tut
-{
-    typedef console_reporter reporter;
-}
-
-#endif
diff --git a/tests/tut/tut_restartable.hpp b/tests/tut/tut_restartable.hpp
deleted file mode 100644 (file)
index 9f92923..0000000
+++ /dev/null
@@ -1,410 +0,0 @@
-#ifndef TUT_RESTARTABLE_H_GUARD
-#define TUT_RESTARTABLE_H_GUARD
-
-#include <tut/tut.hpp>
-#include <fstream>
-#include <iostream>
-#include <stdexcept>
-#include <cassert>
-
-/**
- * Optional restartable wrapper for test_runner.
- *
- * Allows to restart test runs finished due to abnormal
- * test application termination (such as segmentation
- * fault or math error).
- *
- * @author Vladimir Dyuzhev, Vladimir.Dyuzhev@gmail.com
- */
-
-namespace tut
-{
-
-namespace util
-{
-
-/**
- * Escapes non-alphabetical characters in string.
- */
-std::string escape(const std::string& orig)
-{
-    std::string rc;
-    std::string::const_iterator i,e;
-    i = orig.begin();
-    e = orig.end();
-
-    while (i != e)
-    {
-        if ((*i >= 'a' && *i <= 'z') ||
-                (*i >= 'A' && *i <= 'Z') ||
-                (*i >= '0' && *i <= '9') )
-        {
-            rc += *i;
-        }
-        else
-        {
-            rc += '\\';
-            rc += ('a'+(((unsigned int)*i) >> 4));
-            rc += ('a'+(((unsigned int)*i) & 0xF));
-        }
-
-        ++i;
-    }
-    return rc;
-}
-
-/**
- * Un-escapes string.
- */
-std::string unescape(const std::string& orig)
-{
-    std::string rc;
-    std::string::const_iterator i,e;
-    i = orig.begin();
-    e = orig.end();
-
-    while (i != e)
-    {
-        if (*i != '\\')
-        {
-            rc += *i;
-        }
-        else
-        {
-            ++i;
-            if (i == e)
-            {
-                throw std::invalid_argument("unexpected end of string");
-            }
-            unsigned int c1 = *i;
-            ++i;
-            if (i == e)
-            {
-                throw std::invalid_argument("unexpected end of string");
-            }
-            unsigned int c2 = *i;
-            rc += (((c1 - 'a') << 4) + (c2 - 'a'));
-        }
-
-        ++i;
-    }
-    return rc;
-}
-
-/**
- * Serialize test_result avoiding interfering with operator <<.
- */
-void serialize(std::ostream& os, const tut::test_result& tr)
-{
-    os << escape(tr.group) << std::endl;
-    os << tr.test << ' ';
-    switch(tr.result)
-    {
-    case test_result::ok:
-        os << 0;
-        break;
-    case test_result::fail:
-        os << 1;
-        break;
-    case test_result::ex:
-        os << 2;
-        break;
-    case test_result::warn:
-        os << 3;
-        break;
-    case test_result::term:
-        os << 4;
-        break;
-    case test_result::rethrown:
-        os << 5;
-        break;
-    case test_result::ex_ctor:
-        os << 6;
-        break;
-    case test_result::dummy:
-        assert(!"Should never be called");
-    default:
-        throw std::logic_error("operator << : bad result_type");
-    }
-    os << ' ' << escape(tr.message) << std::endl;
-}
-
-/**
- * deserialization for test_result
- */
-bool deserialize(std::istream& is, tut::test_result& tr)
-{
-    std::getline(is,tr.group);
-    if (is.eof())
-    {
-        return false;
-    }
-    tr.group = unescape(tr.group);
-
-    tr.test = -1;
-    is >> tr.test;
-    if (tr.test < 0)
-    {
-        throw std::logic_error("operator >> : bad test number");
-    }
-
-    int n = -1;
-    is >> n;
-    switch(n)
-    {
-    case 0:
-        tr.result = test_result::ok;
-        break;
-    case 1:
-        tr.result = test_result::fail;
-        break;
-    case 2:
-        tr.result = test_result::ex;
-        break;
-    case 3:
-        tr.result = test_result::warn;
-        break;
-    case 4:
-        tr.result = test_result::term;
-        break;
-    case 5:
-        tr.result = test_result::rethrown;
-        break;
-    case 6:
-        tr.result = test_result::ex_ctor;
-        break;
-    default:
-        throw std::logic_error("operator >> : bad result_type");
-    }
-
-    is.ignore(1); // space
-    std::getline(is,tr.message);
-    tr.message = unescape(tr.message);
-    if (!is.good())
-    {
-        throw std::logic_error("malformed test result");
-    }
-    return true;
-}
-}
-
-/**
- * Restartable test runner wrapper.
- */
-class restartable_wrapper
-{
-    test_runner& runner_;
-    callbacks callbacks_;
-
-    std::string dir_;
-    std::string log_; // log file: last test being executed
-    std::string jrn_; // journal file: results of all executed tests
-
-public:
-    /**
-     * Default constructor.
-     * @param dir Directory where to search/put log and journal files
-     */
-    restartable_wrapper(const std::string& dir = ".")
-        : runner_(runner.get()),
-          callbacks_(),
-          dir_(dir),
-          log_( dir + '/' + "log.tut" ),
-          jrn_( dir + '/' + "journal.tut" )
-    {
-        // dozen: it works, but it would be better to use system path separator
-    }
-
-    /**
-     * Stores another group for getting by name.
-     */
-    void register_group(const std::string& name, group_base* gr)
-    {
-        runner_.register_group(name,gr);
-    }
-
-    /**
-     * Stores callback object.
-     */
-    void set_callback(callback* cb)
-    {
-        callbacks_.clear();
-        callbacks_.insert(cb);
-    }
-
-    void insert_callback(callback* cb)
-    {
-        callbacks_.insert(cb);
-    }
-
-    void erase_callback(callback* cb)
-    {
-        callbacks_.erase(cb);
-    }
-
-    void set_callbacks(const callbacks& cb)
-    {
-        callbacks_ = cb;
-    }
-
-    const callbacks& get_callbacks() const
-    {
-        return runner_.get_callbacks();
-    }
-
-    /**
-     * Returns list of known test groups.
-     */
-    groupnames list_groups() const
-    {
-        return runner_.list_groups();
-    }
-
-    /**
-     * Runs all tests in all groups.
-     */
-    void run_tests() const
-    {
-        // where last run was failed
-        std::string fail_group;
-        int fail_test;
-        read_log_(fail_group,fail_test);
-        bool fail_group_reached = (fail_group == "");
-
-        // iterate over groups
-        tut::groupnames gn = list_groups();
-        tut::groupnames::const_iterator gni,gne;
-        gni = gn.begin();
-        gne = gn.end();
-        while (gni != gne)
-        {
-            // skip all groups before one that failed
-            if (!fail_group_reached)
-            {
-                if (*gni != fail_group)
-                {
-                    ++gni;
-                    continue;
-                }
-                fail_group_reached = true;
-            }
-
-            // first or restarted run
-            int test = (*gni == fail_group && fail_test >= 0) ? fail_test + 1 : 1;
-            while(true)
-            {
-                // last executed test pos
-                register_execution_(*gni,test);
-
-                tut::test_result tr;
-                if( !runner_.run_test(*gni,test, tr) || tr.result == test_result::dummy )
-                {
-                    break;
-                }
-                register_test_(tr);
-
-                ++test;
-            }
-
-            ++gni;
-        }
-
-        // show final results to user
-        invoke_callback_();
-
-        // truncate files as mark of successful finish
-        truncate_();
-    }
-
-private:
-    /**
-     * Shows results from journal file.
-     */
-    void invoke_callback_() const
-    {
-        runner_.set_callbacks(callbacks_);
-        runner_.cb_run_started_();
-
-        std::string current_group;
-        std::ifstream ijournal(jrn_.c_str());
-        while (ijournal.good())
-        {
-            tut::test_result tr;
-            if( !util::deserialize(ijournal,tr) )
-            {
-                break;
-            }
-            runner_.cb_test_completed_(tr);
-        }
-
-        runner_.cb_run_completed_();
-    }
-
-    /**
-     * Register test into journal.
-     */
-    void register_test_(const test_result& tr) const
-    {
-        std::ofstream ojournal(jrn_.c_str(), std::ios::app);
-        util::serialize(ojournal, tr);
-        ojournal << std::flush;
-        if (!ojournal.good())
-        {
-            throw std::runtime_error("unable to register test result in file "
-                + jrn_);
-        }
-    }
-
-    /**
-     * Mark the fact test going to be executed
-     */
-    void register_execution_(const std::string& grp, int test) const
-    {
-        // last executed test pos
-        std::ofstream olog(log_.c_str());
-        olog << util::escape(grp) << std::endl << test << std::endl << std::flush;
-        if (!olog.good())
-        {
-            throw std::runtime_error("unable to register execution in file "
-                + log_);
-        }
-    }
-
-    /**
-     * Truncate tests.
-     */
-    void truncate_() const
-    {
-        std::ofstream olog(log_.c_str());
-        std::ofstream ojournal(jrn_.c_str());
-    }
-
-    /**
-     * Read log file
-     */
-    void read_log_(std::string& fail_group, int& fail_test) const
-    {
-        // read failure point, if any
-        std::ifstream ilog(log_.c_str());
-        std::getline(ilog,fail_group);
-        fail_group = util::unescape(fail_group);
-        ilog >> fail_test;
-        if (!ilog.good())
-        {
-            fail_group = "";
-            fail_test = -1;
-            truncate_();
-        }
-        else
-        {
-            // test was terminated...
-            tut::test_result tr(fail_group, fail_test, "", tut::test_result::term);
-            register_test_(tr);
-        }
-    }
-};
-
-}
-
-#endif
-
diff --git a/tests/tut/tut_result.hpp b/tests/tut/tut_result.hpp
deleted file mode 100644 (file)
index e960785..0000000
+++ /dev/null
@@ -1,174 +0,0 @@
-#ifndef TUT_RESULT_H_GUARD
-#define TUT_RESULT_H_GUARD
-#include <tut/tut_config.hpp>
-
-#include <string>
-
-#if defined(TUT_USE_RTTI)
-#if (defined(_MSC_VER) && !defined(_CPPRTTI)) || (defined(__GNUC__) && !defined(__GXX_RTTI))
-#undef TUT_USE_RTTI
-#endif
-#endif
-
-#if defined(TUT_USE_RTTI)
-#include <typeinfo>
-#endif
-
-namespace tut
-{
-
-#if defined(TUT_USE_RTTI)
-template<typename T>
-inline std::string type_name(const T& t)
-{
-    return typeid(t).name();
-}
-#else
-template<typename T>
-inline std::string type_name(const T& t)
-{
-    return "Unknown type, RTTI disabled";
-}
-
-inline std::string type_name(const std::exception&)
-{
-    return "Unknown std::exception, RTTI disabled";
-}
-#endif
-
-
-#if defined(TUT_USE_POSIX)
-struct test_result_posix
-{
-    test_result_posix()
-        : pid(getpid())
-    {
-    }
-
-    virtual ~test_result_posix()
-    {
-    }
-
-    pid_t pid;
-};
-#else
-struct test_result_posix
-{
-    virtual ~test_result_posix()
-    {
-    }
-};
-#endif
-
-/**
- * Return type of runned test/test group.
- *
- * For test: contains result of test and, possible, message
- * for failure or exception.
- */
-struct test_result : public test_result_posix
-{
-    /**
-     * Test group name.
-     */
-    std::string group;
-
-    /**
-     * Test number in group.
-     */
-    int test;
-
-    /**
-     * Test name (optional)
-     */
-    std::string name;
-
-    /**
-     * result of a test 
-     */
-    enum result_type
-    {
-        ok,       ///< test finished successfully
-        fail,     ///< test failed with ensure() or fail() methods
-        ex,       ///< test throwed an exceptions
-        warn,     ///< test finished successfully, but test destructor throwed
-        term,     ///< test forced test application to terminate abnormally
-        ex_ctor,  ///< 
-        rethrown, ///< 
-        skipped,  ///< 
-        dummy     ///< 
-    };
-
-    result_type result;
-
-    /**
-     * Exception message for failed test.
-     */
-    std::string message;
-    std::string exception_typeid;
-
-    /**
-     * Default constructor.
-     */
-    test_result()
-        : group(),
-          test(0),
-          name(),
-          result(ok),
-          message(),
-          exception_typeid()
-    {
-    }
-
-    /**
-     * Constructor.
-     */
-    test_result(const std::string& grp, int pos,
-                const std::string& test_name, result_type res)
-        : group(grp),
-          test(pos),
-          name(test_name),
-          result(res),
-          message(),
-          exception_typeid()
-    {
-    }
-
-    /**
-     * Constructor with exception.
-     */
-    test_result(const std::string& grp,int pos,
-                const std::string& test_name, result_type res,
-                const std::exception& ex)
-        : group(grp),
-          test(pos),
-          name(test_name),
-          result(res),
-          message(ex.what()),
-          exception_typeid(type_name(ex))
-    {
-    }
-
-    /** Constructor with typeid.
-    */
-    test_result(const std::string& grp,int pos,
-                const std::string& test_name, result_type res,
-                const std::string& ex_typeid,
-                const std::string& msg)
-        : group(grp),
-          test(pos),
-          name(test_name),
-          result(res),
-          message(msg),
-          exception_typeid(ex_typeid)
-    {
-    }
-
-    virtual ~test_result()
-    {
-    }
-};
-
-}
-
-#endif
diff --git a/tests/tut/tut_runner.hpp b/tests/tut/tut_runner.hpp
deleted file mode 100644 (file)
index 3803046..0000000
+++ /dev/null
@@ -1,388 +0,0 @@
-#ifndef TUT_RUNNER_H_GUARD
-#define TUT_RUNNER_H_GUARD
-
-#include <string>
-#include <vector>
-#include <set>
-#include "tut_exception.hpp"
-
-namespace tut
-{
-
-/**
- * Interface.
- * Test group operations.
- */
-struct group_base
-{
-    virtual ~group_base()
-    {
-    }
-
-    // execute tests iteratively
-    virtual void rewind() = 0;
-    virtual bool run_next(test_result &) = 0;
-
-    // execute one test
-    virtual bool run_test(int n, test_result &tr) = 0;
-};
-
-
-/**
- * Test runner callback interface.
- * Can be implemented by caller to update
- * tests results in real-time. User can implement
- * any of callback methods, and leave unused
- * in default implementation.
- */
-struct callback
-{
-    /**
-     * Default constructor.
-     */
-    callback()
-    {
-    }
-
-    /**
-     * Virtual destructor is a must for subclassed types.
-     */
-    virtual ~callback()
-    {
-    }
-
-    /**
-     * Called when new test run started.
-     */
-    virtual void run_started()
-    {
-    }
-
-    /**
-     * Called when a group started
-     * @param name Name of the group
-     */
-    virtual void group_started(const std::string& name)
-    {
-        (void)name;
-    }
-
-    /**
-     * Called when a test finished.
-     * @param tr Test results.
-     */
-    virtual void test_completed(const test_result& tr)
-    {
-        (void)tr;
-    }
-
-    /**
-     * Called when a group is completed
-     * @param name Name of the group
-     */
-    virtual void group_completed(const std::string& name)
-    {
-        (void)name;
-    }
-
-    /**
-     * Called when all tests in run completed.
-     */
-    virtual void run_completed()
-    {
-    }
-
-    virtual bool all_ok() const
-    {
-        return true;
-    }
-private:
-    callback(const callback &);
-    void operator=(const callback&);
-};
-
-/**
- * Typedef for runner::list_groups()
- */
-typedef std::vector<std::string> groupnames;
-typedef std::set<callback*> callbacks;
-
-/**
- * Test runner.
- */
-class test_runner
-{
-
-public:
-
-    /**
-     * Constructor
-     */
-    test_runner()
-        : groups_(),
-          callbacks_()
-    {
-    }
-
-    /**
-     * Stores another group for getting by name.
-     * @param name new group object
-     * @param gr new callback object
-     */
-    void register_group(const std::string& name, group_base* gr)
-    {
-        if (gr == 0)
-        {
-            throw tut_error("group shall be non-null");
-        }
-
-        if (groups_.find(name) != groups_.end())
-        {
-            std::string msg("attempt to add already existent group " + name);
-            throw tut_error(msg);
-        }
-
-        groups_.insert( std::make_pair(name, gr) );
-    }
-
-    /**
-     * Stores one callback object.
-     * @param cb new callback object
-     */
-    void set_callback(callback *cb)
-    {
-        clear_callbacks();
-        insert_callback(cb);
-    }
-
-    /**
-     * Add callback object.
-     * @param cb new callback object
-     */
-    void insert_callback(callback* cb)
-    {
-        if(cb != NULL)
-        {
-            callbacks_.insert(cb);
-        }
-    }
-
-    /**
-     * Remove callback object.
-     * @param cb callback to remove
-     */
-    void erase_callback(callback* cb)
-    {
-        callbacks_.erase(cb);
-    }
-
-    /**
-     * Remove all callback objects.
-     */
-    void clear_callbacks()
-    {
-        callbacks_.clear();
-    }
-
-    /**
-     * Returns callback list.
-     * @return     callback list
-     */
-    const callbacks &get_callbacks() const
-    {
-        return callbacks_;
-    }
-
-    /**
-     * Set callback list.
-     * @param cb new callback list
-     */
-    void set_callbacks(const callbacks &cb)
-    {
-        callbacks_ = cb;
-    }
-
-    /**
-     * Returns list of known test groups.
-     * @return     groups list
-     */
-    const groupnames list_groups() const
-    {
-        groupnames ret;
-        for(const_iterator i = groups_.begin(); i != groups_.end(); ++i)
-        {
-            ret.push_back(i->first);
-        }
-        return ret;
-    }
-
-    /**
-     * Runs all tests in all groups.
-     */
-    void run_tests() const
-    {
-        cb_run_started_();
-
-        const_iterator i = groups_.begin();
-        const_iterator e = groups_.end();
-        while (i != e)
-        {
-            cb_group_started_(i->first);
-            run_all_tests_in_group_(i);
-            cb_group_completed_(i->first);
-
-            ++i;
-        }
-
-        cb_run_completed_();
-    }
-
-    /**
-     * Runs all tests in specified group.
-     * @param group_name group to test
-     */
-    void run_tests(const std::string& group_name) const
-    {
-        cb_run_started_();
-
-        const_iterator i = groups_.find(group_name);
-        if (i == groups_.end())
-        {
-            cb_run_completed_();
-            throw no_such_group(group_name);
-        }
-
-        cb_group_started_(group_name);
-        run_all_tests_in_group_(i);
-        cb_group_completed_(group_name);
-        cb_run_completed_();
-    }
-
-    /**
-     * Runs one test in specified group.
-     * @param group_name group to test
-     * @param n run case in test
-     * @param tr result of this case
-     * @return  true if test is ok, otherwise false
-     */
-    bool run_test(const std::string& group_name, int n, test_result &tr) const
-    {
-        cb_run_started_();
-
-        const_iterator i = groups_.find(group_name);
-        if (i == groups_.end())
-        {
-            cb_run_completed_();
-            throw no_such_group(group_name);
-        }
-
-        cb_group_started_(group_name);
-
-        bool t = i->second->run_test(n, tr);
-
-        if(t && tr.result != test_result::dummy)
-        {
-            cb_test_completed_(tr);
-        }
-
-        cb_group_completed_(group_name);
-        cb_run_completed_();
-
-        return t;
-    }
-
-protected:
-
-    typedef std::map<std::string, group_base*> groups;
-    typedef groups::iterator iterator;
-    typedef groups::const_iterator const_iterator;
-    groups groups_;
-
-    callbacks callbacks_;
-
-private:
-    friend class restartable_wrapper;
-
-    void cb_run_started_() const
-    {
-        for(callbacks::const_iterator i = callbacks_.begin(); i != callbacks_.end(); ++i)
-        {
-            (*i)->run_started();
-        }
-    }
-
-    void cb_run_completed_() const
-    {
-        for(callbacks::const_iterator i = callbacks_.begin(); i != callbacks_.end(); ++i)
-        {
-            (*i)->run_completed();
-        }
-    }
-
-    void cb_group_started_(const std::string &group_name) const
-    {
-        for(callbacks::const_iterator i = callbacks_.begin(); i != callbacks_.end(); ++i)
-        {
-            (*i)->group_started(group_name);
-        }
-    }
-
-    void cb_group_completed_(const std::string &group_name) const
-    {
-        for(callbacks::const_iterator i = callbacks_.begin(); i != callbacks_.end(); ++i)
-        {
-            (*i)->group_completed(group_name);
-        }
-    }
-
-    void cb_test_completed_(const test_result &tr) const
-    {
-        for(callbacks::const_iterator i = callbacks_.begin(); i != callbacks_.end(); ++i)
-        {
-            (*i)->test_completed(tr);
-        }
-    }
-
-    void run_all_tests_in_group_(const_iterator i) const
-    {
-        i->second->rewind();
-
-        test_result tr;
-        while(i->second->run_next(tr))
-        {
-            if(tr.result != test_result::dummy)
-            {
-                cb_test_completed_(tr);
-            }
-
-            if (tr.result == test_result::ex_ctor)
-            {
-                // test object ctor failed, skip whole group
-                break;
-            }
-        }
-    }
-};
-
-/**
- * Singleton for test_runner implementation.
- * Instance with name runner_singleton shall be implemented
- * by user.
- */
-class test_runner_singleton
-{
-public:
-
-    static test_runner& get()
-    {
-        static test_runner tr;
-        return tr;
-    }
-};
-
-extern test_runner_singleton runner;
-
-}
-
-#endif // TUT_RUNNER_H_GUARD
-
diff --git a/tests/tut/tut_xml_reporter.hpp b/tests/tut/tut_xml_reporter.hpp
deleted file mode 100644 (file)
index d0c301d..0000000
+++ /dev/null
@@ -1,305 +0,0 @@
-#ifndef TUT_XML_REPORTER
-#define TUT_XML_REPORTER
-#include <tut/tut_config.hpp>
-#include <tut/tut.hpp>
-#include <tut/tut_cppunit_reporter.hpp>
-#include <cassert>
-#include <string>
-#include <fstream>
-#include <vector>
-#include <stdexcept>
-
-namespace tut
-{
-
-/**
- * \brief JUnit XML TUT reporter
- * @author Lukasz Maszczynski, NSN
- * @date 11/07/2008
- */
-class xml_reporter : public tut::callback
-{
-    typedef std::vector<tut::test_result> TestResults;
-    typedef std::map<std::string, TestResults> TestGroups;
-
-    TestGroups all_tests_; /// holds all test results
-    const std::string filename_; /// filename base
-    std::auto_ptr<std::ostream> stream_;
-
-    /**
-     * \brief Builds "testcase" XML entity with given parameters
-     * Builds \<testcase\> entity according to given parameters. \<testcase\>-s are part of \<testsuite\>.
-     * @param tr test result to be used as source data
-     * @param failure_type type of failure to be reported ("Assertion" or "Error", empty if test passed)
-     * @param failure_msg failure message to be reported (empty, if test passed)
-     * @return string with \<testcase\> entity
-     */
-    std::string xml_build_testcase(const tut::test_result & tr, const std::string & failure_type,
-                                           const std::string & failure_msg, int pid = 0)
-    {
-        using std::endl;
-        using std::string;
-
-        std::ostringstream out;
-
-        if ( (tr.result == test_result::ok) ||
-             (tr.result == test_result::skipped) )
-        {
-            out << "    <testcase classname=\"" << cppunit_reporter::encode(tr.group) << "\" name=\"" << cppunit_reporter::encode(tr.name) << "\"/>";
-        }
-        else
-        {
-            string err_msg = cppunit_reporter::encode(failure_msg + tr.message);
-
-            string tag; // determines tag name: "failure" or "error"
-            if ( tr.result == test_result::fail || tr.result == test_result::warn ||
-                 tr.result == test_result::ex || tr.result == test_result::ex_ctor || tr.result == test_result::rethrown )
-            {
-                tag = "failure";
-            }
-            else
-            {
-                tag = "error";
-            }
-
-            out << "    <testcase classname=\"" << cppunit_reporter::encode(tr.group) << "\" name=\"" << cppunit_reporter::encode(tr.name) << "\">" << endl;
-            out << "      <" << tag << " message=\"" << err_msg << "\"" << " type=\"" << failure_type << "\"";
-#if defined(TUT_USE_POSIX)
-            if(pid != getpid())
-            {
-                out << " child=\"" << pid << "\"";
-            }
-#else
-            (void)pid;
-#endif
-            out << ">" << err_msg << "</" << tag << ">" << endl;
-            out << "    </testcase>";
-        }
-
-        return out.str();
-    }
-
-    /**
-     * \brief Builds "testsuite" XML entity
-     * Builds \<testsuite\> XML entity according to given parameters.
-     * @param errors number of errors to be reported
-     * @param failures number of failures to be reported
-     * @param total total number of tests to be reported
-     * @param name test suite name
-     * @param testcases cppunit_reporter::encoded XML string containing testcases
-     * @return string with \<testsuite\> entity
-     */
-    std::string xml_build_testsuite(int errors, int failures, int total,
-                                            const std::string & name, const std::string & testcases)
-    {
-        std::ostringstream out;
-
-        out << "  <testsuite errors=\"" << errors << "\" failures=\"" << failures << "\" tests=\"" << total << "\" name=\"" << cppunit_reporter::encode(name) << "\">" << std::endl;
-        out << testcases;
-        out << "  </testsuite>";
-
-        return out.str();
-    }
-
-public:
-    int ok_count;           /// number of passed tests
-    int exceptions_count;   /// number of tests that threw exceptions
-    int failures_count;     /// number of tests that failed
-    int terminations_count; /// number of tests that would terminate
-    int warnings_count;     /// number of tests where destructors threw an exception
-
-    /**
-     * \brief Default constructor
-     * @param filename base filename
-     */
-    xml_reporter(const std::string & filename)
-        : all_tests_(),
-          filename_(filename),
-          stream_(new std::ofstream(filename_.c_str())),
-          ok_count(0),
-          exceptions_count(0),
-          failures_count(0),
-          terminations_count(0),
-          warnings_count(0)
-    {
-        if (!stream_->good()) {
-            throw tut_error("Cannot open output file `" + filename_ + "`");
-        }
-    }
-
-    xml_reporter(std::ostream & stream)
-        : all_tests_(),
-          filename_(),
-          stream_(&stream),
-          ok_count(0),
-          exceptions_count(0),
-          failures_count(0),
-          terminations_count(0),
-          warnings_count(0)
-    {
-    }
-
-    ~xml_reporter()
-    {
-        if(filename_.empty())
-        {
-            stream_.release();
-        }
-    }
-
-    /**
-     * \brief Callback function
-     * This function is called before the first test is executed. It initializes counters.
-     */
-    virtual void run_started()
-    {
-        ok_count = 0;
-        exceptions_count = 0;
-        failures_count = 0;
-        terminations_count = 0;
-        warnings_count = 0;
-        all_tests_.clear();
-    }
-
-    /**
-     * \brief Callback function
-     * This function is called when test completes. Counters are updated here, and test results stored.
-     */
-    virtual void test_completed(const tut::test_result& tr)
-    {
-        // update global statistics
-        switch (tr.result) {
-            case test_result::ok:
-            case test_result::skipped:
-                ok_count++;
-                break;
-            case test_result::fail:
-            case test_result::rethrown:
-                failures_count++;
-                break;
-            case test_result::ex:
-            case test_result::ex_ctor:
-                exceptions_count++;
-                break;
-            case test_result::warn:
-                warnings_count++;
-                break;
-            case test_result::term:
-                terminations_count++;
-                break;
-            case tut::test_result::dummy:
-                assert(!"Should never be called");
-        } // switch
-
-        // add test result to results table
-        all_tests_[tr.group].push_back(tr);
-    }
-
-    /**
-     * \brief Callback function
-     * This function is called when all tests are completed. It generates XML output
-     * to file(s). File name base can be set with constructor.
-     */
-    virtual void run_completed()
-    {
-        /* *********************** header ***************************** */
-        *stream_ << "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\"?>" << std::endl;
-        *stream_ << "<testsuites>" << std::endl;
-
-        // iterate over all test groups
-        for (TestGroups::const_iterator tgi = all_tests_.begin(); tgi != all_tests_.end(); ++tgi)
-        {
-            /* per-group statistics */
-            int passed = 0;         // passed in single group
-            int exceptions = 0;     // exceptions in single group
-            int failures = 0;       // failures in single group
-            int terminations = 0;   // terminations in single group
-            int warnings = 0;       // warnings in single group
-            int errors = 0;         // errors in single group
-
-
-            // output is written to string stream buffer, because JUnit format <testsuite> tag
-            // contains statistics, which aren't known yet
-            std::ostringstream out;
-
-            // iterate over all test cases in the current test group
-            const TestResults &results = tgi->second;
-            for (TestResults::const_iterator tri = results.begin(); tri != results.end(); ++tri)
-            {
-                std::string failure_type;    // string describing the failure type
-                std::string failure_msg;     // a string with failure message
-
-                switch (tri->result)
-                {
-                    case test_result::ok:
-                    case test_result::skipped:
-                        passed++;
-                        break;
-                    case test_result::fail:
-                        failure_type = "Assertion";
-                        failure_msg  = "";
-                        failures++;
-                        break;
-                    case test_result::ex:
-                        failure_type = "Assertion";
-                        failure_msg  = "Thrown exception: " + tri->exception_typeid + '\n';
-                        exceptions++;
-                        break;
-                    case test_result::warn:
-                        failure_type = "Assertion";
-                        failure_msg  = "Destructor failed.\n";
-                        warnings++;
-                        break;
-                    case test_result::term:
-                        failure_type = "Error";
-                        failure_msg  = "Test application terminated abnormally.\n";
-                        terminations++;
-                        break;
-                    case test_result::ex_ctor:
-                        failure_type = "Assertion";
-                        failure_msg  = "Constructor has thrown an exception: " + tri->exception_typeid + ".\n";
-                        exceptions++;
-                        break;
-                    case test_result::rethrown:
-                        failure_type = "Assertion";
-                        failure_msg  = "Child failed.\n";
-                        failures++;
-                        break;
-                    default:
-                        failure_type = "Error";
-                        failure_msg  = "Unknown test status, this should have never happened. "
-                                       "You may just have found a bug in TUT, please report it immediately.\n";
-                        errors++;
-                        break;
-                } // switch
-
-#if defined(TUT_USE_POSIX)
-                out << xml_build_testcase(*tri, failure_type, failure_msg, tri->pid) << std::endl;
-#else
-                out << xml_build_testcase(*tri, failure_type, failure_msg) << std::endl;
-#endif
-            } // iterate over all test cases
-
-            // calculate per-group statistics
-            int stat_errors = terminations + errors;
-            int stat_failures = failures + warnings + exceptions;
-            int stat_all = stat_errors + stat_failures + passed;
-
-            *stream_ << xml_build_testsuite(stat_errors, stat_failures, stat_all, (*tgi).first/* name */, out.str()/* testcases */) << std::endl;
-        } // iterate over all test groups
-
-        *stream_ << "</testsuites>" << std::endl;
-    }
-
-    /**
-     * \brief Returns true, if all tests passed
-     */
-    virtual bool all_ok() const
-    {
-        return ( (terminations_count + failures_count + warnings_count + exceptions_count) == 0);
-    };
-};
-
-}
-
-#endif