{- Copyright (c) Meta Platforms, Inc. and affiliates. All rights reserved. This source code is licensed under the BSD-style license found in the LICENSE file in the root directory of this source tree. -} {-# LANGUAGE QuasiQuotes #-} {-# OPTIONS_GHC -Wno-incomplete-uni-patterns #-} module JSONPrettyTest (main) where import qualified Data.Aeson as Aeson import qualified Data.ByteString.Lazy.Char8 as B import Compat.Prettyprinter as Pretty hiding ((<>)) import Text.JSON import Test.HUnit import TestRunner import Util.JSON.Pretty () import Util.String.Quasi jsonString :: String jsonString = [s|{"byt":33,"nat":42,"array_of_byte":"eHl6AAB4ZmY","array_of_nat":[99,98],"record_":{"a":34,"b":35},"sum_":{"d":36},"named_record_":{"alpha":1,"beta":{"wed":true}},"named_sum_":{"tue":37},"named_enum_":2,"pred":{"id":3},"maybe_":{},"bool_":true,"string_":"Hello\u0000world!\u0000","null_":null}|] jsonPrettyTest :: Test jsonPrettyTest = TestLabel "jsonPrettyTest" $ TestCase $ do json <- case Text.JSON.decode jsonString of Error _ -> assertFailure "parse" Ok (v :: JSValue) -> return v let prettyJson = show $ pretty json Just v0 = Aeson.decode (B.pack jsonString) :: Maybe Aeson.Value Just v1 = Aeson.decode (B.pack prettyJson) assertEqual "pretty" v0 v1 main :: IO () main = testRunner $ TestList [ jsonPrettyTest ]