From d8e88ce5fdca870b1a48a18dd1fdd1d6fd56c910 Mon Sep 17 00:00:00 2001 From: Konrad Rosenbaum Date: Sat, 16 Feb 2013 21:41:13 +0100 Subject: [PATCH] complete tests, fix some base32 issues --- sidgen.cpp | 13 ++++++++++--- sidgen.h | 7 +++++-- tests/stest.cpp | 22 ++++++++++++++++++++++ tests/stest.h | 1 + 4 files changed, 38 insertions(+), 5 deletions(-) diff --git a/sidgen.cpp b/sidgen.cpp index 7a086ec..7213ba6 100644 --- a/sidgen.cpp +++ b/sidgen.cpp @@ -36,10 +36,14 @@ static inline QByteArray fromBase32(QByteArray b) if(b[i]>='2'&&b[i]<='7')fv|=b[i]-'2'+26; } //int to bytes + QByteArray r2; for(int i=0;i<5;i++){ int j=32-(i*8); - r.append(char((fv>>j)&0xff)); + r2.append(char((fv>>j)&0xff)); } + //append bytes to result + if(b.size()<8)r2.resize(b.size()*5/8); + r.append(r2); //shorten input b=b.mid(8); } @@ -60,8 +64,11 @@ SessionID::SessionID(const QByteArray& b, SessionID::Format f) SessionID::SessionID(const QString& s, SessionID::Format f) :SessionID(s.toLatin1(),f) -{ -} +{} + +SessionID::SessionID(const char* s, SessionID::Format f) + :SessionID(QByteArray(s),f) +{} bool SessionID::operator==(const SessionID&o) const { diff --git a/sidgen.h b/sidgen.h index e72a63b..961b100 100644 --- a/sidgen.h +++ b/sidgen.h @@ -58,9 +58,12 @@ class SIDGEN_EXPORT SessionID SessionID(const SessionID&); ///creates a session ID from string data - SessionID(const QByteArray&,Format); + explicit SessionID(const QByteArray&,Format f=Base64); ///creates a session ID from string data - SessionID(const QString&,Format); + explicit SessionID(const QString&,Format f=Base64); + ///creates a session ID from string data + ///this is a convenience overload to avoid explicit casting + explicit SessionID(const char*,Format f=Base64); ///copies a session ID SessionID& operator=(const SessionID&); diff --git a/tests/stest.cpp b/tests/stest.cpp index 90411c1..bde9cc5 100644 --- a/tests/stest.cpp +++ b/tests/stest.cpp @@ -59,3 +59,25 @@ void STest::testToString() QCOMPARE(s1.toString(SessionID::Base32).size(),13); QCOMPARE(s1.toString(SessionID::Base64).size(),11); } + +void STest::testFromString() +{ + //base 64 + SessionID s1(QString("ABCDEF")); + QCOMPARE(s1,SessionID(QByteArray("ABCDEF"))); + QCOMPARE(s1,SessionID("ABCDEF==")); + //conversion to string base 64 + QCOMPARE(s1.toString(),QString("ABCDEA")); + QCOMPARE(s1.toString(SessionID::Base64),QString("ABCDEA")); + //compare with base 32 + QCOMPARE(s1.toString(SessionID::Base32),QString("AAIIGEA")); + QCOMPARE(s1.toString(SessionID::Base32), SessionID("AAIIGEA",SessionID::Base32).toString(SessionID::Base32)); + QCOMPARE(s1,SessionID("AAIIGEA",SessionID::Base32)); + //compare with hex + QCOMPARE(s1.toString(SessionID::Hex),QString("00108310")); + QCOMPARE(s1,SessionID("00108310",SessionID::Hex)); + //check raw import/export + QByteArray cmp=QByteArray::fromRawData("\000\020\203\020",4); + QCOMPARE(s1.toByteArray(SessionID::RawBytes),cmp); + QCOMPARE(s1,SessionID(cmp,SessionID::RawBytes)); +} diff --git a/tests/stest.h b/tests/stest.h index 3bfa343..66248b7 100644 --- a/tests/stest.h +++ b/tests/stest.h @@ -9,5 +9,6 @@ private slots: void testNullSession(); void testStrongSession(); void testToString(); + void testFromString(); void testCopy(); }; \ No newline at end of file -- 1.7.2.5