public void resolve_entre_regras_ctx_e_assemblyName_e_uris_ok_ficam_handlers_esperados_iguais_ao_retornados_e_ctx_ola_assemblyName_adeus() { var c = new Contracts(); IHandler hroot = new RootHandler(); IHandler hcontext = new ContextNameHandler(); IHandler hnamespace = new NamespacePrefixContextHandler(); IHandler hassembly = new AssemblyNameContextHandler(); c.AddRule("/", hroot); c.AddRule("/ ", hnamespace); // exemplo de um terceiro handler, apenas para efeitos de testes c.AddRule("/{ctx}", hcontext); // colocar o esperado em ultimo na lista de regrashandlers IHandler hres, hres2; var d = c.ResolveUri("/ola", out hres); Assert.NotNull(hres); Assert.AreEqual(hcontext, hres); Assert.AreEqual("ctx", d.First().Key); Assert.AreEqual("ola", d.First().Value); c.AddRule("/{ctx}/as/{assemblyName}", hassembly); // colocar o esperado em ultimo na lista de regrashandlers var d2 = c.ResolveUri("/ola/as/adeus", out hres2); Assert.NotNull(hres2); Assert.AreEqual(hassembly, hres2); Assert.AreEqual("ctx", d2.First().Key); Assert.AreEqual("ola", d2.First().Value); Assert.AreEqual("assemblyName", d2.Last().Key); Assert.AreEqual("adeus", d2.Last().Value); }