Skip to content

Commit e0737db

Browse files
authored
Merge pull request #1040 from haskell/tests-warnings
Cleanup warnings in tests
2 parents 0aa757f + bd2f784 commit e0737db

File tree

3 files changed

+44
-40
lines changed

3 files changed

+44
-40
lines changed

tests/ErrorMessages.hs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
{-# LANGUAGE NoImplicitPrelude #-}
22
{-# LANGUAGE OverloadedStrings #-}
33
{-# LANGUAGE ScopedTypeVariables #-}
4+
{-# LANGUAGE CPP #-}
45

56
module ErrorMessages
67
(
@@ -13,7 +14,7 @@ import Data.Aeson (FromJSON(..), Value, eitherDecode)
1314
import Data.Aeson.Types (Parser, parseEither)
1415
import Data.Algorithm.Diff (PolyDiff (..), getGroupedDiff)
1516
import Data.Proxy (Proxy(..))
16-
import Data.Semigroup ((<>))
17+
1718
import Data.Sequence (Seq)
1819
import Instances ()
1920
import Numeric.Natural (Natural)
@@ -22,6 +23,10 @@ import Test.Tasty.Golden.Advanced (goldenTest)
2223
import qualified Data.ByteString.Lazy.Char8 as L
2324
import qualified Data.HashMap.Strict as HM
2425

26+
#if !MIN_VERSION_base(4,11,0)
27+
import Data.Semigroup ((<>))
28+
#endif
29+
2530
import Encoders
2631
import Types
2732

tests/Types.hs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ module Types (module Types) where
1313
import Prelude.Compat
1414

1515
import Math.NumberTheory.Logarithms (intLog2)
16-
import Control.Applicative ((<$>))
1716
import Data.Data
1817
import Data.Functor.Compose (Compose (..))
1918
import Data.Functor.Identity (Identity (..))

tests/UnitTests.hs

Lines changed: 38 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ import qualified Data.Aeson.KeyMap as KM
4545
import Data.Char (toUpper, GeneralCategory(Control,Surrogate), generalCategory)
4646
import Data.Hashable (hash)
4747
import Data.HashMap.Strict (HashMap)
48+
import Data.Kind (Type)
4849
import Data.List (isSuffixOf)
4950
import Data.Maybe (fromMaybe)
5051
import Data.Scientific (Scientific, scientific)
@@ -53,7 +54,9 @@ import Data.Text (Text)
5354
import Data.Time (UTCTime, ZonedTime)
5455
import Data.Time.Format.Compat (parseTimeM, defaultTimeLocale)
5556
import GHC.Generics (Generic)
57+
#if __GLASGOW_HASKELL__ >= 806
5658
import GHC.Generics.Generically (Generically (..))
59+
#endif
5760
import Instances ()
5861
import Numeric.Natural (Natural)
5962
import Test.Tasty (TestTree, testGroup)
@@ -78,8 +81,9 @@ roundTripCamel2 :: String -> Assertion
7881
roundTripCamel2 name = assertEqual "" name (camelFrom '_' $ camelTo2 '_' name)
7982

8083
camelFrom :: Char -> String -> String
81-
camelFrom c s = let (p:ps) = split c s
82-
in concat $ p : map capitalize ps
84+
camelFrom c s = case split c s of
85+
p:ps -> concat $ p : map capitalize ps
86+
_ -> s -- shouldn't happen?
8387
where
8488
split c' s' = map L.unpack $ L.split c' $ L.pack s'
8589
capitalize t = toUpper (head t) : tail t
@@ -115,38 +119,33 @@ goodProducer = assertEqual "partial encoding should not explode on undefined"
115119
arch32bit = (maxBound :: Int) == 2147483647
116120

117121
-- Test decoding various UTC time formats
118-
--
119-
-- Note: the incomplete pattern matches for UTCTimes are completely
120-
-- intentional. The test expects these parses to succeed. If the
121-
-- pattern matches fails, there's a bug in either the test or in aeson
122-
-- and needs to be investigated.
123122
utcTimeGood :: Assertion
124123
utcTimeGood = do
125-
let ts1 = "2015-01-01T12:13:00.00Z" :: LT.Text
126-
let ts2 = "2015-01-01T12:13:00Z" :: LT.Text
124+
let ts1 = "2015-01-01T12:13:00.00Z"
125+
let ts2 = "2015-01-01T12:13:00Z"
127126
-- 'T' between date and time is not required, can be space
128-
let ts3 = "2015-01-03 12:13:00.00Z" :: LT.Text
129-
let ts4 = "2015-01-03 12:13:00.125Z" :: LT.Text
130-
let (Just (t1 :: UTCTime)) = parseWithAeson ts1
131-
let (Just (t2 :: UTCTime)) = parseWithAeson ts2
132-
let (Just (t3 :: UTCTime)) = parseWithAeson ts3
133-
let (Just (t4 :: UTCTime)) = parseWithAeson ts4
127+
let ts3 = "2015-01-03 12:13:00.00Z"
128+
let ts4 = "2015-01-03 12:13:00.125Z"
129+
t1 <- parseWithAeson ts1
130+
t2 <- parseWithAeson ts2
131+
t3 <- parseWithAeson ts3
132+
t4 <- parseWithAeson ts4
134133
assertEqual "utctime" (parseWithRead "%FT%T%QZ" ts1) t1
135134
assertEqual "utctime" (parseWithRead "%FT%T%QZ" ts2) t2
136135
assertEqual "utctime" (parseWithRead "%F %T%QZ" ts3) t3
137136
assertEqual "utctime" (parseWithRead "%F %T%QZ" ts4) t4
138137
-- Time zones. Both +HHMM and +HH:MM are allowed for timezone
139138
-- offset, and MM may be omitted.
140-
let ts5 = "2015-01-01T12:30:00.00+00" :: LT.Text
141-
let ts6 = "2015-01-01T12:30:00.00+01:15" :: LT.Text
142-
let ts7 = "2015-01-01T12:30:00.00-02" :: LT.Text
143-
let ts8 = "2015-01-01T22:00:00.00-03" :: LT.Text
144-
let ts9 = "2015-01-01T22:00:00.00-04:30" :: LT.Text
145-
let (Just (t5 :: UTCTime)) = parseWithAeson ts5
146-
let (Just (t6 :: UTCTime)) = parseWithAeson ts6
147-
let (Just (t7 :: UTCTime)) = parseWithAeson ts7
148-
let (Just (t8 :: UTCTime)) = parseWithAeson ts8
149-
let (Just (t9 :: UTCTime)) = parseWithAeson ts9
139+
let ts5 = "2015-01-01T12:30:00.00+00"
140+
let ts6 = "2015-01-01T12:30:00.00+01:15"
141+
let ts7 = "2015-01-01T12:30:00.00-02"
142+
let ts8 = "2015-01-01T22:00:00.00-03"
143+
let ts9 = "2015-01-01T22:00:00.00-04:30"
144+
t5 <- parseWithAeson ts5
145+
t6 <- parseWithAeson ts6
146+
t7 <- parseWithAeson ts7
147+
t8 <- parseWithAeson ts8
148+
t9 <- parseWithAeson ts9
150149
assertEqual "utctime" (parseWithRead "%FT%T%QZ" "2015-01-01T12:30:00.00Z") t5
151150
assertEqual "utctime" (parseWithRead "%FT%T%QZ" "2015-01-01T11:15:00.00Z") t6
152151
assertEqual "utctime" (parseWithRead "%FT%T%QZ" "2015-01-01T14:30:00Z") t7
@@ -155,30 +154,31 @@ utcTimeGood = do
155154
assertEqual "utctime" (parseWithRead "%FT%T%QZ" "2015-01-02T02:30:00Z") t9
156155

157156
-- Seconds in Time can be omitted
158-
let ts10 = "2015-01-03T12:13Z" :: LT.Text
159-
let ts11 = "2015-01-03 12:13Z" :: LT.Text
160-
let ts12 = "2015-01-01T12:30-02" :: LT.Text
161-
let (Just (t10 :: UTCTime)) = parseWithAeson ts10
162-
let (Just (t11 :: UTCTime)) = parseWithAeson ts11
163-
let (Just (t12 :: UTCTime)) = parseWithAeson ts12
157+
let ts10 = "2015-01-03T12:13Z"
158+
let ts11 = "2015-01-03 12:13Z"
159+
let ts12 = "2015-01-01T12:30-02"
160+
t10 <- parseWithAeson ts10
161+
t11 <- parseWithAeson ts11
162+
t12 <- parseWithAeson ts12
164163
assertEqual "utctime" (parseWithRead "%FT%H:%MZ" ts10) t10
165164
assertEqual "utctime" (parseWithRead "%F %H:%MZ" ts11) t11
166165
assertEqual "utctime" (parseWithRead "%FT%T%QZ" "2015-01-01T14:30:00Z") t12
167166

168167
-- leap seconds are included correctly
169-
let ts13 = "2015-08-23T23:59:60.128+00" :: LT.Text
170-
let (Just (t13 :: UTCTime)) = parseWithAeson ts13
168+
let ts13 = "2015-08-23T23:59:60.128+00"
169+
t13 <- parseWithAeson ts13
171170
assertEqual "utctime" (parseWithRead "%FT%T%QZ" "2015-08-23T23:59:60.128Z") t13
172-
let ts14 = "2015-08-23T23:59:60.999999999999+00" :: LT.Text
173-
let (Just (t14 :: UTCTime)) = parseWithAeson ts14
171+
let ts14 = "2015-08-23T23:59:60.999999999999+00"
172+
t14 <- parseWithAeson ts14
174173
assertEqual "utctime" (parseWithRead "%FT%T%QZ" "2015-08-23T23:59:60.999999999999Z") t14
175174

176175
where
177176
parseWithRead :: String -> LT.Text -> UTCTime
178177
parseWithRead f s =
179178
fromMaybe (error "parseTime input malformed") . parseTimeM True defaultTimeLocale f . LT.unpack $ s
180-
parseWithAeson :: LT.Text -> Maybe UTCTime
181-
parseWithAeson s = decode . LT.encodeUtf8 $ LT.concat ["\"", s, "\""]
179+
180+
parseWithAeson :: LT.Text -> IO UTCTime
181+
parseWithAeson s = either fail return . eitherDecode . LT.encodeUtf8 $ LT.concat ["\"", s, "\""]
182182

183183
-- Test that a few non-timezone qualified timestamp formats get
184184
-- rejected if decoding to UTCTime.
@@ -659,7 +659,7 @@ bigNaturalKeyDecoding =
659659
((eitherDecode :: L.ByteString -> Either String (HashMap Natural Value)) "{ \"1e2000\": null }")
660660

661661
-- A regression test for: https://github.com/bos/aeson/issues/757
662-
type family Fam757 :: * -> *
662+
type family Fam757 :: Type -> Type
663663
type instance Fam757 = Maybe
664664
newtype Newtype757 a = MkNewtype757 (Fam757 a)
665665
deriveToJSON1 defaultOptions ''Newtype757

0 commit comments

Comments
 (0)