{-# LANGUAGE OverloadedStrings #-} module Hasmin.Types.StringSpec where import Data.Text (Text) import Hasmin.Parser.Value import Hasmin.Types.String import Hasmin.TestUtils quotesNormalizationTests :: Spec quotesNormalizationTests = describe "Quotes Normalization" $ do describe "normalizes s quotes in general" $ mapM_ (matchSpecWithDesc f) quotesNormalizationTestsInfo describe "normalizes s quotes inside format()" $ mapM_ (matchSpec g) unquotingFormatTestsInfo describe "unquotes url() s" $ mapM_ (matchSpec g) unquotingUrlsTestsInfo describe "Converts escaped characters properly" $ mapM_ (matchSpec convertEscaped) escapedCharConversionTestsInfo where f = minifyWithTestConfig <$> stringvalue g = minifyWithTestConfig <$> textualvalue quotesNormalizationTestsInfo :: [(String, Text, Text)] quotesNormalizationTestsInfo = [("Convert single quotes into double quotes", "'x'", "\"x\"") ,("Do not convert single quotes when they enclose a double quote", "'\"'", "'\"'") ,("Convert escaped double quotes into double quotes, but don't convert the enclosing single quotes into double", "'\\22'", "'\"'") ,("Don't convert escaped double quotes when enclosed in double quotes", "\"\\22\"", "\"\\22\"") ] escapedCharConversionTestsInfo :: [(Text, Text)] escapedCharConversionTestsInfo = [("", "") ,("\\", "\\") ,("\\0", "\NUL") ,("\\2a", "*") ,("\\02a", "*") ,("\\002a", "*") ,("\\0002a", "*") ,("\\00002a", "*") ,("\\00002aa", "*a") ,("*\\00002aa", "**a") ,("*\\2az", "**z") -- This is one more than than Char's maxBound, i.e. out of Unicode's range, -- and thus cannot be converted. ,("\\110000", "\\110000") ] unquotingUrlsTestsInfo :: [(Text, Text)] unquotingUrlsTestsInfo = [("url(\"validUrl\")", "url(validUrl)") ,("url('validUrl')", "url(validUrl)") ,("url('a b')", "url('a b')") ,("url(\"a'b\")", "url(\"a'b\")") ,("url('a\"b')", "url('a\"b')") ] -- TODO rename this, maybe combine it with some of the other tests unquotingFormatTestsInfo :: [(Text, Text)] unquotingFormatTestsInfo = [("format('woff')", "format(\"woff\")")] spec :: Spec spec = quotesNormalizationTests main :: IO () main = hspec spec