diff --git a/Web/Routes/TH.hs b/Web/Routes/TH.hs
--- a/Web/Routes/TH.hs
+++ b/Web/Routes/TH.hs
@@ -94,7 +94,7 @@
          case info of
            TyConI (DataD cx _ keys cs _)    -> return $ Tagged (map conInfo cs) cx $ map conv keys
            TyConI (NewtypeD cx _ keys con _)-> return $ Tagged [conInfo con] cx $ map conv keys
-           _                            -> error "Invalid input"
+           _                                ->  error $ "derivePathInfo - invalid input: " ++ pprint info
     where conInfo (NormalC n args) = (n, length args)
           conInfo (RecC n args) = (n, length args)
           conInfo (InfixC _ n _) = (n, 2)
diff --git a/test/Test.hs b/test/Test.hs
new file mode 100644
--- /dev/null
+++ b/test/Test.hs
@@ -0,0 +1,43 @@
+{-# LANGUAGE GeneralizedNewtypeDeriving, OverloadedStrings, TemplateHaskell #-}
+
+module Main (main) where
+
+import Test.Framework
+import Test.Framework.Providers.HUnit
+import Test.Framework.Providers.QuickCheck2
+import Test.Framework.TH
+import Test.HUnit
+import Test.QuickCheck
+import Web.Routes
+import Web.Routes.TH
+
+newtype ArticleId = ArticleId Int deriving (Eq, Show, Num, PathInfo, Arbitrary)
+
+data Sitemap
+    = Home
+    | Article ArticleId
+    deriving (Eq, Show)
+
+derivePathInfo ''Sitemap
+
+instance Arbitrary Sitemap where
+    arbitrary = oneof [return Home, fmap Article arbitrary]
+
+prop_PathInfo_isomorphism :: Sitemap -> Bool
+prop_PathInfo_isomorphism = pathInfoInverse_prop
+
+case_toPathInfo :: Assertion
+case_toPathInfo =
+    do toPathInfo Home @?= "/home"
+       toPathInfo (Article 0) @?= "/article/0"
+
+case_fromPathInfo :: Assertion
+case_fromPathInfo =
+    do fromPathInfo "/home" @?= Right Home
+       fromPathInfo "/article/0" @?= Right (Article 0)
+       case fromPathInfo "/" :: Either String Sitemap of
+         Left _ -> return ()
+         url    -> assertFailure $ "expected a Left, but got: " ++ show url
+
+main :: IO ()
+main = $defaultMainGenerator
diff --git a/web-routes-th.cabal b/web-routes-th.cabal
--- a/web-routes-th.cabal
+++ b/web-routes-th.cabal
@@ -1,5 +1,5 @@
 Name:             web-routes-th
-Version:          0.22.1
+Version:          0.22.2
 License:          BSD3
 License-File:     LICENSE
 Author:           jeremy@seereason.com
@@ -7,9 +7,23 @@
 Bug-Reports:      http://bugzilla.seereason.com/
 Category:         Web, Language
 Synopsis:         Support for deriving PathInfo using Template Haskell
-Cabal-Version:    >= 1.6
+Cabal-Version:    >= 1.8
 Build-type:       Simple
 
+test-suite Test
+  type             : exitcode-stdio-1.0
+  main-is          : Test.hs
+  hs-source-dirs   : test
+  build-depends    : base == 4.*,
+                     HUnit,
+                     QuickCheck,
+                     test-framework,
+                     test-framework-hunit,
+                     test-framework-quickcheck2,
+                     test-framework-th,
+                     web-routes,
+                     web-routes-th
+
 Library
         Build-Depends:    base >= 4 && < 5,
                           parsec >= 2 && < 4,
@@ -21,4 +35,4 @@
 
 source-repository head
     type:     darcs
-    location: http://src.seereason.com/web-routes/
+    location: http://hub.darcs.net/stepcut/web-routes
