packages feed

url-decoders-0.2: tests/Main.hs

module Main where

import Prelude
import Test.QuickCheck.Instances
import Test.Tasty
import Test.Tasty.Runners
import Test.Tasty.HUnit
import Test.Tasty.QuickCheck
import qualified URLDecoders as A
import qualified Network.HTTP.Types.URI as B
import qualified Data.Text.Encoding as C
import qualified Data.HashMap.Strict as D


main =
  defaultMain $
  testGroup "All tests" $
  [
    testCase "Simple" $ do
      assertEqual "" (Right (D.fromList [("a", ["b"])])) (A.utf8Query "a=b")
    ,
    testCase "Absent value" $ do
      assertEqual "" (Right (D.fromList [("a", [])])) (A.utf8Query "a")
    ,
    testCase "Empty" $ do
      assertEqual "" (Right (D.fromList [])) (A.utf8Query "")
    ,
    testCase "Empty key" $ do
      assertEqual "" (Right (D.fromList [("", ["1"])])) (A.utf8Query "=1")
    ,
    testCase "Empty value" $ do
      assertEqual "" (Right (D.fromList [("a", [""])])) (A.utf8Query "a=")
      assertEqual "" (Right (D.fromList [("a", [""])])) (A.utf8Query "a=&")
    ,
    testCase "Array" $ do
      assertEqual "" (Right (D.fromList [("a", ["c", "b"])])) (A.utf8Query "a=b&a=c")
      assertEqual "" (Right (D.fromList [("a", ["c", "b"])])) (A.utf8Query "a[]=b&a[]=c")
      assertEqual "" (Right (D.fromList [("a", ["c", "b"])])) (A.utf8Query "a=b;a=c")
      assertEqual "" (Right (D.fromList [("a", ["c", "b"])])) (A.utf8Query "a[]=b;a[]=c")
    ,
    testCase "Unicode" $ do
      assertEqual "" (Right (D.fromList [("a", ["Держатель"])])) (A.utf8Query "a=%D0%94%D0%B5%D1%80%D0%B6%D0%B0%D1%82%D0%B5%D0%BB%D1%8C")
      assertEqual "" (Right (D.fromList [("Держатель", ["1"])])) (A.utf8Query "%D0%94%D0%B5%D1%80%D0%B6%D0%B0%D1%82%D0%B5%D0%BB%D1%8C=1")
    ,
    testCase "Ending" $ do
      assertEqual "" (Right (D.fromList [("a", ["b"])])) (A.utf8Query "a=b?blablabla")
      assertEqual "" (Right (D.fromList [("a", ["b"])])) (A.utf8Query "a=b#blablabla")
    ,
    testCase "Failure" $ do
      assertEqual "" (Left "Broken array declaration") (A.utf8Query "a[")
      assertEqual "" (Left "Unexpected character: \"]\"") (A.utf8Query "a]")
      assertEqual "" (Left "Broken array declaration") (A.utf8Query "a[]b")
  ]