@@ -2,8 +2,10 @@ module Test.Main where
22
33import Prelude
44
5+import Control.Monad.Except (ExceptT(..))
56import Control.Monad.Trans.Class (lift)
6−import Data.ArrayBuffer.ArrayBuffer (empty) as AB
7+import Data.ArrayBuffer.ArrayBuffer as AB
8+import Data.ArrayBuffer.Cast (fromUint8Array, toUint8Array)
79import Data.ArrayBuffer.DataView as DataView
810import Data.Either (Either(..))
911import Data.List (fromFoldable)
@@ -13,12 +15,17 @@ import Data.Traversable (for_)
1315import Data.Tuple (Tuple(..))
1416import Data.UInt (fromInt)
1517import Effect (Effect)
18+import Effect.Class (liftEffect)
1619import Effect.Console (logShow)
17−import Parsing (ParserT, Position(..), fail, parseErrorPosition, runParserT)
20+import Effect.Exception (catchException, message)
21+import Parsing (ParserT, Position(..), fail, liftExceptT, parseErrorPosition, runParserT)
1822import Parsing.Combinators (many, manyTill)
1923import Parsing.DataView (anyInt8)
2024import Parsing.DataView as DV
2125import Test.Assert (assert', assertEqual')
26+import Web.Encoding.TextDecoder as TextDecoder
27+import Web.Encoding.TextEncoder as TextEncoder
28+import Web.Encoding.UtfLabel as UtfLabel
2229
2330parseTestT :: forall s a. Show a => Eq a => s -> a -> ParserT s Effect a -> Effect Unit
2431parseTestT input expected p = do
@@ -138,3 +145,27 @@ main = do
138145 { actual: x
139146 , expected: Right 200000
140147 }
148+
149+ do
150+ let
151+ teststring = "test string 👓"
152+
153+ textDecoder <- TextDecoder.new UtfLabel.utf8
154+
155+ textEncoder <- TextEncoder.new
156+
157+ let testarray = TextEncoder.encode teststring textEncoder
158+
159+ testview <- fromUint8Array testarray
160+
161+ result <- runParserT testview do
162+ let length = DataView.byteLength testview
163+ stringview <- DV.takeN length
164+ stringarray <- lift $ liftEffect $ toUint8Array stringview
165+ liftExceptT $ ExceptT $ catchException (pure <<< Left <<< message) do
166+ Right <$> TextDecoder.decode stringarray textDecoder
167+
168+ assertEqual' "UTF-8 decoding example"
169+ { expected: Right teststring
170+ , actual: result
171+ }