Go to the documentation of this file.00001
00002
00003
00004 #include <wibble/test.h>
00005 #include <wibble/log/stream.h>
00006 #include <wibble/log/null.h>
00007 #include <wibble/log/file.h>
00008 #include <wibble/log/ostream.h>
00009 #include <vector>
00010 #include <iostream>
00011 #include <fstream>
00012
00017 namespace {
00018
00019 using namespace std;
00020 using namespace wibble;
00021 using namespace wibble::log;
00022
00023 struct TestLog {
00024
00025
00026 struct Sender1 : public log::Sender
00027 {
00028
00029 std::vector< std::pair<Level, std::string> > log;
00030
00031 virtual ~Sender1() {}
00032
00033
00034 virtual void send(Level level, const std::string& msg)
00035 {
00036 log.push_back(make_pair(level, msg));
00037 }
00038
00039
00040 void dump()
00041 {
00042 for (size_t i = 0; i < log.size(); ++i)
00043 std::cerr << log[i].first << " -> " << log[i].second << " <-" << std::endl;
00044 }
00045 };
00046
00047 Test streambuf() {
00048
00049
00050 Sender1 s;
00051 {
00052 log::Streambuf ls(&s);
00053 ostream o(&ls);
00054
00055
00056 o << "test" << endl;
00057 assert_eq(s.log.size(), 1u);
00058 assert_eq(s.log[0].first, log::INFO);
00059 assert_eq(s.log[0].second, "test");
00060
00061
00062
00063 o << log::WARN << "test" << endl;
00064 assert_eq(s.log.size(), 2u);
00065 assert_eq(s.log[1].first, log::WARN);
00066 assert_eq(s.log[1].second, "test");
00067
00068
00069 o << "should eventually appear";
00070 assert_eq(s.log.size(), 2u);
00071 }
00072
00073 assert_eq(s.log.size(), 3u);
00074 assert_eq(s.log[2].first, log::INFO);
00075 assert_eq(s.log[2].second, "should eventually appear");
00076
00077
00078 }
00079
00080
00081 Test nullSender() {
00082
00083
00084 log::NullSender ns;
00085 ns.send(log::INFO, "test");
00086
00087 log::Streambuf null(&ns);
00088 ostream o(&null);
00089
00090
00091 o << "test" << endl;
00092
00093
00094
00095 o << log::WARN << "test" << endl;
00096
00097
00098 o << "should eventually appear";
00099 }
00100
00101
00102 Test fileSender() {
00103
00104
00105
00106 log::FileSender ns("/dev/null");
00107 ns.send(log::INFO, "test");
00108
00109 log::Streambuf file(&ns);
00110 ostream o(&file);
00111
00112
00113 o << "test" << endl;
00114
00115
00116
00117 o << log::WARN << "test" << endl;
00118
00119
00120 o << "should eventually appear";
00121 }
00122
00123
00124 Test ostreamSender() {
00125
00126
00127 std::ofstream null("/dev/null", std::ios::out);
00128 assert(!null.fail());
00129
00130 log::OstreamSender sender(null);
00131 sender.send(log::INFO, "test");
00132
00133 log::Streambuf log(&sender);
00134 ostream o(&log);
00135
00136
00137 o << "test" << endl;
00138
00139
00140
00141 o << log::WARN << "test" << endl;
00142
00143
00144 o << "should eventually appear";
00145 }
00146
00147 };
00148
00149 }
00150
00151