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"])
def otros_tokens_luego_generan_errores_de_analisis(self): # NOTE: esto se debe a la carcasa especial donde suministramos # el nombre del artefacto como valor cuando la bandera se # llama literalmente "ayuda". artefacto1 = Contexto("miartefacto") init = Contexto(args=[Argumento("help", opcional=True)]) analizador = Analizador(inicial=init, contextos=[artefacto1]) with raises(ErrorDeAnalisis, match=r".*foobar.*"): analizador.analizar_args( ["miartefacto", "--help", "foobar"])
def por_si_mismo_caso_base(self): artefacto1 = Contexto("miartefacto") init = Contexto(args=[Argumento("help", opcional=True)]) analizador = Analizador(inicial=init, contextos=[artefacto1]) resultado = analizador.analizar_args(["miartefacto", "--help"]) assert len(resultado) == 2 assert resultado[0].args.help.valor == "miartefacto" assert "help" not in resultado[1].args
def valor_que_requiere_que_banderas_cores_tambien_trabajen_correctamente( self): "banderas de núcleo que requieren-valor también funcionan correctamente" inicial = Contexto(args=[Argumento("ocultar")]) artefacto1 = Contexto("miartefacto") analizador = Analizador(inicial=inicial, contextos=[artefacto1]) resultado = analizador.analizar_args( ["miartefacto", "--ocultar", "ambos"]) assert resultado[0].args.ocultar.valor == "ambos"
def cuando_los_argumentos_de_conflicto_por_artefacto_ganan(self): # Contexto de análisis inicial con un --echo, más artefacto con el mismo inicial = Contexto(args=[self._echo()]) artefacto1 = Contexto("miartefacto", args=[self._echo()]) analizador = Analizador(inicial=inicial, contextos=[artefacto1]) # Llamar con --echo en el contexto por-artefacto, espere que # el contexto artefacto se actualice, y no nucleo. resultado = analizador.analizar_args(["miartefacto", "--echo"]) assert resultado[0].args.echo.valor is False assert resultado[1].args.echo.valor is True
def banderas_core_funcionan_normalmente_cuando_no_hay_conflicto( self): # Contexto de análisis inicial con un --echo, más un artefacto sin argumentos inicial = Contexto(args=[self._echo()]) artefacto1 = Contexto("miartefacto") analizador = Analizador(inicial=inicial, contextos=[artefacto1]) # Llamar con --echo en el contexto por-artefacto, espere # que el contexto central se actualice (vs un error) resultado = analizador.analizar_args(["miartefacto", "--echo"]) assert resultado[0].args.echo.valor is True
class errores_de_analisis: def setup(self): self.p = Analizador( [Contexto(nombre="foo", args=[Argumento("bar")])]) def valores_de_bandera_que_faltan_generan_ParseError(self): with raises(ErrorDeAnalisis): self.p.analizar_args(["foo", "--bar"]) def adjunta_contexto_a_ParseErrors(self): try: self.p.analizar_args(["foo", "--bar"]) except ErrorDeAnalisis as e: assert e.contexto is not None def contexto_adjunto_es_None_fuera_de_contextos(self): try: Analizador().analizar_args(["wat"]) except ErrorDeAnalisis as e: assert e.contexto is None
def clona_sin_contextos_iniciales(self): a = Argumento("foo") assert a.valor is None c = Contexto(nombre="miartefacto", args=(a, )) p = Analizador(contextos=(c, )) assert p.contextos["miartefacto"] is c r = p.analizar_args(["miartefacto", "--foo", "val"]) assert p.contextos["miartefacto"] is c c2 = r[0] assert c2 is not c a2 = c2.args["foo"] assert a2 is not a assert a.valor is None assert a2.valor == "val"
def clona_contexto_inicial(self): a = Argumento("foo", tipo=bool) assert a.valor is None c = Contexto(args=(a, )) p = Analizador(inicial=c) assert p.inicial is c r = p.analizar_args(["--foo"]) assert p.inicial is c c2 = r[0] assert c2 is not c a2 = c2.args["foo"] assert a2 is not a assert a.valor is None assert a2.valor is True
def bool_core_pero_por_cadena_de_artefacto(self): # Contexto inicial de análisis con bool --ocultar, y un # artefacto con un regular (cadena) --ocultar inicial = Contexto( args=[Argumento("ocultar", tipo=bool, default=False)]) artefacto1 = Contexto("miartefacto", args=[Argumento("ocultar")]) analizador = Analizador(inicial=inicial, contextos=[artefacto1]) # Espera que, como la versión del artefacto gana, seamos # capaces de llamarlo con un valor. (Si hubiera bichos raros # en los que la bandera del núcleo informara al análisis, esto fallaría.) resultado = analizador.analizar_args( ["miartefacto", "--ocultar", "ambos"]) assert resultado[0].args.ocultar.valor is False assert resultado[1].args.ocultar.valor == "ambos"
def ignorar_desconocido_no_muta_resto_de_argv(self): p = Analizador([Contexto("ugh")], ignorar_desconocido=True) r = p.analizar_args(["ugh", "what", "-nowai"]) # NOT: ['what', '-n', '-a', '-a', '-i'] assert r.sin_analizar == ["what", "-nowai"]