packages feed

dom-selector-0.2.0.0: test-scraping.hs

-- test-scraping.hs
{-# LANGUAGE QuasiQuotes,OverloadedStrings,DoAndIfThenElse #-}

module Main where

import System.Exit (exitFailure)

import Text.XML.Cursor
import Text.HTML.DOM as H
import Text.XML.Scraping
import Text.XML.Selector.TH
import Data.List
import Control.Monad
import qualified Data.Text.Lazy.IO as TLIO

main = do
  root <- fmap fromDocument $ H.readFile "examples/input2.html"
  mapM_ testOne (props root)
  props2 root
  return ()

testOne :: (String,Bool) -> IO ()
testOne (name,pred) = do
  if pred then do
    putStrLn $ "OK: " ++ name
    return ()
  else
  	exitFailure

props c = [
	("div li", length (queryT [jq| li |] c) == length (queryT [jq| div li |] c))
	,("ul li",length (queryT [jq| ul li |] c) == length (queryT [jq| ul > li |] c))
	,("inner",innerText (queryT [jq| #evening |] c) == (innerText . map node) (queryT [jq| #evening |] c))
	,("inner2",(innerText . head) (queryT [jq| #evening |] c) ==
		(innerText . head . map node) (queryT [jq| #evening |] c))
	]

props2 c = do
  TLIO.putStrLn $ (toHtml) (queryT [jq| #evening |] c)
  TLIO.putStrLn $ (toHtml . map node) (queryT [jq| #evening |] c)
  TLIO.putStrLn $ (innerHtml) (queryT [jq| #evening |] c)
  TLIO.putStrLn $ (innerHtml . map node) (queryT [jq| #evening |] c)
  TLIO.putStrLn $ (innerText) (queryT [jq| #evening |] c)
  TLIO.putStrLn $ (innerText . map node) (queryT [jq| #evening |] c)