From e6728d685a207707ca0184dd6b97b74b709ebbec Mon Sep 17 00:00:00 2001
From: Eduardo Trujillo <ed@chromabits.com>
Date: Sat, 26 Dec 2020 17:15:56 -0800
Subject: [PATCH] test(doctest): Set up initial doctests

---
 package.yaml           |  5 +++--
 shift.cabal            |  8 ++++----
 src/Shift/Rendering.hs | 27 +++++++++++++++++++++++++++
 test/Doctest.hs        |  4 ++++
 test/Spec.hs           |  2 --
 5 files changed, 38 insertions(+), 8 deletions(-)
 create mode 100644 test/Doctest.hs
 delete mode 100644 test/Spec.hs

diff --git a/package.yaml b/package.yaml
index 4cfa0b6..12ec06e 100644
--- a/package.yaml
+++ b/package.yaml
@@ -68,9 +68,10 @@ executables:
       - shift
 
 tests:
-  unit:
-    main: Main.hs
+  doctest:
+    main: Doctest.hs
     source-dirs:
       - test
     dependencies:
       - shift
+      - doctest
diff --git a/shift.cabal b/shift.cabal
index 2b69ecf..cf00da2 100644
--- a/shift.cabal
+++ b/shift.cabal
@@ -19,7 +19,7 @@ license-file:   LICENSE
 build-type:     Simple
 extra-source-files:
     README.md
-    test/Spec.hs
+    test/Doctest.hs
 
 library
   exposed-modules:
@@ -101,11 +101,10 @@ executable dab
     , versions
   default-language: Haskell2010
 
-test-suite unit
+test-suite doctest
   type: exitcode-stdio-1.0
-  main-is: Main.hs
+  main-is: Doctest.hs
   other-modules:
-      Spec
       Paths_shift
   hs-source-dirs:
       test
@@ -117,6 +116,7 @@ test-suite unit
     , cmark-gfm
     , containers
     , data-default
+    , doctest
     , exceptions
     , github
     , hgit
diff --git a/src/Shift/Rendering.hs b/src/Shift/Rendering.hs
index d65f8dc..2c8a6b3 100644
--- a/src/Shift/Rendering.hs
+++ b/src/Shift/Rendering.hs
@@ -39,6 +39,9 @@ import Shift.Types
     crTests,
   )
 
+-- $setup
+-- >>> :set -XOverloadedStrings
+
 renderRef ::
   (MonadIO m, MonadState s m, ClientState s, MonadThrow m) =>
   Ref hash ->
@@ -124,11 +127,35 @@ renderMergeCommit (ref, commit, MergeCommit subject) = do
               ]
       ]
 
+-- | Renders a range of `TagRef`s.
+--
+-- Examples:
+--
+-- >>> import Shift.Types (TagRef(TagRef))
+-- >>> renderRange (TagRef "1.0.0" Nothing) (TagRef "1.1.0" Nothing)
+-- "1.0.0 to 1.1.0"
 renderRange :: TagRef -> TagRef -> Text
 renderRange tx ty =
   mconcat
     [renderTagRef tx, " to ", renderTagRef ty]
 
+-- | Renders a `TagRef`.
+--
+-- >>> import Data.Versions
+-- >>> import Shift.Types (TagRef(TagRef))
+-- >>> let version = Ideal $ SemVer 1 0 0 [] []
+-- >>> renderTagRef (TagRef "1.0.0" (Just version))
+-- "1.0.0"
+--
+-- >>> import Data.Versions
+-- >>> import Shift.Types (TagRef(TagRef))
+-- >>> let version = Ideal $ SemVer 1 0 0 [] []
+-- >>> renderTagRef (TagRef "1.0.1" (Just version))
+-- "1.0.0"
+--
+-- >>> import Shift.Types (TagRef(TagRef))
+-- >>> renderTagRef (TagRef "1.0.1" (Nothing))
+-- "1.0.1"
 renderTagRef :: TagRef -> Text
 renderTagRef tr = case _tVersioning tr of
   Just versioning -> prettyV versioning
diff --git a/test/Doctest.hs b/test/Doctest.hs
new file mode 100644
index 0000000..dcd3152
--- /dev/null
+++ b/test/Doctest.hs
@@ -0,0 +1,4 @@
+import Test.DocTest
+
+main :: IO ()
+main = doctest ["-isrc", "src"]
\ No newline at end of file
diff --git a/test/Spec.hs b/test/Spec.hs
deleted file mode 100644
index cd4753f..0000000
--- a/test/Spec.hs
+++ /dev/null
@@ -1,2 +0,0 @@
-main :: IO ()
-main = putStrLn "Test suite not yet implemented"
-- 
GitLab