Spaces:
Runtime error
Runtime error
| import sys | |
| from unittest import TestCase | |
| try: | |
| from StringIO import StringIO | |
| except ImportError: | |
| from io import StringIO # doesn't accept 'str' in Py2 | |
| 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') | |