@@ -56,6 +56,7 @@ main = hspecX $ do
5656 describe "numbers" $ do
5757 it "parses as string when quoted" caseQuotedNumber
5858 it "parses as number when unquoted" caseUnquotedNumber
59+ it "parses as number !!str is present" caseAttribNumber
5960 describe "booleans" $ do
6061 it "parses when all lowercase" caseLowercaseBool
6162 it "parses when all uppercase" caseUppercaseBool
@@ -292,9 +293,9 @@ caseMergeSequence = do
292293 isJust maybeRes @? "decoder should return Just YamlObject but returned Nothing"
293294 let res = fromJust maybeRes
294295 mappingKey res "foo1" @?= (mkScalar "foo")
295− mappingKey res "k1" @?= (D.Number 1)
296− mappingKey res "k2" @?= (D.Number 2)
297− mappingKey res "k3" @?= (D.Number 4)
296+ mappingKey res "k1" @?= (D.String "1")
297+ mappingKey res "k2" @?= (D.String "2")
298+ mappingKey res "k3" @?= (D.String "4")
298299
299300caseDataTypes :: Assertion
300301caseDataTypes =
@@ -309,9 +310,10 @@ caseDataTypes =
309310 , ("null", D.Null)
310311 ]
311312
312−caseQuotedNumber, caseUnquotedNumber :: Assertion
313+caseQuotedNumber, caseUnquotedNumber, caseAttribNumber :: Assertion
313314caseQuotedNumber = D.decode "foo: \"1234\"" @?= Just (object [("foo", D.String "1234")])
314315caseUnquotedNumber = D.decode "foo: 1234" @?= Just (object [("foo", D.Number 1234)])
316+caseAttribNumber = D.decode "foo: !!str 1234" @?= Just (object [("foo", D.String "1234")])
315317
316318obj :: Maybe D.Value
317319obj = Just (object [("foo", D.Bool False), ("bar", D.Bool True), ("baz", D.Bool True)])
@@ -319,4 +321,4 @@ obj = Just (object [("foo", D.Bool False), ("bar", D.Bool True), ("baz", D.Bool
319321caseLowercaseBool, caseUppercaseBool, caseTitlecaseBool :: Assertion
320322caseLowercaseBool = D.decode "foo: off\nbar: y\nbaz: true" @?= obj
321323caseUppercaseBool = D.decode "foo: FALSE\nbar: Y\nbaz: ON" @?= obj
322−caseTitlecaseBool = D.decode "foo: No\nbar: Yes\nbaz: True" @?= obj
324+caseTitlecaseBool = D.decode "foo: No\nbar: Yes\nbaz: True" @?= obj