@@ -8,6 +8,7 @@ import Data.ArrayBuffer.ArrayBuffer as AB
88import Data.ArrayBuffer.Cast (fromUint8Array, toUint8Array)
99import Data.ArrayBuffer.DataView as DataView
1010import Data.Either (Either(..))
11+import Data.Enum (fromEnum)
1112import Data.List (fromFoldable)
1213import Data.List as List
1314import Data.Maybe (Maybe(..))
@@ -20,8 +21,9 @@ import Effect.Console (logShow)
2021import Effect.Exception (catchException, message)
2122import Parsing (ParserT, Position(..), fail, liftExceptT, parseErrorPosition, runParserT)
2223import Parsing.Combinators (many, manyTill)
23−import Parsing.DataView (anyInt8, anyTill, satisfyInt8)
24+import Parsing.DataView (anyInt8, anyTill, eof, satisfyInt8)
2425import Parsing.DataView as DV
26+import Parsing.DataView.Basic (anyCodePointUTF8)
2527import Test.Assert (assert', assertEqual')
2628import Web.Encoding.TextDecoder as TextDecoder
2729import Web.Encoding.TextEncoder as TextEncoder
@@ -181,4 +183,29 @@ main = do
181183 assertEqual' "anyTill"
182184 { expected: Right 2
183185 , actual: DataView.byteLength <$> result
184− }
186+ }
187+
188+ do
189+ -- Test one code point from each byte group
190+ -- a 97
191+ -- λ 955
192+ -- 月 0x6708
193+ -- 👓 0x1F453
194+ let teststring = "aλ月👓a"
195+ textEncoder <- TextEncoder.new
196+ let testarray = TextEncoder.encode teststring textEncoder
197+ testview <- fromUint8Array testarray
198+
199+ result <- (map <<< map <<< map) fromEnum $ runParserT testview do
200+ c0 <- anyCodePointUTF8
201+ c1 <- anyCodePointUTF8
202+ c2 <- anyCodePointUTF8
203+ c3 <- anyCodePointUTF8
204+ c4 <- anyCodePointUTF8
205+ eof
206+ pure [ c0, c1, c2, c3, c4 ]
207+
208+ assertEqual' "anyCodePointUTF8"
209+ { expected: Right [ 97, 955, 0x6708, 0x1F453, 97 ]
210+ , actual: result
211+ }