{-# LANGUAGE NoImplicitPrelude, OverloadedStrings, UnicodeSyntax, QuasiQuotes #-}
module Data.Microformats2.Parser.PropertySpec (spec) where
import Prelude.Compat
import Test.Hspec
import TestCommon
import Data.Microformats2.Parser.Property
{-# ANN module ("HLint: ignore Redundant do"::String) #-}
spec ∷ Spec
spec = do
describe "extractProperty" $ do
it "parses p- properties" $ do
let nm = extractP . documentRoot . parseLBS
nm [xml|Hello Basic|] `shouldBe` pure "Hello Basic"
nm [xml|HA|] `shouldBe` pure "Hello Abbr"
nm [xml|HA|] `shouldBe` pure "HA"
nm [xml||] `shouldBe` pure "Hello Data"
nm [xml||] `shouldBe` pure "Hello Input"
nm [xml||] `shouldBe` pure "Hello Img"
nm [xml||] `shouldBe` pure "Hello Area"
nm [xml| ignore Hello |] `shouldBe` pure "HelloValuePattern"
nm [xml| ignore Hi Value-Title|] `shouldBe` pure "HelloValue-Title"
nm [xml| Hello |] `shouldBe` pure "Hello Span With Img"
nm [xml| Hello |] `shouldBe` pure "Hello span-with.png"
nm [xml| Hello
nope |] `shouldBe` pure "Hello&& Value Title"
it "parses u- properties" $ do
let ur = extractU . documentRoot . parseLBS
ur [xml|link|] `shouldBe` pure ("/yo/a", True)
ur [xml||] `shouldBe` pure ("/yo/area", True)
ur [xml||] `shouldBe` pure ("/yo/img", True)
ur [xml||] `shouldBe` pure ("/yo/audio", True)
ur [xml||] `shouldBe` pure ("/yo/video", True)
ur [xml||] `shouldBe` pure ("/yo/source", True)
ur [xml||] `shouldBe` pure ("/yo/data", True)
ur [xml|/yo/vcp|] `shouldBe` pure ("/yo/vcp", False)
ur [xml||] `shouldBe` pure ("/yo/abbr", False)
ur [xml||] `shouldBe` pure ("/yo/data", False)
ur [xml||] `shouldBe` pure ("/yo/input", False)
ur [xml|/yo/span|] `shouldBe` pure ("/yo/span", False)
ur [xml|link|] `shouldBe` pure ("https://secure.gravatar.com/avatar/947b5f3f323da0ef785b6f02d9c265d6?s=96&d=blank&r=g", True)
it "parses dt- properties" $ do
let dt = extractDt . documentRoot . parseLBS
dt [xml||] `shouldBe` pure "ti.me"
dt [xml|someday|] `shouldBe` pure "i.ns"
dt [xml|someday|] `shouldBe` pure "d.el"
dt [xml|AB|] `shouldBe` pure "ab.br"
dt [xml||] `shouldBe` pure "da.ta"
dt [xml||] `shouldBe` pure "i.np.ut"
dt [xml|
VCP
lol
|] `shouldBe` pure "vcptime"
dt [xml|
|] `shouldBe` pure "2015-08-28T05:55:00-07:00"
dt [xml|
|] `shouldBe` pure "2015-08-28T05:55:00+00:00"
dt [xml|
|] `shouldBe` pure "2015-08-28"
dt [xml|
|] `shouldBe` pure "2015-08-28T05:55:00+00:00"
dt [xml|date|] `shouldBe` pure "date"
describe "implyProperty" $ do
it "parses implied p-name" $ do
let nm = implyProperty "name" . documentRoot . parseLBS
nm [xml||] `shouldBe` pure "Hello Img!"
nm [xml|HA|] `shouldBe` pure "Hello Abbr!"
nm [xml|
Goodbye Img!
|] `shouldBe` pure "Goodbye Img!" nm [xml|HOA
|] `shouldBe` pure "Hello Only Abbr!" nm [xml|Goodbye Abbr!
|] `shouldBe` pure "Goodbye Abbr!" nm [xml||] `shouldBe` pure "Hello Only Nested Img!" nm [xml|
Goodbye Nested Img!
|] `shouldBe` pure "Goodbye Nested Img!" nm [xml|HOA
|] `shouldBe` pure "Hello Only Nested Abbr!" nm [xml|Goodbye Nested Abbr!
|] `shouldBe` pure "Goodbye Nested Abbr!" nm [xml|Hello Text!
|] `shouldBe` pure "Hello Text!" it "parses implied u-photo" $ do let ph = implyProperty "photo" . documentRoot . parseLBS ph [xml||] `shouldBe` pure "selfie.png" ph [xml|