{-# LANGUAGE OverloadedStrings #-}
import Data.Char
import Data.Maybe
import qualified Data.Text as T
import Debug.Trace
import qualified Network.PublicSuffixList.Lookup as L
import System.Exit
import Test.HUnit
import Text.IDNA
isSuffix' :: T.Text -> Bool
isSuffix' = L.isSuffix . T.intercalate "." . map (fromJust . toASCII False True . T.map toLower) . T.split (== '.')
-- Derived from http://mxr.mozilla.org/mozilla-central/source/netwerk/test/unit/data/test_psl.txt
-- on October 21, 2012
hunittests :: Test
hunittests = TestList [
--TestCase $ assertEqual " 1" True $ isSuffix' "",
TestCase $ assertEqual " 2" True $ isSuffix' "COM",
TestCase $ assertEqual " 3" False $ isSuffix' "example.COM",
TestCase $ assertEqual " 4" False $ isSuffix' "WwW.example.COM",
--TestCase $ assertEqual " 5" True $ isSuffix' ".com",
--TestCase $ assertEqual " 6" True $ isSuffix' ".example",
--TestCase $ assertEqual " 7" True $ isSuffix' ".example.com",
--TestCase $ assertEqual " 8" True $ isSuffix' ".example.example",
TestCase $ assertEqual " 9" True $ isSuffix' "example",
TestCase $ assertEqual "10" False $ isSuffix' "example.example",
TestCase $ assertEqual "11" False $ isSuffix' "b.example.example",
TestCase $ assertEqual "12" False $ isSuffix' "a.b.example.example",
TestCase $ assertEqual "13" True $ isSuffix' "biz",
TestCase $ assertEqual "14" False $ isSuffix' "domain.biz",
TestCase $ assertEqual "15" False $ isSuffix' "b.domain.biz",
TestCase $ assertEqual "16" False $ isSuffix' "a.b.domain.biz",
TestCase $ assertEqual "17" True $ isSuffix' "com",
TestCase $ assertEqual "18" False $ isSuffix' "example.com",
TestCase $ assertEqual "19" False $ isSuffix' "b.example.com",
TestCase $ assertEqual "20" False $ isSuffix' "a.b.example.com",
TestCase $ assertEqual "21" True $ isSuffix' "uk.com",
TestCase $ assertEqual "22" False $ isSuffix' "example.uk.com",
TestCase $ assertEqual "23" False $ isSuffix' "b.example.uk.com",
TestCase $ assertEqual "24" False $ isSuffix' "a.b.example.uk.com",
TestCase $ assertEqual "25" False $ isSuffix' "test.ac",
TestCase $ assertEqual "26" True $ isSuffix' "cy",
TestCase $ assertEqual "27" True $ isSuffix' "c.cy",
TestCase $ assertEqual "28" False $ isSuffix' "b.c.cy",
TestCase $ assertEqual "29" False $ isSuffix' "a.b.c.cy",
TestCase $ assertEqual "30" True $ isSuffix' "jp",
TestCase $ assertEqual "31" False $ isSuffix' "test.jp",
TestCase $ assertEqual "32" False $ isSuffix' "www.test.jp",
TestCase $ assertEqual "33" True $ isSuffix' "ac.jp",
TestCase $ assertEqual "34" False $ isSuffix' "test.ac.jp",
TestCase $ assertEqual "35" False $ isSuffix' "www.test.ac.jp",
TestCase $ assertEqual "36" True $ isSuffix' "kyoto.jp",
TestCase $ assertEqual "37" False $ isSuffix' "test.kyoto.jp",
TestCase $ assertEqual "38" True $ isSuffix' "ide.kyoto.jp",
TestCase $ assertEqual "39" False $ isSuffix' "b.ide.kyoto.jp",
TestCase $ assertEqual "30" False $ isSuffix' "a.b.ide.kyoto.jp",
TestCase $ assertEqual "41" True $ isSuffix' "c.kobe.jp",
TestCase $ assertEqual "42" False $ isSuffix' "b.c.kobe.jp",
TestCase $ assertEqual "43" False $ isSuffix' "a.b.c.kobe.jp",
TestCase $ assertEqual "44" False $ isSuffix' "city.kobe.jp",
TestCase $ assertEqual "45" False $ isSuffix' "www.city.kobe.jp",
TestCase $ assertEqual "46" True $ isSuffix' "om",
TestCase $ assertEqual "47" True $ isSuffix' "test.om",
TestCase $ assertEqual "48" False $ isSuffix' "b.test.om",
TestCase $ assertEqual "49" False $ isSuffix' "a.b.test.om",
TestCase $ assertEqual "40" False $ isSuffix' "songfest.om",
TestCase $ assertEqual "51" False $ isSuffix' "www.songfest.om",
TestCase $ assertEqual "52" True $ isSuffix' "us",
TestCase $ assertEqual "53" False $ isSuffix' "test.us",
TestCase $ assertEqual "54" False $ isSuffix' "www.test.us",
TestCase $ assertEqual "55" True $ isSuffix' "ak.us",
TestCase $ assertEqual "56" False $ isSuffix' "test.ak.us",
TestCase $ assertEqual "57" False $ isSuffix' "www.test.ak.us",
TestCase $ assertEqual "58" True $ isSuffix' "k12.ak.us",
TestCase $ assertEqual "59" False $ isSuffix' "test.k12.ak.us",
TestCase $ assertEqual "60" False $ isSuffix' "www.test.k12.ak.us"
]
main = do
counts <- runTestTT hunittests
if errors counts == 0 && failures counts == 0
then exitSuccess
else exitFailure