You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

98 lines
3.0 KiB

import unittest
from gooey import GooeyParser
from gooey.tests import *
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'}
})