@ file : Suppress (" EXPERIMENT AL _ API _ USAGE ") Ċ Ċ package Ġcom . dit cho om . mqtt . control packet Ċ Ċ import Ġkotlin . js . Js Name Ċ import Ġkotlin . jvm . Jvm Name Ċ import Ġkotlin . test . Test Ċ import Ġkotlin . test . assertFalse Ċ import Ġkotlin . test . assertTrue Ċ import Ġkotlin . test . fail Ċ Ċ /** Ċ Ġ* ĠMQTT ĠCon formance ĠCharacter Ġdata Ġin Ġa ĠUTF - 8 ĠEn coded ĠString ĠMUST Ġbe Ġwell - formed ĠUTF - 8 Ġas Ġdefined Ġby Ġthe ĠUnicode Ġspecification ĠUnicode Ġand Ġrest ated Ġin ĠRFC Ġ 3 6 2 9 Ċ Ġ*/ Ċ class ĠString Tests Ġ{ ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġinvalid Mqtt String () Ġ= ĠassertFalse (" abc \ u 0 0 0 1 def ". validate Mqtt UTF 8 String ()) ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġvalid Mqtt String () Ġ= ĠassertTrue (" abc \ u 0 0 2 F def ". validate Mqtt UTF 8 String ()) ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġinvalid Mqtt String Point 2 () Ġ= ĠassertFalse (" abc \ u 0 0 7 f def ". validate Mqtt UTF 8 String ()) ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġvalid Mqtt String Basic () Ġ= ĠassertTrue (" abcdef ". validate Mqtt UTF 8 String ()) ĊĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ Js Name (" utf 8 DoesNot Have Null ") ĊĠĠĠ Ġ@ Jvm Name (" utf 8 DoesNot Have Null ") ĊĠĠĠ Ġfun Ġ` MQTT ĠCon formance ĠA ĠUTF - 8 ĠEn coded ĠString ĠMUST ĠNOT Ġinclude Ġan Ġencoding Ġof Ġthe Ġnull Ġcharacter ĠU + 0 0 0 0 `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstring Ġ= ĠM qtt Utf 8 String ("\ u 0 0 0 0 ") ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstring . getValue OrThrow () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfail (" should Ġof Ġthrown ") ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠInvalid Mqtt Utf 8 String Malformed Packet Exception ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// TODO : ĠFIX ĠTHIS ĠCON FORMANCE ĠTEST ! Ċ // Ċ // ĠĠĠ Ġ@ Test Ċ // ĠĠĠ Ġ@ Js Name (" zero Width No Break Space ") Ċ // ĠĠĠ Ġfun Ġ` MQTT ĠCon formance ĠA ĠUTF - 8 Ġencoded Ġsequence Ġ 0 xEF Ġ 0 xBB Ġ 0 xB F Ġis Ġalways Ġinterpreted Ġas ĠU + FE FF Ġ( ZERO ĠWIDTH ĠNO - BREAK ĠSPACE ) Ġwhere ver Ġit Ġappears Ġin Ġa Ġstring Ġand ĠMUST ĠNOT Ġbe Ġskipped Ġover Ġor Ġstripped Ġoff Ġby Ġa Ġpacket Ġreceiver Ġ` () Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġval Ġstring Ġ= ĠM qtt Utf 8 String ("\ u FE FF ") Ċ // ĠĠĠĠĠĠĠ Ġval Ġactual Ġ= Ġstring . getValue OrThrow () Ċ // ĠĠĠĠĠĠĠ ĠassertEquals ("\ u FE FF ", Ġactual ) Ċ // ĠĠĠĠĠĠĠ Ġval Ġbuffer Ġ= ĠPlatform Buffer . allocate ( 6 u , Ġlimits Ġ= Ġobject Ġ: ĠBuffer Memory Limit Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġis Too Large For Memory ( size : ĠUInt ) Ġ= Ġfalse Ċ // ĠĠĠĠĠĠĠ Ġ}) Ċ // ĠĠĠĠĠĠĠ Ġbuffer . write Utf 8 String ( string . value ) Ċ // ĠĠĠĠĠĠĠ Ġbuffer . reset For Read () Ċ // ĠĠĠĠĠĠĠ ĠassertEquals ( string . value , Ġbuffer . read Mqtt Utf 8 String Not Validated (). toString ()) Ċ // ĠĠĠ Ġ} Ċ Ċ // ĠĠĠ Ġ@ Test Ċ // ĠĠĠ Ġ@ Js Name (" latin Capt ial No Norm ative Test ") Ċ // ĠĠĠ Ġfun Ġ` The Ġstring ĠAu D 8 6 9 u DED 4 Ġwhich Ġis ĠLATIN ĠCAPITAL ĠLetter ĠA Ġfollowed Ġby Ġthe Ġcode Ġpoint ĠU + 2 A 6 D 4 Ġ( which Ġrepresents Ġa ĠC JK ĠIDE O GRAPH ĠEXT ENSION ĠB Ġcharacter ) Ġis Ġencoded `() Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġval Ġstring Ġ= ĠM qtt Utf 8 String (" A \ uD 8 6 9 \ u DED 4 ") Ċ // ĠĠĠĠĠĠĠ Ġval Ġactual Ġ= Ġstring . getValue OrThrow () Ċ // ĠĠĠĠĠĠĠ ĠassertEquals (" A ð ª Ľ Ķ ", Ġ" A \ uD 8 6 9 \ u DED 4 ") Ċ Ċ // ĠĠĠĠĠĠĠ ĠassertEquals ( 5 . to U Short (), Ġpacket . read U Short ()) Ċ // ĠĠĠĠĠĠĠ ĠassertEquals ( 0 x 4 1 . to Byte (), Ġpacket . read Byte ()) Ġ// Ġ' A ' Ċ // ĠĠĠĠĠĠĠ ĠassertEquals ( 0 xF 0 . to Byte (), Ġpacket . read Byte ()) ĊĠĠĠ Ġ// ĠThis Ġis Ġfailing . Ġwhat Ġdo Ġi Ġdo Ġhere ? Ċ // ĠĠĠĠĠĠĠ ĠassertEquals ( 0 xAA . to Byte (), Ġpacket . read Byte ()) Ċ // ĠĠĠĠĠĠĠ ĠassertEquals ( 0 x 9 B . to Byte (), Ġpacket . read Byte ()) Ċ // ĠĠĠĠĠĠĠ ĠassertEquals ( 0 x 9 4 . to Byte (), Ġpacket . read Byte ()) Ċ // ĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġcontrol Character U 0 0 0 1 to U 0 0 1 F () Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( c Ġin Ġ'\ u 0 0 0 1 ' .. '\ u 0 0 1 F ') Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstring Ġ= ĠM qtt Utf 8 String ( c . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstring . getValue OrThrow () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfail (" should Ġof Ġthrown ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠInvalid Mqtt Utf 8 String Malformed Packet Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġstring Length Overflow () Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠM qtt Utf 8 String (" a ". repeat ( 6 5 _ 5 3 6 )). getValue OrThrow () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfail (" should Ġof Ġthrown ") ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠInvalid Mqtt Utf 8 String Malformed Packet Exception ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġcontrol Character UD 8 0 0 to UD FFF () Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( c Ġin Ġ'\ uD 8 0 0 ' .. '\ uD FFF ') Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstring Ġ= ĠM qtt Utf 8 String ( c . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstring . getValue OrThrow () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfail (" should Ġof Ġthrown ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠInvalid Mqtt Utf 8 String Malformed Packet Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġcontrol Character U 0 0 7 F to U 0 0 9 F () Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( c Ġin Ġ'\ u 0 0 7 F ' .. '\ u 0 0 9 F ') Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstring Ġ= ĠM qtt Utf 8 String ( c . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstring . getValue OrThrow () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfail (" should Ġof Ġthrown ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠInvalid Mqtt Utf 8 String Malformed Packet Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }