def analiza_lista_de_cadenas_sys_argv_style(self): "analiza la lista de cadenas sys.argv-style" # Pruebas no hinchables FTL miartefacto = Contexto(nombre="miartefacto") miartefacto.agregar_arg("arg") p = Analizador(contextos=[miartefacto]) p.analizar_args(["miartefacto", "--arg", "valor"])
class agregar_arg: def setup(self): self.c = Contexto() def puede_tomar_una_instancia_de_Argumento(self): a = Argumento(nombres=("foo", )) self.c.agregar_arg(a) assert self.c.args["foo"] is a def puede_tomar_el_nombre_arg(self): self.c.agregar_arg("foo") assert "foo" in self.c.args def puede_tomar_kwargs_para_un_solo_Argumento(self): self.c.agregar_arg(nombres=("foo", "bar")) assert "foo" in self.c.args and "bar" in self.c.args def genera_ValueError_en_duplicado(self): self.c.agregar_arg(nombres=("foo", "bar")) with raises(ValueError): self.c.agregar_arg(nombre="bar") def agrega_un_nombre_similarabandera_a_las_banderas_de_puntos(self): "agrega un nombre banderalike a .banderas" self.c.agregar_arg("foo") assert "--foo" in self.c.banderas def agrega_todos_nombres_a_punto_banderas(self): "agrega todos los nombres a .banderas" self.c.agregar_arg(nombres=("foo", "bar")) assert "--foo" in self.c.banderas assert "--bar" in self.c.banderas def agrega_true_a_bools_a_banderas_inversas(self): self.c.agregar_arg(nombre="mibandera", default=True, tipo=bool) assert "--mibandera" in self.c.banderas assert "--no-mibandera" in self.c.banderas_inversas assert self.c.banderas_inversas["--no-mibandera"] == "--mibandera" def banderas_inv_trabajan_bien_con_nombres_guionbajo_en_artefactos( self): # Use un Artefacto aquí en lugar de crear un argumento en # bruto(raw), estamos probando parcialmente la transformación de # Artefacto.obtener_argumentos() 'de nombres-subrayados aquí. Sí, eso # lo convierte en una prueba de integración, pero es bueno probarlo # aquí en este nivel y no solo en cli pruebas. @artefacto def miartefacto(c, opcion_guionbajo=True): pass self.c.agregar_arg(miartefacto.obtener_argumentos()[0]) banderas = self.c.banderas_inversas["--no-opcion-guionbajo"] assert banderas == "--opcion-guionbajo" def convierte_los_nombres_de_un_solo_caracter_en_banderas_cortas(self): self.c.agregar_arg("f") assert "-f" in self.c.banderas assert "--f" not in self.c.banderas def agrega_args_posicionales_a_args_posicionales(self): self.c.agregar_arg(nombre="pos", posicional=True) assert self.c.args_posicionales[0].nombre == "pos" def args_posicionales_vacios_cuando_no_se_da_ninguno(self): assert len(self.c.args_posicionales) == 0 def args_posicionales_llenos_en_orden(self): self.c.agregar_arg(nombre="pos1", posicional=True) assert self.c.args_posicionales[0].nombre == "pos1" self.c.agregar_arg(nombre="abc", posicional=True) assert self.c.args_posicionales[1].nombre == "abc" def modificaciones_posicionales_de_los_args_afectan_la_copia_de_los_args( self): self.c.agregar_arg(nombre="hrm", posicional=True) assert self.c.args["hrm"].valor == self.c.args_posicionales[ 0].valor self.c.args_posicionales[0].valor = 17 assert self.c.args["hrm"].valor == self.c.args_posicionales[ 0].valor