Example #1
0
    class ad_coleccion:
        def setup(self):
            self.c = Coleccion()

        def agrega_coleccion_como_subcoleccion_de_self(self):
            c2 = Coleccion("foo")
            self.c.ad_coleccion(c2)
            assert "foo" in self.c.colecciones

        def puede_tomar_objetos_modulo(self):
            self.c.ad_coleccion(load("integracion"))
            assert "integracion" in self.c.colecciones

        def genera_ValueError_si_coleccion_sin_nombre(self):
            # Las colecciones no-root deben tener un nombre explícito dado a
            # través de kwarg, tener un atributo de nombre establecido o ser
            # un módulo con __name__ definido.
            raiz = Coleccion()
            sub = Coleccion()
            with raises(ValueError):
                raiz.ad_coleccion(sub)

        def genera_ValueError_si_la_coleccion_tiene_el_mismo_nombre_que_el_artefacto(
                self):
            self.c.ad_artefacto(_miartefacto, "sub")
            with raises(ValueError):
                self.c.ad_coleccion(Coleccion("sub"))
Example #2
0
        def arglista_posicional_preserva_el_orden_dado(self):
            @artefacto(posicional=("segundo", "primero"))
            def miartefacto(c, primero, segundo, third):
                pass

            colecc = Coleccion()
            colecc.ad_artefacto(miartefacto)
            c = colecc.a_contextos()[0]
            esperado = [c.args["segundo"], c.args["primero"]]
            assert c.args_posicionales == esperado
Example #3
0
    class getitem:
        "__getitem__"

        def setup(self):
            self.c = Coleccion()

        def encuentra_sus_propios_artefactos_por_nombre(self):
            # TODO: duplica una prueba ad_artefacto anterior, ¿arreglar?
            self.c.ad_artefacto(_miartefacto, "foo")
            assert self.c["foo"] == _miartefacto

        def busca_artefactos_de_subcoleccion_por_nombre_con_puntos(self):
            sub = Coleccion("sub")
            sub.ad_artefacto(_miartefacto)
            self.c.ad_coleccion(sub)
            assert self.c["sub._miartefacto"] == _miartefacto

        def honra_alias_en_sus_propios_artefactos(self):
            t = Artefacto(_func, alias=["bar"])
            self.c.ad_artefacto(t, "foo")
            assert self.c["bar"] == t

        def honra_los_alias_de_artefactos_de_subcoleccion(self):
            self.c.ad_coleccion(load("decoradores"))
            assert "decoradores.bar" in self.c

        def respeta_el_propio_artefacto_pordefault_sin_argumentos(self):
            t = Artefacto(_func, default=True)
            self.c.ad_artefacto(t)
            assert self.c[""] == t

        def respeta_los_artefactos_pordefecto_de_la_subcoleccion_en_el_nombre_de_la_subcoleccion(
                self):
            sub = Coleccion.del_modulo(load("decoradores"))
            self.c.ad_coleccion(sub)
            # Sanity
            assert self.c["decoradores.biz"] is sub["biz"]
            # Real prueba
            assert self.c["decoradores"] is self.c["decoradores.biz"]

        def genera_ValueError_sin_nombre_y_sin_valor_pordefecto(self):
            with raises(ValueError):
                self.c[""]

        def ValueError_para_el_nombre_de_artefacto_subcol_sin_valor_predeterminado(
                self):
            self.c.ad_coleccion(Coleccion("cualquier"))
            with raises(ValueError):
                self.c["cualquier"]
Example #4
0
 def busca_artefactos_de_subcoleccion_por_nombre_con_puntos(self):
     sub = Coleccion("sub")
     sub.ad_artefacto(_miartefacto)
     self.c.ad_coleccion(sub)
     assert self.c["sub._miartefacto"] == _miartefacto
Example #5
0
    class ad_artefacto:
        def setup(self):
            self.c = Coleccion()

        def asociados_dados_invocables_con_nombre_dado(self):
            self.c.ad_artefacto(_miartefacto, "foo")
            assert self.c["foo"] == _miartefacto

        def usa_nombre_de_la_funcion_como_nombre_implicito(self):
            self.c.ad_artefacto(_miartefacto)
            assert "_miartefacto" in self.c

        def prefiere_el_nombre_kwarg_sobre_el_atributo_nombre_del_artefacto(
                self):
            self.c.ad_artefacto(Artefacto(_func, nombre="nofunc"),
                                nombre="sifunc")
            assert "sifunc" in self.c
            assert "nofunc" not in self.c

        def prefiere_el_atributo_de_nombre_de_artefacto_sobre_el_nombre_de_funcion(
                self):
            self.c.ad_artefacto(Artefacto(_func, nombre="nofunc"))
            assert "nofunc" in self.c
            assert "_func" not in self.c

        def genera_ValueError_si_no_se_encuentra_ningun_nombre(self):
            # No se puede usar una lambda aquí porque son funciones técnicamente reales.
            class Invocable(object):
                def __call__(self):
                    pass

            with raises(ValueError):
                self.c.ad_artefacto(Artefacto(Invocable()))

        def genera_ValueError_en_multiples_defaults(self):
            t1 = Artefacto(_func, default=True)
            t2 = Artefacto(_func, default=True)
            self.c.ad_artefacto(t1, "foo")
            with raises(ValueError):
                self.c.ad_artefacto(t2, "bar")

        def genera_ValueError_si_elartefacto_agregado_refleja_el_nombre_de_la_subcoleccion(
                self):
            self.c.ad_coleccion(Coleccion("sub"))
            with raises(ValueError):
                self.c.ad_artefacto(_miartefacto, "sub")

        def permite_especificar_el_artefacto_por_defecto(self):
            self.c.ad_artefacto(_miartefacto, default=True)
            assert self.c.default == "_miartefacto"

        def especificando_el_seteo_del_artefacto_pordefecto_False_anulacion(
                self):
            @artefacto(default=True)
            def soy_yo(c):
                pass

            self.c.ad_artefacto(soy_yo, default=False)
            assert self.c.default is None

        def permite_especificar_alias(self):
            self.c.ad_artefacto(_miartefacto,
                                alias=("artefacto1", "artefacto2"))
            assert self.c["_miartefacto"] is self.c["artefacto1"] is self.c[
                "artefacto2"]

        def alias_son_fundidos(self):
            @artefacto(alias=("foo", "bar"))
            def biz(c):
                pass

            # NOTE: use la tupla anterior y la lista a continuación para
            # asegurarse de que no haya problemas de tipo
            self.c.ad_artefacto(biz, alias=["baz", "boz"])
            for x in ("foo", "bar", "biz", "baz", "boz"):
                assert self.c[x] is self.c["biz"]