mirror of https://github.com/chriskiehl/Gooey.git
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.
86 lines
3.4 KiB
86 lines
3.4 KiB
import argparse
|
|
import unittest
|
|
|
|
from gooey import GooeyParser
|
|
from gooey.tests import *
|
|
|
|
class TestParentInheritance(unittest.TestCase):
|
|
|
|
def test_parent_arguments_exist_in_child(self):
|
|
"""
|
|
Verifies that the parents parameter is honoured.
|
|
"""
|
|
base_parser = GooeyParser(add_help=False)
|
|
base_parser.add_argument("a_file", widget="FileChooser")
|
|
|
|
parser = GooeyParser(parents=[base_parser])
|
|
parser.add_argument("b_file", widget="DirChooser")
|
|
|
|
found = 0
|
|
for action in parser._actions:
|
|
if action.dest == "a_file":
|
|
found += 1
|
|
elif action.dest == "b_file":
|
|
found += 1
|
|
|
|
self.assertEqual(2, found, "Did not find 2 expected arguments, found " + str(found))
|
|
self.assertEqual(parser.widgets["a_file"], "FileChooser")
|
|
self.assertEqual(parser.widgets["b_file"], "DirChooser")
|
|
|
|
def test_parent_arguments_are_not_overridden(self):
|
|
"""
|
|
Verifies that the same named argument in a parent and child parser is accepted, and only the child
|
|
parser survives.
|
|
"""
|
|
# Verify how vanilla argparse works
|
|
base_parser = argparse.ArgumentParser(add_help=False)
|
|
action1 = base_parser.add_argument("a_file", default="a")
|
|
|
|
parser = argparse.ArgumentParser(parents=[base_parser])
|
|
action2 = parser.add_argument("a_file", default="b")
|
|
|
|
self._verify_duplicate_parameters(action1, action2, parser)
|
|
# So a child can't override a parent - this isn't textbook inheritance
|
|
|
|
# Run the same test on GooeyParser
|
|
base_parser = GooeyParser(add_help=False)
|
|
action1 = base_parser.add_argument("a_file", widget="FileChooser", default="a")
|
|
|
|
parser = GooeyParser(parents=[base_parser])
|
|
action2 = parser.add_argument("a_file", widget="DirChooser", default="b")
|
|
|
|
self._verify_duplicate_parameters(action1, action2, parser)
|
|
self.assertEqual(parser.widgets["a_file"], "FileChooser")
|
|
|
|
def test_duplicates_on_same_parser_are_ignored(self):
|
|
"""
|
|
Verify that adding duplicate named arguments works the same in argparse and Gooey.
|
|
Assuming the behaviour of the "default" parameter is a good match for the "widget" parameter.
|
|
"""
|
|
|
|
# Verify how vanilla argparse works
|
|
parser = argparse.ArgumentParser()
|
|
action1 = parser.add_argument("a_file", default="a")
|
|
action2 = parser.add_argument("a_file", default="b")
|
|
|
|
self._verify_duplicate_parameters(action1, action2, parser)
|
|
|
|
# Run the same test on GooeyParser
|
|
parser = GooeyParser()
|
|
action1 = parser.add_argument("a_file", default="a", widget="FileChooser")
|
|
action2 = parser.add_argument("a_file", default="b", widget="DirChooser")
|
|
|
|
self._verify_duplicate_parameters(action1, action2, parser)
|
|
self.assertEqual(parser.widgets["a_file"], "FileChooser")
|
|
|
|
def _verify_duplicate_parameters(self, action1, action2, parser):
|
|
"""
|
|
Verify two parameters named a_file exist and the default value is "a".
|
|
"""
|
|
found = 0
|
|
for action in parser._actions:
|
|
if action.dest == "a_file":
|
|
found += 1
|
|
self.assertEqual(2, found, "Expected a both actions handling a_file but got " + str(found))
|
|
self.assertEqual(parser.get_default("a_file"), "a")
|
|
self.assertNotEqual(action1, action2)
|