Page Menu
Home
Phorge
Search
Configure Global Search
Log In
Files
F117880785
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Authored By
Unknown
Size
12 KB
Referenced Files
None
Subscribers
None
View Options
diff --git a/tests/conversiontest.cpp b/tests/conversiontest.cpp
index 5b5c6d2..42b0738 100644
--- a/tests/conversiontest.cpp
+++ b/tests/conversiontest.cpp
@@ -1,302 +1,310 @@
#include "conversiontest.h"
#include <QtTest/QtTest>
#include <src/xcalconversions.h>
#include <src/xcardconversions.h>
#include <src/utils.h>
#include "serializers.h"
#include <boost/thread.hpp>
+#include <curl/curlver.h>
Q_DECLARE_METATYPE(Kolab::Duration);
Q_DECLARE_METATYPE(Kolab::DayPos);
Q_DECLARE_METATYPE(Kolab::cDateTime);
Q_DECLARE_METATYPE(Kolab::ErrorSeverity);
Q_DECLARE_METATYPE(std::string);
using namespace Kolab::XCAL;
void ConversionTest::dateComparatorTest()
{
QVERIFY( !(Kolab::cDateTime(2001, 01, 02, 03, 04 ,05, false) == Kolab::cDateTime()));
QVERIFY( Kolab::cDateTime(2001, 01, 02, 03, 04 ,05, false) == Kolab::cDateTime(2001, 01, 02, 03, 04 ,05, false));
}
void ConversionTest::durationParserTest_data()
{
QTest::addColumn<Kolab::Duration>("expected");
QTest::addColumn<QString>("string");
QTest::newRow("Time") << Kolab::Duration(0,2,3,4, false) << "+PT2H3M4S";
QTest::newRow("Day") << Kolab::Duration(1,2,3,4, false) << "+P1DT2H3M4S";
QTest::newRow("Week") << Kolab::Duration(1, false) << "+P1W";
QTest::newRow("Week Multidigit, negative") << Kolab::Duration(23, true) << "-P23W";
Kolab::Utils::clearErrors();
}
void ConversionTest::durationParserTest()
{
QFETCH(QString, string);
QFETCH(Kolab::Duration, expected);
const Kolab::Duration result = toDuration(string.toStdString());
QCOMPARE(result, expected);
QCOMPARE(Kolab::Utils::getError(), Kolab::NoError);
}
void ConversionTest::durationSerializerTest_data()
{
QTest::addColumn<QString>("expected");
QTest::addColumn<Kolab::Duration>("duration");
QTest::newRow("Time") << "PT2H3M4S" << Kolab::Duration(0,2,3,4, false);
QTest::newRow("Day") << "P1DT2H3M4S" << Kolab::Duration(1,2,3,4, false);
QTest::newRow("Week positive") << "P1W" << Kolab::Duration(1, false);
QTest::newRow("Week negative") << "-P3W" << Kolab::Duration(3, true);
QTest::newRow("Week Multidigit, negative") << "-P23W" << Kolab::Duration(23, true);
Kolab::Utils::clearErrors();
}
void ConversionTest::durationSerializerTest()
{
QFETCH(Kolab::Duration, duration);
QFETCH(QString, expected);
const std::string result = fromDuration(duration);
QCOMPARE(QString::fromStdString(result), expected);
QCOMPARE(Kolab::Utils::getError(), Kolab::NoError);
}
void ConversionTest::dayPosParserTest_data()
{
QTest::addColumn<Kolab::DayPos>("expected");
QTest::addColumn<QString>("string");
QTest::newRow("positive") << Kolab::DayPos(15, Kolab::Wednesday) << "15WE";
QTest::newRow("positive with +") << Kolab::DayPos(15, Kolab::Wednesday) << "+15WE";
QTest::newRow("negative") << Kolab::DayPos(-15, Kolab::Wednesday) << "-15WE";
QTest::newRow("all occurrences") << Kolab::DayPos(0, Kolab::Wednesday) << "WE";
Kolab::Utils::clearErrors();
}
void ConversionTest::dayPosParserTest()
{
QFETCH(QString, string);
QFETCH(Kolab::DayPos, expected);
const Kolab::DayPos result = toDayPos(string.toStdString());
QCOMPARE(result, expected);
QCOMPARE(Kolab::Utils::getError(), Kolab::NoError);
}
void ConversionTest::dayPosSerializerTest_data()
{
QTest::addColumn<QString>("expected");
QTest::addColumn<Kolab::DayPos>("daypos");
QTest::newRow("pos") << "15WE" << Kolab::DayPos(15, Kolab::Wednesday);
QTest::newRow("negative") << "-15WE" << Kolab::DayPos(-15, Kolab::Wednesday);
QTest::newRow("all occurrences") << "WE" << Kolab::DayPos(0, Kolab::Wednesday);
Kolab::Utils::clearErrors();
}
void ConversionTest::dayPosSerializerTest()
{
QFETCH(Kolab::DayPos, daypos);
QFETCH(QString, expected);
const std::string result = fromDayPos(daypos);
QCOMPARE(QString::fromStdString(result), expected);
QCOMPARE(Kolab::Utils::getError(), Kolab::NoError);
}
void ConversionTest::xcardDateParserTest_data()
{
QTest::addColumn<QString>("input");
QTest::addColumn<Kolab::cDateTime>("expected");
QTest::addColumn<Kolab::ErrorSeverity>("errorState");
QTest::newRow("datetime local") << "20010102T030405" << Kolab::cDateTime(2001, 01, 02, 03, 04 ,05, false) << Kolab::NoError;
QTest::newRow("datetime utc") << "20010102T030405Z" << Kolab::cDateTime(2001, 01, 02, 03, 04 ,05, true) << Kolab::NoError;
QTest::newRow("date only") << "20010102" << Kolab::cDateTime(2001, 01, 02) << Kolab::NoError;
QTest::newRow("fail 1 short") << "20010102T03040" << Kolab::cDateTime() << Kolab::Error;
QTest::newRow("fail non utc") << "20010102T030401s" << Kolab::cDateTime() << Kolab::Error;
QTest::newRow("fail no time") << "20010102T" << Kolab::cDateTime() << Kolab::Error;
Kolab::Utils::clearErrors();
}
void ConversionTest::xcardDateParserTest()
{
QFETCH(QString, input);
QFETCH(Kolab::cDateTime, expected);
QFETCH(Kolab::ErrorSeverity, errorState);
const Kolab::cDateTime &dt = Kolab::XCARD::toDateTime(input.toStdString());
QCOMPARE(dt, expected);
QCOMPARE(Kolab::Utils::getError(), errorState);
}
void ConversionTest::xCardSerializerTest_data()
{
QTest::addColumn<QString>("expected");
QTest::addColumn<Kolab::cDateTime>("dt");
QTest::newRow("datetime local") << "20010102T030405" << Kolab::cDateTime(2001, 01, 02, 03, 04 ,05, false);
QTest::newRow("datetime utc") << "20010102T030405Z" << Kolab::cDateTime(2001, 01, 02, 03, 04 ,05, true);
QTest::newRow("dateonly") << "20010102" << Kolab::cDateTime(2001, 01, 02);
Kolab::Utils::clearErrors();
}
void ConversionTest::xCardSerializerTest()
{
QFETCH(QString, expected);
QFETCH(Kolab::cDateTime, dt);
const std::string &s = Kolab::XCARD::fromDateTime(dt);
QCOMPARE(QString::fromStdString(s), expected);
if (dt.isDateOnly()) {
const std::string &s2 = Kolab::XCARD::fromDate(dt);
QCOMPARE(QString::fromStdString(s2), expected);
}
QCOMPARE(Kolab::Utils::getError(), Kolab::NoError);
}
void ConversionTest::uriInlineEncodingTest()
{
const std::string &s = Kolab::Utils::uriInlineEncoding("data", "mimetype/mime");
QCOMPARE(s, std::string("data:mimetype/mime;base64,ZGF0YQ=="));
std::string mimetype;
const std::string &d = Kolab::Utils::uriInlineDecoding(s, mimetype);
QCOMPARE(mimetype, std::string("mimetype/mime"));
QCOMPARE(d, std::string("data"));
QCOMPARE(Kolab::Utils::getError(), Kolab::NoError);
}
void ConversionTest::mailtoUriEncodingTest_data()
{
QTest::addColumn<QString>("email");
QTest::addColumn<QString>("name");
QTest::addColumn<QString>("resultEncoded");
- QTest::newRow("1") << "email_1@email.com" << "John Doe" << "mailto:John%20Doe%3Cemail_1%40email.com%3E";
- QTest::newRow("Reserved characters") << "!*'();:@&=+$,/?#[]@email.com" << "John Doe" << "mailto:John%20Doe%3C%21%2A%27%28%29%3B%3A%40%26%3D%2B%24%2C%2F%3F%23%5B%5D%40email.com%3E";
- QTest::newRow("Unreserved characters") << "Aa0-_.~@email.com" << "John Doe" << "mailto:John%20Doe%3CAa0-_.~%40email.com%3E";
+ //Older versions used to encode "." and "_". Not sure which version is actually required though (fixed in 7.28.1 but broken in 7.19.7, we're testing for 7.28.1)
+ if (LIBCURL_VERSION_NUM >= 0x071c01) {
+ QTest::newRow("1") << "email_1@email.com" << "John Doe" << "mailto:John%20Doe%3Cemail_1%40email.com%3E";
+ QTest::newRow("Reserved characters") << "!*'();:@&=+$,/?#[]@email.com" << "John Doe" << "mailto:John%20Doe%3C%21%2A%27%28%29%3B%3A%40%26%3D%2B%24%2C%2F%3F%23%5B%5D%40email.com%3E";
+ QTest::newRow("Unreserved characters") << "Aa0-_.~@email.com" << "John Doe" << "mailto:John%20Doe%3CAa0-_.~%40email.com%3E";
+ } else {
+ QTest::newRow("1") << "email_1@email.com" << "John Doe" << "mailto:John%20Doe%3Cemail%5F1%40email%2Ecom%3E";
+ QTest::newRow("Reserved characters") << "!*'();:@&=+$,/?#[]@email.com" << "John Doe" << "mailto:John%20Doe%3C%21%2A%27%28%29%3B%3A%40%26%3D%2B%24%2C%2F%3F%23%5B%5D%40email%2Ecom%3E";
+ QTest::newRow("Unreserved characters") << "Aa0-_.~@email.com" << "John Doe" << "mailto:John%20Doe%3CAa0%2D%5F%2E%7E%40email%2Ecom%3E";
+ }
Kolab::Utils::clearErrors();
}
void ConversionTest::mailtoUriEncodingTest()
{
QFETCH(QString, email);
QFETCH(QString, name);
QFETCH(QString, resultEncoded);
const std::string &mailto = Kolab::XCARD::toMailto(email.toStdString(), name.toStdString());
// std::cout << mailto << std::endl;
QCOMPARE(QString::fromStdString(mailto), resultEncoded);
std::string n;
const std::string &e = Kolab::XCARD::fromMailto(resultEncoded.toStdString(), n);
QCOMPARE(QString::fromStdString(n), name);
QCOMPARE(QString::fromStdString(e), email);
}
void ConversionTest::mailtoUriDecodingTest()
{
QString name("John Doe");
QString email("email_1@email.com");
//While we shouldn't encode '_' and '.' according to RFC 3986, we should still understand it for backwards compatiblity
const std::string resultEncoded = "mailto:John%20Doe%3Cemail%5F1%40email%2Ecom%3E";
std::string n;
const std::string &e = Kolab::XCARD::fromMailto(resultEncoded, n);
QCOMPARE(QString::fromStdString(n), name);
QCOMPARE(QString::fromStdString(e), email);
}
void ConversionTest::urnTest()
{
QCOMPARE(Kolab::Shared::toURN("1045b57d-ff7f-0000-d814-867b4d7f0000"), std::string("urn:uuid:1045b57d-ff7f-0000-d814-867b4d7f0000"));
QCOMPARE(Kolab::Shared::toURN("urn:uuid:1045b57d-ff7f-0000-d814-867b4d7f0000"), std::string("urn:uuid:1045b57d-ff7f-0000-d814-867b4d7f0000"));
QCOMPARE(Kolab::Shared::fromURN("urn:uuid:1045b57d-ff7f-0000-d814-867b4d7f0000"), std::string("1045b57d-ff7f-0000-d814-867b4d7f0000"));
QCOMPARE(Kolab::Shared::fromURN("1045b57d-ff7f-0000-d814-867b4d7f0000"), std::string("1045b57d-ff7f-0000-d814-867b4d7f0000"));
QCOMPARE(Kolab::Utils::getError(), Kolab::NoError);
}
void ConversionTest::geoUriTest()
{
QCOMPARE(Kolab::XCARD::toGeoUri(-34.056, 179.3453), std::string("geo:-34.056,179.3453"));
QCOMPARE(Kolab::XCARD::toGeoUri(-34.1, 179.5), std::string("geo:-34.1,179.5"));
QCOMPARE(Kolab::XCARD::toGeoUri(-34.0, 179.0), std::string("geo:-34,179"));
QCOMPARE(Kolab::XCARD::toGeoUri(-34, 179), std::string("geo:-34,179"));
QCOMPARE(Kolab::XCARD::toGeoUri(-34.012342356, 179.3451234553), std::string("geo:-34.012342356,179.3451234553"));
double lat, lon;
QVERIFY(Kolab::XCARD::fromGeoUri(std::string("geo:-34.056,179.3453"), lat, lon));
QCOMPARE(lat, -34.056);
QCOMPARE(lon, 179.3453);
QCOMPARE(Kolab::Utils::getError(), Kolab::NoError);
}
void ConversionTest::contactReferenceTest()
{
Kolab::ContactReference email(Kolab::ContactReference::EmailReference, "mail", "name");
QCOMPARE(Kolab::Shared::toMailto(email.email(), email.name()), std::string("mailto:name%3Cmail%3E"));
Kolab::ContactReference urn(Kolab::ContactReference::UidReference, "urn");
QCOMPARE(Kolab::Shared::toURN(urn.uid()), std::string("urn:uuid:urn"));
QCOMPARE(Kolab::Shared::toContactReference("urn:uuid:urn"), urn);
QCOMPARE(Kolab::Shared::toContactReference("mailto:name%3Cmail%3E"), email);
}
void threadF()
{
for (int i = 0; i < 5; ++i)
{
std::stringstream s;
// s << boost::this_thread::get_id();
std::string uid = s.str();
// std::cout << uid << std::endl;
Kolab::Utils::setCreatedUid(uid);
boost::this_thread::sleep(boost::posix_time::millisec(50));
QCOMPARE(Kolab::Utils::createdUid(), uid);
}
}
void ConversionTest::threadLocalTest()
{
//Ensure global variables are not mixed between threads and therefore threadsafe.
boost::thread t(threadF);
boost::thread t2(threadF);
t.join();
t2.join();
}
void ConversionTest::uuidGeneratorTest()
{
const std::string &s = getUID();
std::cout << s << std::endl;
QVERIFY(!s.empty());
QCOMPARE(s.size(), (std::size_t)36ul);
}
void ConversionTest::uuidGeneratorTest2()
{
Kolab::Event event;
event.setStart(Kolab::cDateTime(2001, 01, 02, 03, 04 ,05, false));
QVERIFY(Kolab::getSerializedUID().empty());
Kolab::writeEvent(event);
std::string uid1 = Kolab::getSerializedUID();
QVERIFY(!uid1.empty());
Kolab::writeEvent(event);
std::string uid2 = Kolab::getSerializedUID();
std::cout << uid1 << uid2;
QVERIFY(!uid2.empty());
QVERIFY(uid1 != uid2);
}
QTEST_MAIN( ConversionTest )
#include "conversiontest.moc"
File Metadata
Details
Attached
Mime Type
text/x-diff
Expires
Sun, Apr 5, 11:29 PM (1 w, 5 d ago)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
18831574
Default Alt Text
(12 KB)
Attached To
Mode
rLKX libkolabxml
Attached
Detach File
Event Timeline