3 # Copyright (c) 2010, Google Inc.
6 # Redistribution and use in source and binary forms, with or without
7 # modification, are permitted provided that the following conditions are
10 # * Redistributions of source code must retain the above copyright
11 # notice, this list of conditions and the following disclaimer.
12 # * Redistributions in binary form must reproduce the above
13 # copyright notice, this list of conditions and the following disclaimer
14 # in the documentation and/or other materials provided with the
16 # * Neither the name of Google Inc. nor the names of its
17 # contributors may be used to endorse or promote products derived from
18 # this software without specific prior written permission.
20 # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21 # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22 # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
23 # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
24 # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
25 # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
26 # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
27 # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32 """Testing that flags validators framework does work.
34 This file tests that each flag validator called when it should be, and that
35 failed validator will throw an exception, etc.
38 __author__
= 'olexiy@google.com (Olexiy Oryeshko)'
40 import gflags_googletest
as googletest
42 import gflags_validators
45 class SimpleValidatorTest(googletest
.TestCase
):
46 """Testing gflags.RegisterValidator() method."""
49 super(SimpleValidatorTest
, self
).setUp()
50 self
.flag_values
= gflags
.FlagValues()
53 def testSuccess(self
):
55 self
.call_args
.append(x
)
57 gflags
.DEFINE_integer('test_flag', None, 'Usual integer flag',
58 flag_values
=self
.flag_values
)
59 gflags
.RegisterValidator('test_flag',
61 message
='Errors happen',
62 flag_values
=self
.flag_values
)
65 self
.flag_values(argv
)
66 self
.assertEquals(None, self
.flag_values
.test_flag
)
67 self
.flag_values
.test_flag
= 2
68 self
.assertEquals(2, self
.flag_values
.test_flag
)
69 self
.assertEquals([None, 2], self
.call_args
)
71 def testDefaultValueNotUsedSuccess(self
):
73 self
.call_args
.append(x
)
75 gflags
.DEFINE_integer('test_flag', None, 'Usual integer flag',
76 flag_values
=self
.flag_values
)
77 gflags
.RegisterValidator('test_flag',
79 message
='Errors happen',
80 flag_values
=self
.flag_values
)
82 argv
= ('./program', '--test_flag=1')
83 self
.flag_values(argv
)
84 self
.assertEquals(1, self
.flag_values
.test_flag
)
85 self
.assertEquals([1], self
.call_args
)
87 def testValidatorNotCalledWhenOtherFlagIsChanged(self
):
89 self
.call_args
.append(x
)
91 gflags
.DEFINE_integer('test_flag', 1, 'Usual integer flag',
92 flag_values
=self
.flag_values
)
93 gflags
.DEFINE_integer('other_flag', 2, 'Other integer flag',
94 flag_values
=self
.flag_values
)
95 gflags
.RegisterValidator('test_flag',
97 message
='Errors happen',
98 flag_values
=self
.flag_values
)
101 self
.flag_values(argv
)
102 self
.assertEquals(1, self
.flag_values
.test_flag
)
103 self
.flag_values
.other_flag
= 3
104 self
.assertEquals([1], self
.call_args
)
106 def testExceptionRaisedIfCheckerFails(self
):
108 self
.call_args
.append(x
)
110 gflags
.DEFINE_integer('test_flag', None, 'Usual integer flag',
111 flag_values
=self
.flag_values
)
112 gflags
.RegisterValidator('test_flag',
114 message
='Errors happen',
115 flag_values
=self
.flag_values
)
117 argv
= ('./program', '--test_flag=1')
118 self
.flag_values(argv
)
120 self
.flag_values
.test_flag
= 2
121 raise AssertionError('gflags.IllegalFlagValue expected')
122 except gflags
.IllegalFlagValue
, e
:
123 self
.assertEquals('flag --test_flag=2: Errors happen', str(e
))
124 self
.assertEquals([1, 2], self
.call_args
)
126 def testExceptionRaisedIfCheckerRaisesException(self
):
128 self
.call_args
.append(x
)
131 raise gflags_validators
.Error('Specific message')
132 gflags
.DEFINE_integer('test_flag', None, 'Usual integer flag',
133 flag_values
=self
.flag_values
)
134 gflags
.RegisterValidator('test_flag',
136 message
='Errors happen',
137 flag_values
=self
.flag_values
)
139 argv
= ('./program', '--test_flag=1')
140 self
.flag_values(argv
)
142 self
.flag_values
.test_flag
= 2
143 raise AssertionError('gflags.IllegalFlagValue expected')
144 except gflags
.IllegalFlagValue
, e
:
145 self
.assertEquals('flag --test_flag=2: Specific message', str(e
))
146 self
.assertEquals([1, 2], self
.call_args
)
148 def testErrorMessageWhenCheckerReturnsFalseOnStart(self
):
150 self
.call_args
.append(x
)
152 gflags
.DEFINE_integer('test_flag', None, 'Usual integer flag',
153 flag_values
=self
.flag_values
)
154 gflags
.RegisterValidator('test_flag',
156 message
='Errors happen',
157 flag_values
=self
.flag_values
)
159 argv
= ('./program', '--test_flag=1')
161 self
.flag_values(argv
)
162 raise AssertionError('gflags.IllegalFlagValue expected')
163 except gflags
.IllegalFlagValue
, e
:
164 self
.assertEquals('flag --test_flag=1: Errors happen', str(e
))
165 self
.assertEquals([1], self
.call_args
)
167 def testErrorMessageWhenCheckerRaisesExceptionOnStart(self
):
169 self
.call_args
.append(x
)
170 raise gflags_validators
.Error('Specific message')
171 gflags
.DEFINE_integer('test_flag', None, 'Usual integer flag',
172 flag_values
=self
.flag_values
)
173 gflags
.RegisterValidator('test_flag',
175 message
='Errors happen',
176 flag_values
=self
.flag_values
)
178 argv
= ('./program', '--test_flag=1')
180 self
.flag_values(argv
)
181 raise AssertionError('IllegalFlagValue expected')
182 except gflags
.IllegalFlagValue
, e
:
183 self
.assertEquals('flag --test_flag=1: Specific message', str(e
))
184 self
.assertEquals([1], self
.call_args
)
186 def testValidatorsCheckedInOrder(self
):
189 self
.calls
.append('Required')
193 self
.calls
.append('Even')
197 self
._DefineFlagAndValidators
(Required
, Even
)
198 self
.assertEquals(['Required', 'Even'], self
.calls
)
201 self
._DefineFlagAndValidators
(Even
, Required
)
202 self
.assertEquals(['Even', 'Required'], self
.calls
)
204 def _DefineFlagAndValidators(self
, first_validator
, second_validator
):
205 local_flags
= gflags
.FlagValues()
206 gflags
.DEFINE_integer('test_flag', 2, 'test flag', flag_values
=local_flags
)
207 gflags
.RegisterValidator('test_flag',
210 flag_values
=local_flags
)
211 gflags
.RegisterValidator('test_flag',
214 flag_values
=local_flags
)
219 if __name__
== '__main__':