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.6 KiB

import unittest
from random import randint
from unittest.mock import patch
from tests.harness import instrumentGooey
from gooey import GooeyParser
from gooey.tests import *
class TestNumbericInputs(unittest.TestCase):
def makeParser(self, **kwargs):
parser = GooeyParser(description='description')
parser.add_argument('--input', **kwargs)
return parser
def testDefault(self):
cases = [
[{'widget': 'IntegerField'}, 0],
[{'default': 0, 'widget': 'IntegerField'}, 0],
[{'default': 10, 'widget': 'IntegerField'}, 10],
[{'default': 76, 'widget': 'IntegerField'}, 76],
# note that WX caps the value
# unless explicitly widened via gooey_options
[{'default': 81234, 'widget': 'IntegerField'}, 100],
# here we set the max to something higher than
# the default and all works as expected.
# this is a TODO for validation
[{'default': 81234, 'widget': 'IntegerField', 'gooey_options': {'max': 99999}}, 81234],
[{'widget': 'DecimalField'}, 0],
[{'default': 0, 'widget': 'DecimalField'}, 0],
[{'default': 81234, 'widget': 'DecimalField'}, 100],
[{'default': 81234, 'widget': 'DecimalField', 'gooey_options': {'max': 99999}}, 81234],
]
for inputs, expected in cases:
with self.subTest(inputs):
parser = self.makeParser(**inputs)
with instrumentGooey(parser) as (app, gooeyApp):
input = gooeyApp.configs[0].reifiedWidgets[0]
self.assertEqual(input.getValue()['rawValue'], expected)
def testGooeyOptions(self):
cases = [
{'widget': 'DecimalField', 'gooey_options': {'min': -100, 'max': 1234, 'increment': 1.240}},
{'widget': 'DecimalField', 'gooey_options': {'min': 1234, 'max': 3456, 'increment': 2.2}},
{'widget': 'IntegerField', 'gooey_options': {'min': -100, 'max': 1234}},
{'widget': 'IntegerField', 'gooey_options': {'min': 1234, 'max': 3456}}
];
using = {
'min': lambda widget: widget.GetMin(),
'max': lambda widget: widget.GetMax(),
'increment': lambda widget: widget.GetIncrement(),
}
for case in cases:
with self.subTest(case):
parser = self.makeParser(**case)
with instrumentGooey(parser) as (app, gooeyApp):
wxWidget = gooeyApp.configs[0].reifiedWidgets[0].widget
for option, value in case['gooey_options'].items():
self.assertEqual(using[option](wxWidget), value)
def testZerosAreReturned(self):
"""
Originally the formatter was dropping '0' due to
it being interpreted as falsey
"""
parser = self.makeParser(widget='IntegerField')
with instrumentGooey(parser) as (app, gooeyApp):
field = gooeyApp.configs[0].reifiedWidgets[0]
result = field.getValue()
self.assertEqual(result['rawValue'], 0)
self.assertIsNotNone(result['cmd'])
def testNoLossOfPrecision(self):
parser = self.makeParser(widget='DecimalField', default=12.23534, gooey_options={'precision': 20})
with instrumentGooey(parser) as (app, gooeyApp):
field = gooeyApp.configs[0].reifiedWidgets[0]
result = field.getValue()
self.assertEqual(result['rawValue'], 12.23534)
self.assertIsNotNone(result['cmd'])
if __name__ == '__main__':
unittest.main()