aboutsummaryrefslogtreecommitdiffstats
path: root/tests/testUtils.cpp
diff options
context:
space:
mode:
authorVincent Richard <[email protected]>2006-05-05 20:50:26 +0000
committerVincent Richard <[email protected]>2006-05-05 20:50:26 +0000
commit2791e5d41e96982ec3a80c2725ab4f3b9f3bfffc (patch)
tree9a938e05b1207dfe95f331ce3f4ef7d9067d0a71 /tests/testUtils.cpp
parentFixed CRLF response parsing + intermediate replies. (diff)
downloadvmime-2791e5d41e96982ec3a80c2725ab4f3b9f3bfffc.tar.gz
vmime-2791e5d41e96982ec3a80c2725ab4f3b9f3bfffc.zip
Unit tests for SMTP.
Diffstat (limited to 'tests/testUtils.cpp')
-rw-r--r--tests/testUtils.cpp183
1 files changed, 183 insertions, 0 deletions
diff --git a/tests/testUtils.cpp b/tests/testUtils.cpp
new file mode 100644
index 00000000..34d945c9
--- /dev/null
+++ b/tests/testUtils.cpp
@@ -0,0 +1,183 @@
+//
+// VMime library (http://www.vmime.org)
+// Copyright (C) 2002-2005 Vincent Richard <[email protected]>
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License as
+// published by the Free Software Foundation; either version 2 of
+// the License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this program; if not, write to the Free Software Foundation, Inc.,
+// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+//
+// Linking this library statically or dynamically with other modules is making
+// a combined work based on this library. Thus, the terms and conditions of
+// the GNU General Public License cover the whole combination.
+//
+
+#include "testUtils.hpp"
+
+
+
+// testSocket
+
+void testSocket::connect(const vmime::string& address, const vmime::port_t port)
+{
+ m_address = address;
+ m_port = port;
+ m_connected = true;
+
+ onConnected();
+}
+
+
+void testSocket::disconnect()
+{
+ m_address.clear();
+ m_port = 0;
+ m_connected = false;
+}
+
+
+const bool testSocket::isConnected() const
+{
+ return m_connected;
+}
+
+
+void testSocket::receive(vmime::string& buffer)
+{
+ buffer = m_inBuffer;
+ m_inBuffer.clear();
+}
+
+
+void testSocket::send(const vmime::string& buffer)
+{
+ m_outBuffer += buffer;
+
+ onDataReceived();
+}
+
+
+const int testSocket::receiveRaw(char* buffer, const int count)
+{
+ const int n = std::min(count, static_cast <int>(m_inBuffer.size()));
+
+ std::copy(m_inBuffer.begin(), m_inBuffer.begin() + n, buffer);
+ m_inBuffer.erase(m_inBuffer.begin(), m_inBuffer.begin() + n);
+
+ return n;
+}
+
+
+void testSocket::sendRaw(const char* buffer, const int count)
+{
+ send(vmime::string(buffer, count));
+}
+
+
+void testSocket::localSend(const vmime::string& buffer)
+{
+ m_inBuffer += buffer;
+}
+
+
+void testSocket::localReceive(vmime::string& buffer)
+{
+ buffer = m_outBuffer;
+ m_outBuffer.clear();
+}
+
+
+void testSocket::onDataReceived()
+{
+ // Override
+}
+
+
+void testSocket::onConnected()
+{
+ // Override
+}
+
+
+// lineBasedTestSocket
+
+void lineBasedTestSocket::onDataReceived()
+{
+ vmime::string chunk;
+ localReceive(chunk);
+
+ m_buffer += chunk;
+
+ vmime::string::size_type eol;
+
+ while ((eol = m_buffer.find('\n')) != vmime::string::npos)
+ {
+ vmime::string line(std::string(m_buffer.begin(), m_buffer.begin() + eol));
+
+ if (!line.empty() && line[line.length() - 1] == '\r')
+ line.erase(line.end() - 1, line.end());
+
+ m_lines.push_back(line);
+ m_buffer.erase(m_buffer.begin(), m_buffer.begin() + eol + 1);
+ }
+
+ while (!m_lines.empty())
+ processCommand();
+}
+
+
+const vmime::string lineBasedTestSocket::getNextLine()
+{
+ const vmime::string line = m_lines.front();
+ m_lines.erase(m_lines.begin(), m_lines.begin() + 1);
+ return line;
+}
+
+const bool lineBasedTestSocket::haveMoreLines() const
+{
+ return !m_lines.empty();
+}
+
+
+// testTimeoutHandler
+
+testTimeoutHandler::testTimeoutHandler(const unsigned int delay)
+ : m_delay(delay), m_start(0)
+{
+}
+
+
+const bool testTimeoutHandler::isTimeOut()
+{
+ return (vmime::platformDependant::getHandler()->getUnixTime() - m_start) >= m_delay;
+}
+
+
+void testTimeoutHandler::resetTimeOut()
+{
+ m_start = vmime::platformDependant::getHandler()->getUnixTime();
+}
+
+
+const bool testTimeoutHandler::handleTimeOut()
+{
+ return false;
+}
+
+
+// testTimeoutHandlerFactory : public vmime::net::timeoutHandlerFactory
+
+vmime::ref <vmime::net::timeoutHandler> testTimeoutHandlerFactory::create()
+{
+ return vmime::create <testTimeoutHandler>();
+}
+