module Util where import qualified Data.Text.Lazy as TL import qualified Data.Text.Lazy.Builder as TB import Generics.Diff import Generics.Diff.Instances () import Generics.Diff.Render import qualified Test.QuickCheck as Q propDiffResult :: (Diff a, Show a) => a -> a -> DiffResult a -> Q.Property propDiffResult leftValue rightValue expectedDiffResult = let actualDiffResult = diff leftValue rightValue eq = expectedDiffResult == actualDiffResult showDiffResult = TL.unpack . TB.toLazyText . renderDiffResult addLabel = if eq then Q.property else Q.counterexample ("Expected DiffResult:\n" <> showDiffResult expectedDiffResult) . Q.counterexample ("Actual DiffResult:\n" <> showDiffResult actualDiffResult) . Q.counterexample ("Left value:\n" <> show leftValue) . Q.counterexample ("Right value:\n" <> show rightValue) in addLabel eq