|
|
|
|
|
import sys |
|
|
from unittest import TestCase |
|
|
try: |
|
|
from StringIO import StringIO |
|
|
except ImportError: |
|
|
from io import StringIO |
|
|
|
|
|
from .. import Options |
|
|
from ..CmdLine import parse_command_line |
|
|
|
|
|
|
|
|
class CmdLineParserTest(TestCase): |
|
|
def setUp(self): |
|
|
backup = {} |
|
|
for name, value in vars(Options).items(): |
|
|
backup[name] = value |
|
|
self._options_backup = backup |
|
|
|
|
|
def tearDown(self): |
|
|
no_value = object() |
|
|
for name, orig_value in self._options_backup.items(): |
|
|
if getattr(Options, name, no_value) != orig_value: |
|
|
setattr(Options, name, orig_value) |
|
|
|
|
|
def test_short_options(self): |
|
|
options, sources = parse_command_line([ |
|
|
'-V', '-l', '-+', '-t', '-v', '-v', '-v', '-p', '-D', '-a', '-3', |
|
|
]) |
|
|
self.assertFalse(sources) |
|
|
self.assertTrue(options.show_version) |
|
|
self.assertTrue(options.use_listing_file) |
|
|
self.assertTrue(options.cplus) |
|
|
self.assertTrue(options.timestamps) |
|
|
self.assertTrue(options.verbose >= 3) |
|
|
self.assertTrue(Options.embed_pos_in_docstring) |
|
|
self.assertFalse(Options.docstrings) |
|
|
self.assertTrue(Options.annotate) |
|
|
self.assertEqual(options.language_level, 3) |
|
|
|
|
|
options, sources = parse_command_line([ |
|
|
'-f', '-2', 'source.pyx', |
|
|
]) |
|
|
self.assertTrue(sources) |
|
|
self.assertTrue(len(sources) == 1) |
|
|
self.assertFalse(options.timestamps) |
|
|
self.assertEqual(options.language_level, 2) |
|
|
|
|
|
def test_long_options(self): |
|
|
options, sources = parse_command_line([ |
|
|
'--version', '--create-listing', '--cplus', '--embed', '--timestamps', |
|
|
'--verbose', '--verbose', '--verbose', |
|
|
'--embed-positions', '--no-docstrings', '--annotate', '--lenient', |
|
|
]) |
|
|
self.assertFalse(sources) |
|
|
self.assertTrue(options.show_version) |
|
|
self.assertTrue(options.use_listing_file) |
|
|
self.assertTrue(options.cplus) |
|
|
self.assertEqual(Options.embed, 'main') |
|
|
self.assertTrue(options.timestamps) |
|
|
self.assertTrue(options.verbose >= 3) |
|
|
self.assertTrue(Options.embed_pos_in_docstring) |
|
|
self.assertFalse(Options.docstrings) |
|
|
self.assertTrue(Options.annotate) |
|
|
self.assertFalse(Options.error_on_unknown_names) |
|
|
self.assertFalse(Options.error_on_uninitialized) |
|
|
|
|
|
options, sources = parse_command_line([ |
|
|
'--force', 'source.pyx', |
|
|
]) |
|
|
self.assertTrue(sources) |
|
|
self.assertTrue(len(sources) == 1) |
|
|
self.assertFalse(options.timestamps) |
|
|
|
|
|
def test_options_with_values(self): |
|
|
options, sources = parse_command_line([ |
|
|
'--embed=huhu', |
|
|
'-I/test/include/dir1', '--include-dir=/test/include/dir2', |
|
|
'--include-dir', '/test/include/dir3', |
|
|
'--working=/work/dir', |
|
|
'source.pyx', |
|
|
'--output-file=/output/dir', |
|
|
'--pre-import=/pre/import', |
|
|
'--cleanup=3', |
|
|
'--annotate-coverage=cov.xml', |
|
|
'--gdb-outdir=/gdb/outdir', |
|
|
'--directive=wraparound=false', |
|
|
]) |
|
|
self.assertEqual(sources, ['source.pyx']) |
|
|
self.assertEqual(Options.embed, 'huhu') |
|
|
self.assertEqual(options.include_path, ['/test/include/dir1', '/test/include/dir2', '/test/include/dir3']) |
|
|
self.assertEqual(options.working_path, '/work/dir') |
|
|
self.assertEqual(options.output_file, '/output/dir') |
|
|
self.assertEqual(Options.pre_import, '/pre/import') |
|
|
self.assertEqual(Options.generate_cleanup_code, 3) |
|
|
self.assertTrue(Options.annotate) |
|
|
self.assertEqual(Options.annotate_coverage_xml, 'cov.xml') |
|
|
self.assertTrue(options.gdb_debug) |
|
|
self.assertEqual(options.output_dir, '/gdb/outdir') |
|
|
|
|
|
def test_errors(self): |
|
|
def error(*args): |
|
|
old_stderr = sys.stderr |
|
|
stderr = sys.stderr = StringIO() |
|
|
try: |
|
|
self.assertRaises(SystemExit, parse_command_line, list(args)) |
|
|
finally: |
|
|
sys.stderr = old_stderr |
|
|
self.assertTrue(stderr.getvalue()) |
|
|
|
|
|
error('-1') |
|
|
error('-I') |
|
|
error('--version=-a') |
|
|
error('--version=--annotate=true') |
|
|
error('--working') |
|
|
error('--verbose=1') |
|
|
error('--verbose=1') |
|
|
error('--cleanup') |
|
|
|