content: {-# LANGUAGE PatternSynonyms #-}
  
  module OpenTelemetry.AttributesSpec where
  
  import qualified Data.Text as T
  import qualified OpenTelemetry.Attributes as A
  import qualified Test.Hspec as Hspec
  
  
  spec :: Hspec.Spec
  spec = Hspec.describe "Attributes" $ do
    Hspec.describe "addAttribute" $ do
      let overwritesPrevious :: (A.ToAttribute a) => T.Text -> a -> a -> A.Attributes -> Hspec.Spec
          overwritesPrevious attrKey newValue prevValue attrs = do
            let addAttr = addAttributeDefault attrKey
            Hspec.it "Overwrites previous value with new value at this key." $
              addAttr newValue (addAttr prevValue attrs) `Hspec.shouldBe` addAttr newValue attrs
  
      overwritesPrevious Example ("new value" :: T.Text) "prev value" A.emptyAttributes
    Hspec.describe "unsafeMergeAttributesIgnoringLimits" $ do
      Hspec.it "Is left-biased when keys conflict" $ do
        let left = addAttributeDefault Example (1 :: Int) A.emptyAttributes
            right = addAttributeDefault Example (2 :: Int) A.emptyAttributes
        A.unsafeMergeAttributesIgnoringLimits left right `Hspec.shouldBe` left
  
  
  pattern Example :: T.Text
  pattern Example = "example"
  
  
  addAttributeDefault :: (A.ToAttribute a) => T.Text -> a -> A.Attributes -> A.Attributes
  addAttributeDefault attrKey value attrs = A.addAttribute A.defaultAttributeLimits attrs attrKey value
  