예제 #1
0
        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);
        }
예제 #2
0
        public void resolve_entre_regra_ctx_e_uri_ola_ambos_ok_fica_handler_esperado_igual_ao_retornado()
        {
            var      c = new Contracts();
            IHandler h = new NamespacePrefixContextHandler();

            c.AddRule("/{ctx}", h);
            IHandler hres;
            var      d = c.ResolveUri("/ola", out hres);

            Assert.AreEqual(h, hres);
        }
예제 #3
0
        public void resolve_entre_regra_ctx_e_uri_ola_com_subdir_a_ambos_com_barra_antes_fica_handler_esperado_diferente_do_retornado_nulo()
        {
            var      c = new Contracts();
            IHandler h = new NamespacePrefixContextHandler();

            c.AddRule("/{ctx}", h);
            IHandler hres;
            var      d = c.ResolveUri("/ola/a", out hres);

            Assert.Null(hres);
            Assert.AreNotEqual(h, hres);
        }
        //private Contracts contracts;

        #region 3 Construtores de Router - nao utilizados

        //public Router()
        //{
        //    this.contracts = new Contracts();
        //}

        //public Router(Contracts contracts)
        //{
        //    this.contracts = contracts ?? new Contracts();
        //}

        //public Router(Contracts contracts, List<string> listTemplates, List<IHandler> listHandlers)
        //{
        //    this.contracts = contracts ?? new Contracts();
        //    if (((listTemplates != null) && (listHandlers != null)) && (listTemplates.Count == listHandlers.Count))
        //    {
        //        for (int index = 0; index < listTemplates.Count; index++)
        //        {
        //            this.contracts.AddRule(listTemplates[index], listHandlers[index]);
        //        }
        //    }
        //}

        #endregion

        #region 2 Metodos Publicos AddRule e AddRules - nao utilizados

        //public void AddRule(string s, IHandler h)
        //{
        //    contracts.AddRule(s,h);
        //}

        //public void AddRules(List<string> listTemplates, List<IHandler> listHandlers)
        //{
        //    if (((listTemplates != null) && (listHandlers != null)) && (listTemplates.Count == listHandlers.Count))
        //    {
        //        for (int index = 0; index < listTemplates.Count; index++)
        //        {
        //            contracts.AddRule(listTemplates[index], listHandlers[index]);
        //        }
        //    }
        //}

        #endregion

        #region Metodo Publico MatchAndExecute

        //public HandlerAnswer MatchAndExecute(string uriPedido)
        static public HandlerAnswer MatchAndExecute(Contracts contracts, string uriPedido)
        {
            IHandler handlerToExecute;
            if(contracts == null)
            {
                //throw new HandlerException("Lista de Templates nula, não há template correspondente ao endereço indicado: " + uriPedido);
                return (new NullsHandler(uriPedido,false)).Handle();
            }
            else
            {
                Dictionary<string, string> paramsVarsReturned = contracts.ResolveUri(uriPedido, out handlerToExecute);
                if (handlerToExecute == null)
                {
                    //throw new HandlerException("Handler nulo, não há template correspondente ao endereço indicado: " + uriPedido);
                    handlerToExecute = new NullsHandler(uriPedido,true);
                }
                return handlerToExecute.Handle(paramsVarsReturned);
            }
        }
예제 #5
0
        //private Contracts contracts;

        #region 3 Construtores de Router - nao utilizados

        //public Router()
        //{
        //    this.contracts = new Contracts();
        //}

        //public Router(Contracts contracts)
        //{
        //    this.contracts = contracts ?? new Contracts();
        //}

        //public Router(Contracts contracts, List<string> listTemplates, List<IHandler> listHandlers)
        //{
        //    this.contracts = contracts ?? new Contracts();
        //    if (((listTemplates != null) && (listHandlers != null)) && (listTemplates.Count == listHandlers.Count))
        //    {
        //        for (int index = 0; index < listTemplates.Count; index++)
        //        {
        //            this.contracts.AddRule(listTemplates[index], listHandlers[index]);
        //        }
        //    }
        //}

        #endregion

        #region 2 Metodos Publicos AddRule e AddRules - nao utilizados

        //public void AddRule(string s, IHandler h)
        //{
        //    contracts.AddRule(s,h);
        //}

        //public void AddRules(List<string> listTemplates, List<IHandler> listHandlers)
        //{
        //    if (((listTemplates != null) && (listHandlers != null)) && (listTemplates.Count == listHandlers.Count))
        //    {
        //        for (int index = 0; index < listTemplates.Count; index++)
        //        {
        //            contracts.AddRule(listTemplates[index], listHandlers[index]);
        //        }
        //    }
        //}

        #endregion

        #region Metodo Publico MatchAndExecute

        //public HandlerAnswer MatchAndExecute(string uriPedido)
        static public HandlerAnswer MatchAndExecute(Contracts contracts, string uriPedido)
        {
            IHandler handlerToExecute;

            if (contracts == null)
            {
                //throw new HandlerException("Lista de Templates nula, não há template correspondente ao endereço indicado: " + uriPedido);
                return((new NullsHandler(uriPedido, false)).Handle());
            }
            else
            {
                Dictionary <string, string> paramsVarsReturned = contracts.ResolveUri(uriPedido, out handlerToExecute);
                if (handlerToExecute == null)
                {
                    //throw new HandlerException("Handler nulo, não há template correspondente ao endereço indicado: " + uriPedido);
                    handlerToExecute = new NullsHandler(uriPedido, true);
                }
                return(handlerToExecute.Handle(paramsVarsReturned));
            }
        }
 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);
 }
 public void resolve_entre_regra_ctx_e_uri_ola_com_subdir_a_ambos_com_barra_antes_fica_handler_esperado_diferente_do_retornado_nulo()
 {
     var c = new Contracts();
     IHandler h = new NamespacePrefixContextHandler();
     c.AddRule("/{ctx}", h);
     IHandler hres;
     var d = c.ResolveUri("/ola/a", out hres);
     Assert.Null(hres);
     Assert.AreNotEqual(h, hres);
 }
 public void resolve_entre_regra_ctx_e_uri_ola_ambos_ok_fica_handler_esperado_igual_ao_retornado()
 {
     var c = new Contracts();
     IHandler h = new NamespacePrefixContextHandler();
     c.AddRule("/{ctx}", h);
     IHandler hres;
     var d = c.ResolveUri("/ola", out hres);
     Assert.AreEqual(h, hres);
 }