@@ -23,6 +23,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
2323#include " util/enriched_string.h"
2424#include " util/numeric.h"
2525#include " util/string.h"
26+ #include " util/base64.h"
2627
2728class TestUtilities : public TestBase {
2829public:
@@ -56,6 +57,7 @@ class TestUtilities : public TestBase {
5657 void testMyround ();
5758 void testStringJoin ();
5859 void testEulerConversion ();
60+ void testBase64 ();
5961};
6062
6163static TestUtilities g_test_instance;
@@ -87,6 +89,7 @@ void TestUtilities::runTests(IGameDef *gamedef)
8789 TEST (testMyround);
8890 TEST (testStringJoin);
8991 TEST (testEulerConversion);
92+ TEST (testBase64);
9093}
9194
9295// //////////////////////////////////////////////////////////////////////////////
@@ -537,3 +540,93 @@ void TestUtilities::testEulerConversion()
537540 setPitchYawRoll (m2, v2);
538541 UASSERT (within (m1, m2, tolL));
539542}
543+
544+ void TestUtilities::testBase64 ()
545+ {
546+ // Test character set
547+ UASSERT (base64_is_valid (" ABCDEFGHIJKLMNOPQRSTUVWXYZ"
548+ " abcdefghijklmnopqrstuvwxyz"
549+ " 0123456789+/" ) == true );
550+ UASSERT (base64_is_valid (" /+9876543210"
551+ " zyxwvutsrqponmlkjihgfedcba"
552+ " ZYXWVUTSRQPONMLKJIHGFEDCBA" ) == true );
553+ UASSERT (base64_is_valid (" ABCDEFGHIJKLMNOPQRSTUVWXYZ"
554+ " abcdefghijklmnopqrstuvwxyz"
555+ " 0123456789+." ) == false );
556+ UASSERT (base64_is_valid (" ABCDEFGHIJKLMNOPQRSTUVWXYZ"
557+ " abcdefghijklmnopqrstuvwxyz"
558+ " 0123456789 /" ) == false );
559+
560+ // Test empty string
561+ UASSERT (base64_is_valid (" " ) == true );
562+
563+ // Test different lengths, with and without padding,
564+ // with correct and incorrect padding
565+ UASSERT (base64_is_valid (" A" ) == false );
566+ UASSERT (base64_is_valid (" AA" ) == true );
567+ UASSERT (base64_is_valid (" AAA" ) == true );
568+ UASSERT (base64_is_valid (" AAAA" ) == true );
569+ UASSERT (base64_is_valid (" AAAAA" ) == false );
570+ UASSERT (base64_is_valid (" AAAAAA" ) == true );
571+ UASSERT (base64_is_valid (" AAAAAAA" ) == true );
572+ UASSERT (base64_is_valid (" AAAAAAAA" ) == true );
573+ UASSERT (base64_is_valid (" A===" ) == false );
574+ UASSERT (base64_is_valid (" AA==" ) == true );
575+ UASSERT (base64_is_valid (" AAA=" ) == true );
576+ UASSERT (base64_is_valid (" AAAA" ) == true );
577+ UASSERT (base64_is_valid (" AAAA====" ) == false );
578+ UASSERT (base64_is_valid (" AAAAA===" ) == false );
579+ UASSERT (base64_is_valid (" AAAAAA==" ) == true );
580+ UASSERT (base64_is_valid (" AAAAAAA=" ) == true );
581+ UASSERT (base64_is_valid (" AAAAAAA==" ) == false );
582+ UASSERT (base64_is_valid (" AAAAAAA===" ) == false );
583+ UASSERT (base64_is_valid (" AAAAAAA====" ) == false );
584+ UASSERT (base64_is_valid (" AAAAAAAA" ) == true );
585+ UASSERT (base64_is_valid (" AAAAAAAA=" ) == false );
586+ UASSERT (base64_is_valid (" AAAAAAAA==" ) == false );
587+ UASSERT (base64_is_valid (" AAAAAAAA===" ) == false );
588+ UASSERT (base64_is_valid (" AAAAAAAA====" ) == false );
589+
590+ // Test if canonical encoding
591+ // Last character limitations, length % 4 == 3
592+ UASSERT (base64_is_valid (" AAB" ) == false );
593+ UASSERT (base64_is_valid (" AAE" ) == true );
594+ UASSERT (base64_is_valid (" AAQ" ) == true );
595+ UASSERT (base64_is_valid (" AAB=" ) == false );
596+ UASSERT (base64_is_valid (" AAE=" ) == true );
597+ UASSERT (base64_is_valid (" AAQ=" ) == true );
598+ UASSERT (base64_is_valid (" AAAAAAB=" ) == false );
599+ UASSERT (base64_is_valid (" AAAAAAE=" ) == true );
600+ UASSERT (base64_is_valid (" AAAAAAQ=" ) == true );
601+ // Last character limitations, length % 4 == 2
602+ UASSERT (base64_is_valid (" AB" ) == false );
603+ UASSERT (base64_is_valid (" AE" ) == false );
604+ UASSERT (base64_is_valid (" AQ" ) == true );
605+ UASSERT (base64_is_valid (" AB==" ) == false );
606+ UASSERT (base64_is_valid (" AE==" ) == false );
607+ UASSERT (base64_is_valid (" AQ==" ) == true );
608+ UASSERT (base64_is_valid (" AAAAAB==" ) == false );
609+ UASSERT (base64_is_valid (" AAAAAE==" ) == false );
610+ UASSERT (base64_is_valid (" AAAAAQ==" ) == true );
611+
612+ // Extraneous character present
613+ UASSERT (base64_is_valid (" ." ) == false );
614+ UASSERT (base64_is_valid (" A." ) == false );
615+ UASSERT (base64_is_valid (" AA." ) == false );
616+ UASSERT (base64_is_valid (" AAA." ) == false );
617+ UASSERT (base64_is_valid (" AAAA." ) == false );
618+ UASSERT (base64_is_valid (" AAAAA." ) == false );
619+ UASSERT (base64_is_valid (" A.A" ) == false );
620+ UASSERT (base64_is_valid (" AA.A" ) == false );
621+ UASSERT (base64_is_valid (" AAA.A" ) == false );
622+ UASSERT (base64_is_valid (" AAAA.A" ) == false );
623+ UASSERT (base64_is_valid (" AAAAA.A" ) == false );
624+ UASSERT (base64_is_valid (" \xE1 " " AAA" ) == false );
625+
626+ // Padding in wrong position
627+ UASSERT (base64_is_valid (" A=A" ) == false );
628+ UASSERT (base64_is_valid (" AA=A" ) == false );
629+ UASSERT (base64_is_valid (" AAA=A" ) == false );
630+ UASSERT (base64_is_valid (" AAAA=A" ) == false );
631+ UASSERT (base64_is_valid (" AAAAA=A" ) == false );
632+ }
0 commit comments