packages feed

hasmin-0.3.0.1: tests/Hasmin/Types/PositionSpec.hs

{-# LANGUAGE OverloadedStrings #-}

module Hasmin.Types.PositionSpec where

import Test.Hspec
import Hasmin.Parser.Value
import Hasmin.TestUtils

import Data.Text (Text)
import Hasmin.Types.Class

positionMinificationTests :: Spec
positionMinificationTests =
    describe "position minification" $
      mapM_ (matchSpec f) positionMinificationTestsInfo
  where f = minify <$> position

positionMinificationTestsInfo :: [(Text, Text)]
positionMinificationTestsInfo =
  [("50%",              "50%")
  ,("50% 50%",          "50%")
  ,("center",           "50%")
  ,("center top 50%",   "50%")
  ,("top 50% center",   "50%")
  ,("center left 50%",  "50%")
  ,("top 50% left 50%", "50%")
  ,("left 50% top 50%", "50%")
  ,("left 50% center",  "50%")
  ,("center center",    "50%")

  ,("0% 50%",          "0")
  ,("left",            "0")
  ,("left center",     "0")
  ,("left top 50%",    "0")
  ,("left 0% center",  "0")
  ,("left 0% top 50%", "0")
  ,("top 50% left 0%", "0")
  ,("center left 0%",  "0")
  ,("top 50% left",    "0")
  ,("center left",     "0")

  ,("0% 0%",          "0 0")
  ,("left 0%",        "0 0")
  ,("0% top",         "0 0")
  ,("left top",       "0 0")
  ,("left top 0%",    "0 0")
  ,("left 0% top",    "0 0")
  ,("left 0% top 0%", "0 0")
  ,("top 0% left 0%", "0 0")
  ,("top left 0%",    "0 0")
  ,("top 0% left",    "0 0")
  ,("top left",       "0 0")

  ,("50% 0%",          "top")
  ,("top",             "top")
  ,("top center",      "top")
  ,("top left 50%",    "top")
  ,("top 0% left 50%", "top")
  ,("left 50% top 0%", "top")
  ,("left 50% top",    "top")
  ,("center top",      "top")

  ,("100% 0%",         "100% 0")
  ,("right top",       "100% 0")
  ,("right 0% top",    "100% 0")
  ,("right top 0%",    "100% 0")
  ,("right 0% top 0%", "100% 0")
  ,("top 0% right 0%", "100% 0")
  ,("top 0% right",    "100% 0")
  ,("top right 0%",    "100% 0")
  ,("top right",       "100% 0")

  ,("100%",             "100%")
  ,("100% 50%",         "100%")
  ,("right",            "100%")
  ,("right center",     "100%")
  ,("right top 50%",    "100%")
  ,("right 0% center",  "100%")
  ,("right 0% top 50%", "100%")
  ,("top 50% right 0%", "100%")
  ,("center right 0%",  "100%")
  ,("top 50% right",    "100%")
  ,("center right",     "100%")

  ,("0% 100%",         "0 100%")
  ,("left bottom",     "0 100%")
  ,("left 0 bottom",   "0 100%")
  ,("left bottom 0",   "0 100%")
  ,("left 0 bottom 0", "0 100%")
  ,("bottom 0 left 0", "0 100%")
  ,("bottom left 0",   "0 100%")
  ,("bottom 0 left",   "0 100%")
  ,("bottom left",     "0 100%")

  ,("50% 100%",           "bottom")
  ,("bottom",             "bottom")
  ,("center bottom",      "bottom")
  ,("center bottom 0%",   "bottom")
  ,("left 50% bottom",    "bottom")
  ,("left 50% bottom 0%", "bottom")
  ,("bottom 0% left 50%", "bottom")
  ,("bottom left 50%",    "bottom")
  ,("bottom 0% center",   "bottom")
  ,("bottom center",      "bottom")

  ,("100% 100%",          "100% 100%")
  ,("100% bottom",        "100% 100%")
  ,("right bottom",       "100% 100%")
  ,("right 0% bottom",    "100% 100%")
  ,("right bottom 0%",    "100% 100%")
  ,("right 0% bottom 0%", "100% 100%")
  ,("bottom 0% right 0%", "100% 100%")
  ,("bottom 0% right",    "100% 100%")
  ,("bottom right 0%",    "100% 100%")
  ,("bottom right",       "100% 100%")

  -- Other random tests
  ,("10px 15px",          "10px 15px")
  ,("30% 0",              "30% 0")
  ,("27% 50%",            "27%")
  ,("left 0 top 30px",    "0 30px")
  ,("left 10px top 15px", "10px 15px")
  ,("left 15px",          "0 15px")
  ,("10px top",           "10px 0")
  ,("left top 15px",      "0 15px")
  ,("left 10px top",      "10px 0")

  ,("right 0 top 30px",    "100% 30px")
  ,("20px bottom",         "20px 100%")
  ,("right 20px",          "100% 20px")
  ,("top 30px right 0",    "100% 30px")
  ]

spec :: Spec
spec = do positionMinificationTests 

main :: IO ()
main = hspec spec