packages feed

grapesy-1.2.0: test-record-dot/Test/OverloadedRecordUpdate.hs

{-# LANGUAGE AllowAmbiguousTypes    #-}
{-# LANGUAGE CPP                    #-}
{-# LANGUAGE OverloadedRecordDot    #-}
{-# LANGUAGE OverloadedRecordUpdate #-}

-- For now (ghc 9.2 .. 9.10) this is required if using OverloadedRecordUpdate
{-# LANGUAGE RebindableSyntax #-}

module Test.OverloadedRecordUpdate (tests) where

import Prelude

import Network.GRPC.Common.Protobuf

import Test.Tasty
import Test.Tasty.HUnit

import Proto.Spec

#if MIN_VERSION_base(4,22,0)
import GHC.Records.Compat (getField)
import GHC.Records.Compat qualified as Compat

-- See <https://github.com/ghc-proposals/ghc-proposals/blob/master/proposals/0583-hasfield-redesign.rst>
setField :: forall fld a r. Compat.HasField fld r a => a -> r -> r
setField a r = Compat.setField @fld @r @a r a
#else
import GHC.Records.Compat (getField, setField)
#endif


tests :: TestTree
tests = testGroup "Test.OverloadedRecordUpdate" [
      testCase "update" test_update
    ]

test_update :: Assertion
test_update = do
    do let msg' = exampleMessage{defaultScalar01 = 1}
       assertEqual "defaultScalar01" 1 $ msg'.defaultScalar01

exampleMessage :: Proto ExampleMessage
exampleMessage = defMessage