packages feed

hspec-discover 2.4.4 → 2.4.5

raw patch · 4 files changed

+133/−10 lines, 4 filesdep +QuickCheckPVP ok

version bump matches the API change (PVP)

Dependencies added: QuickCheck

API changes (from Hackage documentation)

+ Test.Hspec.Discover.Sort: data NaturalSortKey
+ Test.Hspec.Discover.Sort: instance GHC.Classes.Eq Test.Hspec.Discover.Sort.Chunk
+ Test.Hspec.Discover.Sort: instance GHC.Classes.Eq Test.Hspec.Discover.Sort.NaturalSortKey
+ Test.Hspec.Discover.Sort: instance GHC.Classes.Ord Test.Hspec.Discover.Sort.Chunk
+ Test.Hspec.Discover.Sort: instance GHC.Classes.Ord Test.Hspec.Discover.Sort.NaturalSortKey
+ Test.Hspec.Discover.Sort: naturalSortKey :: String -> NaturalSortKey
+ Test.Hspec.Discover.Sort: sortNaturally :: [String] -> [String]

Files

hspec-discover.cabal view
@@ -1,9 +1,11 @@--- This file has been generated from package.yaml by hpack version 0.18.0.+-- This file has been generated from package.yaml by hpack version 0.21.2. -- -- see: https://github.com/sol/hpack+--+-- hash: c1fbbc7305c5512cef66ad45b78b2a1fb3589239de3ff7fe0cfb89853a969622  name:             hspec-discover-version:          2.4.4+version:          2.4.5 license:          MIT license-file:     LICENSE copyright:        (c) 2012-2017 Simon Hengel@@ -36,13 +38,14 @@       src   ghc-options: -Wall   build-depends:-      base == 4.*-    , filepath+      base ==4.*     , directory+    , filepath   exposed: False   exposed-modules:       Test.Hspec.Discover.Config       Test.Hspec.Discover.Run+      Test.Hspec.Discover.Sort   other-modules:       Paths_hspec_discover   default-language: Haskell2010@@ -52,10 +55,12 @@   hs-source-dirs:       driver   main-is: hspec-discover.hs+  other-modules:+      Paths_hspec_discover   build-depends:-      base == 4.*-    , filepath+      base ==4.*     , directory+    , filepath     , hspec-discover   default-language: Haskell2010 @@ -69,10 +74,13 @@       Helper       Test.Hspec.Discover.ConfigSpec       Test.Hspec.Discover.RunSpec+      Test.Hspec.Discover.SortSpec+      Paths_hspec_discover   build-depends:-      base == 4.*-    , filepath+      QuickCheck >=2.7+    , base ==4.*     , directory+    , filepath     , hspec-discover-    , hspec-meta >= 2.3.2+    , hspec-meta >=2.3.2   default-language: Haskell2010
src/Test/Hspec/Discover/Run.hs view
@@ -30,6 +30,7 @@ import           System.FilePath hiding (combine)  import           Test.Hspec.Discover.Config+import           Test.Hspec.Discover.Sort  instance IsString ShowS where   fromString = showString@@ -141,7 +142,8 @@ isValidModuleChar c = isAlphaNum c || c == '_' || c == '\''  getFilesRecursive :: FilePath -> IO [FilePath]-getFilesRecursive baseDir = sort <$> go []+getFilesRecursive baseDir = sortNaturally <$> go []+   where     go :: FilePath -> IO [FilePath]     go dir = do
+ src/Test/Hspec/Discover/Sort.hs view
@@ -0,0 +1,30 @@+module Test.Hspec.Discover.Sort (+  sortNaturally+, NaturalSortKey+, naturalSortKey+) where++import           Control.Arrow+import           Data.Char+import           Data.List+import           Data.Ord++sortNaturally :: [String] -> [String]+sortNaturally = sortBy (comparing naturalSortKey)++data NaturalSortKey = NaturalSortKey [Chunk]+  deriving (Eq, Ord)++data Chunk = Numeric Integer Int | Textual [(Char, Char)]+  deriving (Eq, Ord)++naturalSortKey :: String -> NaturalSortKey+naturalSortKey = NaturalSortKey . chunks+  where+    chunks [] = []+    chunks s@(c:_)+      | isDigit c = Numeric (read num) (length num) : chunks afterNum+      | otherwise = Textual (map (toLower &&& id) str) : chunks afterStr+      where+        (num, afterNum) = span  isDigit s+        (str, afterStr) = break isDigit s
+ test/Test/Hspec/Discover/SortSpec.hs view
@@ -0,0 +1,83 @@+module Test.Hspec.Discover.SortSpec (main, spec) where++import           Helper+import           Test.QuickCheck++import           Test.Hspec.Discover.Sort++main :: IO ()+main = hspec spec++shuffleAndSort :: [String] -> IO [String]+shuffleAndSort xs = sortNaturally <$> generate (shuffle xs)++spec :: Spec+spec = do+  describe "naturalSortKey" $ do+    it "is injective" $ property $ \ a  b -> do+      a /= b ==> naturalSortKey a /= naturalSortKey b++  describe "sortNaturally" $ do+    it "gives shorter strings precedence" $ do+      let expected = [+              ""+            , "a"+            , "aa"+            ]+      shuffleAndSort expected `shouldReturn` expected++    it "gives numbers precedence" $ do+      let expected = [+              "Hello2World"+            , "Hello World"+            ]+      shuffleAndSort expected `shouldReturn` expected++    it "sorts numbers in ascending order" $ do+      let expected = [+              "Spec9.hs"+            , "Spec10.hs"+            ]+      shuffleAndSort expected `shouldReturn` expected++    it "breaks numeric ties by string length" $ do+      let expected = [+              "Hello 2 World"+            , "Hello 02 World"+            ]+      shuffleAndSort expected `shouldReturn` expected++    it "given upper-case letters precedence over lower-case letters" $ do+      let+        expected = [+            "AA.hs"+          , "Aa.hs"+          , "aA.hs"+          , "aa.hs"+          , "B.hs"+          , "b.hs"+          ]+      shuffleAndSort expected `shouldReturn` expected++    it "sorts number separated strings" $ do+      let expected = [+              "Hello2World9"+            , "Hello2World!0"+            ]+      shuffleAndSort expected `shouldReturn` expected++    it "sorts string separated numbers" $ do+      let expected = [+              "3.1.415"+            , "3.14.15"+            ]+      shuffleAndSort expected `shouldReturn` expected++    it "groups common string prefixes together" $ do+      let expected = [+              "SpecFoo.hs"+            , "SpecFoo.lhs"+            , "Specfoo.hs"+            , "Specfoo.lhs"+            ]+      shuffleAndSort expected `shouldReturn` expected