import unittest from gooey import GooeyParser class TestConstraints(unittest.TestCase): def test_listbox_constraints(self): """ Listbox widgets must be provided a nargs option """ # Trying to create a listbox widget without specifying nargs # throws an error with self.assertRaises(ValueError): parser = GooeyParser() parser.add_argument('one', choices=['one', 'two'], widget='Listbox') # Listbox with an invalid nargs value throws an error with self.assertRaises(ValueError): parser = GooeyParser() parser.add_argument( 'one', choices=['one', 'two'], widget='Listbox', nargs='?') # Listbox with an invalid nargs value throws an error with self.assertRaises(ValueError): parser = GooeyParser() parser.add_argument( 'one', choices=['one', 'two'], widget='Listbox', nargs=3) # valid nargs throw no errors for narg in ['*', '+']: parser = GooeyParser() parser.add_argument( 'one', choices=['one', 'two'], widget='Listbox', nargs=narg) def test_visibility_constraint(self): """ When visible=False in Gooey config, the user MUST supply either a custom validator or a default value. """ # added without issue parser = GooeyParser() parser.add_argument('one') # still fine parser = GooeyParser() parser.add_argument('one', gooey_options={'visible': True}) # trying to hide an input without a default or custom validator # results in an error with self.assertRaises(ValueError): parser = GooeyParser() parser.add_argument('one', gooey_options={'visible': False}) # explicit default=None; still error with self.assertRaises(ValueError): parser = GooeyParser() parser.add_argument( 'one', default=None, gooey_options={'visible': False}) # default = empty string. Still error with self.assertRaises(ValueError): parser = GooeyParser() parser.add_argument( 'one', default='', gooey_options={'visible': False}) # default = valid string. No Error parser = GooeyParser() parser.add_argument( 'one', default='Hello', gooey_options={'visible': False}) # No default, but custom validator: Success parser = GooeyParser() parser.add_argument( 'one', gooey_options={ 'visible': False, 'validator': {'test': 'true'} }) # default AND validator, still fine parser = GooeyParser() parser.add_argument( 'one', default='Hai', gooey_options={ 'visible': False, 'validator': {'test': 'true'} })