complete tests, fix some base32 issues master
authorKonrad Rosenbaum <konrad@silmor.de>
Sat, 16 Feb 2013 20:41:13 +0000 (21:41 +0100)
committerKonrad Rosenbaum <konrad@silmor.de>
Sat, 16 Feb 2013 20:41:13 +0000 (21:41 +0100)
sidgen.cpp
sidgen.h
tests/stest.cpp
tests/stest.h

index 7a086ec..7213ba6 100644 (file)
@@ -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
 {
index e72a63b..961b100 100644 (file)
--- 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&);
index 90411c1..bde9cc5 100644 (file)
@@ -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));
+}
index 3bfa343..66248b7 100644 (file)
@@ -9,5 +9,6 @@ private slots:
     void testNullSession();
     void testStrongSession();
     void testToString();
+    void testFromString();
     void testCopy();
 };
\ No newline at end of file