HandsomeSoup-0.3.3: tests/AllTests.hs
module Main where
import Text.HandsomeSoup
import Text.XML.HXT.Core
import System.IO.Unsafe
import Paths_HandsomeSoup
import Test.Hspec.Monadic
-- mk :: (Show a, Eq a, ArrowXml b) => String -> b (T.NTree XNode) (T.NTree XNode) -> a -> Test
run action = unsafePerformIO $ do
testFile <- getDataFileName "tests/test.html"
{- runX $ (fromUrl "tests/test.html") >>> action -}
runX $ (fromUrl testFile) >>> action
main :: IO ()
main = hspec $ do
describe "tests" $ do
it "should get all links" $
run (css "a" >>> getName) == ["a", "a", "a"]
it "should get every element" $
run (css "*" >>> getName) == ["/","html","head","title","body","h1","b","p","strong","a","strong","a","a","p","div","p"]
it "should get descendents" $
run (css "p strong" >>> getName) == ["strong", "strong"]
it "should get children (negative test)" $
run (css "p > strong" >>> getName) == ["strong"]
it "should get children" $
run (css "a > strong" >>> getName) == ["strong"]
it ":first-child pseudo-element" $
run (css "a:first-child" >>> getName) == ["a"]
describe "attribute selector" $ do
it "no value" $
run (css "p[class]" >>> getName) == ["p"]
it "exact value" $
run (css "a[class=sister]" >>> getName) == ["a", "a"]
it "inexact value" $
run (css "a[class~=sister]" >>> getName) == ["a", "a", "a"]
it "using |" $
run (css "[lang|='en']" >>> getName) == ["html"]
it "underscore in attribute selector should work" $
run (css "div[class=curr_lang]" >>> getName) == ["div"]
it "dash in attribute selector should work" $
run (css "p[data-original=test]" >>> getName) == ["p"]
it "class selector" $
run (css "a.sister" >>> getName) == ["a", "a", "a"]
it "class selector #2" $
run (css ".sister" >>> getName) == ["a", "a", "a"]
it "id selector" $
run (css "a#link1" >>> getName) == ["a"]
it "both class and id selectors" $
run (css "a.sister#link1" >>> getName) == ["a"]
it "should ignore extra spaces" $
run (css "html body" >>> getName) == ["body"]
it "should handle multiple elements" $
run (css "a, p" >>> getName) == ["a","a","a","p","p","p"]
it "should get grandchildren only" $
run (css "p * strong" >>> getName) == ["strong"]