def rutas_de_subcolecciones_pueden_tener_puntos(self): hoja = Coleccion("hoja", self.artefacto) hoja.configurar({"clave": "hoja-valor"}) medio = Coleccion("medio", hoja) raiz = Coleccion("raiz", medio) config = raiz.configuracion("medio.hoja.artefacto") assert config == {"clave": "hoja-valor"}
def subcolecciones_hermanos_ignoradas(self): interior = Coleccion("interior", self.artefacto) interior.configurar({"foo": "hola"}) interios2 = Coleccion("interios2", Artefacto(_func, nombre="artefacto2")) interios2.configurar({"foo": "nop"}) raiz = Coleccion(interior, interios2) assert raiz.configuracion("interior.artefacto")["foo"] == "hola" assert raiz.configuracion("interios2.artefacto2")["foo"] == "nop"
def acceso_fusiona_desde_subcolecciones(self): interior = Coleccion("interior", self.artefacto) interior.configurar({"foo": "bar"}) self.raiz.configurar({"biz": "baz"}) # With no interior coleccion assert set(self.raiz.configuracion().keys()) == {"biz"} # With interior coleccion self.raiz.ad_coleccion(interior) claves = set(self.raiz.configuracion("interior.artefacto").keys()) assert claves == {"foo", "biz"}
def padres_sobrescriben_a_hijos_en_el_camino(self): interior = Coleccion("interior", self.artefacto) interior.configurar({"foo": "interior"}) self.raiz.ad_coleccion(interior) # Antes de actualizar la configuración coleccion raiz, refleja el int assert self.raiz.configuracion( "interior.artefacto")["foo"] == "interior" self.raiz.configurar({"foo": "exterior"}) # Después, refleja el exterior (ya que ahora anulaciones) assert self.raiz.configuracion( "interior.artefacto")["foo"] == "exterior"
def claves_no_tienen_que_existir_en_la_ruta_completa(self): # Un poco duplica cosas anteriores; bah Clave solo almacenada # en hoja hoja = Coleccion("hoja", self.artefacto) hoja.configurar({"clave": "hoja-valor"}) medio = Coleccion("medio", hoja) raiz = Coleccion("raiz", medio) config = raiz.configuracion("medio.hoja.artefacto") assert config == {"clave": "hoja-valor"} # Clave almacenada en medio + hoja pero no raíz medio.configurar({"clave": "soo"}) assert raiz.configuracion("medio.hoja.artefacto") == { "clave": "soo" }
class configuracion: "metodos de configuración" def setup(self): self.raiz = Coleccion() self.artefacto = Artefacto(_func, nombre="artefacto") def seteo_y_obtencion_basico(self): self.raiz.configurar({"foo": "bar"}) assert self.raiz.configuracion() == {"foo": "bar"} def configurar_realiza_la_fusion(self): self.raiz.configurar({"foo": "bar"}) assert self.raiz.configuracion()["foo"] == "bar" self.raiz.configurar({"biz": "baz"}) assert set(self.raiz.configuracion().keys()), {"foo" == "biz"} def configurar_la_combinacion_es_recursivo_para_dic_anidados(self): self.raiz.configurar({"foo": "bar", "biz": {"baz": "boz"}}) self.raiz.configurar({"biz": {"otrobaz": "otroboz"}}) c = self.raiz.configuracion() assert c["biz"]["baz"] == "boz" assert c["biz"]["otrobaz"] == "otroboz" def configurar_permite_sobrescribir(self): self.raiz.configurar({"foo": "one"}) assert self.raiz.configuracion()["foo"] == "one" self.raiz.configurar({"foo": "two"}) assert self.raiz.configuracion()["foo"] == "two" def devuelve_llamada_dic(self): assert self.raiz.configuracion() == {} self.raiz.configurar({"foo": "bar"}) assert self.raiz.configuracion() == {"foo": "bar"} def acceso_fusiona_desde_subcolecciones(self): interior = Coleccion("interior", self.artefacto) interior.configurar({"foo": "bar"}) self.raiz.configurar({"biz": "baz"}) # With no interior coleccion assert set(self.raiz.configuracion().keys()) == {"biz"} # With interior coleccion self.raiz.ad_coleccion(interior) claves = set(self.raiz.configuracion("interior.artefacto").keys()) assert claves == {"foo", "biz"} def padres_sobrescriben_a_hijos_en_el_camino(self): interior = Coleccion("interior", self.artefacto) interior.configurar({"foo": "interior"}) self.raiz.ad_coleccion(interior) # Antes de actualizar la configuración coleccion raiz, refleja el int assert self.raiz.configuracion( "interior.artefacto")["foo"] == "interior" self.raiz.configurar({"foo": "exterior"}) # Después, refleja el exterior (ya que ahora anulaciones) assert self.raiz.configuracion( "interior.artefacto")["foo"] == "exterior" def subcolecciones_hermanos_ignoradas(self): interior = Coleccion("interior", self.artefacto) interior.configurar({"foo": "hola"}) interios2 = Coleccion("interios2", Artefacto(_func, nombre="artefacto2")) interios2.configurar({"foo": "nop"}) raiz = Coleccion(interior, interios2) assert raiz.configuracion("interior.artefacto")["foo"] == "hola" assert raiz.configuracion("interios2.artefacto2")["foo"] == "nop" def rutas_de_subcolecciones_pueden_tener_puntos(self): hoja = Coleccion("hoja", self.artefacto) hoja.configurar({"clave": "hoja-valor"}) medio = Coleccion("medio", hoja) raiz = Coleccion("raiz", medio) config = raiz.configuracion("medio.hoja.artefacto") assert config == {"clave": "hoja-valor"} def Lrutas_de_subcoleccion_no_válidas_resultan_en_KeyError(self): # Directamente no válido with raises(KeyError): Coleccion("bah").configuracion("nop.artefacto") # Existe pero el nivel es incorrecto (debería ser # 'root.artefacto', no solo 'artefacto') interior = Coleccion("interior", self.artefacto) with raises(KeyError): Coleccion("raiz", interior).configuracion("artefacto") def claves_no_tienen_que_existir_en_la_ruta_completa(self): # Un poco duplica cosas anteriores; bah Clave solo almacenada # en hoja hoja = Coleccion("hoja", self.artefacto) hoja.configurar({"clave": "hoja-valor"}) medio = Coleccion("medio", hoja) raiz = Coleccion("raiz", medio) config = raiz.configuracion("medio.hoja.artefacto") assert config == {"clave": "hoja-valor"} # Clave almacenada en medio + hoja pero no raíz medio.configurar({"clave": "soo"}) assert raiz.configuracion("medio.hoja.artefacto") == { "clave": "soo" }