gitHUD-1.3.2: test/Test/GitHUD/Config/Parse.hs
module Test.GitHUD.Config.Parse (
configParserTests
) where
import Test.Tasty
import Test.Tasty.HUnit
import Text.Parsec (parse)
import Text.Parsec.String (Parser)
import GitHUD.Config.Parse
import GitHUD.Config.Types
import GitHUD.Terminal.Types
configParserTests :: TestTree
configParserTests = testGroup "Config Parser Test"
[ testItemParser
, testCommentParser
, testConfigItemFolder
, testColorConfigToColor
, testIntensityConfigToIntensity
, testStringConfigToStringList
]
testItemParser :: TestTree
testItemParser = testGroup "#itemParser"
[ testCase "properly formed config item" $
utilConfigItemParser itemParser "some_test_key=some Complex ⚡ value"
@?= Item "some_test_key" "some Complex ⚡ value"
, testCase "dash characters are not allowed in keys" $
utilConfigItemParser itemParser "some-key=dash"
@?= ErrorLine
, testCase "num characters are not allowed in keys" $
utilConfigItemParser itemParser "some123=dash"
@?= ErrorLine
, testCase "empty keys are not allowed" $
utilConfigItemParser itemParser "=dash"
@?= ErrorLine
, testCase "Comment should not work" $
utilConfigItemParser itemParser "#some comment"
@?= ErrorLine
]
testCommentParser :: TestTree
testCommentParser = testGroup "#commentParser"
[ testCase "proper comment" $
utilConfigItemParser commentParser "#some comment\n"
@?= Comment
, testCase "not a comment if start with a space" $
utilConfigItemParser commentParser " #some non comment\n"
@?= ErrorLine
]
testConfigItemFolder :: TestTree
testConfigItemFolder = testGroup "#configItemFolder"
[ testCase "Key: show_part_repo_indicator" $
expectValue False $
toBeInField confShowPartRepoIndicator $
forConfigItemKey "show_part_repo_indicator" $
withValue "False"
, testCase "Key: show_part_merge_branch_commits_diff" $
expectValue False $
toBeInField confShowPartMergeBranchCommitsDiff $
forConfigItemKey "show_part_merge_branch_commits_diff" $
withValue "False"
, testCase "Key: show_part_local_branch" $
expectValue False $
toBeInField confShowPartLocalBranch $
forConfigItemKey "show_part_local_branch" $
withValue "False"
, testCase "Key: show_part_commits_to_origin" $
expectValue False $
toBeInField confShowPartCommitsToOrigin $
forConfigItemKey "show_part_commits_to_origin" $
withValue "False"
, testCase "Key: show_part_local_changes_state" $
expectValue False $
toBeInField confShowPartLocalChangesState $
forConfigItemKey "show_part_local_changes_state" $
withValue "False"
, testCase "Key: show_part_stashes" $
expectValue False $
toBeInField confShowPartStashes $
forConfigItemKey "show_part_stashes" $
withValue "False"
, testCase "Comment should have no impact on the config" $
configItemsFolder defaultConfig (Comment)
@?= defaultConfig
, testCase "ErrorLines should have no impact on the config" $
configItemsFolder defaultConfig (ErrorLine)
@?= defaultConfig
, testCase "Key: git_repo_indicator" $
expectValue "foo" $
toBeInField confRepoIndicator $
forConfigItemKey "git_repo_indicator" $
withValue "foo"
, testCase "Key: no_tracked_upstream_text" $
expectValue "foo" $
toBeInField confNoTrackedUpstreamString $
forConfigItemKey "no_tracked_upstream_text" $
withValue "foo"
, testCase "Key: no_tracked_upstream_text_color" $
expectValue Green $
toBeInField confNoTrackedUpstreamStringColor $
forConfigItemKey "no_tracked_upstream_text_color" $
withValue "Green"
, testCase "Key: no_tracked_upstream_text_intensity" $
expectValue Dull $
toBeInField confNoTrackedUpstreamStringIntensity $
forConfigItemKey "no_tracked_upstream_text_intensity" $
withValue "Dull"
, testCase "Key: no_tracked_upstream_indicator" $
expectValue "foo" $
toBeInField confNoTrackedUpstreamIndicator $
forConfigItemKey "no_tracked_upstream_indicator" $
withValue "foo"
, testCase "Key: no_tracked_upstream_indicator_color" $
expectValue Black $
toBeInField confNoTrackedUpstreamIndicatorColor $
forConfigItemKey "no_tracked_upstream_indicator_color" $
withValue "Black"
, testCase "Key: no_tracked_upstream_indicator_color - invalid color" $
expectValue NoColor $
toBeInField confNoTrackedUpstreamIndicatorColor $
forConfigItemKey "no_tracked_upstream_indicator_color" $
withValue "FOO"
, testCase "Key: no_tracked_upstream_indicator_intensity" $
expectValue Dull $
toBeInField confNoTrackedUpstreamIndicatorIntensity $
forConfigItemKey "no_tracked_upstream_indicator_intensity" $
withValue "Dull"
, testCase "Key: no_tracked_upstream_indicator_intensity - invalid intensity" $
expectValue Vivid $
toBeInField confNoTrackedUpstreamIndicatorIntensity $
forConfigItemKey "no_tracked_upstream_indicator_intensity" $
withValue "FOO"
, testCase "Key: merge_branch_commits_indicator" $
expectValue "FOO" $
toBeInField confMergeBranchCommitsIndicator $
forConfigItemKey "merge_branch_commits_indicator" $
withValue "FOO"
, testCase "Key: merge_branch_commits_pull_prefix" $
expectValue "FOO" $
toBeInField confMergeBranchCommitsOnlyPull $
forConfigItemKey "merge_branch_commits_pull_prefix" $
withValue "FOO"
, testCase "Key: merge_branch_commits_push_prefix" $
expectValue "FOO" $
toBeInField confMergeBranchCommitsOnlyPush $
forConfigItemKey "merge_branch_commits_push_prefix" $
withValue "FOO"
, testCase "Key: merge_branch_commits_push_pull_infix" $
expectValue "FOO" $
toBeInField confMergeBranchCommitsBothPullPush $
forConfigItemKey "merge_branch_commits_push_pull_infix" $
withValue "FOO"
, testCase "Key: merge_branch_ignore_branches" $
expectValue ["gh-pages", "FOO"] $
toBeInField confMergeBranchIgnoreBranches $
forConfigItemKey "merge_branch_ignore_branches" $
withValue "gh-pages, FOO"
, testCase "Key: local_branch_prefix" $
expectValue "FOO" $
toBeInField confLocalBranchNamePrefix $
forConfigItemKey "local_branch_prefix" $
withValue "FOO"
, testCase "Key: local_branch_suffix" $
expectValue "FOO" $
toBeInField confLocalBranchNameSuffix $
forConfigItemKey "local_branch_suffix" $
withValue "FOO"
, testCase "Key: local_branch_color" $
expectValue Cyan $
toBeInField confLocalBranchColor $
forConfigItemKey "local_branch_color" $
withValue "Cyan"
, testCase "Key: local_branch_intensity" $
expectValue Dull $
toBeInField confLocalBranchIntensity $
forConfigItemKey "local_branch_intensity" $
withValue "Dull"
, testCase "Key: local_detached_prefix" $
expectValue "FOO" $
toBeInField confLocalDetachedPrefix $
forConfigItemKey "local_detached_prefix" $
withValue "FOO"
, testCase "Key: local_detached_color" $
expectValue Cyan $
toBeInField confLocalDetachedColor $
forConfigItemKey "local_detached_color" $
withValue "Cyan"
, testCase "Key: local_detached_intensity" $
expectValue Dull $
toBeInField confLocalDetachedIntensity $
forConfigItemKey "local_detached_intensity" $
withValue "Dull"
, testCase "Key: local_commits_push_suffix" $
expectValue "FOO" $
toBeInField confLocalCommitsPushSuffix $
forConfigItemKey "local_commits_push_suffix" $
withValue "FOO"
, testCase "Key: local_commits_push_suffix_color" $
expectValue Cyan $
toBeInField confLocalCommitsPushSuffixColor $
forConfigItemKey "local_commits_push_suffix_color" $
withValue "Cyan"
, testCase "Key: local_commits_push_suffix_intensity" $
expectValue Dull $
toBeInField confLocalCommitsPushSuffixIntensity $
forConfigItemKey "local_commits_push_suffix_intensity" $
withValue "Dull"
, testCase "Key: local_commits_pull_suffix" $
expectValue "FOO" $
toBeInField confLocalCommitsPullSuffix $
forConfigItemKey "local_commits_pull_suffix" $
withValue "FOO"
, testCase "Key: local_commits_pull_suffix_color" $
expectValue Cyan $
toBeInField confLocalCommitsPullSuffixColor $
forConfigItemKey "local_commits_pull_suffix_color" $
withValue "Cyan"
, testCase "Key: local_commits_pull_suffix_intensity" $
expectValue Dull $
toBeInField confLocalCommitsPullSuffixIntensity $
forConfigItemKey "local_commits_pull_suffix_intensity" $
withValue "Dull"
, testCase "Key: local_commits_push_pull_infix" $
expectValue "FOO" $
toBeInField confLocalCommitsPushPullInfix $
forConfigItemKey "local_commits_push_pull_infix" $
withValue "FOO"
, testCase "Key: local_commits_push_pull_infix_color" $
expectValue Cyan $
toBeInField confLocalCommitsPushPullInfixColor $
forConfigItemKey "local_commits_push_pull_infix_color" $
withValue "Cyan"
, testCase "Key: local_commits_push_pull_infix_intensity" $
expectValue Dull $
toBeInField confLocalCommitsPushPullInfixIntensity $
forConfigItemKey "local_commits_push_pull_infix_intensity" $
withValue "Dull"
, testCase "Key: change_index_add_suffix" $
expectValue "FOO" $
toBeInField confChangeIndexAddSuffix $
forConfigItemKey "change_index_add_suffix" $
withValue "FOO"
, testCase "Key: change_index_add_suffix_color" $
expectValue Cyan $
toBeInField confChangeIndexAddSuffixColor $
forConfigItemKey "change_index_add_suffix_color" $
withValue "Cyan"
, testCase "Key: change_index_add_suffix_intensity" $
expectValue Dull $
toBeInField confChangeIndexAddSuffixIntensity $
forConfigItemKey "change_index_add_suffix_intensity" $
withValue "Dull"
, testCase "Key: change_index_mod_suffix" $
expectValue "FOO" $
toBeInField confChangeIndexModSuffix $
forConfigItemKey "change_index_mod_suffix" $
withValue "FOO"
, testCase "Key: change_index_mod_suffix_color" $
expectValue Cyan $
toBeInField confChangeIndexModSuffixColor $
forConfigItemKey "change_index_mod_suffix_color" $
withValue "Cyan"
, testCase "Key: change_index_mod_suffix_intensity" $
expectValue Dull $
toBeInField confChangeIndexModSuffixIntensity $
forConfigItemKey "change_index_mod_suffix_intensity" $
withValue "Dull"
, testCase "Key: change_index_del_suffix" $
expectValue "FOO" $
toBeInField confChangeIndexDelSuffix $
forConfigItemKey "change_index_del_suffix" $
withValue "FOO"
, testCase "Key: change_index_del_suffix_color" $
expectValue Cyan $
toBeInField confChangeIndexDelSuffixColor $
forConfigItemKey "change_index_del_suffix_color" $
withValue "Cyan"
, testCase "Key: change_index_del_suffix_intensity" $
expectValue Dull $
toBeInField confChangeIndexDelSuffixIntensity $
forConfigItemKey "change_index_del_suffix_intensity" $
withValue "Dull"
, testCase "Key: change_local_add_suffix" $
expectValue "FOO" $
toBeInField confChangeLocalAddSuffix $
forConfigItemKey "change_local_add_suffix" $
withValue "FOO"
, testCase "Key: change_local_add_suffix_color" $
expectValue Cyan $
toBeInField confChangeLocalAddSuffixColor $
forConfigItemKey "change_local_add_suffix_color" $
withValue "Cyan"
, testCase "Key: change_local_add_suffix_intensity" $
expectValue Dull $
toBeInField confChangeLocalAddSuffixIntensity $
forConfigItemKey "change_local_add_suffix_intensity" $
withValue "Dull"
, testCase "Key: change_local_mod_suffix" $
expectValue "FOO" $
toBeInField confChangeLocalModSuffix $
forConfigItemKey "change_local_mod_suffix" $
withValue "FOO"
, testCase "Key: change_local_mod_suffix_color" $
expectValue Cyan $
toBeInField confChangeLocalModSuffixColor $
forConfigItemKey "change_local_mod_suffix_color" $
withValue "Cyan"
, testCase "Key: change_local_mod_suffix_intensity" $
expectValue Dull $
toBeInField confChangeLocalModSuffixIntensity $
forConfigItemKey "change_local_mod_suffix_intensity" $
withValue "Dull"
, testCase "Key: change_local_del_suffix" $
expectValue "FOO" $
toBeInField confChangeLocalDelSuffix $
forConfigItemKey "change_local_del_suffix" $
withValue "FOO"
, testCase "Key: change_local_del_suffix_color" $
expectValue Cyan $
toBeInField confChangeLocalDelSuffixColor $
forConfigItemKey "change_local_del_suffix_color" $
withValue "Cyan"
, testCase "Key: change_local_del_suffix_intensity" $
expectValue Dull $
toBeInField confChangeLocalDelSuffixIntensity $
forConfigItemKey "change_local_del_suffix_intensity" $
withValue "Dull"
, testCase "Key: change_renamed_suffix" $
expectValue "FOO" $
toBeInField confChangeRenamedSuffix $
forConfigItemKey "change_renamed_suffix" $
withValue "FOO"
, testCase "Key: change_renamed_suffix_color" $
expectValue Cyan $
toBeInField confChangeRenamedSuffixColor $
forConfigItemKey "change_renamed_suffix_color" $
withValue "Cyan"
, testCase "Key: change_renamed_suffix_intensity" $
expectValue Dull $
toBeInField confChangeRenamedSuffixIntensity $
forConfigItemKey "change_renamed_suffix_intensity" $
withValue "Dull"
, testCase "Key: change_conflicted_suffix" $
expectValue "FOO" $
toBeInField confChangeConflictedSuffix $
forConfigItemKey "change_conflicted_suffix" $
withValue "FOO"
, testCase "Key: change_conflicted_suffix_color" $
expectValue Cyan $
toBeInField confChangeConflictedSuffixColor $
forConfigItemKey "change_conflicted_suffix_color" $
withValue "Cyan"
, testCase "Key: change_conflicted_suffix_intensity" $
expectValue Dull $
toBeInField confChangeConflictedSuffixIntensity $
forConfigItemKey "change_conflicted_suffix_intensity" $
withValue "Dull"
, testCase "Key: stash_suffix" $
expectValue "FOO" $
toBeInField confStashSuffix $
forConfigItemKey "stash_suffix" $
withValue "FOO"
, testCase "Key: stash_suffix_color" $
expectValue Cyan $
toBeInField confStashSuffixColor $
forConfigItemKey "stash_suffix_color" $
withValue "Cyan"
, testCase "Key: stash_suffix_intensity" $
expectValue Dull $
toBeInField confStashSuffixIntensity $
forConfigItemKey "stash_suffix_intensity" $
withValue "Dull"
]
expectValue :: (Eq a, Show a) => a -> a -> Assertion
expectValue expected actual = actual @?= expected
toBeInField :: (Config -> a) -> Config -> a
toBeInField accessor config = accessor config
forConfigItemKey :: String -> String -> Config
forConfigItemKey key value =
configItemsFolder defaultConfig (Item key value)
withValue :: a -> a
withValue = id
utilConfigItemParser :: Parser ConfigItem -> String -> ConfigItem
utilConfigItemParser parser str =
either
(const ErrorLine)
id
(parse parser "" str)
testIntensityConfigToIntensity :: TestTree
testIntensityConfigToIntensity = testGroup "#intensityConfigToIntensity"
[ testCase "valid intensity - return it" $
intensityConfigToIntensity "Dull" @?= Dull
, testCase "invalid intensity - default to Vivid" $
intensityConfigToIntensity "Foo" @?= Vivid
]
testColorConfigToColor :: TestTree
testColorConfigToColor = testGroup "#colorConfigToColor"
[ testCase "valid color - return it" $
colorConfigToColor "Cyan" @?= Cyan
, testCase "invalid color - default to Blue" $
colorConfigToColor "Foo" @?= NoColor
]
testStringConfigToStringList :: TestTree
testStringConfigToStringList = testGroup "#stringConfigToStringList"
[ testCase "valid string list, comma separated, no spaces" $
stringConfigToStringList "foo,bar" @?= ["foo", "bar"]
, testCase "valid string list, comma separated, spaces" $
stringConfigToStringList "foo, bar , baz " @?= ["foo", "bar", "baz"]
, testCase "valid string list, comma separated, finish with comma" $
stringConfigToStringList "foo,bar, " @?= ["foo", "bar"]
]