packages feed

css-parser-0.0.1: test/CssParser/Test/Arbitrary/At.hs

{-# OPTIONS_GHC -fconstraint-solver-iterations=24 #-}
{-# OPTIONS_GHC -Wno-orphans #-}
module CssParser.Test.Arbitrary.At where

import CssParser.At.Keyframe
import CssParser.At.Page
import CssParser.Ident
import CssParser.Norm ( Norm(..) )
import CssParser.Rule.Pseudo
    ( AtomicPseudoClass(Blank), BrowserSpecificIdent(..) )
import CssParser.Rule.Value ( Source(..) )
import CssParser.Test.Arbitrary
import CssParser.Test.Arbitrary.Ident ()
import CssParser.Test.Arbitrary.Value ()
import Data.Text (isPrefixOf)
import Data.Text qualified as T

browserPrefixes :: [Text]
browserPrefixes =  T.words "-moz- -ms- -webkit- -apple- -o-"

instance Arbitrary BrowserSpecificIdent where
  arbitrary =
    prependIfMissing <$> elements browserPrefixes <*> arbitrary
    where
      prependIfMissing pre = \case
        o@(Ident x)
          | any (`isPrefixOf` x) browserPrefixes ->
            BrowserSpecificIdent o
          | otherwise ->
            BrowserSpecificIdent (Ident $ pre <> x)

  shrink = filter skipBadUpc . genericShrink
    where
      skipBadUpc (BrowserSpecificIdent (Ident x)) =  T.length x > 9

deriving via (GenericArbitrary AtomicPseudoClass) instance Arbitrary AtomicPseudoClass

instance Arbitrary Charset where
  arbitrary = Charset <$> elements ["UTF-8", "iso-8859-15"]

instance Arbitrary Source where
  arbitrary =
    oneof
    [ UrlSource <$> arbitrary
    , StrSource <$> arbitraryWord
    ]
deriving via (GenericArbitrary LayerName) instance Arbitrary LayerName

deriving via (GenericArbitrary PageMargin) instance Arbitrary PageMargin

deriving via (GenericArbitrary PageName) instance Arbitrary PageName
deriving via (GenericArbitrary PageSelectorList) instance Arbitrary PageSelectorList

instance Norm PageSelector where
  normalize = \case
    PageSelector Nothing [] -> PageSelector Nothing [Blank]
    o -> o

instance Arbitrary PageSelector where
  arbitrary = normalize <$> genericArbitrary
  shrink = filter (/= PageSelector Nothing []) . genericShrink

deriving via (GenericArbitrary KeyframeSet) instance Arbitrary KeyframeSet
deriving via (GenericArbitrary KeyframeSetName) instance Arbitrary KeyframeSetName
deriving via (GenericArbitrary Keyframe) instance Arbitrary Keyframe
deriving via (GenericArbitrary KeyframeAdr) instance Arbitrary KeyframeAdr
deriving via (GenericArbitrary PropEntry) instance Arbitrary PropEntry