(self)
| 6668 | |
| 6669 | class TestIntermixedArgs(TestCase): |
| 6670 | def test_basic(self): |
| 6671 | # test parsing intermixed optionals and positionals |
| 6672 | parser = argparse.ArgumentParser(prog='PROG') |
| 6673 | parser.add_argument('--foo', dest='foo') |
| 6674 | bar = parser.add_argument('--bar', dest='bar', required=True) |
| 6675 | parser.add_argument('cmd') |
| 6676 | parser.add_argument('rest', nargs='*', type=int) |
| 6677 | argv = 'cmd --foo x 1 --bar y 2 3'.split() |
| 6678 | args = parser.parse_intermixed_args(argv) |
| 6679 | # rest gets [1,2,3] despite the foo and bar strings |
| 6680 | self.assertEqual(NS(bar='y', cmd='cmd', foo='x', rest=[1, 2, 3]), args) |
| 6681 | |
| 6682 | args, extras = parser.parse_known_args(argv) |
| 6683 | # cannot parse the '1,2,3' |
| 6684 | self.assertEqual(NS(bar='y', cmd='cmd', foo='x', rest=[1]), args) |
| 6685 | self.assertEqual(["2", "3"], extras) |
| 6686 | args, extras = parser.parse_known_intermixed_args(argv) |
| 6687 | self.assertEqual(NS(bar='y', cmd='cmd', foo='x', rest=[1, 2, 3]), args) |
| 6688 | self.assertEqual([], extras) |
| 6689 | |
| 6690 | # unknown optionals go into extras |
| 6691 | argv = 'cmd --foo x --error 1 2 --bar y 3'.split() |
| 6692 | args, extras = parser.parse_known_intermixed_args(argv) |
| 6693 | self.assertEqual(NS(bar='y', cmd='cmd', foo='x', rest=[1, 2, 3]), args) |
| 6694 | self.assertEqual(['--error'], extras) |
| 6695 | argv = 'cmd --foo x 1 --error 2 --bar y 3'.split() |
| 6696 | args, extras = parser.parse_known_intermixed_args(argv) |
| 6697 | self.assertEqual(NS(bar='y', cmd='cmd', foo='x', rest=[1, 2, 3]), args) |
| 6698 | self.assertEqual(['--error'], extras) |
| 6699 | argv = 'cmd --foo x 1 2 --error --bar y 3'.split() |
| 6700 | args, extras = parser.parse_known_intermixed_args(argv) |
| 6701 | self.assertEqual(NS(bar='y', cmd='cmd', foo='x', rest=[1, 2, 3]), args) |
| 6702 | self.assertEqual(['--error'], extras) |
| 6703 | |
| 6704 | # restores attributes that were temporarily changed |
| 6705 | self.assertIsNone(parser.usage) |
| 6706 | self.assertEqual(bar.required, True) |
| 6707 | |
| 6708 | def test_remainder(self): |
| 6709 | # Intermixed and remainder are incompatible |
nothing calls this directly
no test coverage detected