/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 2 1 ĠMat thew ĠN el son Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠĠĠĠĠ Ġhttps :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ**/ Ċ package Ġio . mat the wn el son . component . encoding . base 6 4 Ċ Ċ import Ġio . mat the wn el son . component . base 6 4 . Base 6 4 Ċ import Ġio . mat the wn el son . component . base 6 4 . decode Base 6 4 ToArray Ċ import Ġio . mat the wn el son . component . base 6 4 . encode Base 6 4 Ċ import Ġio . mat the wn el son . component . encoding . base 6 4 . Base 6 4 Default UnitTest . Companion . decode Hex To ByteArray Ċ import Ġio . mat the wn el son . component . encoding . test . Base Encoding TestBase Ċ import Ġkotlin . test . After Test Ċ import Ġkotlin . test . Test Ċ Ċ class ĠBase 6 4 Url Safe UnitTest : ĠBase Encoding TestBase () Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġbase 6 4 Url Safe : ĠBase 6 4 . Url Safe Ġ= ĠBase 6 4 . Url Safe ( pad Ġ= Ġtrue ) ĊĊĠĠĠ Ġ@ After Test ĊĠĠĠ Ġfun Ġafter () Ġ{ ĊĠĠĠĠĠĠĠ Ġbase 6 4 Url Safe Ġ= ĠBase 6 4 . Url Safe ( pad Ġ= Ġtrue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġval Ġdecode Failure DataSet : ĠSet < Data < String , ĠAny ? >> Ġ= Ġset Of ( ĊĠĠĠĠĠĠĠ ĠData (" SG V sb G 8 g V 2 9 yb GQ ^ ", Ġexpected Ġ= Ġnull , Ġmessage Ġ= Ġ" Character Ġ'^ ' Ġshould Ġreturn Ġnull ") ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġoverride Ġval Ġdecode Success HelloWorld : ĠData < String , ĠByteArray > Ġ= ĊĠĠĠĠĠĠĠ ĠData ( raw Ġ= Ġ" SG V sb G 8 g V 2 9 yb GQ h ", Ġexpected Ġ= Ġ" Hello ĠWorld ! ". encode To ByteArray ()) ĊĊĠĠĠ Ġoverride Ġval Ġdecode Success DataSet : ĠSet < Data < String , ĠByteArray >> Ġ= Ġset Of ( ĊĠĠĠĠĠĠĠ Ġdecode Success HelloWorld , ĊĠĠĠĠĠĠĠ ĠData ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġraw Ġ= Ġ" U 2 F sd G Vk X 1 _ 4 ZC 6 1 v UIS 4 0 oz 3 - re 2 5 V 1 W 1 f Bb Nb K _ mn Rg dv Ty YP 0 kb NM Jx 7 ud 1 Y TX Th gc g ce R 0 8 A _ p _ N sa NT ZQ ==", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpected Ġ= Ġ(" 5 3 Ġ 6 1 Ġ 6 c Ġ 7 4 Ġ 6 5 Ġ 6 4 Ġ 5 f Ġ 5 f Ġf 8 Ġ 6 4 Ġ 2 e Ġb 5 Ġbd Ġ 4 2 Ġ 1 2 Ġe 3 Ġ 4 a Ġ 3 3 Ġdf Ġea Ġde Ġdb Ġ 9 5 Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" 7 5 Ġ 5 b Ġ 5 7 Ġc 1 Ġ 6 c Ġd 6 Ġca Ġfe Ġ 6 9 Ġd 1 Ġ 8 1 Ġdb Ġd 3 Ġc 9 Ġ 8 3 Ġf 4 Ġ 9 1 Ġb 3 Ġ 4 c Ġ 2 7 Ġ 1 e Ġee Ġ 7 7 Ġ 5 6 Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" 1 3 Ġ 5 d Ġ 3 8 Ġ 6 0 Ġ 7 2 Ġ 0 7 Ġ 1 e Ġ 4 7 Ġ 4 f Ġ 0 0 Ġfe Ġ 9 f Ġcd Ġb 1 Ġa 3 Ġ 5 3 Ġ 6 5 "). decode Hex To ByteArray () ĊĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠ ĠData ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġraw Ġ= Ġ" U 2 F sd G Vk X 1 _ G - ROS 6 e 4 Z 2 or B GM ls nq Vt 2 6 9 2 l 9 0 V 0 tp c V 3 1 1 HF 5 pr 6 WO Zc D HP q CH ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpected Ġ= Ġ(" 5 3 Ġ 6 1 Ġ 6 c Ġ 7 4 Ġ 6 5 Ġ 6 4 Ġ 5 f Ġ 5 f Ġc 6 Ġf 9 Ġ 1 3 Ġ 9 2 Ġe 9 Ġee Ġ 1 9 Ġda Ġ 8 a Ġc 1 Ġ 1 8 Ġc 9 Ġ 6 c Ġ 9 e Ġa 5 Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" 6 d Ġdb Ġaf Ġ 7 6 Ġ 9 7 Ġdd Ġ 1 5 Ġd 2 Ġda Ġ 5 c Ġ 5 7 Ġ 7 d Ġ 7 5 Ġ 1 c Ġ 5 e Ġ 6 9 Ġaf Ġa 5 Ġ 8 e Ġ 6 5 Ġc 0 Ġc 7 Ġ 3 e Ġa 0 Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" 8 7 "). decode Hex To ByteArray () ĊĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠ ĠData ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġraw Ġ= Ġ" U 2 F sd G Vk X 1 _ zl J Bu - p 0 Q 8 b Hf 4 A 9 AF QE 6 l - wf SL p 2 r ak =", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpected Ġ= Ġ(" 5 3 Ġ 6 1 Ġ 6 c Ġ 7 4 Ġ 6 5 Ġ 6 4 Ġ 5 f Ġ 5 f Ġf 3 Ġ 9 4 Ġ 9 0 Ġ 6 e Ġfa Ġ 9 d Ġ 1 0 Ġf 1 Ġb 1 Ġdf Ġe 0 Ġ 0 f Ġ 4 0 Ġ 1 5 Ġ 0 1 Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" 3 a Ġ 9 7 Ġec Ġ 1 f Ġ 4 8 Ġba Ġ 7 6 Ġad Ġa 9 "). decode Hex To ByteArray () ĊĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠ ĠData ( raw Ġ= Ġ" ==== ==", Ġexpected Ġ= ĠByteArray ( 0 ), Ġmessage Ġ= Ġ" De coding Ġa ĠString Ġcontaining Ġonly Ġpadding Ġ'=' Ġshould Ġreturn Ġan Ġempty ĠByteArray "), ĊĠĠĠĠĠĠĠ ĠData ( raw Ġ= Ġ" Zg ==", Ġexpected Ġ= Ġ" f ". encode To ByteArray ()), ĊĠĠĠĠĠĠĠ ĠData ( raw Ġ= Ġ" Zm 8 =", Ġexpected Ġ= Ġ" fo ". encode To ByteArray ()), ĊĠĠĠĠĠĠĠ ĠData ( raw Ġ= Ġ" Zm 9 v ", Ġexpected Ġ= Ġ" foo ". encode To ByteArray ()), ĊĠĠĠĠĠĠĠ ĠData ( raw Ġ= Ġ" Zm 9 v IA ==", Ġexpected Ġ= Ġ" foo Ġ". encode To ByteArray ()), ĊĠĠĠĠĠĠĠ ĠData ( raw Ġ= Ġ" Zm 9 v IG I =", Ġexpected Ġ= Ġ" foo Ġb ". encode To ByteArray ()), ĊĠĠĠĠĠĠĠ ĠData ( raw Ġ= Ġ" Zm 9 v IG Jh ", Ġexpected Ġ= Ġ" foo Ġba ". encode To ByteArray ()), ĊĠĠĠĠĠĠĠ ĠData ( raw Ġ= Ġ" Zm 9 v IG Jh cg ==", Ġexpected Ġ= Ġ" foo Ġbar ". encode To ByteArray ()), ĊĠĠĠĠĠĠĠ ĠData ( raw Ġ= Ġ" Rg ==", Ġexpected Ġ= Ġ" F ". encode To ByteArray ()), ĊĠĠĠĠĠĠĠ ĠData ( raw Ġ= Ġ" Rk 8 =", Ġexpected Ġ= Ġ" FO ". encode To ByteArray ()), ĊĠĠĠĠĠĠĠ ĠData ( raw Ġ= Ġ" Rk 9 P ", Ġexpected Ġ= Ġ" FOO ". encode To ByteArray ()), ĊĠĠĠĠĠĠĠ ĠData ( raw Ġ= Ġ" Rk 9 PI A ==", Ġexpected Ġ= Ġ" FOO Ġ". encode To ByteArray ()), ĊĠĠĠĠĠĠĠ ĠData ( raw Ġ= Ġ" Rk 9 PI EI =", Ġexpected Ġ= Ġ" FOO ĠB ". encode To ByteArray ()), ĊĠĠĠĠĠĠĠ ĠData ( raw Ġ= Ġ" Rk 9 PI E JB ", Ġexpected Ġ= Ġ" FOO ĠB A ". encode To ByteArray ()), ĊĠĠĠĠĠĠĠ ĠData ( raw Ġ= Ġ" Rk 9 PI EJ BU g ==", Ġexpected Ġ= Ġ" FOO ĠBAR ". encode To ByteArray ()), ĊĠĠĠĠĠĠĠ ĠData ( raw Ġ= Ġ" cg ==", Ġexpected Ġ= Ġ" r ". encode To ByteArray ()), ĊĠĠĠĠĠĠĠ ĠData ( raw Ġ= Ġ" cm E =", Ġexpected Ġ= Ġ" ra ". encode To ByteArray ()), ĊĠĠĠĠĠĠĠ ĠData ( raw Ġ= Ġ" cm Fi ", Ġexpected Ġ= Ġ" r ab ". encode To ByteArray ()), ĊĠĠĠĠĠĠĠ ĠData ( raw Ġ= Ġ" cm Fi IA ==", Ġexpected Ġ= Ġ" r ab Ġ". encode To ByteArray ()), ĊĠĠĠĠĠĠĠ ĠData ( raw Ġ= Ġ" cm Fi IG 8 =", Ġexpected Ġ= Ġ" r ab Ġo ". encode To ByteArray ()), ĊĠĠĠĠĠĠĠ ĠData ( raw Ġ= Ġ" cm Fi IG 9 v ", Ġexpected Ġ= Ġ" r ab Ġo o ". encode To ByteArray ()), ĊĠĠĠĠĠĠĠ ĠData ( raw Ġ= Ġ" cm Fi IG 9 v Zg ==", Ġexpected Ġ= Ġ" r ab Ġo of ". encode To ByteArray ()), ĊĠĠĠĠĠĠĠ ĠData ( raw Ġ= Ġ" Ug ==", Ġexpected Ġ= Ġ" R ". encode To ByteArray ()), ĊĠĠĠĠĠĠĠ ĠData ( raw Ġ= Ġ" Uk E =", Ġexpected Ġ= Ġ" RA ". encode To ByteArray ()), ĊĠĠĠĠĠĠĠ ĠData ( raw Ġ= Ġ" Uk FC ", Ġexpected Ġ= Ġ" R AB ". encode To ByteArray ()), ĊĠĠĠĠĠĠĠ ĠData ( raw Ġ= Ġ" Uk F CI A ==", Ġexpected Ġ= Ġ" R AB Ġ". encode To ByteArray ()), ĊĠĠĠĠĠĠĠ ĠData ( raw Ġ= Ġ" Uk FC IE 8 =", Ġexpected Ġ= Ġ" R AB ĠO ". encode To ByteArray ()), ĊĠĠĠĠĠĠĠ ĠData ( raw Ġ= Ġ" Uk FC IE 9 P ", Ġexpected Ġ= Ġ" R AB ĠO O ". encode To ByteArray ()), ĊĠĠĠĠĠĠĠ ĠData ( raw Ġ= Ġ" Uk FC IE 9 PR g ==", Ġexpected Ġ= Ġ" R AB ĠO OF ". encode To ByteArray ()), ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġprivate Ġfun Ġget Decode Success DataSet Without Padding (): ĠSet < Data < String , ĠByteArray >> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnew Set : ĠMutable Set < Data < String , ĠByteArray >> Ġ= ĠLinked HashSet ( decode Success DataSet . size ) ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( data Ġin Ġdecode Success DataSet ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnew Set . add ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠData ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġraw Ġ= Ġdata . raw . drop Last While Ġ{ Ġit Ġ== Ġ'=' Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpected Ġ= Ġdata . expected ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġnew Set ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġval Ġencode Success DataSet : ĠSet < Data < String , ĠString >> Ġ= Ġset Of ( ĊĠĠĠĠĠĠĠ ĠData ( raw Ġ= Ġ" Hello ĠWorld !", Ġexpected Ġ= Ġ" SG V sb G 8 g V 2 9 yb GQ h "), ĊĠĠĠĠĠĠĠ ĠData ( raw Ġ= Ġ" f ", Ġexpected Ġ= Ġ" Zg ==" ), ĊĠĠĠĠĠĠĠ ĠData ( raw Ġ= Ġ" fo ", Ġexpected Ġ= Ġ" Zm 8 =" ), ĊĠĠĠĠĠĠĠ ĠData ( raw Ġ= Ġ" foo ", Ġexpected Ġ= Ġ" Zm 9 v "), ĊĠĠĠĠĠĠĠ ĠData ( raw Ġ= Ġ" foo Ġ", Ġexpected Ġ= Ġ" Zm 9 v IA ==" ), ĊĠĠĠĠĠĠĠ ĠData ( raw Ġ= Ġ" foo Ġb ", Ġexpected Ġ= Ġ" Zm 9 v IG I =" ), ĊĠĠĠĠĠĠĠ ĠData ( raw Ġ= Ġ" foo Ġba ", Ġexpected Ġ= Ġ" Zm 9 v IG Jh "), ĊĠĠĠĠĠĠĠ ĠData ( raw Ġ= Ġ" foo Ġbar ", Ġexpected Ġ= Ġ" Zm 9 v IG Jh cg ==" ), ĊĠĠĠĠĠĠĠ ĠData ( raw Ġ= Ġ" F ", Ġexpected Ġ= Ġ" Rg ==" ), ĊĠĠĠĠĠĠĠ ĠData ( raw Ġ= Ġ" FO ", Ġexpected Ġ= Ġ" Rk 8 =" ), ĊĠĠĠĠĠĠĠ ĠData ( raw Ġ= Ġ" FOO ", Ġexpected Ġ= Ġ" Rk 9 P "), ĊĠĠĠĠĠĠĠ ĠData ( raw Ġ= Ġ" FOO Ġ", Ġexpected Ġ= Ġ" Rk 9 PI A ==" ), ĊĠĠĠĠĠĠĠ ĠData ( raw Ġ= Ġ" FOO ĠB ", Ġexpected Ġ= Ġ" Rk 9 PI EI =" ), ĊĠĠĠĠĠĠĠ ĠData ( raw Ġ= Ġ" FOO ĠB A ", Ġexpected Ġ= Ġ" Rk 9 PI E JB "), ĊĠĠĠĠĠĠĠ ĠData ( raw Ġ= Ġ" FOO ĠBAR ", Ġexpected Ġ= Ġ" Rk 9 PI EJ BU g ==" ), ĊĠĠĠĠĠĠĠ ĠData ( raw Ġ= Ġ" r ", Ġexpected Ġ= Ġ" cg ==" ), ĊĠĠĠĠĠĠĠ ĠData ( raw Ġ= Ġ" ra ", Ġexpected Ġ= Ġ" cm E =" ), ĊĠĠĠĠĠĠĠ ĠData ( raw Ġ= Ġ" r ab ", Ġexpected Ġ= Ġ" cm Fi "), ĊĠĠĠĠĠĠĠ ĠData ( raw Ġ= Ġ" r ab Ġ", Ġexpected Ġ= Ġ" cm Fi IA ==" ), ĊĠĠĠĠĠĠĠ ĠData ( raw Ġ= Ġ" r ab Ġo ", Ġexpected Ġ= Ġ" cm Fi IG 8 =" ), ĊĠĠĠĠĠĠĠ ĠData ( raw Ġ= Ġ" r ab Ġo o ", Ġexpected Ġ= Ġ" cm Fi IG 9 v "), ĊĠĠĠĠĠĠĠ ĠData ( raw Ġ= Ġ" r ab Ġo of ", Ġexpected Ġ= Ġ" cm Fi IG 9 v Zg ==" ), ĊĠĠĠĠĠĠĠ ĠData ( raw Ġ= Ġ" R ", Ġexpected Ġ= Ġ" Ug ==" ), ĊĠĠĠĠĠĠĠ ĠData ( raw Ġ= Ġ" RA ", Ġexpected Ġ= Ġ" Uk E =" ), ĊĠĠĠĠĠĠĠ ĠData ( raw Ġ= Ġ" R AB ", Ġexpected Ġ= Ġ" Uk FC "), ĊĠĠĠĠĠĠĠ ĠData ( raw Ġ= Ġ" R AB Ġ", Ġexpected Ġ= Ġ" Uk F CI A ==" ), ĊĠĠĠĠĠĠĠ ĠData ( raw Ġ= Ġ" R AB ĠO ", Ġexpected Ġ= Ġ" Uk FC IE 8 =" ), ĊĠĠĠĠĠĠĠ ĠData ( raw Ġ= Ġ" R AB ĠO O ", Ġexpected Ġ= Ġ" Uk FC IE 9 P "), ĊĠĠĠĠĠĠĠ ĠData ( raw Ġ= Ġ" R AB ĠO OF ", Ġexpected Ġ= Ġ" Uk FC IE 9 PR g ==" ), ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġoverride Ġfun Ġdecode ( data : ĠString ): ĠByteArray ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġdata . decode Base 6 4 ToArray () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġencode ( data : ĠByteArray ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġdata . encode Base 6 4 ( base 6 4 Ġ= Ġbase 6 4 Url Safe ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġgiven String _ when Encoded _ Matches R fc 4 6 4 8 Spec () Ġ{ ĊĠĠĠĠĠĠĠ Ġcheck Encode Success For DataSet ( encode Success DataSet ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġgiven Bad Encoding _ when Decoded _ Returns Null () Ġ{ ĊĠĠĠĠĠĠĠ Ġcheck Decode Failure For DataSet ( decode Failure DataSet ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġgiven Encoded Data _ when Decoded _ Matches R fc 4 6 4 8 Spec () Ġ{ ĊĠĠĠĠĠĠĠ Ġcheck Decode Success For DataSet ( decode Success DataSet ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġgiven String _ when Encoded Without Padding Exp ressed _ returns Expected () Ġ{ ĊĠĠĠĠĠĠĠ Ġbase 6 4 Url Safe Ġ= ĠBase 6 4 . Url Safe ( pad Ġ= Ġfalse ) ĊĊĠĠĠĠĠĠĠ Ġcheck Decode Success For DataSet ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Decode Success DataSet Without Padding () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġgiven Universal Decoder Parameters _ when Checked _ are Successful () Ġ{ ĊĠĠĠĠĠĠĠ Ġcheck Universal Decoder Parameters () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġgiven Universal Encoder Parameters _ when Checked _ are Successful () Ġ{ ĊĠĠĠĠĠĠĠ Ġcheck Universal Encoder Parameters () ĊĠĠĠ Ġ} Ċ Ċ } Ċ