def parses_sys_argv_style_list_of_strings(self): "parses sys.argv-style list of strings" # Doesn't-blow-up tests FTL mytask = Context(name="mytask") mytask.add_arg("arg") p = Parser(contexts=[mytask]) p.parse_argv(["mytask", "--arg", "value"])
class add_arg: def setup(self): self.c = Context() def can_take_Argument_instance(self): a = Argument(names=("foo",)) self.c.add_arg(a) assert self.c.args["foo"] is a def can_take_name_arg(self): self.c.add_arg("foo") assert "foo" in self.c.args def can_take_kwargs_for_single_Argument(self): self.c.add_arg(names=("foo", "bar")) assert "foo" in self.c.args and "bar" in self.c.args def raises_ValueError_on_duplicate(self): self.c.add_arg(names=("foo", "bar")) with raises(ValueError): self.c.add_arg(name="bar") def adds_flaglike_name_to_dot_flags(self): "adds flaglike name to .flags" self.c.add_arg("foo") assert "--foo" in self.c.flags def adds_all_names_to_dot_flags(self): "adds all names to .flags" self.c.add_arg(names=("foo", "bar")) assert "--foo" in self.c.flags assert "--bar" in self.c.flags def adds_true_bools_to_inverse_flags(self): self.c.add_arg(name="myflag", default=True, kind=bool) assert "--myflag" in self.c.flags assert "--no_myflag" in self.c.inverse_flags assert self.c.inverse_flags["--no_myflag"] == "--myflag" def inverse_flags_works_right_with_task_driven_underscored_names(self): # Use a Task here instead of creating a raw argument, we're partly # testing Task.get_arguments()' transform of underscored names # here. Yes that makes this an integration test, but it's nice to # test it here at this level & not just in cli tests. @task def mytask(c, underscored_option=True): pass self.c.add_arg(mytask.get_arguments()[0]) flags = self.c.inverse_flags["--no_underscored_option"] assert flags == "--underscored_option" def turns_single_character_names_into_short_flags(self): self.c.add_arg("f") assert "-f" in self.c.flags assert "--f" not in self.c.flags def adds_positional_args_to_positional_args(self): self.c.add_arg(name="pos", positional=True) assert self.c.positional_args[0].name == "pos" def positional_args_empty_when_none_given(self): assert len(self.c.positional_args) == 0 def positional_args_filled_in_order(self): self.c.add_arg(name="pos1", positional=True) assert self.c.positional_args[0].name == "pos1" self.c.add_arg(name="abc", positional=True) assert self.c.positional_args[1].name == "abc" def positional_arg_modifications_affect_args_copy(self): self.c.add_arg(name="hrm", positional=True) assert self.c.args["hrm"].value == self.c.positional_args[0].value self.c.positional_args[0].value = 17 assert self.c.args["hrm"].value == self.c.positional_args[0].value