123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- unit utcbasenenc;
- {$mode objfpc}{$H+}
- interface
- uses
- Classes, SysUtils, punit, basenenc;
- procedure RegisterTests;
- implementation
- function BytesToStr(const aBytes: TBytes): String;
- var
- I: Integer;
- begin
- Result := '';
- for I := Low(aBytes) to High(aBytes) do
- begin
- if Result <> '' then
- Result := Result + ',';
- Result := Result + IntToStr(aBytes[I]);
- end;
- Result := '[' + Result + ']';
- end;
- function AssertBytesEqual(const Msg: String; const aActual, aExpected: TBytes): Boolean;
- var
- Cmp: Boolean;
- begin
- Cmp := (Length(aActual) = Length(aExpected)) and CompareMem(Pointer(aActual), Pointer(aExpected), Length(aActual));
- Result := AssertTrue(Msg + '. Expected: ' + BytesToStr(aExpected) + ', Actual: ' + BytesToStr(aActual), Cmp);
- end;
- function TestBaseN_RFC3548: TTestString;
- begin
- Result := '';
- AssertEquals('RFC3548 B64 1', 'FPucA9l+', Base64.Encode([$14,$fb,$9c,$03,$d9,$7e]));
- AssertBytesEqual('RFC3548 B64 1 Decode', [$14,$fb,$9c,$03,$d9,$7e], Base64.Decode('FPucA9l+'));
- AssertEquals('RFC3548 B64 2', 'FPucA9k=', Base64.Encode([$14,$fb,$9c,$03,$d9]));
- AssertBytesEqual('RFC3548 B64 2 Decode', [$14,$fb,$9c,$03,$d9], Base64.Decode('FPucA9k='));
- AssertEquals('RFC3548 B64 3', 'FPucAw==', Base64.Encode([$14,$fb,$9c,$03]));
- AssertBytesEqual('RFC3548 B64 3 Decode', [$14,$fb,$9c,$03], Base64.Decode('FPucAw=='));
- AssertEquals('RFC3548 B64 URL', 'FPucA9l-', Base64URL.Encode([$14,$fb,$9c,$03,$d9,$7e]));
- AssertBytesEqual('RFC3548 B64 URL Decode', [$14,$fb,$9c,$03,$d9,$7e], Base64URL.Decode('FPucA9l-'));
- end;
- function TestBaseN_RFC4648_Base64: TTestString;
- begin
- Result := '';
- AssertEquals('RFC4648 B64 empty', '', Base64.Encode(''));
- AssertEquals('RFC4648 B64 "f"', 'Zg==', Base64.Encode('f'));
- AssertEquals('RFC4648 B64 "fo"', 'Zm8=', Base64.Encode('fo'));
- AssertEquals('RFC4648 B64 "foo"', 'Zm9v', Base64.Encode('foo'));
- AssertEquals('RFC4648 B64 "foob"', 'Zm9vYg==', Base64.Encode('foob'));
- AssertEquals('RFC4648 B64 "fooba"', 'Zm9vYmE=', Base64.Encode('fooba'));
- AssertEquals('RFC4648 B64 "foobar"', 'Zm9vYmFy', Base64.Encode('foobar'));
- end;
- function TestBaseN_RFC4648_Base32: TTestString;
- begin
- Result := '';
- AssertEquals('RFC4648 B32 empty', '', Base32.Encode(''));
- AssertEquals('RFC4648 B32 "f"', 'MY======', Base32.Encode('f'));
- AssertEquals('RFC4648 B32 "fo"', 'MZXQ====', Base32.Encode('fo'));
- AssertEquals('RFC4648 B32 "foo"', 'MZXW6===', Base32.Encode('foo'));
- AssertEquals('RFC4648 B32 "foob"', 'MZXW6YQ=', Base32.Encode('foob'));
- AssertEquals('RFC4648 B32 "fooba"', 'MZXW6YTB', Base32.Encode('fooba'));
- AssertEquals('RFC4648 B32 "foobar"', 'MZXW6YTBOI======', Base32.Encode('foobar'));
- end;
- function TestBaseN_RFC4648_Base32Hex: TTestString;
- begin
- Result := '';
- AssertEquals('RFC4648 B32Hex empty', '', Base32Hex.Encode(''));
- AssertEquals('RFC4648 B32Hex "f"', 'CO======', Base32Hex.Encode('f'));
- AssertEquals('RFC4648 B32Hex "fo"', 'CPNG====', Base32Hex.Encode('fo'));
- AssertEquals('RFC4648 B32Hex "foo"', 'CPNMU===', Base32Hex.Encode('foo'));
- AssertEquals('RFC4648 B32Hex "foob"', 'CPNMUOG=', Base32Hex.Encode('foob'));
- AssertEquals('RFC4648 B32Hex "fooba"', 'CPNMUOJ1', Base32Hex.Encode('fooba'));
- AssertEquals('RFC4648 B32Hex "foobar"', 'CPNMUOJ1E8======', Base32Hex.Encode('foobar'));
- end;
- function TestBaseN_RFC4648_Base16: TTestString;
- begin
- Result := '';
- AssertEquals('RFC4648 B16 empty', '', Base16.Encode(''));
- AssertEquals('RFC4648 B16 "f"', '66', Base16.Encode('f'));
- AssertEquals('RFC4648 B16 "fo"', '666F', Base16.Encode('fo'));
- AssertEquals('RFC4648 B16 "foo"', '666F6F', Base16.Encode('foo'));
- AssertEquals('RFC4648 B16 "foob"', '666F6F62', Base16.Encode('foob'));
- AssertEquals('RFC4648 B16 "fooba"', '666F6F6261', Base16.Encode('fooba'));
- AssertEquals('RFC4648 B16 "foobar"', '666F6F626172', Base16.Encode('foobar'));
- end;
- procedure RegisterTests;
- begin
- AddSuite('TBaseNTests');
- AddTest('TestRFC3548', @TestBaseN_RFC3548, 'TBaseNTests');
- AddTest('TestRFC4648_Base64', @TestBaseN_RFC4648_Base64, 'TBaseNTests');
- AddTest('TestRFC4648_Base32', @TestBaseN_RFC4648_Base32, 'TBaseNTests');
- AddTest('TestRFC4648_Base32Hex', @TestBaseN_RFC4648_Base32Hex, 'TBaseNTests');
- AddTest('TestRFC4648_Base16', @TestBaseN_RFC4648_Base16, 'TBaseNTests');
- end;
- end.
|