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")
]