mirror of
https://github.com/aria2/aria2.git
synced 2025-01-04 09:03:46 +00:00
200 lines
8.1 KiB
C++
200 lines
8.1 KiB
C++
#include "base64.h"
|
|
#include <cppunit/extensions/HelperMacros.h>
|
|
|
|
namespace aria2 {
|
|
|
|
class Base64Test : public CppUnit::TestFixture {
|
|
|
|
CPPUNIT_TEST_SUITE(Base64Test);
|
|
CPPUNIT_TEST(testEncode);
|
|
CPPUNIT_TEST(testDecode);
|
|
CPPUNIT_TEST(testLongString);
|
|
CPPUNIT_TEST_SUITE_END();
|
|
|
|
private:
|
|
public:
|
|
void setUp() {}
|
|
|
|
void testEncode();
|
|
void testDecode();
|
|
void testLongString();
|
|
};
|
|
|
|
CPPUNIT_TEST_SUITE_REGISTRATION(Base64Test);
|
|
|
|
void Base64Test::testEncode()
|
|
{
|
|
std::string s = "Hello World!";
|
|
CPPUNIT_ASSERT_EQUAL(std::string("SGVsbG8gV29ybGQh"),
|
|
base64::encode(s.begin(), s.end()));
|
|
|
|
s = "Hello World";
|
|
CPPUNIT_ASSERT_EQUAL(std::string("SGVsbG8gV29ybGQ="),
|
|
base64::encode(s.begin(), s.end()));
|
|
|
|
s = "Hello Worl";
|
|
CPPUNIT_ASSERT_EQUAL(std::string("SGVsbG8gV29ybA=="),
|
|
base64::encode(s.begin(), s.end()));
|
|
|
|
s = "Man";
|
|
CPPUNIT_ASSERT_EQUAL(std::string("TWFu"), base64::encode(s.begin(), s.end()));
|
|
|
|
s = "M";
|
|
CPPUNIT_ASSERT_EQUAL(std::string("TQ=="), base64::encode(s.begin(), s.end()));
|
|
|
|
s = "";
|
|
CPPUNIT_ASSERT_EQUAL(std::string(), base64::encode(s.begin(), s.end()));
|
|
|
|
s.assign(1, (char)-1);
|
|
base64::encode(s.begin(), s.end());
|
|
CPPUNIT_ASSERT_EQUAL(std::string("/w=="), base64::encode(s.begin(), s.end()));
|
|
|
|
s.assign(2, (char)-1);
|
|
base64::encode(s.begin(), s.end());
|
|
CPPUNIT_ASSERT_EQUAL(std::string("//8="), base64::encode(s.begin(), s.end()));
|
|
|
|
s.assign(3, (char)-1);
|
|
base64::encode(s.begin(), s.end());
|
|
CPPUNIT_ASSERT_EQUAL(std::string("////"), base64::encode(s.begin(), s.end()));
|
|
}
|
|
|
|
void Base64Test::testDecode()
|
|
{
|
|
std::string s = "SGVsbG8gV29ybGQh";
|
|
CPPUNIT_ASSERT_EQUAL(std::string("Hello World!"),
|
|
base64::decode(s.begin(), s.end()));
|
|
|
|
s = "SGVsbG8gV29ybGQ=";
|
|
CPPUNIT_ASSERT_EQUAL(std::string("Hello World"),
|
|
base64::decode(s.begin(), s.end()));
|
|
|
|
s = "SGVsbG8gV29ybA==";
|
|
CPPUNIT_ASSERT_EQUAL(std::string("Hello Worl"),
|
|
base64::decode(s.begin(), s.end()));
|
|
|
|
s = "TWFu";
|
|
CPPUNIT_ASSERT_EQUAL(std::string("Man"), base64::decode(s.begin(), s.end()));
|
|
|
|
s = "TWFu\n";
|
|
CPPUNIT_ASSERT_EQUAL(std::string("Man"), base64::decode(s.begin(), s.end()));
|
|
|
|
s = "TQ==";
|
|
CPPUNIT_ASSERT_EQUAL(std::string("M"), base64::decode(s.begin(), s.end()));
|
|
|
|
s = "";
|
|
CPPUNIT_ASSERT_EQUAL(std::string(""), base64::decode(s.begin(), s.end()));
|
|
|
|
s = "SGVsbG8\ngV2*9ybGQ=";
|
|
CPPUNIT_ASSERT_EQUAL(std::string("Hello World"),
|
|
base64::decode(s.begin(), s.end()));
|
|
|
|
s = "SGVsbG8\ngV2*9ybGQ";
|
|
CPPUNIT_ASSERT_EQUAL(std::string(""), base64::decode(s.begin(), s.end()));
|
|
|
|
s = "/w==";
|
|
CPPUNIT_ASSERT_EQUAL(std::string(1, -1), base64::decode(s.begin(), s.end()));
|
|
}
|
|
|
|
void Base64Test::testLongString()
|
|
{
|
|
std::string s = "LyogPCEtLSBjb3B5cmlnaHQgKi8KLyoKICogYXJpYTIgLSBUaGUgaGlnaCBz"
|
|
"cGVlZCBkb3dubG9h"
|
|
"ZCB1dGlsaXR5CiAqCiAqIENvcHlyaWdodCAoQykgMjAwNiBUYXRzdWhpcm8g"
|
|
"VHN1amlrYXdhCiAq"
|
|
"CiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl"
|
|
"ZGlzdHJpYnV0ZSBp"
|
|
"dCBhbmQvb3IgbW9kaWZ5CiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg"
|
|
"R05VIEdlbmVyYWwg"
|
|
"UHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiAqIHRoZSBGcmVlIFNv"
|
|
"ZnR3YXJlIEZvdW5k"
|
|
"YXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiAq"
|
|
"IChhdCB5b3VyIG9w"
|
|
"dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgcHJvZ3JhbSBp"
|
|
"cyBkaXN0cmlidXRl"
|
|
"ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQg"
|
|
"V0lUSE9VVCBBTlkg"
|
|
"V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv"
|
|
"ZgogKiBNRVJDSEFO"
|
|
"VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu"
|
|
"ICBTZWUgdGhlCiAq"
|
|
"IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu"
|
|
"CiAqCiAqIFlvdSBz"
|
|
"aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFs"
|
|
"IFB1YmxpYyBMaWNl"
|
|
"bnNlCiAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRl"
|
|
"IHRvIHRoZSBGcmVl"
|
|
"IFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0"
|
|
"cmVldCwgRmlmdGgg"
|
|
"Rmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQogKgogKiBJbiBh"
|
|
"ZGRpdGlvbiwgYXMg"
|
|
"YSBzcGVjaWFsIGV4Y2VwdGlvbiwgdGhlIGNvcHlyaWdodCBob2xkZXJzIGdp"
|
|
"dmUKICogcGVybWlz"
|
|
"c2lvbiB0byBsaW5rIHRoZSBjb2RlIG9mIHBvcnRpb25zIG9mIHRoaXMgcHJv"
|
|
"Z3JhbSB3aXRoIHRo"
|
|
"ZQogKiBPcGVuU1NMIGxpYnJhcnkgdW5kZXIgY2VydGFpbiBjb25kaXRpb25z"
|
|
"IGFzIGRlc2NyaWJl"
|
|
"ZCBpbiBlYWNoCiAqIGluZGl2aWR1YWwgc291cmNlIGZpbGUsIGFuZCBkaXN0"
|
|
"cmlidXRlIGxpbmtl"
|
|
"ZCBjb21iaW5hdGlvbnMKICogaW5jbHVkaW5nIHRoZSB0d28uCiAqIFlvdSBt"
|
|
"dXN0IG9iZXkgdGhl"
|
|
"IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGluIGFsbCByZXNwZWN0cwog"
|
|
"KiBmb3IgYWxsIG9m"
|
|
"IHRoZSBjb2RlIHVzZWQgb3RoZXIgdGhhbiBPcGVuU1NMLiAgSWYgeW91IG1v"
|
|
"ZGlmeQogKiBmaWxl"
|
|
"KHMpIHdpdGggdGhpcyBleGNlcHRpb24sIHlvdSBtYXkgZXh0ZW5kIHRoaXMg"
|
|
"ZXhjZXB0aW9uIHRv"
|
|
"IHlvdXIKICogdmVyc2lvbiBvZiB0aGUgZmlsZShzKSwgYnV0IHlvdSBhcmUg"
|
|
"bm90IG9ibGlnYXRl"
|
|
"ZCB0byBkbyBzby4gIElmIHlvdQogKiBkbyBub3Qgd2lzaCB0byBkbyBzbywg"
|
|
"ZGVsZXRlIHRoaXMg"
|
|
"ZXhjZXB0aW9uIHN0YXRlbWVudCBmcm9tIHlvdXIKICogdmVyc2lvbi4gIElm"
|
|
"IHlvdSBkZWxldGUg"
|
|
"dGhpcyBleGNlcHRpb24gc3RhdGVtZW50IGZyb20gYWxsIHNvdXJjZQogKiBm"
|
|
"aWxlcyBpbiB0aGUg"
|
|
"cHJvZ3JhbSwgdGhlbiBhbHNvIGRlbGV0ZSBpdCBoZXJlLgogKi8KLyogY29w"
|
|
"eXJpZ2h0IC0tPiAq"
|
|
"Lwo=";
|
|
std::string d =
|
|
"/* <!-- copyright */\n"
|
|
"/*\n"
|
|
" * aria2 - The high speed download utility\n"
|
|
" *\n"
|
|
" * Copyright (C) 2006 Tatsuhiro Tsujikawa\n"
|
|
" *\n"
|
|
" * This program is free software; you can redistribute it and/or "
|
|
"modify\n"
|
|
" * it under the terms of the GNU General Public License as published "
|
|
"by\n"
|
|
" * the Free Software Foundation; either version 2 of the License, or\n"
|
|
" * (at your option) any later version.\n"
|
|
" *\n"
|
|
" * This program is distributed in the hope that it will be useful,\n"
|
|
" * but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
|
|
" * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
|
|
" * GNU General Public License for more details.\n"
|
|
" *\n"
|
|
" * You should have received a copy of the GNU General Public License\n"
|
|
" * along with this program; if not, write to the Free Software\n"
|
|
" * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA "
|
|
"02110-1301 USA\n"
|
|
" *\n"
|
|
" * In addition, as a special exception, the copyright holders give\n"
|
|
" * permission to link the code of portions of this program with the\n"
|
|
" * OpenSSL library under certain conditions as described in each\n"
|
|
" * individual source file, and distribute linked combinations\n"
|
|
" * including the two.\n"
|
|
" * You must obey the GNU General Public License in all respects\n"
|
|
" * for all of the code used other than OpenSSL. If you modify\n"
|
|
" * file(s) with this exception, you may extend this exception to your\n"
|
|
" * version of the file(s), but you are not obligated to do so. If you\n"
|
|
" * do not wish to do so, delete this exception statement from your\n"
|
|
" * version. If you delete this exception statement from all source\n"
|
|
" * files in the program, then also delete it here.\n"
|
|
" */\n"
|
|
"/* copyright --> */\n";
|
|
CPPUNIT_ASSERT_EQUAL(d, base64::decode(s.begin(), s.end()));
|
|
CPPUNIT_ASSERT_EQUAL(s, base64::encode(d.begin(), d.end()));
|
|
}
|
|
|
|
} // namespace aria2
|