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.
89 lines
3.4 KiB
89 lines
3.4 KiB
import argparse
|
|
import os
|
|
import shlex
|
|
import unittest
|
|
|
|
from gooey.gui import formatters
|
|
|
|
|
|
class TestFormatters(unittest.TestCase):
|
|
|
|
|
|
def test_counter_formatter(self):
|
|
"""
|
|
Should return the first option repeated N times
|
|
None if N is unspecified
|
|
|
|
Issue #316 - using long-form argument caused formatter to produce incorrect output
|
|
"""
|
|
expected_outputs = [
|
|
(['-v', '--verbose'], '-v', 1),
|
|
(['-v', '--verbose'], '-v -v', 2),
|
|
(['-v', '--verbose'], '-v -v -v', 3),
|
|
(['-v', '--verbose'], '', 0),
|
|
# ensuring that log-forms are handled correctly
|
|
(['--verbose', '-v'], '--verbose', 1),
|
|
(['--verbose', '-v'], '--verbose --verbose', 2),
|
|
(['--verbose', '-v'], '--verbose --verbose --verbose', 3),
|
|
# single args
|
|
(['-v'], '-v', 1),
|
|
(['-v'], '-v -v', 2),
|
|
(['--verbose'], '--verbose', 1),
|
|
# bad inputs
|
|
(['-v'], None, None),
|
|
(['-v'], None, 'some-garbage'),
|
|
(['-v'], None, 'af3gd'),
|
|
]
|
|
|
|
for commands, expected, vebosity_level in expected_outputs:
|
|
result = formatters.counter({'commands': commands}, vebosity_level)
|
|
self.assertEqual(result, expected)
|
|
# make sure that argparse actually accepts it as valid.
|
|
if result:
|
|
parser = argparse.ArgumentParser()
|
|
parser.add_argument('-v', '--verbose', action='count')
|
|
parser.parse_args(result.split())
|
|
|
|
def test_multifilechooser_formatter(self):
|
|
"""
|
|
Should return files (quoted), separated by spaces if there is more
|
|
than one, preceeded by optional command if the argument is optional.
|
|
|
|
Assumes the argument has been created with some form of nargs, which
|
|
only makes sense for possibly choosing multiple values.
|
|
"""
|
|
|
|
# Helper function to generalize the variants we need to test
|
|
def multifilechooser_helper(names):
|
|
# Note that the MultiFileChooser widget produces a single string with
|
|
# paths separated by os.pathsep.
|
|
if names:
|
|
prefix = names[0] + ' '
|
|
else:
|
|
prefix = ''
|
|
|
|
expected_outputs = [
|
|
(names, None, ''),
|
|
(names, prefix + '"abc"', 'abc'),
|
|
(names, prefix + '"abc" "def"', os.pathsep.join(['abc', 'def'])),
|
|
# paths with spaces
|
|
(names, prefix + '"a b c"', 'a b c'),
|
|
(names, prefix + '"a b c" "d e f"', os.pathsep.join(['a b c', 'd e f'])),
|
|
]
|
|
|
|
for commands, expected, widget_result in expected_outputs:
|
|
result = formatters.multiFileChooser({'commands': commands}, widget_result)
|
|
self.assertEqual(result, expected)
|
|
# make sure that argparse actually accepts it as valid.
|
|
if result:
|
|
parser = argparse.ArgumentParser()
|
|
if not names:
|
|
names = ["file"]
|
|
parser.add_argument(names[0], nargs='+')
|
|
parser.parse_args(shlex.split(result))
|
|
|
|
# Positional argument, with nargs
|
|
multifilechooser_helper([])
|
|
|
|
# Optional argument, with nargs
|
|
multifilechooser_helper(["-f", "--file"])
|