HUnit-Diff (empty) → 0.1
raw patch · 4 files changed
+102/−0 lines, 4 filesdep +Diffdep +HUnitdep +ansi-terminalsetup-changed
Dependencies added: Diff, HUnit, ansi-terminal, base, groom
Files
- HUnit-Diff.cabal +25/−0
- LICENSE +30/−0
- Setup.hs +2/−0
- Test/HUnit/Diff.hs +45/−0
+ HUnit-Diff.cabal view
@@ -0,0 +1,25 @@+Name: HUnit-Diff+Version: 0.1+Synopsis: Assertions for HUnit with difference reporting+Description: HUnit assertion operators that show a diff on failure.+Homepage: https://github.com/dag/HUnit-Diff+Bug-Reports: https://github.com/dag/HUnit-Diff/issues+License: BSD3+License-file: LICENSE+Author: Dag Odenhall+Maintainer: dag.odenhall@gmail.com+Category: Testing+Build-type: Simple+Cabal-version: >=1.6++Source-Repository head+ Type: git+ Location: git://github.com/dag/HUnit-Diff.git++Library+ Exposed-modules: Test.HUnit.Diff+ Build-depends: ansi-terminal == 0.5.*,+ base == 4.*,+ Diff == 0.1.*,+ groom == 0.1.*,+ HUnit == 1.2.*
+ LICENSE view
@@ -0,0 +1,30 @@+Copyright (c) 2012, Dag Odenhall++All rights reserved.++Redistribution and use in source and binary forms, with or without+modification, are permitted provided that the following conditions are met:++ * Redistributions of source code must retain the above copyright+ notice, this list of conditions and the following disclaimer.++ * Redistributions in binary form must reproduce the above+ copyright notice, this list of conditions and the following+ disclaimer in the documentation and/or other materials provided+ with the distribution.++ * Neither the name of Dag Odenhall nor the names of other+ contributors may be used to endorse or promote products derived+ from this software without specific prior written permission.++THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ Setup.hs view
@@ -0,0 +1,2 @@+import Distribution.Simple+main = defaultMain
+ Test/HUnit/Diff.hs view
@@ -0,0 +1,45 @@+{- | Very basic support for diffing with HUnit.++Limitations:++ * Prints the whole value, not just the difference with a few lines of+ context.++ * Relies on the similarity of pretty-printed 'show' results which+ sorta-kinda works much of the time but may sometimes highlight+ differences too eagerly.++ * Always colors the differences for ANSI terminals, regardless of output+ target.++Despite these limitations, I find it more useful than HUnit's defaults.++-}+module Test.HUnit.Diff ((@?==), (@==?)) where++import Data.Functor ( (<$>) )++import Data.Algorithm.Diff ( getDiff, DI(B, F, S) )+import System.Console.ANSI ( Color(Green, Red), ColorIntensity(Dull)+ , ConsoleLayer(Foreground), SGR(SetColor, Reset)+ , setSGRCode )+import Test.HUnit ( Assertion, assertBool, (@?=), (@=?) )+import Text.Groom ( groom )++-- | Like '@?=' but producing a colored diff on failure.+(@?==) :: (Eq a, Show a) => a -> a -> Assertion+x @?== y =+ assertBool ('\n':msg) (x == y)+ where+ msg = unlines $ fmt <$> getDiff (lines . groom $ x)+ (lines . groom $ y)+ fmt (B,s) = ' ' : s+ fmt (F,s) = color Green $ '+' : s+ fmt (S,s) = color Red $ '-' : s+ color c s = setSGRCode [SetColor Foreground Dull c]+ ++ s +++ setSGRCode [Reset]++-- | Like '@=?' but producing a colored diff on failure.+(@==?) :: (Eq a, Show a) => a -> a -> Assertion+y @==? x = x @?== y