From a21e4269c87a844ade12a652ebe957b2ff34afa6 Mon Sep 17 00:00:00 2001 From: Oskar Gewalli Date: Sun, 24 May 2020 18:16:28 +0200 Subject: [PATCH 1/4] Trying different representation of json values --- test/Tests/Tests.fs | 63 ++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 62 insertions(+), 1 deletion(-) diff --git a/test/Tests/Tests.fs b/test/Tests/Tests.fs index 9a129722..2a68576b 100644 --- a/test/Tests/Tests.fs +++ b/test/Tests/Tests.fs @@ -63,6 +63,38 @@ type Person with "children" .= x.Children ] +type Person2 = { + Name: string + Age: int + Gender: Gender +} + +type Person2 with + static member Create name age gender = { Person2.Name = name; Age = age; Gender = gender; } + + static member OfJson json = + match json with + | JObject o -> + let name = o .@ "name" + let age = o .@ "age" + let cgender = o .@ "gender" + let gender = + match cgender with + | Ok 0 -> Decode.Success Gender.Male + | Ok 1 -> Decode.Success Gender.Female + | Ok x -> Decode.Fail.invalidValue (JString <| string x ) "Unexpected value" + | Error y -> Error y + + Person2.Create name <*> age <*> gender + | x -> Decode.Fail.objExpected x + + static member ToJson (x: Person2) = + jobj [ + "name" .= x.Name + "age" .= x.Age + "gender" .= (int x.Gender) + ] + type Attribute = { Name: string Value: string @@ -241,6 +273,14 @@ let tests = [ ] } Assert.Equal("Person", Some expectedPerson, Option.ofResult actual) } + test "Person2 different representation" { + let actual : Person2 ParseResult = parseJson """{"name": "John", "age": 44, "gender": 0}""" + let expectedPerson = + { Person2.Name = "John" + Age = 44 + Gender = Gender.Male } + Assert.Equal("Person", Some expectedPerson, Option.ofResult actual) + } #if SYSTEMJSON test "DateTime with milliseconds" { let actual : DateTime ParseResult = ofJson (JsonPrimitive "2014-09-05T04:38:07.862Z") @@ -394,7 +434,28 @@ let tests = [ Assert.JSON(expected, p) #endif } - + test "Person2" { + let p = + { Person2.Name = "John" + Age = 44 + Gender = Gender.Male } + #if NEWTONSOFT + let expected = """{"name":"John","age":44,"gender":0}""" + Assert.JSON(expected, p) + #endif + #if FSHARPDATA + let expected = """{"name":"John","age":44,"gender":0}""" + Assert.JSON(expected, p) + #endif + #if SYSTEMJSON + let expected = """{"age":44,"gender":0,"name":"John"}""" + Assert.JSON(expected, p) + #endif + #if SYSTEMTEXTJSON + let expected = """{"name":"John","age":44,"gender":0}""" + Assert.JSON(expected, p) + #endif + } test "Vehicle" { let u = [ Bike ] |> toJson |> string |> strCleanUpAll let v = [ MotorBike () ] |> toJson |> string |> strCleanUpAll From 336aff1a27d1c83ca2c867de575de3626d955faa Mon Sep 17 00:00:00 2001 From: Oskar Gewalli Date: Sun, 24 May 2020 18:23:56 +0200 Subject: [PATCH 2/4] Should serialize to correct value --- test/Tests/Tests.fs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Tests/Tests.fs b/test/Tests/Tests.fs index 2a68576b..9928c09a 100644 --- a/test/Tests/Tests.fs +++ b/test/Tests/Tests.fs @@ -92,7 +92,7 @@ type Person2 with jobj [ "name" .= x.Name "age" .= x.Age - "gender" .= (int x.Gender) + "gender" .= (match x.Gender with |Gender.Male -> 0 | Gender.Female -> 1) ] type Attribute = { From 24228e03966ddd7e675a005dd206b8a78b8925c0 Mon Sep 17 00:00:00 2001 From: Oskar Gewalli Date: Sun, 24 May 2020 23:13:33 +0200 Subject: [PATCH 3/4] Fix after code review --- test/Tests/Tests.fs | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/test/Tests/Tests.fs b/test/Tests/Tests.fs index 9928c09a..bf3750e5 100644 --- a/test/Tests/Tests.fs +++ b/test/Tests/Tests.fs @@ -419,20 +419,17 @@ let tests = [ ] } #if NEWTONSOFT let expected = """{"name":"John","age":44,"gender":"Male","children":[{"name":"Katy","age":5,"gender":"Female","children":[]},{"name":"Johnny","age":7,"gender":"Male","children":[]}]}""" - Assert.JSON(expected, p) #endif #if FSHARPDATA let expected = """{"name":"John","age":44,"gender":"Male","children":[{"name":"Katy","age":5,"gender":"Female","children":[]},{"name":"Johnny","age":7,"gender":"Male","children":[]}]}""" - Assert.JSON(expected, p) #endif #if SYSTEMJSON let expected = """{"age":44,"children":[{"age":5,"children":[],"gender":"Female","name":"Katy"},{"age":7,"children":[],"gender":"Male","name":"Johnny"}],"gender":"Male","name":"John"}""" - Assert.JSON(expected, p) #endif #if SYSTEMTEXTJSON let expected = """{"name":"John","age":44,"gender":"Male","children":[{"name":"Katy","age":5,"gender":"Female","children":[]},{"name":"Johnny","age":7,"gender":"Male","children":[]}]}""" - Assert.JSON(expected, p) #endif + Assert.JSON(expected, p) } test "Person2" { let p = @@ -441,20 +438,17 @@ let tests = [ Gender = Gender.Male } #if NEWTONSOFT let expected = """{"name":"John","age":44,"gender":0}""" - Assert.JSON(expected, p) #endif #if FSHARPDATA let expected = """{"name":"John","age":44,"gender":0}""" - Assert.JSON(expected, p) #endif #if SYSTEMJSON let expected = """{"age":44,"gender":0,"name":"John"}""" - Assert.JSON(expected, p) #endif #if SYSTEMTEXTJSON let expected = """{"name":"John","age":44,"gender":0}""" - Assert.JSON(expected, p) #endif + Assert.JSON(expected, p) } test "Vehicle" { let u = [ Bike ] |> toJson |> string |> strCleanUpAll From a09b0361d958d519c19d65d03d2299e20fed442f Mon Sep 17 00:00:00 2001 From: Oskar Gewalli Date: Wed, 3 Jun 2020 21:17:58 +0200 Subject: [PATCH 4/4] Faulty merge --- test/Tests/Tests.fs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/test/Tests/Tests.fs b/test/Tests/Tests.fs index a0749195..8ca2db73 100644 --- a/test/Tests/Tests.fs +++ b/test/Tests/Tests.fs @@ -435,7 +435,9 @@ let tests = [ #if SYSTEMJSON let expected = """{"age":44,"children":[{"age":5,"children":[],"dob":"1975-01-01T00:00:00.000Z","gender":"Female","name":"Katy"},{"age":7,"children":[],"dob":"1975-01-01T00:00:00.000Z","gender":"Male","name":"Johnny"}],"dob":"1975-01-01T00:00:00.000Z","gender":"Male","name":"John"}""" #endif + #if SYSTEMTEXTJSON let expected = """{"name":"John","age":44,"gender":"Male","dob":"1975-01-01T00:00:00.000Z","children":[{"name":"Katy","age":5,"gender":"Female","dob":"1975-01-01T00:00:00.000Z","children":[]},{"name":"Johnny","age":7,"gender":"Male","dob":"1975-01-01T00:00:00.000Z","children":[]}]}""" + #endif Assert.JSON(expected, p) } test "Person2" {