text: 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'}
              })