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.
92 lines
4.2 KiB
92 lines
4.2 KiB
import unittest
|
|
from argparse import ArgumentParser
|
|
from unittest.mock import patch
|
|
|
|
from gooey import GooeyParser
|
|
from gooey.tests.harness import instrumentGooey
|
|
from gooey.tests import *
|
|
|
|
class TestGooeyDropdown(unittest.TestCase):
|
|
|
|
def makeParser(self, **kwargs):
|
|
parser = GooeyParser(description='description')
|
|
parser.add_argument('--dropdown', **kwargs)
|
|
return parser
|
|
|
|
|
|
# @patch("gui.containers.application.seeder.fetchDynamicProperties")
|
|
# def test_dropdown_behavior(self, mock):
|
|
# """
|
|
# Testing that:
|
|
# - default values are used as the initial selection (when present)
|
|
# - Initial selection defaults to placeholder when no defaults supplied
|
|
# - selection is preserved (when possible) across dynamic updates
|
|
# """
|
|
# testcases = [
|
|
# # tuples of [choices, default, initalSelection, dynamicUpdate, expectedFinalSelection]
|
|
# [['1', '2'], None, 'Select Option', ['1', '2','3'], 'Select Option'],
|
|
# [['1', '2'], '2', '2', ['1', '2','3'], '2'],
|
|
# [['1', '2'], '1', '1', ['1', '2','3'], '1'],
|
|
# # dynamic updates removed our selected value; defaults back to placeholder
|
|
# [['1', '2'], '2', '2', ['1', '3'], 'Select Option'],
|
|
# # TODO: this test case is currently passing wrong data for the dynamic
|
|
# # TODO: update due to a bug where Gooey doesn't apply the same ingestion
|
|
# # TODO: rules for data received dynamically as it does for parsers.
|
|
# # TODO: In short, Gooey should be able to handle a list of bools [True, False]
|
|
# # TODO: from dynamics just like it does in parser land. It doesn't currently
|
|
# # TODO: do this, so I'm manually casting it to strings for now.
|
|
# [[True, False], True, 'True', ['True', 'False'], 'True']
|
|
# ]
|
|
#
|
|
# for choices, default, initalSelection, dynamicUpdate, expectedFinalSelection in testcases:
|
|
# parser = self.makeParser(choices=choices, default=default)
|
|
# with instrumentGooey(parser) as (app, frame):
|
|
# dropdown = frame.configs[0].reifiedWidgets[0]
|
|
# # ensure that default values (when supplied) are selected in the UI
|
|
# self.assertEqual(dropdown.widget.GetValue(), initalSelection)
|
|
# # fire a dynamic update with the mock values
|
|
# mock.return_value = {'--dropdown': dynamicUpdate}
|
|
# frame.fetchExternalUpdates()
|
|
# # the values in the UI now reflect those returned from the update
|
|
# # note: we're appending the ['select option'] bit here as it gets automatically added
|
|
# # in the UI.
|
|
# expectedValues = ['Select Option'] + dynamicUpdate
|
|
# self.assertEqual(dropdown.widget.GetItems(), expectedValues)
|
|
# # and our selection is what we expect
|
|
# self.assertEqual(dropdown.widget.GetValue(), expectedFinalSelection)
|
|
|
|
|
|
def testInitialValue(self):
|
|
cases = [
|
|
# `initial` should supersede `default`
|
|
{'inputs': {'default': 'b',
|
|
'choices': ['a', 'b', 'c'],
|
|
'gooey_options': {'initial_value': 'a'}},
|
|
'expect': 'a'},
|
|
|
|
{'inputs': {'choices': ['a', 'b', 'c'],
|
|
'gooey_options': {'initial_value': 'a'}},
|
|
'expect': 'a'},
|
|
|
|
{'inputs': {'choices': ['a', 'b', 'c'],
|
|
'default': 'b',
|
|
'gooey_options': {}},
|
|
'expect': 'b'},
|
|
|
|
{'inputs': {'choices': ['a', 'b', 'c'],
|
|
'default': 'b'},
|
|
'expect': 'b'},
|
|
|
|
{'inputs': {'choices': ['a', 'b', 'c']},
|
|
'expect': None}
|
|
]
|
|
for case in cases:
|
|
with self.subTest(case):
|
|
parser = self.makeParser(**case['inputs'])
|
|
with instrumentGooey(parser) as (app, frame, gapp):
|
|
widget = gapp.getActiveConfig().reifiedWidgets[0]
|
|
self.assertEqual(widget.getValue()['rawValue'], case['expect'])
|
|
|
|
|
|
if __name__ == '__main__':
|
|
unittest.main()
|