packages feed

hasmin-1.0.2: tests/Hasmin/Types/BasicShapeSpec.hs

{-# LANGUAGE OverloadedStrings #-}

module Hasmin.Types.BasicShapeSpec where

import Data.Text (Text)
import Data.Foldable (traverse_)
import Data.Attoparsec.Text (Parser)
import Test.Hspec.QuickCheck (modifyMaxSuccess)

import Hasmin.Parser.Value
import Hasmin.Types.Value
import Hasmin.Types.BasicShape
import Hasmin.TestUtils

basicShapeTests :: Spec
basicShapeTests =
  describe "<basic-shape> tests" $ do
    traverse_ (matchSpec f) basicShapeTestsInfo
    modifyMaxSuccess (const 10000) . it "Minified <basic-shape> maintains semantical equivalence" $
      property (prop_minificationEq :: BasicShape -> Bool)
  where f :: Parser Value
        f = minifyWithTestConfig <$> value

basicShapeTestsInfo :: [(Text, Text)]
basicShapeTestsInfo =
  [("inset(1px 2px 1px 2px)",              "inset(1px 2px)")
  ,("inset(1px 1px round 4px / 4px)",      "inset(1px round 4px)")
  ,("inset(1px 1px round 0px 0% / 0 0 0)", "inset(1px)")
  ,("ellipse(12px 12px at left bottom)",   "ellipse(9pt 9pt at 0 100%)")
  ,("ellipse(12px 12px at center)",        "ellipse(9pt 9pt)")
  ,("ellipse(12px closest-side)",          "ellipse(9pt)")
  ,("ellipse(farthest-side closest-side)", "ellipse(farthest-side)")
  ,("ellipse(closest-side closest-side)",  "ellipse()")
  ,("polygon(nonzero, 12px 12px)",         "polygon(9pt 9pt)")
  ,("polygon(evenodd, 12px 12px)",         "polygon(evenodd,9pt 9pt)")
  ,("circle(closest-side at center)",      "circle()")
  ,("circle(closest-side at left bottom)", "circle(at 0 100%)")
  ,("circle(12px 12px at 45%)",            "circle(9pt 9pt at 45%)")
  ]

spec :: Spec
spec = basicShapeTests

main :: IO ()
main = hspec spec