packages feed

haskell-postal-0.2.1.0: test/NLP/Postal/PostalSpec.hs

{-# LANGUAGE OverloadedStrings #-}

module NLP.Postal.PostalSpec (spec) where

import Test.Hspec
import NLP.Postal
import Control.Monad (forM_)
import Control.Monad.IO.Class (liftIO)
import Data.List (lookup)
import qualified Data.Text as T

spec :: Spec
spec = do
    describe "setup" $ do
        it "general setup runs successfully" $ do
            r <- liftIO setup
            r `shouldBe` 1
        it "parser setup runs successfully" $ do
             r <- liftIO setupParser
             r `shouldBe` 1
        it "language classifier setup runs successfully" $ do
            r <- liftIO setupLanguageClassifier
            r `shouldBe` 1

    describe "expansion" $ do
        it "expands an address correctly" $ do
            defNormalizeOptions <- liftIO getDefaultNormalizeOptions
            r <- liftIO $ expandAddress defNormalizeOptions "11 Wall Street New York, NY"
            forM_ r $ \xp -> T.take 14 xp `shouldBe` "11 wall street"

    describe "parser" $ do
        it "parses an address correctly" $ do
            defParserOpts <- liftIO getAddressParserDefaultOptions
            r <- liftIO $ parseAddress defParserOpts "11 Wall Street New York, NY"
            lookup "house_number" r `shouldBe` Just "11"
            lookup "road" r `shouldBe` Just "wall street"
            lookup "city" r `shouldBe` Just "new york"
            lookup "state" r `shouldBe` Just "ny"

    describe "teardown" $ do
        it "language classifier teardown" $ do
            r <- liftIO tearDownLanguageClassifier
            r `shouldBe` ()
        it "parser teardown" $ do
            r <- liftIO tearDownParser
            r `shouldBe` ()
        it "teardown" $ do
            r <- liftIO tearDown
            r `shouldBe` ()