Skip to content

Commit a411021

Browse files
committed
Python 3.x compatibility for test_decorators
1 parent 9a0f836 commit a411021

File tree

1 file changed

+93
-40
lines changed

1 file changed

+93
-40
lines changed

tests/searchcommands/test_decorators.py

Lines changed: 93 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@
2323
from unittest import main, TestCase
2424
import sys
2525

26+
from io import TextIOWrapper
27+
2628
from splunklib.searchcommands import Configuration, Option, environment, validators
2729
from splunklib.searchcommands.decorators import ConfigurationSetting
2830
from splunklib.searchcommands.internals import json_encode_string
@@ -34,6 +36,8 @@
3436
# Skip on Python 2.6
3537
pass
3638

39+
from splunklib import six
40+
3741
import pytest
3842

3943

@@ -231,8 +235,8 @@ def fix_up(cls, command_class):
231235
(True, False),
232236
(None, 'anything other than a bool')),
233237
('maxinputs',
234-
(0, 50000, sys.maxint),
235-
(None, -1, sys.maxint + 1, 'anything other than an int')),
238+
(0, 50000, sys.maxsize),
239+
(None, -1, sys.maxsize + 1, 'anything other than an int')),
236240
('overrides_timeorder',
237241
(True, False),
238242
(None, 'anything other than a bool')),
@@ -252,10 +256,11 @@ def fix_up(cls, command_class):
252256
(True, False),
253257
(None, 'anything other than a bool')),
254258
('streaming_preop',
255-
('some unicode string', b'some byte string'),
259+
(u'some unicode string', b'some byte string'),
256260
(None, 0xdead)),
257261
('type',
258-
('events', 'reporting', 'streaming', b'events', b'reporting', b'streaming'),
262+
# TODO: Do we need to validate byte versions of these strings?
263+
('events', 'reporting', 'streaming'),
259264
('eventing', 0xdead))):
260265

261266
for value in values:
@@ -348,13 +353,14 @@ def test_option(self):
348353

349354
command = TestSearchCommand()
350355
options = command.options
351-
itervalues = options.itervalues
356+
357+
itervalues = lambda: six.itervalues(options)
352358

353359
options.reset()
354360
missing = options.get_missing()
355361
self.assertListEqual(missing, [option.name for option in itervalues() if option.is_required])
356-
self.assertListEqual(presets, [unicode(option) for option in itervalues() if option.value is not None])
357-
self.assertListEqual(presets, [unicode(option) for option in itervalues() if unicode(option) != option.name + '=None'])
362+
self.assertListEqual(presets, [six.text_type(option) for option in itervalues() if option.value is not None])
363+
self.assertListEqual(presets, [six.text_type(option) for option in itervalues() if six.text_type(option) != option.name + '=None'])
358364

