mirror of https://github.com/chriskiehl/Gooey.git
2 changed files with 47 additions and 166 deletions
Unified View
Diff Options
@ -1,168 +1,49 @@ |
|||||
|
import json |
||||
|
import sys |
||||
|
import time |
||||
import unittest |
import unittest |
||||
from gooey.python_bindings.argparse_to_json import * |
|
||||
|
from argparse import ArgumentParser |
||||
|
from concurrent import futures |
||||
|
from os import path |
||||
|
import wx |
||||
|
|
||||
|
from gooey.gui import application |
||||
|
from gooey.gui.lang.i18n import _ |
||||
|
from gooey.gui.util.freeze import getResourcePath |
||||
|
from gooey.gui.util.quoting import quote |
||||
|
from gooey.gui.components.widgets import Dropdown |
||||
|
from python_bindings import argparse_to_json |
||||
|
import os |
||||
|
from pprint import pprint |
||||
|
|
||||
|
from util.functional import getin |
||||
|
|
||||
|
|
||||
|
class TestArgparse(unittest.TestCase): |
||||
|
""" |
||||
|
TODO: |
||||
|
""" |
||||
|
|
||||
|
def test_json_iterable_conversion(self): |
||||
|
""" |
||||
|
Issue #312 - tuples weren't being coerced to list during argparse |
||||
|
conversion causing downstream issues when concatenating |
||||
|
""" |
||||
|
# our original functionality accepted only lists as the choices arg |
||||
|
parser = ArgumentParser() |
||||
|
parser.add_argument("-foo", choices=[1, 2, 3]) |
||||
|
result = argparse_to_json.action_to_json(parser._actions[-1], "Dropdown", {}) |
||||
|
|
||||
|
choices = result['data']['choices'] |
||||
|
self.assertTrue(isinstance(choices, list)) |
||||
|
self.assertEqual(choices, [1, 2, 3]) |
||||
|
|
||||
|
# Now we allow tuples as well. |
||||
|
parser = ArgumentParser() |
||||
|
parser.add_argument("-foo", choices=(1, 2, 3)) |
||||
|
result = argparse_to_json.action_to_json(parser._actions[-1], "Dropdown", {}) |
||||
|
|
||||
|
choices = result['data']['choices'] |
||||
|
self.assertTrue(isinstance(choices, list)) |
||||
|
self.assertEqual(choices, [1, 2, 3]) |
||||
|
|
||||
# I fixed all the tests! |
|
||||
# |
|
||||
# def test_parser_converts_to_correct_type(empty_parser, complete_parser, subparser): |
|
||||
# assert convert(subparser)['layout_type'] == 'column' |
|
||||
# assert convert(empty_parser)['layout_type'] == 'standard' |
|
||||
# assert convert(complete_parser)['layout_type'] == 'standard' |
|
||||
# |
|
||||
# |
|
||||
# def test_parser_without_subparser_recieves_root_entry(complete_parser): |
|
||||
# ''' |
|
||||
# Non-subparser setups should receive a default root key called 'primary' |
|
||||
# ''' |
|
||||
# result = convert(complete_parser) |
|
||||
# assert 'primary' in result['widgets'] |
|
||||
# |
|
||||
# |
|
||||
# def test_grouping_structure(complete_parser): |
|
||||
# ''' |
|
||||
# The output of the 'widgets' branch is now wrapped in another |
|
||||
# layer to facilitate interop with the subparser structure |
|
||||
# |
|
||||
# old: widgets: [] |
|
||||
# new: widgets: {'a': {}, 'b': {}, ..} |
|
||||
# ''' |
|
||||
# result = convert(complete_parser) |
|
||||
# groupings = result['widgets'] |
|
||||
# # should now be a dict rather than a list |
|
||||
# assert isinstance(groupings, dict) |
|
||||
# # make sure our expected root keys are there |
|
||||
# for name, group in groupings.items(): |
|
||||
# assert 'command' in group |
|
||||
# assert 'contents' in group |
|
||||
# # contents should be the old list of widget info |
|
||||
# assert isinstance(group['contents'], list) |
|
||||
# |
|
||||
# |
|
||||
# def test_subparser_uses_prog_value_if_available(): |
|
||||
# parser = argparse.ArgumentParser(description='qidev') |
|
||||
# parser.add_argument('--verbose', help='be verbose', dest='verbose', |
|
||||
# action='store_true', default=False) |
|
||||
# subs = parser.add_subparsers(help='commands', dest='command') |
|
||||
# # NO prog definition for the sub parser |
|
||||
# subs.add_parser('config', help='configure defaults for qidev') |
|
||||
# |
|
||||
# # The stock parser name supplied above (e.g. config) is |
|
||||
# # now in the converted doc |
|
||||
# result = convert(parser) |
|
||||
# assert 'config' in result['widgets'] |
|
||||
# |
|
||||
# # new subparser |
|
||||
# parser = argparse.ArgumentParser(description='qidev') |
|
||||
# parser.add_argument('--verbose', help='be verbose', dest='verbose', |
|
||||
# action='store_true', default=False) |
|
||||
# subs = parser.add_subparsers(help='commands', dest='command') |
|
||||
# # prog definition for the sub parser IS supplied |
|
||||
# subs.add_parser('config', prog="My Config", help='configure defaults for qidev') |
|
||||
# |
|
||||
# # Should've picked up the prog value |
|
||||
# result = convert(parser) |
|
||||
# assert 'My Config' in result['widgets'] |
|
||||
# |
|
||||
# |
|
||||
# def test_convert_std_parser(complete_parser): |
|
||||
# result = convert(complete_parser) |
|
||||
# # grab the first entry from the dict |
|
||||
# entry = result['widgets']['primary']['contents'][0] |
|
||||
# print(entry) |
|
||||
# assert 'type' in entry |
|
||||
# assert 'required' in entry |
|
||||
# assert 'data' in entry |
|
||||
# |
|
||||
# |
|
||||
# def test_convert_sub_parser(subparser): |
|
||||
# result = convert(subparser) |
|
||||
# assert result['layout_type'] == 'column' |
|
||||
# assert result['widgets'] |
|
||||
# assert isinstance(result['widgets'], dict) |
|
||||
# assert len(result['widgets']) == 3 |
|
||||
# |
|
||||
# |
|
||||
# def test_has_required(empty_parser, complete_parser, subparser): |
|
||||
# assert has_required(complete_parser._actions) |
|
||||
# assert not has_required(empty_parser._actions) |
|
||||
# assert not has_required(subparser._actions) |
|
||||
# |
|
||||
# |
|
||||
# def test_has_subparsers(subparser, complete_parser): |
|
||||
# assert has_subparsers(subparser._actions) |
|
||||
# assert not has_subparsers(complete_parser._actions) |
|
||||
# |
|
||||
# |
|
||||
# def test_is_required(complete_parser): |
|
||||
# required = list(filter(is_required, complete_parser._actions)) |
|
||||
# assert len(required) == 4 |
|
||||
# for action in required: |
|
||||
# print(action.dest.startswith('req')) |
|
||||
# |
|
||||
# |
|
||||
# def test_is_optional(complete_parser): |
|
||||
# optional = list(filter(is_optional, complete_parser._actions)) |
|
||||
# assert len(optional) == 10 |
|
||||
# for action in optional: |
|
||||
# assert 'req' not in action.dest |
|
||||
# |
|
||||
# |
|
||||
# def test_is_choice(empty_parser): |
|
||||
# empty_parser.add_argument('--dropdown', choices=[1, 2]) |
|
||||
# assert is_choice(get_action(empty_parser, 'dropdown')) |
|
||||
# |
|
||||
# empty_parser.add_argument('--storetrue', action='store_true') |
|
||||
# assert not is_choice(get_action(empty_parser, 'storetrue')) |
|
||||
# |
|
||||
# # make sure positionals are caught as well (issue #85) |
|
||||
# empty_parser.add_argument('positional', choices=[1, 2]) |
|
||||
# assert is_choice(get_action(empty_parser, 'positional')) |
|
||||
# |
|
||||
# |
|
||||
# def test_is_standard(empty_parser): |
|
||||
# empty_parser.add_argument('--count', action='count') |
|
||||
# assert not is_standard(get_action(empty_parser, 'count')) |
|
||||
# |
|
||||
# empty_parser.add_argument('--store', action='store') |
|
||||
# assert is_standard(get_action(empty_parser, 'store')) |
|
||||
# |
|
||||
# |
|
||||
# def test_is_counter(empty_parser): |
|
||||
# empty_parser.add_argument('--count', action='count') |
|
||||
# assert is_counter(get_action(empty_parser, 'count')) |
|
||||
# |
|
||||
# empty_parser.add_argument('--dropdown', choices=[1, 2]) |
|
||||
# assert not is_counter(get_action(empty_parser, 'dropdown')) |
|
||||
# |
|
||||
# |
|
||||
# def test_mutually(exclusive_group): |
|
||||
# target_arg = find_arg_by_option(exclusive_group, '-i') |
|
||||
# json_result = build_radio_group(exclusive_group) |
|
||||
# |
|
||||
# data = json_result['data'][0] |
|
||||
# assert 'RadioGroup' == json_result['type'] |
|
||||
# assert target_arg.choices == data['choices'] |
|
||||
# assert target_arg.help == data['help'] |
|
||||
# assert target_arg.option_strings == data['commands'] |
|
||||
# assert target_arg.dest == data['display_name'] |
|
||||
# |
|
||||
# |
|
||||
# def test_empty_mutex_group(): |
|
||||
# assert not build_radio_group(None) |
|
||||
# |
|
||||
# |
|
||||
# def test_as_json_invalid_widget(): |
|
||||
# with pytest.raises(UnknownWidgetType): |
|
||||
# action_to_json(None, 'InvalidWidget', None) |
|
||||
# |
|
||||
# |
|
||||
# def get_action(parser, dest): |
|
||||
# for action in parser._actions: |
|
||||
# if action.dest == dest: |
|
||||
# return action |
|
||||
# |
|
||||
# |
|
||||
# def find_arg_by_option(group, option_string): |
|
||||
# for arg in group: |
|
||||
# if option_string in arg.option_strings: |
|
||||
# return arg |
|
Write
Preview
Loading…
Cancel
Save