123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199 |
- #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
|