359365
test_option_values = {
360366
validators.Boolean: ('0', 'non-boolean value'),
@@ -394,38 +400,85 @@ def test_option(self):
394400
else:
395401
self.assertFalse('Expected ValueError for {}={}, not a pass.'.format(option.name, illegal_value))
396402

397-
expected = (
398-
"Option.View(["
399-
"(u'foo', u'f'),"
400-
"('boolean', u'f'),"
401-
"('code', u'foo == \"bar\"'),"
402-
"('duration', u'24:59:59'),"
403-
"('fieldname', u'some.field_name'),"
404-
"('file', u" + unicode(repr(__file__)) + "),"
405-
"('integer', u'100'),"
406-
"('logging_configuration', " + repr(environment.logging_configuration) + "),"
407-
"('logging_level', u'WARNING'),"
408-
"('map', 'foo'),"
409-
"('match', u'123-45-6789'),"
410-
"('optionname', u'some_option_name'),"
411-
"('record', u'f'),"
412-
"('regularexpression', u'\\\\s+'),"
413-
"('required_boolean', u'f'),"
414-
"('required_code', u'foo == \"bar\"'),"
415-
"('required_duration', u'24:59:59'),"
416-
"('required_fieldname', u'some.field_name'),"
417-
"('required_file', u" + unicode(repr(__file__)) + "),"
418-
"('required_integer', u'100'),"
419-
"('required_map', 'foo'),"
420-
"('required_match', u'123-45-6789'),"
421-
"('required_optionname', u'some_option_name'),"
422-
"('required_regularexpression', u'\\\\s+'),"
423-
"('required_set', u'bar'),"
424-
"('set', u'bar'),"
425-
"('show_configuration', u'f')])")
426-
427-
observed = unicode(repr(command.options))
428-
self.assertEqual(observed, expected)
403+
# expected = (
404+
# "Option.View(["
405+
# "(u'foo', u'f'),"
406+
# "('boolean', u'f'),"
407+
# "('code', u'foo == \"bar\"'),"
408+
# "('duration', u'24:59:59'),"
409+
# "('fieldname', u'some.field_name'),"
410+
# "('file', u" + six.text_type(repr(__file__)) + "),"
411+
# "('integer', u'100'),"
412+
# "('logging_configuration', " + repr(environment.logging_configuration) + "),"
413+
# "('logging_level', u'WARNING'),"
414+
# "('map', 'foo'),"
415+
# "('match', u'123-45-6789'),"
416+
# "('optionname', u'some_option_name'),"
417+
# "('record', u'f'),"
418+
# "('regularexpression', u'\\\\s+'),"
419+
# "('required_boolean', u'f'),"
420+
# "('required_code', u'foo == \"bar\"'),"
421+
# "('required_duration', u'24:59:59'),"
422+
# "('required_fieldname', u'some.field_name'),"
423+
# "('required_file', u" + six.text_type(repr(__file__)) + "),"
424+
# "('required_integer', u'100'),"
425+
# "('required_map', 'foo'),"
426+
# "('required_match', u'123-45-6789'),"
427+
# "('required_optionname', u'some_option_name'),"
428+
# "('required_regularexpression', u'\\\\s+'),"
429+
# "('required_set', u'bar'),"
430+
# "('set', u'bar'),"
431+
# "('show_configuration', u'f')])")
432+
433+
expected = {
434+
u'foo': False,
435+
'boolean': False,
436+
'code': u'foo == \"bar\"',
437+
'duration': 89999,
438+
'fieldname': u'some.field_name',
439+
'file': six.text_type(repr(__file__)),
440+
'integer': 100,
441+
'logging_configuration': environment.logging_configuration,
442+
'logging_level': u'WARNING',
443+
'map': 'foo',
444+
'match': u'123-45-6789',
445+
'optionname': u'some_option_name',
446+
'record': False,
447+
'regularexpression': u'\\s+',
448+
'required_boolean': False,
449+
'required_code': u'foo == \"bar\"',
450+
'required_duration': 89999,
451+
'required_fieldname': u'some.field_name',
452+
'required_file': six.text_type(repr(__file__)),
453+
'required_integer': 100,
454+
'required_map': 'foo',
455+
'required_match': u'123-45-6789',
456+
'required_optionname': u'some_option_name',
457+
'required_regularexpression': u'\\s+',
458+
'required_set': u'bar',
459+
'set': u'bar',
460+
'show_configuration': False,
461+
}
462+
463+
self.maxDiff = None
464+
465+
tuplewrap = lambda x: x if isinstance(x, tuple) else (x,)
466+
invert = lambda x: {v: k for k, v in six.iteritems(x)}
467+
468+
for x in six.itervalues(command.options):
469+
# isinstance doesn't work for some reason
470+
if type(x.value).__name__ == 'Code':
471+
self.assertEqual(expected[x.name], x.value.source)
472+
elif type(x.validator).__name__ == 'Map':
473+
self.assertEqual(expected[x.name], invert(x.validator.membership)[x.value])
474+
elif type(x.validator).__name__ == 'RegularExpression':
475+
self.assertEqual(expected[x.name], x.value.pattern)
476+
elif isinstance(x.value, TextIOWrapper):
477+
self.assertEqual(expected[x.name], "'%s'" % x.value.name)
478+
elif not isinstance(x.value, (bool,) + (six.text_type,) + (six.binary_type,) + tuplewrap(six.integer_types)):
479+
self.assertEqual(expected[x.name], repr(x.value))
480+
else:
481+
self.assertEqual(expected[x.name], x.value)
429482

430483
expected = (
431484
'foo="f" boolean="f" code="foo == \\"bar\\"" duration="24:59:59" fieldname="some.field_name" '
@@ -436,7 +489,7 @@ def test_option(self):
436489
'required_match="123-45-6789" required_optionname="some_option_name" required_regularexpression="\\\\s+" '
437490
'required_set="bar" set="bar" show_configuration="f"')
438491

439-
observed = unicode(command.options)
492+
observed = six.text_type(command.options)
440493

441494
self.assertEqual(observed, expected)
442495
return

0 commit comments

Comments
 (0)