{-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE OverloadedLists #-} module Common.Unit where import Test.HUnit import Turtle import Prelude hiding (FilePath) import TestHelpers import Hledger.Flow.Common import Data.Either import qualified Data.Text as T import qualified Data.List as List testShowCmdArgs = TestCase ( do let options = ["--number", "/tmp/file with spaces"] let expected = "--number '/tmp/file with spaces'" let actual = showCmdArgs options assertEqual "Convert command-line arguments to text" expected actual) testIncludeYears = TestCase ( do let txterr = "Some text without years" let expectederr = ["Unable to extract years from the following text:", txterr, "Errors:"] let actualerr = (init . head) $ map (T.lines) $ lefts [includeYears' txterr] :: [Text] assertEqual "Get a list of years from an include file - error case" expectederr actualerr let txt1 = "### Generated by hledger-flow - DO NOT EDIT ###\n\n" <> "!include import/2014-include.journal\n" <> "!include import/2015-include.journal\n" <> "!include import/2016-include.journal\n" <> "!include import/2017-include.journal\n" <> "!include import/2018-include.journal\n" <> "!include import/2019-include.journal" let expected1 = Right [2014..2019] let actual1 = includeYears' txt1 assertEqual "Get a list of years from an include file - success case 1" expected1 actual1 let txt2 = "!include 2019-include.journal" let expected2 = Right [2019] let actual2 = includeYears' txt2 assertEqual "Get a list of years from an include file - success case 2" expected2 actual2 ) testExtractDigits = TestCase ( do let txt1 = "A number: 321\nAnother number is 42, so is 0" let expected1 = Right 321420 let actual1 = extractDigits txt1 assertEqual "Extract digits from text 1" expected1 actual1 let txt2 = "No numbers in this line" let expected2 = Left "input does not start with a digit" let actual2 = extractDigits txt2 assertEqual "Extract digits from text 2" expected2 actual2 ) tests = TestList [testShowCmdArgs, testIncludeYears, testExtractDigits]