-- -*- coding: utf-8 -*-

module Utf8Strings (testUtf8Simplest
                  , testBlobs) where

import Common
import qualified Data.ByteString as B
import Data.Word

testUtf8Simplest :: TestEnv -> Test
testUtf8Simplest TestEnv{..} = TestCase $ do
  execute_ conn "CREATE TABLE utf (id INTEGER, t TEXT)"
  execute_ conn "INSERT INTO utf (id, t) VALUES (1, 'ääöö')"
  execute conn "INSERT INTO utf (id, t) VALUES (?,?)" (2 :: Int, "ääööåå" :: String)
  [Only t1] <- query conn "SELECT t FROM utf WHERE id = ?" (Only (1 :: Int))
  assertEqual "utf8" ("ääöö" :: String) t1
  [Only t2] <- query conn "SELECT t FROM utf WHERE id = ?" (Only (2 :: Int))
  assertEqual "utf8" ("ääööåå" :: String) t2

testBlobs :: TestEnv -> Test
testBlobs TestEnv{..} = TestCase $ do
  let d = B.pack ([0..127] :: [Word8])
  execute_ conn "CREATE TABLE blobs (id INTEGER, b BLOB)"
  execute conn "INSERT INTO blobs (id, b) VALUES (?,?)" (1 :: Int, d)
  [Only t1] <- query conn "SELECT b FROM blobs WHERE id = ?" (Only (1 :: Int))
  assertEqual "blob" d t1
  assertEqual "blob nul char" 0 (B.index d 0)
  assertEqual "blob first char" 1 (B.index d 1)