module Saturn.Unstable.Type.WeekdaySpec where import qualified Data.Maybe as Maybe import qualified Data.Text.Lazy.Builder as Builder import qualified Data.Word as Word import qualified Saturn.Unstable.Type.FieldSpec as FieldSpec import qualified Saturn.Unstable.Type.Weekday as Weekday import qualified Test.Hspec as Hspec import qualified Test.QuickCheck as QuickCheck import qualified Text.Parsec as Parsec spec :: Hspec.Spec spec :: Spec spec = forall a. HasCallStack => String -> SpecWith a -> SpecWith a Hspec.describe String "Saturn.Unstable.Type.Weekday" forall a b. (a -> b) -> a -> b $ do forall a. (HasCallStack, Example a) => String -> a -> SpecWith (Arg a) Hspec.it String "round trips" forall b c a. (b -> c) -> (a -> b) -> a -> c . forall a prop. (Show a, Testable prop) => Gen a -> (a -> [a]) -> (a -> prop) -> Property QuickCheck.forAllShrink Gen Weekday arbitrary Weekday -> [Weekday] shrink forall a b. (a -> b) -> a -> b $ \Weekday x -> do forall s t a. Stream s Identity t => Parsec s () a -> String -> s -> Either ParseError a Parsec.parse forall s (m :: * -> *) u. Stream s m Char => ParsecT s u m Weekday Weekday.parsec String "" (Builder -> Text Builder.toLazyText forall a b. (a -> b) -> a -> b $ Weekday -> Builder Weekday.toBuilder Weekday x) forall a. (HasCallStack, Show a, Eq a) => a -> a -> Expectation `Hspec.shouldBe` forall a b. b -> Either a b Right Weekday x arbitrary :: QuickCheck.Gen Weekday.Weekday arbitrary :: Gen Weekday arbitrary = forall a b. Gen a -> (a -> Maybe b) -> Gen b QuickCheck.suchThatMap Gen Field FieldSpec.arbitrary Field -> Maybe Weekday Weekday.fromField shrink :: Weekday.Weekday -> [Weekday.Weekday] shrink :: Weekday -> [Weekday] shrink = forall a b. (a -> Maybe b) -> [a] -> [b] Maybe.mapMaybe Field -> Maybe Weekday Weekday.fromField forall b c a. (b -> c) -> (a -> b) -> a -> c . Field -> [Field] FieldSpec.shrink forall b c a. (b -> c) -> (a -> b) -> a -> c . Weekday -> Field Weekday.toField new :: (MonadFail m) => [[Word.Word8]] -> m Weekday.Weekday new :: forall (m :: * -> *). MonadFail m => [[Word8]] -> m Weekday new [[Word8]] xs = do Field field <- forall (m :: * -> *). MonadFail m => [[Word8]] -> m Field FieldSpec.new [[Word8]] xs forall b a. b -> (a -> b) -> Maybe a -> b maybe (forall (m :: * -> *) a. MonadFail m => String -> m a fail forall a b. (a -> b) -> a -> b $ String "invalid Weekday: " forall a. Semigroup a => a -> a -> a <> forall a. Show a => a -> String show [[Word8]] xs) forall (f :: * -> *) a. Applicative f => a -> f a pure forall a b. (a -> b) -> a -> b $ Field -> Maybe Weekday Weekday.fromField Field field