aboutsummaryrefslogtreecommitdiff
path: root/source/1.0/src/shflags_test_public.sh
blob: 5bdceb04d081ddfdb835ecfc60683ea49eb93dbf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
#! /bin/sh
# vim:et:ft=sh:sts=2:sw=2
#
# Copyright 2008 Kate Ward. All Rights Reserved.
# Released under the LGPL (GNU Lesser General Public License)
#
# Author: kate.ward@forestent.com (Kate Ward)
#
# shFlags unit test for the internal functions

# load test helpers
. ./shflags_test_helpers

# set shwordsplit for zsh
[ -n "${ZSH_VERSION:-}" ] && setopt shwordsplit

#------------------------------------------------------------------------------
# suite tests
#

testHelp()
{
  #
  # test short -h option
  #

  rslt=`FLAGS -h 2>&1`
  rtrn=$?
  assertFalse \
      'short request for help should have returned non-zero exit code.' \
      ${rtrn}
  echo "${rslt}" |grep -- 'show this help' >/dev/null
  rtrn=$?
  assertTrue \
      'short request for help should have produced some help output.' \
      ${rtrn}
  [ ${rtrn} -ne ${FLAGS_TRUE} ] && echo "${rslt}" >&2

  # test proper output when FLAGS_HELP set
  rslt=`FLAGS_HELP='this is a test'; FLAGS -h 2>&1`
  echo "${rslt}" |grep -- 'this is a test' >/dev/null
  rtrn=$?
  assertTrue \
      'setting FLAGS_HELP did not produce expected result' \
      ${rtrn}
  [ ${rtrn} -ne ${FLAGS_TRUE} ] && echo "${rslt}" >&2

  # test that "'" chars work in help string
  DEFINE_boolean b false "help string containing a ' char" b
  rslt=`FLAGS -h 2>&1`
  echo "${rslt}" |grep -- "help string containing a ' char" >/dev/null
  rtrn=$?
  assertTrue \
      "help strings containing apostrophes don't work" \
      ${rtrn}
  [ ${rtrn} -ne ${FLAGS_TRUE} ] && echo "${rslt}" >&2

  #
  # test long --help option
  #

  flags_getoptIsStd && startSkipping

  rslt=`FLAGS --help 2>&1`
  rtrn=$?
  assertFalse \
      'long request for help should have returned non-zero exit code.' \
      ${rtrn}
  echo "${rslt}" |grep -- 'show this help' >/dev/null
  assertTrue \
      'long request for help should have produced some help output.' \
      $?
}

testStandardHelpOutput()
{
  flags_getoptIsEnh && startSkipping

  DEFINE_boolean test_bool false 'test boolean' b
  DEFINE_string test_str '' 'test string' s
  help='USAGE: standard [flags] args'

  cat >"${expectedF}" <<EOF
USAGE: standard [flags] args
flags:
  -b  test boolean
  -s  test string
  -h  show this help
EOF
  ( FLAGS_HELP=${help}; FLAGS -h >"${stdoutF}" 2>"${stderrF}" )
  diff "${expectedF}" "${stderrF}" >/dev/null
  rtrn=$?
  assertTrue 'unexpected help output' ${rtrn}
  [ ${__shunit_skip} -eq ${SHUNIT_FALSE} \
    -a ${rtrn} -ne ${FLAGS_TRUE} ] \
      && cat "${stderrF}"
}

testEnhancedHelpOutput()
{
  flags_getoptIsEnh || startSkipping

  DEFINE_boolean test_bool false 'test boolean' b
  DEFINE_string test_str '' 'test string' s
  help='USAGE: standard [flags] args'

  cat >"${expectedF}" <<EOF
USAGE: enhanced [flags] args
flags:
  -b,--[no]test_bool:  test boolean
  -s,--test_str:  test string
  -h,--[no]help:  show this help
EOF
  ( FLAGS_HELP=${help}; FLAGS -h >"${stdoutF}" 2>"${stderrF}" )
  diff "${expectedF}" "${stderrF}" >/dev/null
  rtrn=$?
  assertTrue 'short flag help; unexpected help output' ${rtrn}
  [ ${__shunit_skip} -eq ${SHUNIT_FALSE} \
    -a ${rtrn} -ne ${FLAGS_TRUE} ] \
      && cat "${stderrF}"

  # long option testing
  flags_getoptIsStd && startSkipping

  cat >"${expectedF}" <<EOF
USAGE: enhanced [flags] args
flags:
  -b,--[no]test_bool:  test boolean
  -s,--test_str:  test string
  -h,--[no]help:  show this help
EOF
  ( FLAGS_HELP=${help}; FLAGS --help >"${stdoutF}" 2>"${stderrF}" )
  diff "${expectedF}" "${stderrF}" >/dev/null
  rtrn=$?
  assertTrue 'long flag help; unexpected help output' ${rtrn}
  [ ${__shunit_skip} -eq ${SHUNIT_FALSE} \
    -a ${rtrn} -ne ${FLAGS_TRUE} ] \
      && cat "${stderrF}"
}

#------------------------------------------------------------------------------
# suite functions
#

oneTimeSetUp()
{
  # load flags
  [ -n "${ZSH_VERSION:-}" ] && FLAGS_PARENT=$0
  . ${TH_SHFLAGS}

  tmpDir="${__shunit_tmpDir}/output"
  mkdir "${tmpDir}"
  stdoutF="${tmpDir}/stdout"
  stderrF="${tmpDir}/stderr"
  expectedF="${tmpDir}/expected"
}

setUp()
{
  flags_reset
}

# load and run shUnit2
[ -n "${ZSH_VERSION:-}" ] && SHUNIT_PARENT=$0
. ${TH_SHUNIT}