package Ġio . me how . r uler Ċ Ċ import Ġio . kot est . core . spec . style . Describe Spec Ċ import Ġio . kot est . matchers . collections . should Contain Ċ import Ġio . kot est . matchers . collections . should Contain Exactly Ċ import Ġio . kot est . matchers . collections . should Not Be Empty Ċ import Ġio . kot est . matchers . collections . should Not Contain Ċ import Ġio . kot est . matchers . shouldBe Ċ import Ġio . me how . r uler . Si Length Unit . Meter Ċ import Ġio . me how . r uler . format . Formatting Context Ċ import Ġio . me how . r uler . format . Length Converter Ċ import Ġio . me how . r uler . format . Length Formatter Ċ import Ġio . me how . r uler . test . Reset R uler Listener Ċ import Ġio . me how . r uler . test . localize Ċ import Ġjava . util . Locale Ċ Ċ internal Ġclass ĠR uler Spec Ġ: ĠDescribe Spec ({ ĊĠ Ġlistener ( Reset R uler Listener ) ĊĊĠ Ġdescribe (" r uler ") Ġ{ ĊĠĠĠ Ġcontext (" configuration ") Ġ{ ĊĠĠĠĠĠ Ġit (" has Ġbuilt - in Ġconverter Ġfactories ") Ġ{ ĊĠĠĠĠĠĠĠ ĠR uler . installed Converter Factories . should Not Be Empty () ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġit (" cannot Ġremove Ġbuilt - in Ġconverter Ġfactories ") Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfactories Ġ= ĠR uler . installed Converter Factories ĊĊĠĠĠĠĠĠĠ Ġfactories . forEach ( R uler :: remove Converter Factory ) ĊĊĠĠĠĠĠĠĠ ĠR uler . installed Converter Factories Ġshould Contain Exactly Ġfactories ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġit (" can Ġadd Ġa Ġconverter Ġfactory ") Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfactory Ġ= ĠLength Converter . Factory Ġ{ Ġnull Ġ} ĊĊĠĠĠĠĠĠĠ ĠR uler . add Converter Factory ( factory ) ĊĊĠĠĠĠĠĠĠ ĠR uler . installed Converter Factories Ġshould Contain Ġfactory ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġit (" can Ġremove Ġa Ġconverter Ġfactory ") Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfactory Ġ= ĠLength Converter . Factory Ġ{ Ġnull Ġ} ĊĊĠĠĠĠĠĠĠ ĠR uler . add Converter Factory ( factory ) ĊĠĠĠĠĠĠĠ ĠR uler . remove Converter Factory ( factory ) ĊĊĠĠĠĠĠĠĠ ĠR uler . installed Converter Factories Ġshould Not Contain Ġfactory ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġit (" uses Ġconverter Ġfactories Ġin Ġthe Ġinstalled Ġorder ") Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġtext Ġ= Ġ"" ĊĠĠĠĠĠĠĠ ĠR uler . add Converter Factory Ġ{ Ġtext Ġ+= Ġ" a "; Ġnull Ġ} ĊĠĠĠĠĠĠĠ ĠR uler . add Converter Factory Ġ{ Ġtext Ġ+= Ġ" b "; Ġnull Ġ} ĊĊĠĠĠĠĠĠĠ ĠDistance . Zero . format () ĊĊĠĠĠĠĠĠĠ Ġtext ĠshouldBe Ġ" ab " ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġit (" does Ġnot Ġuse Ġfollowing Ġconverter s Ġafter Ġfirst Ġmatch ") Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġtext Ġ= Ġ"" ĊĠĠĠĠĠĠĠ ĠR uler . add Converter Factory Ġ{ Ġtext Ġ+= Ġ" a "; ĠLength Converter Ġ{ Ġit Ġ} Ġ} ĊĠĠĠĠĠĠĠ ĠR uler . add Converter Factory Ġ{ Ġtext Ġ+= Ġ" b "; Ġnull Ġ} ĊĊĠĠĠĠĠĠĠ ĠDistance . Zero . format () ĊĊĠĠĠĠĠĠĠ Ġtext ĠshouldBe Ġ" a " ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġit (" has Ġbuilt - in Ġformatter Ġfactories ") Ġ{ ĊĠĠĠĠĠĠĠ ĠR uler . installed Formatter Factories . should Not Be Empty () ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġit (" cannot Ġremove Ġbuilt - in Ġformatter Ġfactories ") Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfactories Ġ= ĠR uler . installed Formatter Factories ĊĊĠĠĠĠĠĠĠ Ġfactories . forEach ( R uler :: remove Formatter Factory ) ĊĊĠĠĠĠĠĠĠ ĠR uler . installed Formatter Factories Ġshould Contain Exactly Ġfactories ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġit (" can Ġadd Ġa Ġformatter Ġfactory ") Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfactory Ġ= ĠLength Formatter . Factory Ġ{ Ġ_, Ġ_ Ġ-> Ġnull Ġ} ĊĊĠĠĠĠĠĠĠ ĠR uler . add Formatter Factory ( factory ) ĊĊĠĠĠĠĠĠĠ ĠR uler . installed Formatter Factories Ġshould Contain Ġfactory ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġit (" can Ġremove Ġa Ġformatter Ġfactory ") Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfactory Ġ= ĠLength Formatter . Factory Ġ{ Ġ_, Ġ_ Ġ-> Ġnull Ġ} ĊĊĠĠĠĠĠĠĠ ĠR uler . add Formatter Factory ( factory ) ĊĠĠĠĠĠĠĠ ĠR uler . remove Formatter Factory ( factory ) ĊĊĠĠĠĠĠĠĠ ĠR uler . installed Formatter Factories Ġshould Not Contain Ġfactory ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġit (" uses Ġformatter Ġfactories Ġin Ġthe Ġinstalled Ġorder ") Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġtext Ġ= Ġ"" ĊĠĠĠĠĠĠĠ ĠR uler . add Formatter Factory Ġ{ Ġ_, Ġ_ Ġ-> Ġtext Ġ+= Ġ" a "; Ġnull Ġ} ĊĠĠĠĠĠĠĠ ĠR uler . add Formatter Factory Ġ{ Ġ_, Ġ_ Ġ-> Ġtext Ġ+= Ġ" b "; Ġnull Ġ} ĊĊĠĠĠĠĠĠĠ ĠDistance . Zero . format () ĊĊĠĠĠĠĠĠĠ Ġtext ĠshouldBe Ġ" ab " ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġit (" does Ġnot Ġuse Ġfollowing Ġformat ters Ġafter Ġfirst Ġmatch ") Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġtext Ġ= Ġ"" ĊĠĠĠĠĠĠĠ ĠR uler . add Formatter Factory Ġ{ Ġ_, Ġ_ Ġ-> Ġtext Ġ+= Ġ" a "; ĠLength Formatter Ġ{ Ġ_, Ġ_ Ġ-> Ġ"" Ġ} Ġ} ĊĠĠĠĠĠĠĠ ĠR uler . add Formatter Factory Ġ{ Ġ_, Ġ_ Ġ-> Ġtext Ġ+= Ġ" b "; Ġnull Ġ} ĊĊĠĠĠĠĠĠĠ ĠDistance . Zero . format () ĊĊĠĠĠĠĠĠĠ Ġtext ĠshouldBe Ġ" a " ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġit (" does Ġnot Ġuse Ġimp erial Ġformatting Ġfor ĠUK Ġby Ġdefault ") Ġ{ ĊĠĠĠĠĠĠĠ ĠR uler . localize ( Locale . UK ) ĊĊĠĠĠĠĠĠĠ ĠDistance . of Fe et ( 4 ). format () ĠshouldBe Ġ" 1 . 2 2 m " ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġit (" can Ġturn Ġon Ġimp erial Ġformatting Ġfor ĠUK ") Ġ{ ĊĠĠĠĠĠĠĠ ĠR uler . localize ( Locale . UK ) ĊĊĠĠĠĠĠĠĠ ĠR uler . is Uk Imp erial Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠ ĠDistance . of Fe et ( 4 ). format () ĠshouldBe Ġ" 1 yd Ġ 1 ft " ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġit (" can Ġturn Ġoff Ġimp erial Ġformatting Ġfor ĠUK ") Ġ{ ĊĠĠĠĠĠĠĠ ĠR uler . localize ( Locale . UK ) ĊĊĠĠĠĠĠĠĠ ĠR uler . is Uk Imp erial Ġ= Ġtrue ĊĠĠĠĠĠĠĠ ĠR uler . is Uk Imp erial Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ ĠDistance . of Fe et ( 4 ). format () ĠshouldBe Ġ" 1 . 2 2 m " ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcontext (" formatting ") Ġ{ ĊĠĠĠĠĠ Ġit (" uses Ġimp erial Ġformatting Ġfor Ġimp erial Ġlengths ") Ġ{ ĊĠĠĠĠĠĠĠ ĠLength . of Fe et ( 1 . 5 ). format () ĠshouldBe Ġ" 1 ft Ġ 6 in " ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġit (" does Ġnot Ġuse Ġimp erial Ġformatting Ġfor ĠSI Ġlengths ") Ġ{ ĊĠĠĠĠĠĠĠ ĠLength . of Met ers ( 1 ). format () ĠshouldBe Ġ" 1 . 0 0 m " ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġit (" can Ġturn Ġoff Ġimp erial Ġformatting ") Ġ{ ĊĠĠĠĠĠĠĠ ĠR uler . use Imp erial Formatter Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ ĠLength . of Fe et ( 1 . 5 ). format () ĠshouldBe Ġ" 1 . 5 0 ft " ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġit (" uses Ġall Ġunits Ġfor Ġimp erial Ġformatting ") Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlength Ġ= ĠLength . of In ches ( 1 ) Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLength . of Fe et ( 2 ) Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLength . of Y ards ( 3 ) Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLength . of M iles ( 4 ) ĊĊĠĠĠĠĠĠĠ Ġlength . format () ĠshouldBe Ġ" 4 mi Ġ 3 yd Ġ 2 ft Ġ 1 in " ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġit (" uses Ġmeters Ġas Ġdefault ĠSI Ġunits Ġfor Ġdistance ") Ġ{ ĊĠĠĠĠĠĠĠ ĠR uler . localize ( Locale . CAN ADA ) ĊĊĠĠĠĠĠĠĠ ĠDistance . of Cent ime ters ( 1 0 0 ). format () ĠshouldBe Ġ" 1 . 0 0 m " ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġit (" uses Ġy ards Ġas Ġdefault Ġimp erial Ġunits Ġfor Ġdistance ") Ġ{ ĊĠĠĠĠĠĠĠ ĠDistance . of Y ards ( 1 ). format () ĠshouldBe Ġ" 1 yd " ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġit (" uses Ġa Ġsupplied Ġunit Ġseparator ") Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcontext Ġ= ĠFormat ting Context . with Separator ("| ") ĊĠĠĠĠĠĠĠ ĠLength . of In ches ( 1 ). format ( context ) ĠshouldBe Ġ" 1 | in " ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġit (" uses Ġa Ġsupplied Ġfraction al Ġprecision ") Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcontext Ġ= ĠFormat ting Context . with Precision ( 3 ) ĊĠĠĠĠĠĠĠ ĠLength . of Met ers ( 1 ). format ( context ) ĠshouldBe Ġ" 1 . 0 0 0 m " ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġit (" uses Ġa Ġlocal ised Ġgrouping ") Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlength Ġ= ĠLength . of K ilo meters ( 1 _ 5 2 3 _ 2 5 6 ) ĊĊĠĠĠĠĠĠĠ Ġlength . format () ĠshouldBe Ġ" 1 , 5 2 3 , 2 5 6 . 0 0 km " ĊĊĠĠĠĠĠĠĠ ĠR uler . localize ( Locale (" pl ")) ĊĊĠĠĠĠĠĠĠ Ġlength . format () ĠshouldBe Ġ" 1 Âł 5 2 3 Âł 2 5 6 , 0 0 km " ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġit (" uses Ġa Ġsupplied Ġlength Ġconverter ") Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġconverter Ġ= ĠLength Converter Ġ{ ĠDistance . Zero . to Length ( Meter ) Ġ} ĊĊĠĠĠĠĠĠĠ ĠDistance . Max . format ( converter Ġ= Ġconverter ) ĠshouldBe Ġ" 0 . 0 0 m " ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġit (" uses Ġa Ġsupplied Ġlength Ġformatter ") Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġformatter Ġ= ĠLength Formatter Ġ{ Ġ_, Ġ_ Ġ-> Ġ" hello " Ġ} ĊĊĠĠĠĠĠĠĠ ĠDistance . Zero . format ( formatter Ġ= Ġformatter ) ĠshouldBe Ġ" hello " ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ }) Ċ