Esempio n. 1
0
 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"])
Esempio n. 2
0
    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