tests: convert & re-enable StringFormat tests

This commit is contained in:
Simon Michael 2018-09-04 13:51:08 -07:00
parent 51618adc37
commit 54db19e857
2 changed files with 43 additions and 44 deletions

View File

@ -55,6 +55,7 @@ easytests_Data = tests "Data" [
,easytests_Journal ,easytests_Journal
,easytests_Ledger ,easytests_Ledger
,easytests_Posting ,easytests_Posting
,easytests_StringFormat
,easytests_Timeclock ,easytests_Timeclock
,easytests_Transaction ,easytests_Transaction
] ]

View File

@ -2,7 +2,7 @@
-- hledger's report item fields. The formats are used by -- hledger's report item fields. The formats are used by
-- report-specific renderers like renderBalanceReportItem. -- report-specific renderers like renderBalanceReportItem.
{-# LANGUAGE FlexibleContexts, TypeFamilies, PackageImports #-} {-# LANGUAGE FlexibleContexts, OverloadedStrings, TypeFamilies, PackageImports #-}
module Hledger.Data.StringFormat ( module Hledger.Data.StringFormat (
parseStringFormat parseStringFormat
@ -10,7 +10,7 @@ module Hledger.Data.StringFormat (
, StringFormat(..) , StringFormat(..)
, StringFormatComponent(..) , StringFormatComponent(..)
, ReportItemField(..) , ReportItemField(..)
, tests_Hledger_Data_StringFormat , easytests_StringFormat
) where ) where
import Prelude () import Prelude ()
@ -18,7 +18,7 @@ import "base-compat-batteries" Prelude.Compat
import Numeric import Numeric
import Data.Char (isPrint) import Data.Char (isPrint)
import Data.Maybe import Data.Maybe
import qualified Test.HUnit as U (test) import qualified Data.Text as T
import Text.Megaparsec import Text.Megaparsec
import Text.Megaparsec.Char import Text.Megaparsec.Char
@ -90,7 +90,7 @@ defaultStringFormatStyle = BottomAligned
stringformatp :: SimpleStringParser StringFormat stringformatp :: SimpleStringParser StringFormat
stringformatp = do stringformatp = do
alignspec <- optional (try $ char '%' >> oneOf "^_,") alignspec <- optional (try $ char '%' >> oneOf ("^_,"::String))
let constructor = let constructor =
case alignspec of case alignspec of
Just '^' -> TopAligned Just '^' -> TopAligned
@ -137,47 +137,45 @@ fieldp = do
---------------------------------------------------------------------- ----------------------------------------------------------------------
testFormat :: StringFormatComponent -> String -> String -> Assertion formatStringTester fs value expected = actual `is` expected
testFormat fs value expected = assertEqual name expected actual where
where actual = case fs of
(name, actual) = case fs of FormatLiteral l -> formatString False Nothing Nothing l
FormatLiteral l -> ("literal", formatString False Nothing Nothing l) FormatField leftJustify min max _ -> formatString leftJustify min max value
FormatField leftJustify min max _ -> ("field", formatString leftJustify min max value)
testParser :: String -> StringFormat -> Assertion easytests_StringFormat = tests "StringFormat" [
testParser s expected = case (parseStringFormat s) of
Left error -> assertFailure $ show error
Right actual -> assertEqual ("Input: " ++ s) expected actual
tests_Hledger_Data_StringFormat = U.test [ formattingTests ++ parserTests ] tests "formatStringHelper" [
formatStringTester (FormatLiteral " ") "" " "
formattingTests = [ , formatStringTester (FormatField False Nothing Nothing DescriptionField) "description" "description"
testFormat (FormatLiteral " ") "" " " , formatStringTester (FormatField False (Just 20) Nothing DescriptionField) "description" " description"
, testFormat (FormatField False Nothing Nothing DescriptionField) "description" "description" , formatStringTester (FormatField False Nothing (Just 20) DescriptionField) "description" "description"
, testFormat (FormatField False (Just 20) Nothing DescriptionField) "description" " description" , formatStringTester (FormatField True Nothing (Just 20) DescriptionField) "description" "description"
, testFormat (FormatField False Nothing (Just 20) DescriptionField) "description" "description" , formatStringTester (FormatField True (Just 20) Nothing DescriptionField) "description" "description "
, testFormat (FormatField True Nothing (Just 20) DescriptionField) "description" "description" , formatStringTester (FormatField True (Just 20) (Just 20) DescriptionField) "description" "description "
, testFormat (FormatField True (Just 20) Nothing DescriptionField) "description" "description " , formatStringTester (FormatField True Nothing (Just 3) DescriptionField) "description" "des"
, testFormat (FormatField True (Just 20) (Just 20) DescriptionField) "description" "description "
, testFormat (FormatField True Nothing (Just 3) DescriptionField) "description" "des"
] ]
parserTests = [ ,tests "parseStringFormat" $
testParser "" (defaultStringFormatStyle []) let s `gives` expected = test (T.pack s) $ parseStringFormat s `is` Right expected
, testParser "D" (defaultStringFormatStyle [FormatLiteral "D"]) in [
, testParser "%(date)" (defaultStringFormatStyle [FormatField False Nothing Nothing DescriptionField]) "" `gives` (defaultStringFormatStyle [])
, testParser "%(total)" (defaultStringFormatStyle [FormatField False Nothing Nothing TotalField]) , "D" `gives` (defaultStringFormatStyle [FormatLiteral "D"])
, testParser "^%(total)" (TopAligned [FormatField False Nothing Nothing TotalField]) , "%(date)" `gives` (defaultStringFormatStyle [FormatField False Nothing Nothing DescriptionField])
, testParser "_%(total)" (BottomAligned [FormatField False Nothing Nothing TotalField]) , "%(total)" `gives` (defaultStringFormatStyle [FormatField False Nothing Nothing TotalField])
, testParser ",%(total)" (OneLine [FormatField False Nothing Nothing TotalField]) -- TODO
, testParser "Hello %(date)!" (defaultStringFormatStyle [FormatLiteral "Hello ", FormatField False Nothing Nothing DescriptionField, FormatLiteral "!"]) -- , "^%(total)" `gives` (TopAligned [FormatField False Nothing Nothing TotalField])
, testParser "%-(date)" (defaultStringFormatStyle [FormatField True Nothing Nothing DescriptionField]) -- , "_%(total)" `gives` (BottomAligned [FormatField False Nothing Nothing TotalField])
, testParser "%20(date)" (defaultStringFormatStyle [FormatField False (Just 20) Nothing DescriptionField]) -- , ",%(total)" `gives` (OneLine [FormatField False Nothing Nothing TotalField])
, testParser "%.10(date)" (defaultStringFormatStyle [FormatField False Nothing (Just 10) DescriptionField]) , "Hello %(date)!" `gives` (defaultStringFormatStyle [FormatLiteral "Hello ", FormatField False Nothing Nothing DescriptionField, FormatLiteral "!"])
, testParser "%20.10(date)" (defaultStringFormatStyle [FormatField False (Just 20) (Just 10) DescriptionField]) , "%-(date)" `gives` (defaultStringFormatStyle [FormatField True Nothing Nothing DescriptionField])
, testParser "%20(account) %.10(total)\n" (defaultStringFormatStyle [FormatField False (Just 20) Nothing AccountField , "%20(date)" `gives` (defaultStringFormatStyle [FormatField False (Just 20) Nothing DescriptionField])
, FormatLiteral " " , "%.10(date)" `gives` (defaultStringFormatStyle [FormatField False Nothing (Just 10) DescriptionField])
, FormatField False Nothing (Just 10) TotalField , "%20.10(date)" `gives` (defaultStringFormatStyle [FormatField False (Just 20) (Just 10) DescriptionField])
, FormatLiteral "\n" , "%20(account) %.10(total)" `gives` (defaultStringFormatStyle [FormatField False (Just 20) Nothing AccountField
]) ,FormatLiteral " "
] ,FormatField False Nothing (Just 10) TotalField
])
, test "newline not parsed" $ expectLeft $ parseStringFormat "\n"
]
]