diff --git a/stack.yaml b/stack.yaml index 42193db..e7d49b1 100644 --- a/stack.yaml +++ b/stack.yaml @@ -2,7 +2,7 @@ # Specifies the GHC version and set of packages available (e.g., lts-3.5, nightly-2015-09-21, ghc-7.10.2) #resolver: lts-5.1 -resolver: lts-12.4 +resolver: lts-14.18 # Local packages, usually specified by relative directory name packages: diff --git a/test/Spec.hs b/test/Spec.hs index f5d93d7..bd43ed5 100644 --- a/test/Spec.hs +++ b/test/Spec.hs @@ -1,55 +1,58 @@ {-# LANGUAGE ScopedTypeVariables #-} -import Test.Framework (defaultMain, testGroup) -import Test.Framework.Providers.API (Test) -import Test.Framework.Providers.HUnit (testCase) -import Test.Framework.Providers.QuickCheck2 (testProperty) -import Test.HUnit.Base hiding (Test) +import Test.Hspec +import Test.Hspec.QuickCheck -import Text.Show.Unicode +import Text.Show.Unicode data T試6験 = Å4 { すけろく :: String} deriving (Eq, Ord, Show, Read) data T試7験 = String :@\& String deriving (Eq, Ord, Show, Read) data T試8験 = String :@\& String deriving (Eq, Ord, Show, Read) -ushowTo :: Show a => a -> String -> Test -ushowTo f t = testCase ("ushow " ++ show f ++ " == " ++ t) $ t @=? ushow f - -tests :: [Test] -tests = - [ testGroup "individual representations test" - [ "صباح الخير" `ushowTo` "\"صباح الخير\"" - , "😆💕>λ\\=🐘" `ushowTo` "\"😆💕>λ\\\\=🐘\"" - , "漢6" `ushowTo` "\"漢6\"" - , "\32\&7" `ushowTo` "\" 7\"" - , "改\n行" `ushowTo` "\"改\\n行\"" - , "下一站\na\ri\ta国际机场" `ushowTo` "\"下一站\\na\\ri\\ta国际机场\"" - , "\SOH\SO\&H" `ushowTo` "\"\\SOH\\SO\\&H\"" - ] - - , testGroup "read . ushow == id" - [ testProperty "read . ushow == id, for String" $ - \str -> read (ushow str) == (str :: String) - , testProperty "read . ushow == id, for Char" $ - \x -> read (ushow x) == (x :: Char) - , testProperty "read . ushow == id, for [(Char,())]" $ - \x -> read (ushow x) == (x :: [(Char,())]) - , testProperty "read . read . ushow . ushow == id, for String" $ - \str -> (read $ read $ ushow $ ushow str) == (str :: String) - , testProperty "read . ushow == id, for some crazy Unicode type" $ - \str -> let v = Å4 str in read (ushow v) == v - , testProperty "read . ushow == id, for some crazy Unicode type" $ - \a b -> let v = a :@\& b in read (ushow v) == v - , testProperty "read . ushow == id, for some crazy Unicode type" $ - \a b -> let v = a :@\& b in read (show v) == v - , testProperty "read . ushow == id, for compound type" $ - \str -> read (ushow str) == (str :: Either [String] (String,String)) - ] - ] +ushowTo :: Show a => a -> String -> Spec +ushowTo f t = it ("ushow " ++ show f ++ " == " ++ t) $ t `shouldBe` ushow f + +spec :: Spec +spec = + describe "individual representations test" $ do + describe "individual representations test" $ do + "صباح الخير" `ushowTo` "\"صباح الخير\"" + "😆💕>λ\\=🐘" `ushowTo` "\"😆💕>λ\\\\=🐘\"" + "漢6" `ushowTo` "\"漢6\"" + "\32\&7" `ushowTo` "\" 7\"" + "改\n行" `ushowTo` "\"改\\n行\"" + "下一站\na\ri\ta国际机场" `ushowTo` "\"下一站\\na\\ri\\ta国际机场\"" + "\SOH\SO\&H" `ushowTo` "\"\\SOH\\SO\\&H\"" + + describe "read . ushow == id" $ do + prop "read . ushow == id, for String" $ + \str -> read (ushow str) `shouldBe` (str :: String) + + prop "read . ushow == id, for Char" $ + \x -> read (ushow x) `shouldBe` (x :: Char) + + prop "read . ushow == id, for [(Char,())]" $ + \x -> read (ushow x) `shouldBe` (x :: [(Char,())]) + + prop "read . read . ushow . ushow == id, for String" $ + \str -> (read $ read $ ushow $ ushow str) `shouldBe` (str :: String) + + prop "read . ushow == id, for some crazy Unicode type" $ + \str -> let v = Å4 str in read (ushow v) `shouldBe` v + + prop "read . ushow == id, for some crazy Unicode type" $ + \a b -> let v = a :@\& b in read (ushow v) `shouldBe` v + + prop "read . ushow == id, for some crazy Unicode type" $ + \a b -> let v = a :@\& b in read (show v) `shouldBe` v + + prop "read . ushow == id, for compound type" $ + \str -> read (ushow str) `shouldBe` (str :: Either [String] (String,String)) + main :: IO () main = do print $ "hoge" :@\& "huga" putStrLn $ ushow $ "hoge" :@\& "huga" - defaultMain tests + hspec spec diff --git a/unicode-show.cabal b/unicode-show.cabal index f045ee8..d545722 100644 --- a/unicode-show.cabal +++ b/unicode-show.cabal @@ -33,12 +33,9 @@ test-suite unicode-show-test hs-source-dirs: test main-is: Spec.hs build-depends: base - , HUnit + , hspec , QuickCheck , unicode-show - , test-framework - , test-framework-hunit - , test-framework-quickcheck2 ghc-options: -threaded -rtsopts -with-rtsopts=-N default-language: Haskell2010