(self)
| 6535 | |
| 6536 | class TestIntermixedArgs(TestCase): |
| 6537 | def test_basic(self): |
| 6538 | # test parsing intermixed optionals and positionals |
| 6539 | parser = argparse.ArgumentParser(prog='PROG') |
| 6540 | parser.add_argument('--foo', dest='foo') |
| 6541 | bar = parser.add_argument('--bar', dest='bar', required=True) |
| 6542 | parser.add_argument('cmd') |
| 6543 | parser.add_argument('rest', nargs='*', type=int) |
| 6544 | argv = 'cmd --foo x 1 --bar y 2 3'.split() |
| 6545 | args = parser.parse_intermixed_args(argv) |
| 6546 | # rest gets [1,2,3] despite the foo and bar strings |
| 6547 | self.assertEqual(NS(bar='y', cmd='cmd', foo='x', rest=[1, 2, 3]), args) |
| 6548 | |
| 6549 | args, extras = parser.parse_known_args(argv) |
| 6550 | # cannot parse the '1,2,3' |
| 6551 | self.assertEqual(NS(bar='y', cmd='cmd', foo='x', rest=[1]), args) |
| 6552 | self.assertEqual(["2", "3"], extras) |
| 6553 | args, extras = parser.parse_known_intermixed_args(argv) |
| 6554 | self.assertEqual(NS(bar='y', cmd='cmd', foo='x', rest=[1, 2, 3]), args) |
| 6555 | self.assertEqual([], extras) |
| 6556 | |
| 6557 | # unknown optionals go into extras |
| 6558 | argv = 'cmd --foo x --error 1 2 --bar y 3'.split() |
| 6559 | args, extras = parser.parse_known_intermixed_args(argv) |
| 6560 | self.assertEqual(NS(bar='y', cmd='cmd', foo='x', rest=[1, 2, 3]), args) |
| 6561 | self.assertEqual(['--error'], extras) |
| 6562 | argv = 'cmd --foo x 1 --error 2 --bar y 3'.split() |
| 6563 | args, extras = parser.parse_known_intermixed_args(argv) |
| 6564 | self.assertEqual(NS(bar='y', cmd='cmd', foo='x', rest=[1, 2, 3]), args) |
| 6565 | self.assertEqual(['--error'], extras) |
| 6566 | argv = 'cmd --foo x 1 2 --error --bar y 3'.split() |
| 6567 | args, extras = parser.parse_known_intermixed_args(argv) |
| 6568 | self.assertEqual(NS(bar='y', cmd='cmd', foo='x', rest=[1, 2, 3]), args) |
| 6569 | self.assertEqual(['--error'], extras) |
| 6570 | |
| 6571 | # restores attributes that were temporarily changed |
| 6572 | self.assertIsNone(parser.usage) |
| 6573 | self.assertEqual(bar.required, True) |
| 6574 | |
| 6575 | def test_remainder(self): |
| 6576 | # Intermixed and remainder are incompatible |
nothing calls this directly
no test coverage detected