public void PruebaConstructor()
        {
            // Preparación.
            int             número          = 12;
            ManejadorDeMapa manejadorDeMapa = new ManejadorDeMapa(new EscuchadorDeEstatusPorOmisión());
            string          clase           = "clase";
            string          nombre          = "Nombre";
            string          tipo            = "0xc";
            List <Campo>    campos          = new List <Campo> {
                new CampoNombre(nombre),
                new CampoComentario(";Comentario"),
                new CampoTipo(tipo)
            };

            // Llama al constructor.
            ElementoDesconocido objectoDePrueba = new ElementoDesconocido(manejadorDeMapa, número, clase, campos);

            // Prueba Propiedades.
            Assert.AreEqual(campos, objectoDePrueba.Campos, "Campos");
            Assert.AreEqual(clase, objectoDePrueba.Clase, "Clase");
            Assert.AreEqual(string.Empty, objectoDePrueba.Descripción, "Descripción");
            Assert.AreEqual(false, objectoDePrueba.FuéEliminado, "FuéEliminado");
            Assert.AreEqual(false, objectoDePrueba.FuéModificado, "FuéModificado");
            Assert.AreEqual(nombre, objectoDePrueba.Nombre, "Nombre");
            Assert.AreEqual(número, objectoDePrueba.Número, "Número");
            Assert.AreEqual(null, objectoDePrueba.Original, "Original");
            Assert.AreEqual(string.Empty, objectoDePrueba.RazónParaEliminación, "RazónParaEliminación");
            Assert.AreEqual(new Tipo(tipo), objectoDePrueba.Tipo, "Tipo");
        }
示例#2
0
 /// <summary>
 /// Constructor.
 /// </summary>
 /// <param name="elManejadorDeMapa">El manejador del mapa.</param>
 /// <param name="elNúmero">El número del PDI.</param>
 /// <param name="laClase">La clase de PDI.</param>
 /// <param name="losCampos">Los campos del PDI.</param>
 public Pdi(
     ManejadorDeMapa elManejadorDeMapa,
     int elNúmero,
     string laClase,
     IList <Campo> losCampos)
     : base(elManejadorDeMapa,
            elNúmero,
            laClase,
            CaracterísticasDePdis.Descripciones,
            losCampos)
 {
     // Busca los campos especificos de los PDIs.
     foreach (Campo campo in losCampos)
     {
         CampoCoordenadas campoCoordenadas;
         CampoEsCiudad    campoCiudad;
         if ((campoCoordenadas = campo as CampoCoordenadas) != null)
         {
             misCoordenadas = campoCoordenadas;
         }
         else if ((campoCiudad = campo as CampoEsCiudad) != null)
         {
             EsCiudad = campoCiudad.EsCiudad;
         }
     }
 }
        public void PruebaCambiaNombre()
        {
            // Preparación.
            ManejadorDeMapa manejadorDeMapa = new ManejadorDeMapa(new EscuchadorDeEstatusPorOmisión());
            int             número          = 12;
            string          clase           = "clase";
            string          nombre          = "Nombre";
            List <Campo>    campos          = new List <Campo> {
                new CampoNombre(nombre),
                new CampoComentario(";Comentario")
            };
            ElementoDesconocido objectoDePrueba = new ElementoDesconocido(manejadorDeMapa, número, clase, campos);
            string nuevoNombre = "NuevoNombre";

            Assert.AreNotEqual(nuevoNombre, nombre);
            ElementoDesconocido original = (ElementoDesconocido)objectoDePrueba.Clone();

            // Llama el método a probar.
            objectoDePrueba.ActualizaNombre(nuevoNombre, "Razón");

            // Prueba Propiedades.
            Assert.AreEqual(campos, objectoDePrueba.Campos, "Campos");
            Assert.AreEqual(clase, objectoDePrueba.Clase, "Clase");
            Assert.AreEqual(string.Empty, objectoDePrueba.Descripción, "Descripción");
            Assert.AreEqual(false, objectoDePrueba.FuéEliminado, "FuéEliminado");
            Assert.AreEqual(true, objectoDePrueba.FuéModificado, "FuéModificado");
            Assert.AreEqual(nuevoNombre, objectoDePrueba.Nombre, "Nombre");
            Assert.AreEqual(número, objectoDePrueba.Número, "Número");
            AseguraElementoEsEquivalente(original, objectoDePrueba.Original, "Original");
            Assert.AreEqual(string.Empty, objectoDePrueba.RazónParaEliminación, "RazónParaEliminación");
            Assert.That(objectoDePrueba.Tipo, Is.Null, "Tipo");
        }
        public void PruebaProcesarTodo()
        {
            #region Preparación.
            // Crea el objeto a probar.
            IEscuchadorDeEstatus escuchadorDeEstatus = new EscuchadorDeEstatusPorOmisión();
            ManejadorDeMapa      manejadorDeMapa     = new ManejadorDeMapa(escuchadorDeEstatus);
            ManejadorDePdis      objectoDePrueba     = new ManejadorDePdis(manejadorDeMapa, new List <Pdi>(), escuchadorDeEstatus);

            // Caso de prueba.
            Caso[] casos = new[] {
                //        Tipo,     Nombre Original, Nombre Corregido
                new Caso("0x2a06", "RES. LA COMIDA", "RESTAURANTE LA COMIDA"),                   // Cambia Nombre.
                new Caso("0x2a07", "RES  LA  COMIDA", "RESTAURANTE LA COMIDA"),                  // Cambia nombre y elimina espacios.
                new Caso("0x9999", "RES LA COMIDA", "RES LA COMIDA"),                            // Este no debería cambiar porque el tipo no está en el rango.
                new Caso("0x6402", "CONJ. RESD. LAS TORRES", "CONJUNTO RESIDENCIAL LAS TORRES"), // Cambia Nombre.
            };

            // Crea los PDIs originales.
            IList <Pdi>  pdis  = objectoDePrueba.Elementos;
            const string clase = "POI";
            for (int i = 0; i < casos.Length; ++i)
            {
                Caso         caso   = casos[i];
                List <Campo> campos = new List <Campo> {
                    new CampoNombre(caso.NombreOriginal),
                    new CampoTipo(caso.Tipo)
                };

                Pdi pdi = new Pdi(manejadorDeMapa, i, clase, campos);
                pdis.Add(pdi);
            }

            // Crea los PDIs finales.
            IList <Pdi> pdisEsperados = new List <Pdi>(pdis.Count);
            for (int i = 0; i < pdis.Count; ++i)
            {
                Pdi    pdiEsperado    = (Pdi)pdis[i].Clone();
                string nombreEsperado = casos[i].NombreCorregido;
                if (pdiEsperado.Nombre != nombreEsperado)
                {
                    pdiEsperado.ActualizaNombre(nombreEsperado, "");
                }

                pdisEsperados.Add(pdiEsperado);
            }
            #endregion

            // Llama al método bajo prueba.
            objectoDePrueba.ProcesarTodo();

            #region Prueba propiedades.
            // Prueba propiedad Elementos.
            for (int i = 0; i < objectoDePrueba.Elementos.Count; ++i)
            {
                Assert.That(objectoDePrueba.Elementos[i].Nombre, Is.EqualTo(pdisEsperados[i].Nombre), "Elementos[" + i + "].Nombre");
            }
            #endregion
        }
示例#5
0
 /// <summary>
 /// Constructor.
 /// </summary>
 /// <param name="elManejadorDeMapa">El manejador del mapa.</param>
 /// <param name="elNúmero">El número del PDI.</param>
 /// <param name="laClase">La clase de PDI.</param>
 /// <param name="losCampos">Los campos del PDI.</param>
 /// <param name="elEsCiudad">Variable lógica que indica si el PDI es una ciudad.</param>
 public Pdi(
     ManejadorDeMapa elManejadorDeMapa,
     int elNúmero,
     string laClase,
     IList <Campo> losCampos,
     bool elEsCiudad)
     : this(elManejadorDeMapa,
            elNúmero,
            laClase,
            losCampos)
 {
     EsCiudad = elEsCiudad;
 }
示例#6
0
        public void PruebaConstructor()
        {
            // Preparación.
            IEscuchadorDeEstatus escuchadorDeEstatus = new EscuchadorDeEstatusPorOmisión();
            ManejadorDeMapa      manejadorDeMapa     = new ManejadorDeMapa(escuchadorDeEstatus);
            ManejadorDeVías      manejadorDePdis     = new ManejadorDeVías(manejadorDeMapa, new List <Vía>(), escuchadorDeEstatus, null);

            // Llama al contructor bajo prueba.
            ArregladorGeneral objectoDePrueba = new ArregladorGeneral(manejadorDePdis, escuchadorDeEstatus);

            // Prueba propiedades.
            Assert.That(objectoDePrueba.NúmeroDeElementos, Is.EqualTo(0), "NúmeroDeElementos");
            Assert.That(objectoDePrueba.NúmeroDeProblemasDetectados, Is.EqualTo(0), "NúmeroDeElementosModificados");
        }
示例#7
0
        public void PruebaConstructor()
        {
            // Preparación.
            IEscuchadorDeEstatus escuchadorDeEstatus = new EscuchadorDeEstatusPorOmisión();
            ManejadorDeMapa      manejadorDeMapa     = new ManejadorDeMapa(escuchadorDeEstatus);
            ManejadorDePdis      manejadorDePdis     = new ManejadorDePdis(manejadorDeMapa, new List <Pdi>(), escuchadorDeEstatus);

            // Llama al contructor bajo prueba.
            var objectoDePrueba = new BuscadorDeErrores(manejadorDePdis, escuchadorDeEstatus);

            // Prueba propiedades.
            Assert.That(objectoDePrueba.NúmeroDeElementos, Is.EqualTo(0), "NúmeroDeElementos");
            Assert.That(objectoDePrueba.NúmeroDeProblemasDetectados, Is.EqualTo(0), "NúmeroDeProblemasDetectados");
        }
示例#8
0
        public void PruebaProcesa()
        {
            #region Preparación.
            // Crea el objeto a probar.
            IEscuchadorDeEstatus        escuchadorDeEstatus = new EscuchadorDeEstatusPorOmisión();
            ManejadorDeMapa             manejadorDeMapa     = new ManejadorDeMapa(escuchadorDeEstatus);
            ManejadorDePDIs             manejadorDePDIs     = new ManejadorDePDIs(manejadorDeMapa, new List <PDI>(), escuchadorDeEstatus);
            ArregladorDePalabrasPorTipo objectoDePrueba     = new ArregladorDePalabrasPorTipo(manejadorDePDIs, escuchadorDeEstatus);

            // Caso de prueba.
            Caso[] casos = new Caso[] {
                //        Tipo,     Nombre Original, Nombre Corregido
                new Caso("0x2a06", "RES LA COMIDA", "RESTAURANTE LA COMIDA"),                 // Cambia Nombre.
                new Caso("0x2a07", "RES  LA  COMIDA", "RESTAURANTE LA COMIDA"),               // Cambia nombre y elimina espacios.
                new Caso("0x9999", "RES LA COMIDA", "RES LA COMIDA"),                         // Este no debería cambiar porque el tipo no está en el rango.
                new Caso("0x6402", "CONJ RES LAS TORRES", "CONJUNTO RESIDENCIAL LAS TORRES"), // Cambia Nombre.
            };
            int númeroDeProblemasDetectados = 6;

            // Crea los elementos.
            IList <PDI> pdis  = manejadorDePDIs.Elementos;
            string      clase = "POI";
            for (int i = 0; i < casos.Length; ++i)
            {
                Caso         caso   = casos[i];
                List <Campo> campos = new List <Campo> {
                    new CampoNombre(caso.NombreOriginal),
                    new CampoTipo(caso.Tipo)
                };

                PDI pdi = new PDI(manejadorDeMapa, i, clase, campos);
                pdis.Add(pdi);
            }
            #endregion

            // Llama al método bajo prueba.
            objectoDePrueba.Procesa();

            // Prueba propiedades.
            Assert.That(objectoDePrueba.NúmeroDeElementoProcesándose, Is.EqualTo(pdis.Count), "NúmeroDeElementoProcesándose");
            Assert.That(objectoDePrueba.NúmeroDeElementos, Is.EqualTo(pdis.Count), "NúmeroDeElementos");
            Assert.That(objectoDePrueba.NúmeroDeProblemasDetectados, Is.EqualTo(númeroDeProblemasDetectados), "NúmeroDeProblemasDetectados");

            // Prueba los nobres de los PDIs.
            for (int i = 0; i < casos.Length; ++i)
            {
                Assert.That(casos[i].NombreCorregido, Is.EqualTo(pdis[i].Nombre), "PDI[" + i + "].Nombre");
            }
        }
        public void PruebaConstructor()
        {
            // Preparación.
            IEscuchadorDeEstatus escuchadorDeEstatus = new EscuchadorDeEstatusPorOmisión();
            ManejadorDeMapa      manejadorDeMapa     = new ManejadorDeMapa(escuchadorDeEstatus);
            IList <Pdi>          pdis = new List <Pdi>();

            // Llama al contructor bajo prueba.
            ManejadorDePdis objectoDePrueba = new ManejadorDePdis(manejadorDeMapa, pdis, escuchadorDeEstatus);

            // Prueba propiedades.
            Assert.That(objectoDePrueba.Elementos, Is.EqualTo(pdis), "Elementos");
            Assert.That(objectoDePrueba.EscuchadorDeEstatus, Is.EqualTo(escuchadorDeEstatus), "EscuchadorDeEstatus");
            Assert.That(objectoDePrueba.ManejadorDeMapa, Is.EqualTo(manejadorDeMapa), "ManejadorDeMapa");
        }
示例#10
0
        public void PruebaConstructor()
        {
            // Preparación.
            IEscuchadorDeEstatus escuchadorDeEstatus = new EscuchadorDeEstatusPorOmisión();
            ManejadorDeMapa      manejadorDeMapa     = new ManejadorDeMapa(escuchadorDeEstatus);
            ManejadorDePDIs      manejadorDePDIs     = new ManejadorDePDIs(manejadorDeMapa, new List <PDI>(), escuchadorDeEstatus);

            // Llama al contructor bajo prueba.
            BuscadorDeDuplicados objectoDePrueba = new BuscadorDeDuplicados(manejadorDePDIs, escuchadorDeEstatus);

            // Prueba propiedades.
            Assert.That(objectoDePrueba.NúmeroDeElementoProcesándose, Is.EqualTo(0), "NúmeroDeElementoProcesándose");
            Assert.That(objectoDePrueba.NúmeroDeElementos, Is.EqualTo(0), "NúmeroDeElementos");
            Assert.That(objectoDePrueba.NúmeroDeProblemasDetectados, Is.EqualTo(0), "NúmeroDeElementosModificados");
        }
        /// <summary>
        /// Constructor.
        /// </summary>
        /// <param name="elManejadorDeMapa">El Manejador de Mapa.</param>
        /// <param name="losPuntosDeInteres">Los PDIs.</param>
        /// <param name="elEscuchadorDeEstatus">El escuchador de estatus.</param>
        public ManejadorDePdis(
            ManejadorDeMapa elManejadorDeMapa,
            IList <Pdi> losPuntosDeInteres,
            IEscuchadorDeEstatus elEscuchadorDeEstatus)
            : base(elManejadorDeMapa, losPuntosDeInteres, elEscuchadorDeEstatus)
        {
            // Crea los procesadores.
            ArregladorDeIndicesDeCiudad = new ArregladorDeIndicesDeCiudad(this, elEscuchadorDeEstatus);
            ArregladorGeneral           = new ArregladorGeneral(this, elEscuchadorDeEstatus);
            BuscadorDeDuplicados        = new BuscadorDeDuplicados(this, elEscuchadorDeEstatus);
            BuscadorDeAlertas           = new BuscadorDeAlertas(this, elEscuchadorDeEstatus);
            BuscadorDeErrores           = new BuscadorDeErrores(this, elEscuchadorDeEstatus);

            // Escucha eventos.
            elManejadorDeMapa.PdisModificados += EnElementosModificados;
        }
示例#12
0
        /// <summary>
        /// Este método se llama antes de comenzar a procesar los elementos.
        /// </summary>
        protected override bool ComenzóAProcesar()
        {
            // Ask for the file.
            string file = myOpenFileDialogService.OpenFileDialog();

            // Return early if the user cancels.
            if (string.IsNullOrEmpty(file))
            {
                return(false);
            }

            var sourceMapManager = new ManejadorDeMapa(EscuchadorDeEstatus);
            var reader           = new LectorDeFormatoPolish(sourceMapManager, file);

            mySourceElements = reader.ElementosDelMapa;
            return(base.ComenzóAProcesar());
        }
示例#13
0
        private void EnBotónEliminarPdis(object sender, EventArgs e)
        {
            // Suspende notificaciones.
            ManejadorDeMapa.SuspendeEventos();

            // Obtiene la lista de PDIs a eliminar.
            List <Pdi> pdisAEliminar = new List <Pdi>();

            foreach (ListViewItem item in miLista.Items)
            {
                if (item.Checked)
                {
                    pdisAEliminar.Add(((ElementoConEtiqueta)item.Tag).ElementoDelMapa as Pdi);
                }
            }

            // Pregunta si se quiere eliminar los PDIs.
            string       texto     = string.Format("Está seguro que quiere borrar los {0} PDIs seleccionados?", pdisAEliminar.Count);
            DialogResult respuesta = MessageBox.Show(
                texto,
                "Eliminar PDIs",
                MessageBoxButtons.YesNo,
                MessageBoxIcon.Warning);

            // Elimina los PDIs si el usuario dice que si.
            if (respuesta == DialogResult.Yes)
            {
                foreach (Pdi pdi in pdisAEliminar)
                {
                    pdi.Elimina("Manualmente eliminado en la pestaña de 'Posibles Duplicados'");
                }

                // Restablece notificaciones.
                ManejadorDeMapa.RestableceEventos();

                // Busca otra vez los PDIs duplicados tomando en cuenta
                // los que se acaban de eliminar.
                miBuscadorDeDuplicados.Procesa();
            }
            else
            {
                // Restablece notificaciones.
                ManejadorDeMapa.RestableceEventos();
            }
        }
示例#14
0
        /// <summary>
        /// Constructor.
        /// </summary>
        /// <param name="elManejadorDeMapa">El Manejador de Mapa.</param>
        /// <param name="lasVías">Las Vías.</param>
        /// <param name="elEscuchadorDeEstatus">El escuchador de estatus.</param>
        /// <param name="elServicioDiálogoAbrirArchivos">El servicio de diálogo para abrir archivos.</param>
        public ManejadorDeVías(
            ManejadorDeMapa elManejadorDeMapa,
            IList <Vía> lasVías,
            IEscuchadorDeEstatus elEscuchadorDeEstatus,
            IOpenFileDialogService elServicioDiálogoAbrirArchivos)
            : base(elManejadorDeMapa, lasVías, elEscuchadorDeEstatus)
        {
            // Crea los procesadores.
            ArregladorDeIndicesDeCiudad          = new ArregladorDeIndicesDeCiudad(this, elEscuchadorDeEstatus);
            ArregladorGeneral                    = new ArregladorGeneral(this, elEscuchadorDeEstatus);
            BuscadorDeErrores                    = new BuscadorDeErrores(this, elEscuchadorDeEstatus);
            BuscadorDeAlertas                    = new BuscadorDeAlertas(this, elEscuchadorDeEstatus);
            BuscadorDePosiblesErroresDeRuteo     = new BuscadorDePosiblesErroresDeRuteo(this, elEscuchadorDeEstatus);
            BuscadorDePosiblesNodosDesconectados = new BuscadorDePosiblesNodosDesconectados(this, elEscuchadorDeEstatus);
            RemplazadorDeNombresDeVias           = new RemplazadorDeNombresDeVias(this, elEscuchadorDeEstatus, elServicioDiálogoAbrirArchivos);

            // Escucha eventos.
            elManejadorDeMapa.VíasModificadas += EnElementosModificados;
        }
示例#15
0
        /// <summary>
        /// Constructor.
        /// </summary>
        /// <param name="elManejadorDeMapa">El manejador del mapa.</param>
        /// <param name="elNúmero">El número de la <see cref="Polilínea"/>.</param>
        /// <param name="laClase">La clase de la <see cref="Polilínea"/>.</param>
        /// <param name="losCampos">Los campos de la <see cref="Polilínea"/>.</param>
        public Vía(
            ManejadorDeMapa elManejadorDeMapa,
            int elNúmero,
            string laClase,
            IList <Campo> losCampos)
            : base(elManejadorDeMapa,
                   elNúmero,
                   laClase,
                   losCampos)
        {
            CampoParámetrosDeRuta     = miCampoParámetrosDeRutaPorDefecto;
            CampoIndicadorDeDirección = null;

            // Busca los campos específicos de las vías.
            foreach (Campo campo in losCampos)
            {
                CampoParámetrosDeRuta campoParámetrosDeRuta = campo as CampoParámetrosDeRuta;
                CampoNombre           campoNombre;
                CampoGenérico         campoGenérico;
                if (campoParámetrosDeRuta != null)
                {
                    CampoParámetrosDeRuta = campoParámetrosDeRuta;
                    miTieneCampoParámetrosDeRutaEnCampos = true;
                }
                else if ((campoNombre = campo as CampoNombre) != null)
                {
                    if (campoNombre.Número == 2)
                    {
                        miCampoNombreSecundario = campoNombre;
                    }
                }
                else if ((campoGenérico = campo as CampoGenérico) != null)
                {
                    if (campoGenérico.Identificador == IdentificadorIndicadorDeDirección)
                    {
                        CampoIndicadorDeDirección = campoGenérico;
                    }
                }
            }

            CreaNodos();
        }
示例#16
0
        private void EnMenúMarcarComoNodosDesconectados(object elEnviador, EventArgs losArgumentos)
        {
            // Retornamos si no hay Vías seleccionadas.
            int númeroDeNodosSeleccionados = miLista.SelectedIndices.Count;

            if (númeroDeNodosSeleccionados == 0)
            {
                return;
            }

            if (númeroDeNodosSeleccionados > 1)
            {
                // Pregunta si se quiere marcar los nodos como desconectados.
                DialogResult respuesta = MessageBox.Show(
                    string.Format("Está seguro que quiere marcar los {0} Nodos seleccionados como nodos desconectados?",
                                  númeroDeNodosSeleccionados),
                    "Marcar como Nodos Desconectados",
                    MessageBoxButtons.YesNo,
                    MessageBoxIcon.Warning);

                if (respuesta != DialogResult.Yes)
                {
                    return;
                }
            }

            #region Marca Nodos como Desconectados.
            // Añade el attributo a los nodos.
            ManejadorDeMapa.SuspendeEventos();
            IList <InformaciónNodoDesconectado> posibleNodoDesconectados = miInterfaseListaConMapaDeVías.MenuEditorDeVías.ObtieneEtiquetasSeleccionadas <InformaciónNodoDesconectado>();
            foreach (InformaciónNodoDesconectado posibleNodoDesconectado in posibleNodoDesconectados)
            {
                string atributo = BuscadorDePosiblesNodosDesconectados.AtributoNodoDesconectado
                                  + ',' + posibleNodoDesconectado.PosibleNodoDesconectado.Indice;
                posibleNodoDesconectado.PosibleNodoDesconectado.Vía.AñadeAtributo(atributo);
            }
            ManejadorDeMapa.RestableceEventos();

            // Notifica la edición.
            miMenú.EnvíaEventoEditó();
            #endregion
        }
示例#17
0
        private void AñadeAttributo(string elTítulo, string laPregunta, string elAtributo)
        {
            ListView lista = miInterfaseListaConMapaDePdis.InterfaseListaDePdis;

            // Retornamos si no hay PDIs seleccionados.
            int númeroDePdisSeleccionados = lista.SelectedIndices.Count;

            if (númeroDePdisSeleccionados == 0)
            {
                return;
            }

            // Pregunta si se quiere Ignorarque el PDI no tenga coordenadas a Nivel 0.
            DialogResult respuesta = MessageBox.Show(
                string.Format(
                    laPregunta,
                    númeroDePdisSeleccionados),
                elTítulo,
                MessageBoxButtons.YesNo,
                MessageBoxIcon.Warning);

            #region Estandarizar el Límite de Velocidad si el usuario dice que si.
            if (respuesta != DialogResult.Yes)
            {
                return;
            }

            // Añade los attributos.
            ManejadorDeMapa.SuspendeEventos();
            IList <Pdi> pdis = miInterfaseListaConMapaDePdis.MenuEditorDePdis.ObtieneElementosSeleccionados <Pdi>();
            foreach (Pdi pdi in pdis)
            {
                pdi.AñadeAtributo(elAtributo);
            }
            ManejadorDeMapa.RestableceEventos();

            // Busca errores otra vez.
            miBuscadorDeErrores.Procesa();
            #endregion
        }
示例#18
0
        private void EnMenúIgnorarCambiosBruscosDeClaseDeRuta(object elEnviador, EventArgs losArgumentos)
        {
            // Retornamos si no hay Vías seleccionadas.
            int númeroDeVíasSeleccionadas = miLista.SelectedIndices.Count;

            if (númeroDeVíasSeleccionadas == 0)
            {
                return;
            }

            if (númeroDeVíasSeleccionadas > 1)
            {
                // Pregunta si se quiere ignorar los cambios bruscos de clase de ruta.
                DialogResult respuesta = MessageBox.Show(
                    string.Format("Está seguro que quiere ignorar los cambios bruscos de clase de ruta en las {0} Vías seleccionadas?",
                                  númeroDeVíasSeleccionadas),
                    "Ignorar Cambios Bruscos de Clase de Ruta",
                    MessageBoxButtons.YesNo,
                    MessageBoxIcon.Warning);

                if (respuesta != DialogResult.Yes)
                {
                    return;
                }
            }

            // Añade el attributo a las vías.
            ManejadorDeMapa.SuspendeEventos();
            IList <Vía> vías = miInterfaseListaConMapaDeVías.MenuEditorDeVías.ObtieneElementosSeleccionados <Vía>();

            foreach (Vía vía in vías)
            {
                vía.AñadeAtributo(BuscadorDePosiblesErroresDeRuteo.AtributoIgnorarCambioBruscoDeClaseDeRuta);
            }
            ManejadorDeMapa.RestableceEventos();

            // Notifica la edición.
            miMenú.EnvíaEventoEditó();
        }
示例#19
0
        private void EnMenúExcluirDeBúsquedaDeParámetrosDeRutaEstándar(object elEnviador, EventArgs losArgumentos)
        {
            ListView lista = miInterfaseListaConMapaDeVías.InterfaseListaDeVías;

            // Retornamos si no hay Vías seleccionadas.
            int númeroDeVíasSeleccionadas = lista.SelectedIndices.Count;

            if (númeroDeVíasSeleccionadas == 0)
            {
                return;
            }

            // Pregunta si se quiere Estandarizar el Límite de Velocidad.
            DialogResult respuesta = MessageBox.Show(
                string.Format("Está seguro que quiere Excluir las {0} Vías seleccionadas de próximas búsquedas de Parámetros de Ruta Estándar?", númeroDeVíasSeleccionadas),
                "Excluir de Búsqueda de Parámetros de Ruta Estándar",
                MessageBoxButtons.YesNo,
                MessageBoxIcon.Warning);

            #region Estandarizar el Límite de Velocidad si el usuario dice que si.
            if (respuesta != DialogResult.Yes)
            {
                return;
            }

            // Cambia las vías.
            ManejadorDeMapa.SuspendeEventos();
            IList <Vía> vías = miInterfaseListaConMapaDeVías.MenuEditorDeVías.ObtieneElementosSeleccionados <Vía>();
            foreach (Vía vía in vías)
            {
                vía.AñadeAtributo(BuscadorDeAlertas.AtributoNoParámetrosDeRutaEstándar);
            }
            ManejadorDeMapa.RestableceEventos();

            // Busca inconguencias otra vez.
            miBuscadorDeAlertas.Procesa();
            #endregion
        }
示例#20
0
        public void PruebaConstructor()
        {
            // Preparación.
            int                   número           = 12;
            ManejadorDeMapa       manejadorDeMapa  = new ManejadorDeMapa(new EscuchadorDeEstatusPorOmisión());
            string                clase            = "clase";
            string                nombre           = "Nombre";
            string                tipo             = "0xc";
            string                descripción      = "Roundabout";
            CampoParámetrosDeRuta parámetrosDeRuta = new CampoParámetrosDeRuta(
                new LímiteDeVelocidad(2),
                new ClaseDeRuta(3),
                new bool[10]);
            List <Campo> campos = new List <Campo> {
                new CampoNombre(nombre),
                new CampoComentario(";Comentario"),
                new CampoTipo(tipo),
                parámetrosDeRuta
            };

            // Llama al constructor.
            Vía objectoEnPrueba = new Vía(manejadorDeMapa, número, clase, campos);

            // Prueba Propiedades.
            Assert.That(campos, Is.EqualTo(objectoEnPrueba.Campos), "Campos");
            Assert.That(clase, Is.EqualTo(objectoEnPrueba.Clase), "Clase");
            Assert.That(descripción, Is.EqualTo(objectoEnPrueba.Descripción), "Descripción");
            Assert.That(objectoEnPrueba.FuéEliminado, Is.False, "FuéEliminado");
            Assert.That(objectoEnPrueba.FuéModificado, Is.False, "FuéModificado");
            Assert.That(nombre, Is.EqualTo(objectoEnPrueba.Nombre), "Nombre");
            Assert.That(número, Is.EqualTo(objectoEnPrueba.Número), "Número");
            Assert.That(objectoEnPrueba.Original, Is.Null, "Original");
            Assert.That(string.Empty, Is.EqualTo(objectoEnPrueba.RazónParaEliminación), "RazónParaEliminación");
            Assert.That(new Tipo(tipo), Is.EqualTo(objectoEnPrueba.Tipo), "Tipo");
            Assert.That(objectoEnPrueba.CampoParámetrosDeRuta, Is.EqualTo(parámetrosDeRuta), "CampoParámetrosDeRuta");
        }
示例#21
0
 /// <summary>
 /// Constructor.
 /// </summary>
 /// <param name="elManejadorDeMapa">El manejador del mapa.</param>
 /// <param name="elNúmero">El número del Polígono.</param>
 /// <param name="laClase">La clase de Polígono.</param>
 /// <param name="losCampos">Los campos del Polígono.</param>
 public Polígono(
     ManejadorDeMapa elManejadorDeMapa,
     int elNúmero,
     string laClase,
     IList<Campo> losCampos)
     : base(elManejadorDeMapa, 
      elNúmero,
      laClase,
      CaracterísticasDePolígonos.Descripciones,
      losCampos)
 {
     // Busca los campos especificos de los Polígonos.
       foreach (Campo campo in losCampos)
       {
     if (campo is CampoCoordenadas)
     {
       misCoordenadas = (CampoCoordenadas)campo;
     }
       }
 }
示例#22
0
        public void PruebaCambiaCampoParámetrosDeRuta()
        {
            #region Caso 1: Vía con Campo de Parámetros de Ruta.
            {
                #region Preparación.
                int             número          = 12;
                ManejadorDeMapa manejadorDeMapa = new ManejadorDeMapa(new EscuchadorDeEstatusPorOmisión());
                string          clase           = "clase";
                string          nombre          = "Nombre";
                string          tipo            = "0xc";
                string          descripción     = "Roundabout";

                CampoParámetrosDeRuta campoParámetrosDeRuta = new CampoParámetrosDeRuta(
                    new LímiteDeVelocidad(2),
                    new ClaseDeRuta(3),
                    new bool[] { true, false, false, true, true, false, true, true, false, false });

                List <Campo> campos = new List <Campo> {
                    new CampoNombre(nombre),
                    new CampoComentario(";Comentario"),
                    new CampoTipo(tipo),
                    campoParámetrosDeRuta
                };

                // Crea el objeto en prueba.
                Vía             objectoEnPrueba = new Vía(manejadorDeMapa, número, clase, campos);
                ElementoDelMapa víaOriginal     = (ElementoDelMapa)objectoEnPrueba.Clone();

                // Nuevos valores.
                CampoParámetrosDeRuta nuevoCampoParámetrosDeRuta = new CampoParámetrosDeRuta(
                    new LímiteDeVelocidad(5),
                    campoParámetrosDeRuta.ClaseDeRuta,
                    campoParámetrosDeRuta.OtrosParámetros);
                Assert.That(nuevoCampoParámetrosDeRuta, Is.Not.EqualTo(campoParámetrosDeRuta), "El nuevo campo de parámetros de ruta debe ser distinto");
                #endregion

                // Llama al método a probar.
                objectoEnPrueba.CambiaCampoParámetrosDeRuta(nuevoCampoParámetrosDeRuta, "Razón");

                // Prueba Propiedades.
                Assert.That(objectoEnPrueba.Campos, Is.EqualTo(campos), "Campos");
                Assert.That(objectoEnPrueba.Clase, Is.EqualTo(clase), "Clase");
                Assert.That(descripción, Is.EqualTo(objectoEnPrueba.Descripción), "Descripción");
                Assert.That(objectoEnPrueba.FuéEliminado, Is.False, "FuéEliminado");
                Assert.That(objectoEnPrueba.FuéModificado, Is.True, "FuéModificado");
                Assert.That(objectoEnPrueba.Nombre, Is.EqualTo(nombre), "Nombre");
                Assert.That(objectoEnPrueba.Número, Is.EqualTo(número), "Número");
                PruebaElementoDesconocido.AseguraElementoEsEquivalente(víaOriginal, objectoEnPrueba.Original, "Original");
                Assert.That(objectoEnPrueba.RazónParaEliminación, Is.EqualTo(string.Empty), "RazónParaEliminación");
                Assert.That(objectoEnPrueba.Tipo, Is.EqualTo(new Tipo(tipo)), "Tipo");
                Assert.That(objectoEnPrueba.CampoParámetrosDeRuta, Is.EqualTo(nuevoCampoParámetrosDeRuta), "CampoParámetrosDeRuta");
            }
            #endregion

            #region Caso 2: Vía sin Campo de Parámetros de Ruta.
            {
                #region Preparación.
                int             número          = 12;
                ManejadorDeMapa manejadorDeMapa = new ManejadorDeMapa(new EscuchadorDeEstatusPorOmisión());
                string          clase           = "clase";
                string          nombre          = "Nombre";
                string          tipo            = "0xc";
                string          descripción     = "Roundabout";
                List <Campo>    campos          = new List <Campo> {
                    new CampoNombre(nombre),
                    new CampoComentario(";Comentario"),
                    new CampoTipo(tipo)
                };

                // Crea el objeto en prueba.
                Vía             objectoEnPrueba = new Vía(manejadorDeMapa, número, clase, campos);
                ElementoDelMapa víaOriginal     = (ElementoDelMapa)objectoEnPrueba.Clone();

                // Nuevos valores.
                CampoParámetrosDeRuta nuevoCampoParámetrosDeRuta = new CampoParámetrosDeRuta(
                    new LímiteDeVelocidad(4),
                    new ClaseDeRuta(1),
                    new bool[10]);
                #endregion

                // Llama al método a probar.
                objectoEnPrueba.CambiaCampoParámetrosDeRuta(nuevoCampoParámetrosDeRuta, "Razón");

                // Prueba Propiedades.
                Assert.That(objectoEnPrueba.Campos, Is.EqualTo(campos), "Campos");
                Assert.That(objectoEnPrueba.Clase, Is.EqualTo(clase), "Clase");
                Assert.That(descripción, Is.EqualTo(objectoEnPrueba.Descripción), "Descripción");
                Assert.That(objectoEnPrueba.FuéEliminado, Is.False, "FuéEliminado");
                Assert.That(objectoEnPrueba.FuéModificado, Is.True, "FuéModificado");
                Assert.That(objectoEnPrueba.Nombre, Is.EqualTo(nombre), "Nombre");
                Assert.That(objectoEnPrueba.Número, Is.EqualTo(número), "Número");
                PruebaElementoDesconocido.AseguraElementoEsEquivalente(víaOriginal, objectoEnPrueba.Original, "Original");
                Assert.That(objectoEnPrueba.RazónParaEliminación, Is.EqualTo(string.Empty), "RazónParaEliminación");
                Assert.That(objectoEnPrueba.Tipo, Is.EqualTo(new Tipo(tipo)), "Tipo");
                Assert.That(objectoEnPrueba.CampoParámetrosDeRuta, Is.EqualTo(nuevoCampoParámetrosDeRuta), "CampoParámetrosDeRuta");
            }
            #endregion

            #region Caso 3: Vía con el Mismo Campo de Parámetros de Ruta.
            {
                #region Preparación.
                int             número          = 12;
                ManejadorDeMapa manejadorDeMapa = new ManejadorDeMapa(new EscuchadorDeEstatusPorOmisión());
                string          clase           = "clase";
                string          nombre          = "Nombre";
                string          tipo            = "0xc";
                string          descripción     = "Roundabout";

                CampoParámetrosDeRuta campoParámetrosDeRuta = new CampoParámetrosDeRuta(
                    new LímiteDeVelocidad(2),
                    new ClaseDeRuta(3),
                    new bool[] { true, false, false, true, true, false, true, true, false, false });

                List <Campo> campos = new List <Campo> {
                    new CampoNombre(nombre),
                    new CampoComentario(";Comentario"),
                    new CampoTipo(tipo),
                    campoParámetrosDeRuta
                };

                // Crea el objeto en prueba.
                Vía objectoEnPrueba = new Vía(manejadorDeMapa, número, clase, campos);
                #endregion

                // Llama al método a probar.
                objectoEnPrueba.CambiaCampoParámetrosDeRuta(campoParámetrosDeRuta, "Razón");

                // Prueba Propiedades.
                Assert.That(objectoEnPrueba.Campos, Is.EqualTo(campos), "Campos");
                Assert.That(objectoEnPrueba.Clase, Is.EqualTo(clase), "Clase");
                Assert.That(descripción, Is.EqualTo(objectoEnPrueba.Descripción), "Descripción");
                Assert.That(objectoEnPrueba.FuéEliminado, Is.False, "FuéEliminado");
                Assert.That(objectoEnPrueba.FuéModificado, Is.False, "FuéModificado");
                Assert.That(objectoEnPrueba.Nombre, Is.EqualTo(nombre), "Nombre");
                Assert.That(objectoEnPrueba.Número, Is.EqualTo(número), "Número");
                Assert.That(objectoEnPrueba.Original, Is.Null, "Original");
                Assert.That(objectoEnPrueba.RazónParaEliminación, Is.EqualTo(string.Empty), "RazónParaEliminación");
                Assert.That(objectoEnPrueba.Tipo, Is.EqualTo(new Tipo(tipo)), "Tipo");
                Assert.That(objectoEnPrueba.CampoParámetrosDeRuta, Is.EqualTo(campoParámetrosDeRuta), "CampoParámetrosDeRuta");
            }
            #endregion
        }
示例#23
0
        private static void ArreglaMapaTopografico(ManejadorDeMapa.ManejadorDeMapa elManejadorDeMapa)
        {
            #region Arregla el encabezado.
              ElementoDelMapa encabezado = elManejadorDeMapa.Encabezado;
              IList<Campo> camposDelEncabezado = encabezado.Campos;
              CampoGenérico campoNombre = (CampoGenérico)camposDelEncabezado[1];

              // Borra los campos para re-generarlos.
              camposDelEncabezado.Clear();
              camposDelEncabezado.Add(new CampoGenérico("CodePage", "1252"));
              camposDelEncabezado.Add(new CampoGenérico("LblCoding", "9"));
              camposDelEncabezado.Add(new CampoGenérico("ID", campoNombre.Texto));
              camposDelEncabezado.Add(campoNombre);

              // Añade los campos nuevos.
              Campo[] camposNuevos = new Campo[] {
            new CampoGenérico("Elevation", "M"),
            new CampoGenérico("Preprocess", "F"),
            new CampoGenérico("TreSize", "5000"),
            new CampoGenérico("TreMargin", "0.00000"),
            new CampoGenérico("RgnLimit", "1024"),
            new CampoGenérico("Transparent", "Y"),
            new CampoGenérico("Copyright", "www.gpsyv.net"),
            new CampoGenérico("Levels", "5"),
            new CampoGenérico("Level0", "24"),
            new CampoGenérico("Level1", "22"),
            new CampoGenérico("Level2", "20"),
            new CampoGenérico("Level3", "19"),
            new CampoGenérico("Level4", "18"),
            new CampoGenérico("Zoom0", "0"),
            new CampoGenérico("Zoom1", "1"),
            new CampoGenérico("Zoom2", "2"),
            new CampoGenérico("Zoom3", "3"),
            new CampoGenérico("Zoom4", "4"),
            };
              foreach (Campo campo in camposNuevos)
              {
            camposDelEncabezado.Add(campo);
              }
              Console.WriteLine("  arreglado encabezado...");
              #endregion

              #region Arregla las Polilíneas
              foreach (var polilínea in elManejadorDeMapa.Polilíneas)
              {
            IList<Campo> campos = polilínea.Campos;

            // Busca el campo de tipo.
            int? índiceCampoTipo = null;
            for (int i = 0; i < campos.Count; ++i)
            {
              if (campos[i] is CampoTipo)
              {
            índiceCampoTipo = i;
            break;
              }
            }

            // Add EndLevel después del campo tipo.
            if (índiceCampoTipo != null)
            {
              int i = (int)índiceCampoTipo + 1;
              campos.Insert(i, new CampoGenérico("EndLevel", "3"));
            }
              }
              Console.WriteLine("  arregladas polilíneas...");
              #endregion

              #region Elimina los elementos con Data1 y Data2, y los polígonos.
              IList<ElementoDelMapa> elementos = elManejadorDeMapa.ManejadorDeElementos.Elementos;
              int últimoIndex = elementos.Count - 1;
              for (int i = últimoIndex; i >= 0; --i)
              {
            ElementoDelMapa elemento = elementos[i];

            // Remueve los polígonos.
            if (elemento is Polígono)
            {
              elementos.RemoveAt(i);
            }
            // Si no es polígono entonces vemos si es una polilínea
            // y la removemos si no tiene data0.
            else if (elemento is Polilínea)
            {
              // Buscamos si tiene data0.
              bool tieneData0 = false;
              foreach (var campo in elemento.Campos)
              {
            CampoCoordenadas campoCoordenadas = campo as CampoCoordenadas;
            if (campoCoordenadas != null)
            {
              if (campoCoordenadas.Nivel == 0)
              {
                tieneData0 = true;
                break;
              }
            }
              }

              // Removemos el elemento si no tiene data0.
              if (!tieneData0)
              {
            elementos.RemoveAt(i);
              }
            }
              }
              Console.WriteLine("  eliminados polilíneas sin data 0, y polígonos...");
              #endregion
        }
示例#24
0
        public void PruebaProcesaCaso1()
        {
            #region Preparación.
            // Crea el objeto a probar.
            IEscuchadorDeEstatus escuchadorDeEstatus = new EscuchadorDeEstatusPorOmisión();
            ManejadorDeMapa      manejadorDeMapa     = new ManejadorDeMapa(escuchadorDeEstatus);
            ManejadorDeVías      manejadorDeVías     = new ManejadorDeVías(manejadorDeMapa, new List <Vía>(), escuchadorDeEstatus, null);
            ArregladorGeneral    objectoDePrueba     = new ArregladorGeneral(manejadorDeVías, escuchadorDeEstatus);

            // Caso de prueba.
            Caso[] casos = new[] {
                //         Nombre, IndicadorDeDirección, UnSoloSentido, IndicadorDeDirecciónEsperado, UnSoloSentidoEsperado
                new Caso("A", "0", false, "0", false),                                                                // Calle doble sentido.
                new Caso("B", "0", true, "1", true),                                                                  // Indicador de dirección = 0.
                new Caso("C", "1", false, "1", true),                                                                 // Falta UnSoloSentido.
                new Caso("D", "1", true, "1", true),                                                                  // Calle un sentido.
                new Caso("E", null, true, "1", true),                                                                 // Falta indicador de dirección.
            };
            const int númeroDeProblemasDetectados = 3;

            // Crea los elementos.
            // Vía típica:
            //   [POLYLINE]
            //   Type=0x2
            //   Label=TRONCAL 9
            //   EndLevel=3
            //   DirIndicator=1
            //   CityIdx=1
            //   RoadID=47
            //   RouteParam=5,3,1,0,0,0,0,0,0,0,0,0
            //   Data0=(10.16300,-66.00000),(10.16199,-65.99850),(10.16010,-65.99591)
            IList <Vía>  vías  = manejadorDeVías.Elementos;
            const string clase = "POI";
            for (int i = 0; i < casos.Length; ++i)
            {
                Caso         caso   = casos[i];
                List <Campo> campos = new List <Campo> {
                    new CampoTipo("0x2"),
                    new CampoNombre(caso.Nombre),
                    new CampoGenérico("EndLevel", "3"),
                    new CampoParámetrosDeRuta(
                        new LímiteDeVelocidad(5),
                        new ClaseDeRuta(3),
                        new[] { caso.UnSoloSentido, false, false, false, false, false, false, false, false, false }),
                    new CampoCoordenadas("Data", 0, new[]
                    {
                        new Coordenadas(10.16300, -66.00000),
                        new Coordenadas(10.16199, -65.99850),
                        new Coordenadas(10.16010, -65.99591),
                    })
                };
                if (caso.IndicadorDeDirección != null)
                {
                    campos.Add(new CampoGenérico(Vía.IdentificadorIndicadorDeDirección, caso.IndicadorDeDirección));
                }

                Vía vía = new Vía(manejadorDeMapa, i, clase, campos);
                vías.Add(vía);
            }
            #endregion

            // Llama al método bajo prueba.
            objectoDePrueba.Procesa();

            // Prueba propiedades.
            Assert.That(objectoDePrueba.NúmeroDeElementos, Is.EqualTo(vías.Count), "NúmeroDeElementos");
            Assert.That(objectoDePrueba.NúmeroDeProblemasDetectados, Is.EqualTo(númeroDeProblemasDetectados), "NúmeroDeProblemasDetectados");

            // Prueba los nobres de los PDIs.
            for (int i = 0; i < casos.Length; ++i)
            {
                Assert.That(vías[i].CampoParámetrosDeRuta.OtrosParámetros[0], Is.EqualTo(casos[i].UnSoloSentidoEsperado), "Vía[" + i + "].OtrosParámetros[0]");
                Assert.That(vías[i].CampoIndicadorDeDirección, Is.Not.Null, "Vía[" + i + "].CampoIndicadorDeDirección");
                Assert.That(vías[i].CampoIndicadorDeDirección.Texto, Is.EqualTo(casos[i].IndicadorDeDirecciónEsperado), "Vía[" + i + "].CampoIndicadorDeDirección.Texto");
            }
        }
        public void PruebaProcesa()
        {
            #region Preparación.
              // Crea el objeto a probar.
              IEscuchadorDeEstatus escuchadorDeEstatus = new EscuchadorDeEstatusPorOmisión();
              ManejadorDeMapa manejadorDeMapa = new ManejadorDeMapa(escuchadorDeEstatus);
              ManejadorDePDIs manejadorDePDIs = new ManejadorDePDIs(manejadorDeMapa, new List<PDI>(), escuchadorDeEstatus);
              ArregladorDePalabrasPorTipo objectoDePrueba = new ArregladorDePalabrasPorTipo(manejadorDePDIs, escuchadorDeEstatus);

              // Caso de prueba.
              Caso[] casos = new Caso[] {
            //        Tipo,     Nombre Original, Nombre Corregido
            new Caso ("0x2a06", "RES LA COMIDA", "RESTAURANTE LA COMIDA"), // Cambia Nombre.
            new Caso ("0x2a07", "RES  LA  COMIDA", "RESTAURANTE LA COMIDA"), // Cambia nombre y elimina espacios.
            new Caso ("0x9999", "RES LA COMIDA", "RES LA COMIDA"),  // Este no debería cambiar porque el tipo no está en el rango.
            new Caso ("0x6402", "CONJ RES LAS TORRES", "CONJUNTO RESIDENCIAL LAS TORRES"), // Cambia Nombre.
              };
              int númeroDeProblemasDetectados = 6;

              // Crea los elementos.
              IList<PDI> pdis = manejadorDePDIs.Elementos;
              string clase = "POI";
              for (int i = 0; i < casos.Length; ++i)
              {
            Caso caso = casos[i];
            List<Campo> campos = new List<Campo> {
              new CampoNombre (caso.NombreOriginal),
              new CampoTipo (caso.Tipo)
            };

            PDI pdi = new PDI(manejadorDeMapa, i, clase, campos);
            pdis.Add(pdi);
              }
              #endregion

              // Llama al método bajo prueba.
              objectoDePrueba.Procesa();

              // Prueba propiedades.
              Assert.That(objectoDePrueba.NúmeroDeElementoProcesándose, Is.EqualTo(pdis.Count), "NúmeroDeElementoProcesándose");
              Assert.That(objectoDePrueba.NúmeroDeElementos, Is.EqualTo(pdis.Count), "NúmeroDeElementos");
              Assert.That(objectoDePrueba.NúmeroDeProblemasDetectados, Is.EqualTo(númeroDeProblemasDetectados), "NúmeroDeProblemasDetectados");

              // Prueba los nobres de los PDIs.
              for (int i = 0; i < casos.Length; ++i)
              {
            Assert.That(casos[i].NombreCorregido, Is.EqualTo(pdis[i].Nombre), "PDI[" + i + "].Nombre");
              }
        }
示例#26
0
        /// <summary>
        /// Constructor.
        /// </summary>
        /// <param name="elManejadorDeMapa">El manejador del mapa.</param>
        /// <param name="elNúmero">El número de la <see cref="Polilínea"/>.</param>
        /// <param name="laClase">La clase de la <see cref="Polilínea"/>.</param>
        /// <param name="losCampos">Los campos de la <see cref="Polilínea"/>.</param>
        public Vía(
            ManejadorDeMapa elManejadorDeMapa,
            int elNúmero,
            string laClase,
            IList<Campo> losCampos)
            : base(elManejadorDeMapa,
             elNúmero,
             laClase,
             losCampos)
        {
            CampoParámetrosDeRuta = miCampoParámetrosDeRutaPorDefecto;
              CampoIndicadorDeDirección = null;

              // Busca los campos específicos de las vías.
              foreach (Campo campo in losCampos)
              {
            CampoParámetrosDeRuta campoParámetrosDeRuta = campo as CampoParámetrosDeRuta;
            CampoNombre campoNombre;
            CampoGenérico campoGenérico;
            if (campoParámetrosDeRuta != null)
            {
              CampoParámetrosDeRuta = campoParámetrosDeRuta;
              miTieneCampoParámetrosDeRutaEnCampos = true;
            }
            else if ((campoNombre = campo as CampoNombre) != null)
            {
              if (campoNombre.Número == 2)
              {
            miCampoNombreSecundario = campoNombre;
              }
            }
            else if ((campoGenérico = campo as CampoGenérico) != null)
            {
              if (campoGenérico.Identificador == IdentificadorIndicadorDeDirección)
              {
            CampoIndicadorDeDirección = campoGenérico;
              }
            }
              }

              CreaNodos();
        }
        public void PruebaConstructor()
        {
            // Preparación.
              IEscuchadorDeEstatus escuchadorDeEstatus = new EscuchadorDeEstatusPorOmisión();
              ManejadorDeMapa manejadorDeMapa = new ManejadorDeMapa(escuchadorDeEstatus);
              IList<Pdi> pdis = new List<Pdi>();

              // Llama al contructor bajo prueba.
              ManejadorDePdis objectoDePrueba = new ManejadorDePdis(manejadorDeMapa, pdis, escuchadorDeEstatus);

              // Prueba propiedades.
              Assert.That(objectoDePrueba.Elementos, Is.EqualTo(pdis), "Elementos");
              Assert.That(objectoDePrueba.EscuchadorDeEstatus, Is.EqualTo(escuchadorDeEstatus), "EscuchadorDeEstatus");
              Assert.That(objectoDePrueba.ManejadorDeMapa, Is.EqualTo(manejadorDeMapa), "ManejadorDeMapa");
        }
示例#28
0
        public void PruebaConstructor()
        {
            // Preparación.
              int número = 12;
              ManejadorDeMapa manejadorDeMapa = new ManejadorDeMapa(new EscuchadorDeEstatusPorOmisión());
              string clase = "clase";
              string nombre = "Nombre";
              string tipo = "0xc";
              string descripción = "Roundabout";
              CampoParámetrosDeRuta parámetrosDeRuta = new CampoParámetrosDeRuta(
            new LímiteDeVelocidad(2),
            new ClaseDeRuta(3),
            new bool[10]);
              List<Campo> campos = new List<Campo> {
            new CampoNombre (nombre),
            new CampoComentario (";Comentario"),
            new CampoTipo (tipo),
            parámetrosDeRuta
              };

              // Llama al constructor.
              Vía objectoEnPrueba = new Vía(manejadorDeMapa, número, clase, campos);

              // Prueba Propiedades.
              Assert.That(campos, Is.EqualTo(objectoEnPrueba.Campos), "Campos");
              Assert.That(clase, Is.EqualTo(objectoEnPrueba.Clase), "Clase");
              Assert.That(descripción, Is.EqualTo(objectoEnPrueba.Descripción), "Descripción");
              Assert.That(objectoEnPrueba.FuéEliminado, Is.False, "FuéEliminado");
              Assert.That(objectoEnPrueba.FuéModificado, Is.False, "FuéModificado");
              Assert.That(nombre, Is.EqualTo(objectoEnPrueba.Nombre), "Nombre");
              Assert.That(número, Is.EqualTo(objectoEnPrueba.Número), "Número");
              Assert.That(objectoEnPrueba.Original, Is.Null, "Original");
              Assert.That(string.Empty, Is.EqualTo(objectoEnPrueba.RazónParaEliminación), "RazónParaEliminación");
              Assert.That(new Tipo(tipo), Is.EqualTo(objectoEnPrueba.Tipo), "Tipo");
              Assert.That(objectoEnPrueba.CampoParámetrosDeRuta, Is.EqualTo(parámetrosDeRuta), "CampoParámetrosDeRuta");
        }
示例#29
0
        public void PruebaCambiaCampoParámetrosDeRuta()
        {
            #region Caso 1: Vía con Campo de Parámetros de Ruta.
              {
            #region Preparación.
            int número = 12;
            ManejadorDeMapa manejadorDeMapa = new ManejadorDeMapa(new EscuchadorDeEstatusPorOmisión());
            string clase = "clase";
            string nombre = "Nombre";
            string tipo = "0xc";
            string descripción = "Roundabout";

            CampoParámetrosDeRuta campoParámetrosDeRuta = new CampoParámetrosDeRuta(
              new LímiteDeVelocidad(2),
              new ClaseDeRuta(3),
              new bool[] { true, false, false, true, true, false, true, true, false, false });

            List<Campo> campos = new List<Campo> {
              new CampoNombre (nombre),
              new CampoComentario (";Comentario"),
              new CampoTipo (tipo),
              campoParámetrosDeRuta
            };

            // Crea el objeto en prueba.
            Vía objectoEnPrueba = new Vía(manejadorDeMapa, número, clase, campos);
            ElementoDelMapa víaOriginal = (ElementoDelMapa)objectoEnPrueba.Clone();

            // Nuevos valores.
            CampoParámetrosDeRuta nuevoCampoParámetrosDeRuta = new CampoParámetrosDeRuta(
              new LímiteDeVelocidad(5),
              campoParámetrosDeRuta.ClaseDeRuta,
              campoParámetrosDeRuta.OtrosParámetros);
            Assert.That(nuevoCampoParámetrosDeRuta, Is.Not.EqualTo(campoParámetrosDeRuta), "El nuevo campo de parámetros de ruta debe ser distinto");
            #endregion

            // Llama al método a probar.
            objectoEnPrueba.CambiaCampoParámetrosDeRuta(nuevoCampoParámetrosDeRuta, "Razón");

            // Prueba Propiedades.
            Assert.That(objectoEnPrueba.Campos, Is.EqualTo(campos), "Campos");
            Assert.That(objectoEnPrueba.Clase, Is.EqualTo(clase), "Clase");
            Assert.That(descripción, Is.EqualTo(objectoEnPrueba.Descripción), "Descripción");
            Assert.That(objectoEnPrueba.FuéEliminado, Is.False, "FuéEliminado");
            Assert.That(objectoEnPrueba.FuéModificado, Is.True, "FuéModificado");
            Assert.That(objectoEnPrueba.Nombre, Is.EqualTo(nombre), "Nombre");
            Assert.That(objectoEnPrueba.Número, Is.EqualTo(número), "Número");
            PruebaElementoDesconocido.AseguraElementoEsEquivalente(víaOriginal, objectoEnPrueba.Original, "Original");
            Assert.That(objectoEnPrueba.RazónParaEliminación, Is.EqualTo(string.Empty), "RazónParaEliminación");
            Assert.That(objectoEnPrueba.Tipo, Is.EqualTo(new Tipo(tipo)), "Tipo");
            Assert.That(objectoEnPrueba.CampoParámetrosDeRuta, Is.EqualTo(nuevoCampoParámetrosDeRuta), "CampoParámetrosDeRuta");
              }
              #endregion

              #region Caso 2: Vía sin Campo de Parámetros de Ruta.
              {
            #region Preparación.
            int número = 12;
            ManejadorDeMapa manejadorDeMapa = new ManejadorDeMapa(new EscuchadorDeEstatusPorOmisión());
            string clase = "clase";
            string nombre = "Nombre";
            string tipo = "0xc";
            string descripción = "Roundabout";
            List<Campo> campos = new List<Campo> {
              new CampoNombre (nombre),
              new CampoComentario (";Comentario"),
              new CampoTipo (tipo)
            };

            // Crea el objeto en prueba.
            Vía objectoEnPrueba = new Vía(manejadorDeMapa, número, clase, campos);
            ElementoDelMapa víaOriginal = (ElementoDelMapa)objectoEnPrueba.Clone();

            // Nuevos valores.
            CampoParámetrosDeRuta nuevoCampoParámetrosDeRuta = new CampoParámetrosDeRuta(
              new LímiteDeVelocidad (4),
              new ClaseDeRuta (1),
              new bool[10]);
            #endregion

            // Llama al método a probar.
            objectoEnPrueba.CambiaCampoParámetrosDeRuta(nuevoCampoParámetrosDeRuta, "Razón");

            // Prueba Propiedades.
            Assert.That(objectoEnPrueba.Campos, Is.EqualTo(campos), "Campos");
            Assert.That(objectoEnPrueba.Clase, Is.EqualTo(clase), "Clase");
            Assert.That(descripción, Is.EqualTo(objectoEnPrueba.Descripción), "Descripción");
            Assert.That(objectoEnPrueba.FuéEliminado, Is.False, "FuéEliminado");
            Assert.That(objectoEnPrueba.FuéModificado, Is.True, "FuéModificado");
            Assert.That(objectoEnPrueba.Nombre, Is.EqualTo(nombre), "Nombre");
            Assert.That(objectoEnPrueba.Número, Is.EqualTo(número), "Número");
            PruebaElementoDesconocido.AseguraElementoEsEquivalente(víaOriginal, objectoEnPrueba.Original, "Original");
            Assert.That(objectoEnPrueba.RazónParaEliminación, Is.EqualTo(string.Empty), "RazónParaEliminación");
            Assert.That(objectoEnPrueba.Tipo, Is.EqualTo(new Tipo(tipo)), "Tipo");
            Assert.That(objectoEnPrueba.CampoParámetrosDeRuta, Is.EqualTo(nuevoCampoParámetrosDeRuta), "CampoParámetrosDeRuta");
              }
              #endregion

              #region Caso 3: Vía con el Mismo Campo de Parámetros de Ruta.
              {
            #region Preparación.
            int número = 12;
            ManejadorDeMapa manejadorDeMapa = new ManejadorDeMapa(new EscuchadorDeEstatusPorOmisión());
            string clase = "clase";
            string nombre = "Nombre";
            string tipo = "0xc";
            string descripción = "Roundabout";

            CampoParámetrosDeRuta campoParámetrosDeRuta = new CampoParámetrosDeRuta(
              new LímiteDeVelocidad(2),
              new ClaseDeRuta(3),
              new bool[] { true, false, false, true, true, false, true, true, false, false });

            List<Campo> campos = new List<Campo> {
              new CampoNombre (nombre),
              new CampoComentario (";Comentario"),
              new CampoTipo (tipo),
              campoParámetrosDeRuta
            };

            // Crea el objeto en prueba.
            Vía objectoEnPrueba = new Vía(manejadorDeMapa, número, clase, campos);
            #endregion

            // Llama al método a probar.
            objectoEnPrueba.CambiaCampoParámetrosDeRuta(campoParámetrosDeRuta, "Razón");

            // Prueba Propiedades.
            Assert.That(objectoEnPrueba.Campos, Is.EqualTo(campos), "Campos");
            Assert.That(objectoEnPrueba.Clase, Is.EqualTo(clase), "Clase");
            Assert.That(descripción, Is.EqualTo(objectoEnPrueba.Descripción), "Descripción");
            Assert.That(objectoEnPrueba.FuéEliminado, Is.False, "FuéEliminado");
            Assert.That(objectoEnPrueba.FuéModificado, Is.False, "FuéModificado");
            Assert.That(objectoEnPrueba.Nombre, Is.EqualTo(nombre), "Nombre");
            Assert.That(objectoEnPrueba.Número, Is.EqualTo(número), "Número");
            Assert.That(objectoEnPrueba.Original, Is.Null, "Original");
            Assert.That(objectoEnPrueba.RazónParaEliminación, Is.EqualTo(string.Empty), "RazónParaEliminación");
            Assert.That(objectoEnPrueba.Tipo, Is.EqualTo(new Tipo(tipo)), "Tipo");
            Assert.That(objectoEnPrueba.CampoParámetrosDeRuta, Is.EqualTo(campoParámetrosDeRuta), "CampoParámetrosDeRuta");
              }
              #endregion
        }
        /// <summary>
        /// Constructor.
        /// </summary>
        /// <param name="elManejadorDeMapa">El manejador del mapa.</param>
        /// <param name="elArchivo">El archivo a abrir.</param>
        public LectorDeFormatoPolish(ManejadorDeMapa elManejadorDeMapa, string elArchivo)
            : base(elManejadorDeMapa.EscuchadorDeEstatus)
        {
            miManejadorDeMapa = elManejadorDeMapa;

              // Usar el punto para separar decimales.
              miFormatoNumérico.NumberDecimalSeparator = ".";

              // Abre el archivo.
              Lee(elArchivo);

              // Reporta el número de elementos leídos.
              int númeroDeElementos = misElementosDelMapa.Count;
              Estatus = "Leídos " + númeroDeElementos + " elementos";
        }
示例#31
0
        /// <summary>
        /// Constructor.
        /// </summary>
        public InterfaseManejadorDeMapa()
        {
            // Lee la cultura de las opciones.
            // Si la cultura no esta definida entonces usamos Inglés
            // para todas las culturas que no deriven del Español.
            var         culturaTexto = Settings.Default.Cultura;
            CultureInfo cultura;

            if (string.IsNullOrEmpty(culturaTexto))
            {
                cultura = CultureInfo.CurrentCulture;
                if (cultura.TwoLetterISOLanguageName != "es")
                {
                    cultura = new CultureInfo("en");
                }
            }
            else
            {
                cultura = new CultureInfo(culturaTexto);
            }
            Thread.CurrentThread.CurrentUICulture = cultura;

            InitializeComponent();

            // Crea la lista de menús a desabilitar.
            misMenúsADesabilitar = new List <ToolStripMenuItem> {
                miMenúMapa,
                miMenúProcesar
            };

            // Crea la lista de menús de lenguage.
            misMenúsDeLenguage = new List <ToolStripMenuItem> {
                miMenúLenguajeEspañol,
                miMenúLenguajeInglés,
                miMenúLenguajeAutomático
            };
            miMenúLenguajeAutomático.Tag = string.Empty;
            CambiaCultura(culturaTexto);

            // Pone el nombre.
            Text = Recursos.DescripciónDelEjecutable + " - " + VentanaDeAcerca.AssemblyCompany;

            #region Asigna los ToolTips de los menús.
            miMenúAceptarModificaciones.ToolTipText = ManejadorDeMapa.DescripciónAceptarModificaciones;

            // PDIs.
            miMenúProcesarTodoEnPdis.ToolTipText            = GpsYv.ManejadorDeMapa.Pdis.ManejadorDePdis.DescripciónProcesarTodo;
            miMenúArreglarIndicesDeCiudadEnPdis.ToolTipText = GpsYv.ManejadorDeMapa.Pdis.ArregladorDeIndicesDeCiudad.Descripción;
            miMenuArreglarCosasGeneralesEnPdis.ToolTipText  = GpsYv.ManejadorDeMapa.Pdis.ArregladorGeneral.Descripción;
            miMenúBuscaDuplicadosEnPdis.ToolTipText         = GpsYv.ManejadorDeMapa.Pdis.BuscadorDeDuplicados.Descripción;
            miMenúBuscarAlertasEnPdis.ToolTipText           = GpsYv.ManejadorDeMapa.Pdis.BuscadorDeAlertas.Descripción;
            miMenúBuscarErroresEnPdis.ToolTipText           = GpsYv.ManejadorDeMapa.Pdis.BuscadorDeErrores.Descripción;

            // Vías.
            miMenúProcesarTodoEnVías.ToolTipText                     = GpsYv.ManejadorDeMapa.Vías.ManejadorDeVías.DescripciónProcesarTodo;
            miMenúArreglarIndicesDeCiudadEnVías.ToolTipText          = GpsYv.ManejadorDeMapa.Vías.ArregladorDeIndicesDeCiudad.Descripción;
            miMenúArreglarCosasGeneralesEnVías.ToolTipText           = GpsYv.ManejadorDeMapa.Vías.ArregladorGeneral.Descripción;
            miMenúBuscarAlertasEnVías.ToolTipText                    = GpsYv.ManejadorDeMapa.Vías.BuscadorDeAlertas.Descripción;
            miMenúBuscarPosiblesErroresDeRuteoEnVías.ToolTipText     = GpsYv.ManejadorDeMapa.Vías.BuscadorDePosiblesErroresDeRuteo.Descripción;
            miMenúBuscarPosiblesNodosDesconectadosEnVías.ToolTipText = GpsYv.ManejadorDeMapa.Vías.BuscadorDePosiblesNodosDesconectados.Descripción;
            miMenúBuscarErroresEnVías.ToolTipText                    = GpsYv.ManejadorDeMapa.Vías.BuscadorDeErrores.Descripción;
            #endregion

            // Crea y asigna el escuchador de estatus.
            miEscuchadorDeEstatus = new EscuchadorDeEstatus(
                this,
                miTextoDeEstatus,
                miBarraDeProgreso,
                miTextoDeCoordenadas);

            // Crea el objecto Manejador de Mapa.
            miManejadorDeMapa = new ManejadorDeMapa(
                miEscuchadorDeEstatus,
                new OpenFileDialogService());

            // Maneja eventos de modificación de elementos.
            miManejadorDeMapa.MapaNuevo            += EnMapaNuevo;
            miManejadorDeMapa.ElementosModificados += EnElementosModificados;

            // Maneja eventos de procesamiento.
            miManejadorDeMapa.Procesando += EnProcesando;
            miManejadorDeMapa.Procesó    += EnProcesó;

            // Oculta el botón de parar de procesar.
            miBotónParaDeProcesar.Visible = false;
            miTimerParaMostrarBotónParaDeProcesar.Interval = 5000;
            miTimerParaMostrarBotónParaDeProcesar.Tick    += EnTimerParaMostrarBotónParaDeProcesar;

            // Pone el método llenador de items.
            miLista.PoneLlenadorDeItems(LlenaItems);

            // Asigna las propiedades de la interfase de mapa.
            miInterfaseDeMapa.ManejadorDeMapa     = miManejadorDeMapa;
            miInterfaseDeMapa.EscuchadorDeEstatus = miEscuchadorDeEstatus;

            // Asigna las propiedades de la interfase de PDIs.
            miInterfaseManejadorDePdis.ManejadorDeMapa     = miManejadorDeMapa;
            miInterfaseManejadorDePdis.EscuchadorDeEstatus = miEscuchadorDeEstatus;

            // Asigna las propiedades de la interfase de Vías.
            miInterfaseManejadorDeVías.ManejadorDeMapa     = miManejadorDeMapa;
            miInterfaseManejadorDeVías.EscuchadorDeEstatus = miEscuchadorDeEstatus;

            // Crea el diccionario de índices de pestañas.
            TabControl.TabPageCollection pestañas = miControladorDePestañasPrincipal.TabPages;
            for (int i = 0; i < pestañas.Count; ++i)
            {
                misIndicesDePestañas[pestañas[i]] = i;
            }

            // Maneja evento de cambio de Estado Máximo de Pestañas de PDIs.
            miInterfaseManejadorDePdis.CambióEstadoMáximoDePestañas +=
                ((elEnviador, losArgumentos) =>
                 miControladorDePestañasPrincipal.PoneEstadoDePestaña(
                     miPaginaDePdis,
                     losArgumentos.EstadoMáximoDePestañas));

            // Maneja evento de cambio de Estado Máximo de Pestañas de Vías.
            miInterfaseManejadorDeVías.CambióEstadoMáximoDePestañas +=
                ((elEnviador, losArgumentos) =>
                 miControladorDePestañasPrincipal.PoneEstadoDePestaña(
                     miPáginaDeVías,
                     losArgumentos.EstadoMáximoDePestañas));

            // Lee el archivo de límites si existe en los settings.
            if (!string.IsNullOrEmpty(Settings.Default.ArchivoDeLímites))
            {
                // Trata de leer el archivo de límites.
                try
                {
                    miManejadorDeMapa.AbrirLímites(Settings.Default.ArchivoDeLímites);
                }
                catch
                {
                    // Ignoramos errores.
                }
            }
        }
        public void PruebaConstructor()
        {
            #region Caso 1: Operación Normal
              {
            #region Preparación.
            // Lee un mapa de prueba.
            const string archivoDeEntrada = @"..\..\Data\PruebaEscritorFormatoPolish.mp";
            IEscuchadorDeEstatus escuchadorDeEstatus = new EscuchadorDeEstatusPorOmisión();
            ManejadorDeMapa manejadorDeMapa = new ManejadorDeMapa(escuchadorDeEstatus);
            LectorDeFormatoPolish lector = new LectorDeFormatoPolish(manejadorDeMapa, archivoDeEntrada);
            IList<ElementoDelMapa> elementos = lector.ElementosDelMapa;

            const string archivoDeSalida = @"PruebaEscritorFormatoPolish.Caso1.mp";
            #endregion

            // Llama al constructor.
            new EscritorDeFormatoPolish(archivoDeSalida, elementos, escuchadorDeEstatus);

            #region Prueba Archivo de Salida.
            string[] líneasDeEntrada = LéeArchivo(archivoDeEntrada);
            string[] líneasDeSalida = LéeArchivo(archivoDeSalida);
            Assert.That(líneasDeSalida, Is.EqualTo(líneasDeEntrada), "Líneas");
            #endregion
              }
              #endregion

              #region Caso 2: Archivo de Salida inválido.
              {
            #region Preparación.
            // Crea elementos.
            IEscuchadorDeEstatus escuchadorDeEstatus = new EscuchadorDeEstatusPorOmisión();
            IList<ElementoDelMapa> elementos = new List<ElementoDelMapa>();

            // Archivo inválido.
            const string archivoDeSalidaInválido = @"ABC::\\&AAAA";

            // Excepción esperada.
            bool lanzóExcepción = false;
            ArgumentException excepciónEsperada = new ArgumentException(
              "The path is not of a legal form.");
            #endregion

            // Llama al constructor en prueba.
            try
            {
              new EscritorDeFormatoPolish(archivoDeSalidaInválido, elementos, escuchadorDeEstatus);
            }
            catch (Exception e)
            {
              // Prueba las propiedades de la excepción.
              Assert.That(e.GetType(), Is.EqualTo(excepciónEsperada.GetType()), "Tipo de Excepción");
              Assert.That(e.Message, Is.EqualTo(excepciónEsperada.Message), "Excepción.Message");

              lanzóExcepción = true;
            }

            Assert.That(lanzóExcepción, Is.True, "No se lanzó la excepción.");
              }
              #endregion

              #region Caso 3: Elemento con Campo Desconocido.
              {
            #region Preparación.
            // Crea elementos.
            IEscuchadorDeEstatus escuchadorDeEstatus = new EscuchadorDeEstatusPorOmisión();
            IList<ElementoDelMapa> elementos = new List<ElementoDelMapa> {
              new ElementoDesconocido(null, 0, "Clase", new List<Campo> {
            new CampoDesconocido() })};

            const string archivoDeSalida = @"PruebaEscritorFormatoPolish.Caso3.mp";

            // Excepción esperada.
            bool lanzóExcepción = false;
            ArgumentException excepciónEsperada = new ArgumentException(
              "Campo desconocido: GpsYv.ManejadorDeMapa.Pruebas.PruebaEscritorFormatoPolish+CampoDesconocido");
            #endregion

            // Llama al constructor en prueba.
            try
            {
              new EscritorDeFormatoPolish(archivoDeSalida, elementos, escuchadorDeEstatus);
            }
            catch (Exception e)
            {
              // Prueba las propiedades de la excepción.
              Assert.That(e.GetType(), Is.EqualTo(excepciónEsperada.GetType()), "Tipo de Excepción");
              Assert.That(e.Message, Is.EqualTo(excepciónEsperada.Message), "Excepción.Message");

              lanzóExcepción = true;
            }

            Assert.That(lanzóExcepción, Is.True, "No se lanzó la excepción.");
              }
              #endregion
        }
        /// <summary>
        /// Constructor.
        /// </summary>
        public InterfaseManejadorDeMapa()
        {
            // Lee la cultura de las opciones.
              // Si la cultura no esta definida entonces usamos Inglés
              // para todas las culturas que no deriven del Español.
              var culturaTexto = Settings.Default.Cultura;
              CultureInfo cultura;
              if (string.IsNullOrEmpty(culturaTexto))
              {
            cultura = CultureInfo.CurrentCulture;
            if (cultura.TwoLetterISOLanguageName != "es")
            {
              cultura = new CultureInfo("en");
            }
              }
              else
              {
            cultura = new CultureInfo(culturaTexto);
              }
              Thread.CurrentThread.CurrentUICulture = cultura;

              InitializeComponent();

              // Crea la lista de menús a desabilitar.
              misMenúsADesabilitar = new List<ToolStripMenuItem> {
            miMenúMapa,
            miMenúProcesar};

              // Crea la lista de menús de lenguage.
              misMenúsDeLenguage = new List<ToolStripMenuItem> {
            miMenúLenguajeEspañol,
            miMenúLenguajeInglés,
            miMenúLenguajeAutomático};
              miMenúLenguajeAutomático.Tag = string.Empty;
              CambiaCultura(culturaTexto);

              // Pone el nombre.
              Text = Recursos.DescripciónDelEjecutable + " - " + VentanaDeAcerca.AssemblyCompany;

              #region Asigna los ToolTips de los menús.
              miMenúAceptarModificaciones.ToolTipText = ManejadorDeMapa.DescripciónAceptarModificaciones;

              // PDIs.
              miMenúProcesarTodoEnPdis.ToolTipText = GpsYv.ManejadorDeMapa.Pdis.ManejadorDePdis.DescripciónProcesarTodo;
              miMenúArreglarIndicesDeCiudadEnPdis.ToolTipText = GpsYv.ManejadorDeMapa.Pdis.ArregladorDeIndicesDeCiudad.Descripción;
              miMenuArreglarCosasGeneralesEnPdis.ToolTipText = GpsYv.ManejadorDeMapa.Pdis.ArregladorGeneral.Descripción;
              miMenúBuscaDuplicadosEnPdis.ToolTipText = GpsYv.ManejadorDeMapa.Pdis.BuscadorDeDuplicados.Descripción;
              miMenúBuscarAlertasEnPdis.ToolTipText = GpsYv.ManejadorDeMapa.Pdis.BuscadorDeAlertas.Descripción;
              miMenúBuscarErroresEnPdis.ToolTipText = GpsYv.ManejadorDeMapa.Pdis.BuscadorDeErrores.Descripción;

              // Vías.
              miMenúProcesarTodoEnVías.ToolTipText = GpsYv.ManejadorDeMapa.Vías.ManejadorDeVías.DescripciónProcesarTodo;
              miMenúArreglarIndicesDeCiudadEnVías.ToolTipText = GpsYv.ManejadorDeMapa.Vías.ArregladorDeIndicesDeCiudad.Descripción;
              miMenúArreglarCosasGeneralesEnVías.ToolTipText = GpsYv.ManejadorDeMapa.Vías.ArregladorGeneral.Descripción;
              miMenúBuscarAlertasEnVías.ToolTipText = GpsYv.ManejadorDeMapa.Vías.BuscadorDeAlertas.Descripción;
              miMenúBuscarPosiblesErroresDeRuteoEnVías.ToolTipText = GpsYv.ManejadorDeMapa.Vías.BuscadorDePosiblesErroresDeRuteo.Descripción;
              miMenúBuscarPosiblesNodosDesconectadosEnVías.ToolTipText = GpsYv.ManejadorDeMapa.Vías.BuscadorDePosiblesNodosDesconectados.Descripción;
              miMenúBuscarErroresEnVías.ToolTipText = GpsYv.ManejadorDeMapa.Vías.BuscadorDeErrores.Descripción;
              #endregion

              // Crea y asigna el escuchador de estatus.
              miEscuchadorDeEstatus = new EscuchadorDeEstatus(
            this,
            miTextoDeEstatus,
            miBarraDeProgreso,
            miTextoDeCoordenadas);

              // Crea el objecto Manejador de Mapa.
              miManejadorDeMapa = new ManejadorDeMapa(
            miEscuchadorDeEstatus,
            new OpenFileDialogService());

              // Maneja eventos de modificación de elementos.
              miManejadorDeMapa.MapaNuevo += EnMapaNuevo;
              miManejadorDeMapa.ElementosModificados += EnElementosModificados;

              // Maneja eventos de procesamiento.
              miManejadorDeMapa.Procesando += EnProcesando;
              miManejadorDeMapa.Procesó += EnProcesó;

              // Oculta el botón de parar de procesar.
              miBotónParaDeProcesar.Visible = false;
              miTimerParaMostrarBotónParaDeProcesar.Interval = 5000;
              miTimerParaMostrarBotónParaDeProcesar.Tick += EnTimerParaMostrarBotónParaDeProcesar;

              // Pone el método llenador de items.
              miLista.PoneLlenadorDeItems(LlenaItems);

              // Asigna las propiedades de la interfase de mapa.
              miInterfaseDeMapa.ManejadorDeMapa = miManejadorDeMapa;
              miInterfaseDeMapa.EscuchadorDeEstatus = miEscuchadorDeEstatus;

              // Asigna las propiedades de la interfase de PDIs.
              miInterfaseManejadorDePdis.ManejadorDeMapa = miManejadorDeMapa;
              miInterfaseManejadorDePdis.EscuchadorDeEstatus = miEscuchadorDeEstatus;

              // Asigna las propiedades de la interfase de Vías.
              miInterfaseManejadorDeVías.ManejadorDeMapa = miManejadorDeMapa;
              miInterfaseManejadorDeVías.EscuchadorDeEstatus = miEscuchadorDeEstatus;

              // Crea el diccionario de índices de pestañas.
              TabControl.TabPageCollection pestañas = miControladorDePestañasPrincipal.TabPages;
              for (int i = 0; i < pestañas.Count; ++i)
              {
            misIndicesDePestañas[pestañas[i]] = i;
              }

              // Maneja evento de cambio de Estado Máximo de Pestañas de PDIs.
              miInterfaseManejadorDePdis.CambióEstadoMáximoDePestañas +=
            ((elEnviador, losArgumentos) =>
              miControladorDePestañasPrincipal.PoneEstadoDePestaña(
            miPaginaDePdis,
            losArgumentos.EstadoMáximoDePestañas));

              // Maneja evento de cambio de Estado Máximo de Pestañas de Vías.
              miInterfaseManejadorDeVías.CambióEstadoMáximoDePestañas +=
            ((elEnviador, losArgumentos) =>
              miControladorDePestañasPrincipal.PoneEstadoDePestaña(
            miPáginaDeVías,
            losArgumentos.EstadoMáximoDePestañas));

              // Lee el archivo de límites si existe en los settings.
              if (!string.IsNullOrEmpty(Settings.Default.ArchivoDeLímites))
              {
            // Trata de leer el archivo de límites.
            try
            {
              miManejadorDeMapa.AbrirLímites(Settings.Default.ArchivoDeLímites);
            }
            catch
            {
              // Ignoramos errores.
            }
              }
        }
        public void PruebaShowDialog()
        {
            #region Preparación general.
              // Crea un PDI para las pruebas.
              IEscuchadorDeEstatus escuchadorDeEstatus = new EscuchadorDeEstatusPorOmisión();
              ManejadorDeMapa manejadorDeMapa = new ManejadorDeMapa(escuchadorDeEstatus);
              string nombre = "Nombre";
              Tipo tipo = new Tipo("0xaaaa");
              const string clase = "POI";
              Coordenadas coordenadas = new Coordenadas(20, 30);
              List<Campo> campos = new List<Campo> {
              new CampoNombre (nombre),
              new CampoTipo (tipo),
              new CampoCoordenadas (CampoCoordenadas.IdentificadorDeCoordenadas, 0, coordenadas)
            };
              List<Pdi> pdis = new List<Pdi>{new Pdi(manejadorDeMapa, 1, clase, campos)};
              #endregion

              #region Caso 1: Apenas aparece la ventana el usuario apreta "Cambiar"
              {
            // En este caso el método Show() debería retornar None,
            // Y la propiedad TipoNuevo debería ser el tipo nulo.

            #region Preparación.
            // Inicializa objecto de prueba.
            VentanaCambiarTipoDePdi objectoDePrueba = new VentanaCambiarTipoDePdi();
            objectoDePrueba.Pdis = pdis;

            // Crea los probadores de los elementos de la interfase.
            ButtonTester botónCambiar = new ButtonTester("miBotónCambiar", objectoDePrueba);
            #endregion

            // Llama al método a probar.
            objectoDePrueba.Show();

            // Apreta el botón de "Cambiar".
            botónCambiar.Click();

            // Probar propiedades.
            Assert.AreEqual(DialogResult.None, objectoDePrueba.DialogResult, "DialogResult");
            Assert.AreEqual(Tipo.TipoNulo, objectoDePrueba.TipoNuevo, "TipoNuevo");
            Assert.AreEqual(pdis, objectoDePrueba.Pdis, "PDIs");

            // Cierra la ventana.
            objectoDePrueba.Close();
              }
              #endregion

              #region Caso 2: Apenas aparece la ventana el usuario apreta "Cancelar"
              {
            // En este caso el método Show() debería retornar Cancel,
            // Y la propiedad TipoNuevo debería ser el tipo nulo.

            #region Preparación.
            // Inicializa objecto de prueba.
            VentanaCambiarTipoDePdi objectoDePrueba = new VentanaCambiarTipoDePdi();
            objectoDePrueba.Pdis = pdis;

            // Crea los probadores de los elementos de la interfase.
            ButtonTester botónCancelar = new ButtonTester("miBotónCancelar", objectoDePrueba);
            #endregion

            // Llama al método a probar.
            objectoDePrueba.Show();

            // Apreta el botón de "Cancelar".
            botónCancelar.Click();

            // Probar propiedades.
            Assert.AreEqual(DialogResult.Cancel, objectoDePrueba.DialogResult, "DialogResult");
            Assert.AreEqual(Tipo.TipoNulo, objectoDePrueba.TipoNuevo, "TipoNuevo");
            Assert.AreEqual(pdis, objectoDePrueba.Pdis, "PDIs");

            // Cierra la ventana.
            objectoDePrueba.Close();
              }
              #endregion

              #region Caso 3: El usuario cambia el tipo inicial por uno válido.
              {
            // En este caso el método Show() debería retornar OK,
            // y la propiedad TipoNuevo debería ser el tipo nuevo.

            #region Preparación.
            // Inicializa objecto de prueba.
            VentanaCambiarTipoDePdi objectoDePrueba = new VentanaCambiarTipoDePdi();
            objectoDePrueba.Pdis = pdis;

            // Crea un tipo válido.
            string númeroTipoNuevoVálido = "100";
            Tipo tipoNuevoVálido = new Tipo("0x" + númeroTipoNuevoVálido);
            Assert.IsTrue(CaracterísticasDePdis.Descripciones.ContainsKey(tipoNuevoVálido), "El tipo nuevo debe ser conocido.");

            // Crea los probadores de los elementos de la interfase.
            ButtonTester botónCambiar = new ButtonTester("miBotónCambiar", objectoDePrueba);
            TextBoxTester textoTipoNuevo = new TextBoxTester("miTextoTipoNuevo", objectoDePrueba);
            #endregion

            // Llama al método a probar.
            objectoDePrueba.Show();

            // Simula el usuario poniendo un tipo válido.
            textoTipoNuevo.Properties.Focus();
            textoTipoNuevo.Enter(númeroTipoNuevoVálido);

            // Apreta el botón de "Cambiar".
            botónCambiar.Properties.Focus();
            botónCambiar.Click();

            // Probar propiedades.
            Assert.AreEqual(DialogResult.OK, objectoDePrueba.DialogResult, "DialogResult");
            Assert.AreEqual(tipoNuevoVálido, objectoDePrueba.TipoNuevo, "TipoNuevo");
            Assert.AreEqual(pdis, objectoDePrueba.Pdis, "PDIs");

            // Cierra la ventana.
            objectoDePrueba.Close();
              }
              #endregion

              #region Caso 4: El usuario cambia el tipo inicial por uno desconocido.
              {
            // En este caso el método Show() debería retornar None,
            // y la propiedad TipoNuevo debería ser el tipo desconocido.

            #region Preparación.
            // Inicializa objecto de prueba.
            VentanaCambiarTipoDePdi objectoDePrueba = new VentanaCambiarTipoDePdi();
            objectoDePrueba.Pdis = pdis;

            // Crea un tipo desconocido.
            string númeroTipoNuevoDesconocido = "bbbb";
            Tipo tipoNuevoDesconocido = new Tipo("0x" + númeroTipoNuevoDesconocido);
            Assert.IsFalse(CaracterísticasDePdis.Descripciones.ContainsKey(tipoNuevoDesconocido), "El tipo nuevo debe ser desconocido.");

            // Crea los probadores de los elementos de la interfase.
            ButtonTester botónCambiar = new ButtonTester("miBotónCambiar", objectoDePrueba);
            TextBoxTester textoTipoNuevo = new TextBoxTester("miTextoTipoNuevo", objectoDePrueba);
            #endregion

            // Llama al método a probar.
            objectoDePrueba.Show();

            // Simula el usuario poniendo un tipo desconocido.
            textoTipoNuevo.Properties.Focus();
            textoTipoNuevo.Enter(númeroTipoNuevoDesconocido);

            // Apreta el botón de "Cambiar".
            botónCambiar.Properties.Focus();
            botónCambiar.Click();

            // Probar propiedades.
            Assert.AreEqual(DialogResult.None, objectoDePrueba.DialogResult, "DialogResult");
            Assert.AreEqual(tipoNuevoDesconocido, objectoDePrueba.TipoNuevo, "TipoNuevo");
            Assert.AreEqual(pdis, objectoDePrueba.Pdis, "PDIs");

            // Cierra la ventana.
            objectoDePrueba.Close();
              }
              #endregion

              #region Caso 5: El usuario cambia el tipo inicial por uno inválido.
              {
            // En este caso el método Show() debería retornar None,
            // y la propiedad TipoNuevo debería ser el tipo nulo.

            #region Preparación.
            // Inicializa objecto de prueba.
            VentanaCambiarTipoDePdi objectoDePrueba = new VentanaCambiarTipoDePdi();
            objectoDePrueba.Pdis = pdis;

            // Crea un tipo inválido.
            // Un tipo inválido es aquel que genera una excepción cuando
            // se trata de construir una clase Tipo con el.
            string númeroTipoNuevoInválido = "ww";
            bool tipoEsInválido = false;
            try
            {
              new Tipo("0x" + númeroTipoNuevoInválido);
            }
            catch
            {
              tipoEsInválido = true;
            }
            Assert.IsTrue(tipoEsInválido, "El tipo nuevo debe ser inválido.");

            // Crea los probadores de los elementos de la interfase.
            ButtonTester botónCambiar = new ButtonTester("miBotónCambiar", objectoDePrueba);
            TextBoxTester textoTipoNuevo = new TextBoxTester("miTextoTipoNuevo", objectoDePrueba);
            #endregion

            // Llama al método a probar.
            objectoDePrueba.Show();

            // Simula el usuario poniendo un tipo inválido.
            textoTipoNuevo.Properties.Focus();
            textoTipoNuevo.Enter(númeroTipoNuevoInválido);

            // Apreta el botón de "Cambiar".
            botónCambiar.Properties.Focus();
            botónCambiar.Click();

            // Probar propiedades.
            Assert.AreEqual(DialogResult.None, objectoDePrueba.DialogResult, "DialogResult");
            Assert.AreEqual(Tipo.TipoNulo, objectoDePrueba.TipoNuevo, "TipoNuevo");
            Assert.AreEqual(pdis, objectoDePrueba.Pdis, "PDIs");

            // Cierra la ventana.
            objectoDePrueba.Close();
              }
              #endregion

              #region Caso 6: El usuario empiezar a cambiar el tipo, pero al final lo borra y lo deja en blanco.
              {
            // En este caso el método Show() debería retornar None,
            // y la propiedad TipoNuevo debería ser el tipo nulo.

            #region Preparación.
            // Inicializa objecto de prueba.
            VentanaCambiarTipoDePdi objectoDePrueba = new VentanaCambiarTipoDePdi();
            objectoDePrueba.Pdis = pdis;

            // Crea los probadores de los elementos de la interfase.
            ButtonTester botónCambiar = new ButtonTester("miBotónCambiar", objectoDePrueba);
            TextBoxTester textoTipoNuevo = new TextBoxTester("miTextoTipoNuevo", objectoDePrueba);
            #endregion

            // Llama al método a probar.
            objectoDePrueba.Show();

            // Simula el usuario empezando a cambiar el tipo y despues dejandolo en blanco.
            textoTipoNuevo.Properties.Focus();
            textoTipoNuevo.Enter("123");
            textoTipoNuevo.Properties.Text = string.Empty;

            // Apreta el botón de "Cambiar".
            botónCambiar.Properties.Focus();
            botónCambiar.Click();

            // Probar propiedades.
            Assert.AreEqual(DialogResult.None, objectoDePrueba.DialogResult, "DialogResult");
            Assert.AreEqual(Tipo.TipoNulo, objectoDePrueba.TipoNuevo, "TipoNuevo");
            Assert.AreEqual(pdis, objectoDePrueba.Pdis, "PDIs");

            // Cierra la ventana.
            objectoDePrueba.Close();
              }
              #endregion

              #region Caso 7: El usuario empiezar a cambiar el tipo, pero al final cancela.
              {
            // En este caso el método Show() debería retornar Cancel,
            // y la propiedad TipoNuevo debería ser el tipo nulo.

            #region Preparación.
            // Inicializa objecto de prueba.
            VentanaCambiarTipoDePdi objectoDePrueba = new VentanaCambiarTipoDePdi();
            objectoDePrueba.Pdis = pdis;

            // Crea los probadores de los elementos de la interfase.
            ButtonTester botónCancelar = new ButtonTester("miBotónCancelar", objectoDePrueba);
            TextBoxTester textoTipoNuevo = new TextBoxTester("miTextoTipoNuevo", objectoDePrueba);
            #endregion

            // Llama al método a probar.
            objectoDePrueba.Show();

            // Simula el usuario empezando a cambiar el tipo y despues dejandolo en blanco.
            textoTipoNuevo.Enter("123");
            textoTipoNuevo.Properties.Text = string.Empty;

            // Apreta el botón de "Cancelar".
            botónCancelar.Click();

            // Probar propiedades.
            Assert.AreEqual(DialogResult.Cancel, objectoDePrueba.DialogResult, "DialogResult");
            Assert.AreEqual(Tipo.TipoNulo, objectoDePrueba.TipoNuevo, "TipoNuevo");

            // Cierra la ventana.
            objectoDePrueba.Close();
              }
              #endregion

              #region Caso 8: Se usa con un PDI nulo.
              {
            // En este caso el método Show() debería retornar None,
            // y la propiedad TipoNuevo debería ser el tipo nulo.

            #region Preparación.
            // Inicializa objecto de prueba.
            VentanaCambiarTipoDePdi objectoDePrueba = new VentanaCambiarTipoDePdi();
            objectoDePrueba.Pdis = null;

            // Crea los probadores de los elementos de la interfase.
            ButtonTester botónCambiar = new ButtonTester("miBotónCambiar", objectoDePrueba);
            TextBoxTester textoTipoNuevo = new TextBoxTester("miTextoTipoNuevo", objectoDePrueba);
            #endregion

            // Llama al método a probar.
            objectoDePrueba.Show();

            // Simula el usuario empezando a cambiar el tipo y despues dejandolo en blanco.
            textoTipoNuevo.Properties.Focus();
            textoTipoNuevo.Enter("100");
            textoTipoNuevo.Properties.Text = string.Empty;

            // Apreta el botón de "Cambiar".
            botónCambiar.Properties.Focus();
            botónCambiar.Click();

            // Probar propiedades.
            Assert.AreEqual(DialogResult.None, objectoDePrueba.DialogResult, "DialogResult");
            Assert.AreEqual(Tipo.TipoNulo, objectoDePrueba.TipoNuevo, "TipoNuevo");

            // Cierra la ventana.
            objectoDePrueba.Close();
              }
              #endregion
        }
        public void PruebaProcesa()
        {
            #region Preparación.
            // Crea el objeto a probar.
            IEscuchadorDeEstatus escuchadorDeEstatus = new EscuchadorDeEstatusPorOmisión();
            ManejadorDeMapa      manejadorDeMapa     = new ManejadorDeMapa(escuchadorDeEstatus);
            ManejadorDePdis      manejadorDePdis     = new ManejadorDePdis(manejadorDeMapa, new List <Pdi>(), escuchadorDeEstatus);
            BuscadorDeDuplicados objectoDePrueba     = new BuscadorDeDuplicados(manejadorDePdis, escuchadorDeEstatus);

            // Caso de prueba.
            Caso[] casos = new[] {
                //        Tipo,     Nombre         ,  Latitud, Longitud, Indice de Duplicados   , Es Eliminado, Descripción.
                new Caso("0x2a06", "El PUNTO", 10.00000, 20.00000, new[] { 2, 3, 6, 7, 9 }, false, "PDI#1"),
                new Caso("0x2a06", "El PUNTO", 10.00000, 20.00000, null, true, "Idéntico: Mismos nombre, tipo, y coordenada de PDI#1 : es eliminado."),
                new Caso("0x2a05", "El PUNTO", 10.00000, 20.00000, null, false, "Mismo tipo principal: Mismo nombre, tipo principal, y coordenada de PDI#1: es duplicado."),
                new Caso("0x2a06", "El PUNTO", 10.00001, 20.00000, null, false, "Cercano: Mismo nombre y tipo de PDI#1, coordenadas cercanas: es duplicado."),
                new Caso("0x2a06", "El PUNTO", 10.00000, 20.02000, null, false, "Lejano: Mismo nombre y tipo de PDI#1, coordenadas lejanas: no es duplicado."),
                new Caso("0x2b06", "El PUNTO", 10.00000, 20.00000, null, false, "Diferente tipo principal: Mismo nombre y coordenada de PDI#1, diferente tipo principal: no es duplicado."),
                new Caso("0x2a06", "EP", 10.00000, 20.00000, null, false, "Siglas de PDI#1, misma coordenada de PDI#1: es duplicado."),
                new Caso("0x2a06", "EP", 10.00000, 20.00000, null, false, "Siglas de PDI#1, coordenadas cercanas: es duplicado."),
                new Caso("0x2a06", " EP ", 10.00000, 20.00000, null, false, "Siglas de PDI#1 con espacios en blanco, coordenadas cercanas: no es duplicado."),
                new Caso("0x2a06", "El PUMTO", 10.00000, 20.00000, null, false, "Nombre similar a PDI#1, coordenadas cercanas: es duplicado."),
                new Caso("0x2a06", "EOP", 15.00000, 20.00000, new[] { 11 }, false, "PDI#2"),
                new Caso("0x2a06", "EL OTRO PUNTO", 15.00000, 20.00000, null, false, "PDI#2 es las siglas, misma coordenadas: es duplicado."),
            };
            const int númeroDeDuplicadosDetectados = 2;

            // Crea los elementos.
            IList <Pdi>  elementos = manejadorDePdis.Elementos;
            const string clase     = "POI";
            for (int i = 0; i < casos.Length; ++i)
            {
                Caso         caso   = casos[i];
                List <Campo> campos = new List <Campo> {
                    new CampoNombre(caso.Nombre),
                    new CampoTipo(caso.Tipo),
                    new CampoCoordenadas(
                        CampoCoordenadas.IdentificadorDeCoordenadas,
                        0,
                        new Coordenadas(caso.Latitud, caso.Longitud))
                };

                Pdi pdi = new Pdi(manejadorDeMapa, i, clase, campos);
                elementos.Add(pdi);
            }

            // Crea los duplicados.
            Dictionary <Pdi, IList <Pdi> > duplicados = new Dictionary <Pdi, IList <Pdi> >();
            for (int i = 0; i < casos.Length; ++i)
            {
                Caso caso = casos[i];
                if (caso.IndicesDeLosDuplicados != null)
                {
                    List <Pdi> pdisDuplicados = new List <Pdi>();
                    foreach (int j in caso.IndicesDeLosDuplicados)
                    {
                        pdisDuplicados.Add(elementos[j]);
                    }

                    Pdi pdi = elementos[i];
                    duplicados.Add(pdi, pdisDuplicados);
                }
            }
            #endregion

            // Llama al método bajo prueba.
            objectoDePrueba.Procesa();

            // Prueba propiedades.
            AseguraDuplicadosSonIguales(duplicados, objectoDePrueba.GruposDeDuplicados, "GruposDeDuplicados");
            Assert.AreEqual(elementos.Count, objectoDePrueba.NúmeroDeElementos, "NúmeroDeElementos");
            Assert.AreEqual(númeroDeDuplicadosDetectados, objectoDePrueba.NúmeroDeProblemasDetectados, "NúmeroDeProblemasDetectados");

            // Prueba que se hayan eliminados los PDIs idénticos.
            for (int i = 0; i < casos.Length; ++i)
            {
                Assert.AreEqual(casos[i].EsEliminado, elementos[i].FuéEliminado, "Elemento[" + i + "].FuéEliminado");
            }
        }
示例#36
0
        static void Main(string[] losArgumentos)
        {
            // Procesa los argumentos.
            Argumentos argumentos = new Argumentos();

            if (!argumentos.ParseAndContinue(losArgumentos))
            {
                return;
            }

            if (argumentos.DirectorioDeEntrada == null)
            {
                Console.WriteLine(
                    argumentos.GetUsage("ERROR: Falta directorio de entrada."));
                Environment.Exit(1);
            }

            if (argumentos.DirectorioDeSalida == null)
            {
                Console.WriteLine(
                    argumentos.GetUsage("ERROR: Falta directorio de salida."));
                Environment.Exit(1);
            }

            // Chequea que los directorios no sean los mismos.
            if (argumentos.DirectorioDeEntrada == argumentos.DirectorioDeSalida)
            {
                Console.WriteLine(
                    argumentos.GetUsage("ERROR: El directorio de entrada y salida deben ser diferentes."));
                Environment.Exit(1);
            }

            // Procesa cada archivo en el directorio fuente.
            IEscuchadorDeEstatus escuchadorDeEstatus      = new EscuchadorDeEstatusPorOmisión();
            ManejadorDeMapa      manejadorDeMapa          = new ManejadorDeMapa(escuchadorDeEstatus);
            DirectoryInfo        informaciónDelDirectorio = new DirectoryInfo(argumentos.DirectorioDeEntrada);

            FileInfo[] archivosFuente = informaciónDelDirectorio.GetFiles("*.mp");
            foreach (FileInfo archivo in archivosFuente)
            {
                // Verifica que el archivo de salida no existe.
                string archivoDeSalida = Path.Combine(argumentos.DirectorioDeSalida, archivo.Name);
                if (File.Exists(archivoDeSalida))
                {
                    Console.WriteLine(string.Format("ERROR: Archivo de salida '{0}' ya existe.", archivoDeSalida));
                    Environment.Exit(1);
                    break;
                }

                // Lee mapa.
                Console.Write(string.Format("Leyendo '{0}' ... ", archivo.FullName));
                manejadorDeMapa.Abrir(archivo.FullName);
                Console.WriteLine("listo.");

                // Procesa cada uno de los 'procesamientos'.
                Console.WriteLine("Procesando ... ");
                foreach (string procesamiento in argumentos.Procesamientos)
                {
                    Console.Write(string.Format(" -> {0} ...", procesamiento));
                    int númeroDeProblemas = 0;
                    switch (procesamiento)
                    {
                    case "ProcesarTodo":
                    {
                        númeroDeProblemas += manejadorDeMapa.ProcesarTodo();
                    }
                    break;

                    case "ArreglaIndices":
                    {
                        númeroDeProblemas += manejadorDeMapa.ManejadorDePdis.ArregladorDeIndicesDeCiudad.Procesa();
                        númeroDeProblemas += manejadorDeMapa.ManejadorDeVías.ArregladorDeIndicesDeCiudad.Procesa();
                    }
                    break;

                    default:
                        Console.WriteLine(
                            argumentos.GetUsage(string.Format("ERROR: Procesamiento '{0}' es desconocido.", procesamiento)));
                        Environment.Exit(1);
                        break;
                    }

                    // Imprime el número de problemas encontrados.
                    Console.WriteLine(string.Format(" {0} problemas.", númeroDeProblemas));

                    // Imprime cambios.
                    ImprimeCambios(manejadorDeMapa.ManejadorDePdis.Elementos, "PDI");
                    ImprimeCambios(manejadorDeMapa.ManejadorDeVías.Elementos, "Via");
                }

                // Escribe el archivo de salida.
                Console.Write(string.Format("Guardando mapa '{0}' ... ", archivoDeSalida));
                manejadorDeMapa.GuardaEnFormatoPolish(
                    archivoDeSalida,
                    string.Format("Generado por {0} @ {1}", Assembly.GetExecutingAssembly().GetName().Name, DateTime.Now));
                Console.WriteLine("listo.");
                Console.WriteLine();
            }
        }
示例#37
0
 /// <summary>
 /// Constructor.
 /// </summary>
 /// <param name="elManejadorDeMapa">El manejador del mapa.</param>
 /// <param name="elNúmero">El número del elemento.</param>
 /// <param name="elComentario">El comentario.</param>
 public Comentario(
     ManejadorDeMapa elManejadorDeMapa,
     int elNúmero,
     string elComentario)
     : base(elManejadorDeMapa,
      elNúmero,
      ";",
      misDescripciones,
      GeneraCampos(elComentario))
 {
     miTexto = ((CampoComentario)Campos[0]).Comentario;
 }
        public void PruebaConstructor()
        {
            // Preparación.
              int número = 12;
              ManejadorDeMapa manejadorDeMapa = new ManejadorDeMapa(new EscuchadorDeEstatusPorOmisión());
              string clase = "clase";
              string nombre = "Nombre";
              string tipo = "0xc";
              List<Campo> campos = new List<Campo> {
            new CampoNombre (nombre),
            new CampoComentario (";Comentario"),
            new CampoTipo (tipo)
              };

              // Llama al constructor.
              ElementoDesconocido objectoDePrueba = new ElementoDesconocido(manejadorDeMapa, número, clase, campos);

              // Prueba Propiedades.
              Assert.AreEqual(campos, objectoDePrueba.Campos, "Campos");
              Assert.AreEqual(clase, objectoDePrueba.Clase, "Clase");
              Assert.AreEqual(string.Empty, objectoDePrueba.Descripción, "Descripción");
              Assert.AreEqual(false, objectoDePrueba.FuéEliminado, "FuéEliminado");
              Assert.AreEqual(false, objectoDePrueba.FuéModificado, "FuéModificado");
              Assert.AreEqual(nombre, objectoDePrueba.Nombre, "Nombre");
              Assert.AreEqual(número, objectoDePrueba.Número, "Número");
              Assert.AreEqual(null, objectoDePrueba.Original, "Original");
              Assert.AreEqual(string.Empty, objectoDePrueba.RazónParaEliminación, "RazónParaEliminación");
              Assert.AreEqual(new Tipo(tipo), objectoDePrueba.Tipo, "Tipo");
        }
        public void PruebaProcesarTodo()
        {
            #region Preparación.
              // Crea el objeto a probar.
              IEscuchadorDeEstatus escuchadorDeEstatus = new EscuchadorDeEstatusPorOmisión();
              ManejadorDeMapa manejadorDeMapa = new ManejadorDeMapa(escuchadorDeEstatus);
              ManejadorDePdis objectoDePrueba = new ManejadorDePdis(manejadorDeMapa, new List<Pdi>(), escuchadorDeEstatus);

              // Caso de prueba.
              Caso[] casos = new[] {
            //        Tipo,     Nombre Original, Nombre Corregido
            new Caso ("0x2a06", "RES. LA COMIDA", "RESTAURANTE LA COMIDA"), // Cambia Nombre.
            new Caso ("0x2a07", "RES  LA  COMIDA", "RESTAURANTE LA COMIDA"), // Cambia nombre y elimina espacios.
            new Caso ("0x9999", "RES LA COMIDA", "RES LA COMIDA"),  // Este no debería cambiar porque el tipo no está en el rango.
            new Caso ("0x6402", "CONJ. RESD. LAS TORRES", "CONJUNTO RESIDENCIAL LAS TORRES"), // Cambia Nombre.
              };

              // Crea los PDIs originales.
              IList<Pdi> pdis = objectoDePrueba.Elementos;
              const string clase = "POI";
              for (int i = 0; i < casos.Length; ++i)
              {
            Caso caso = casos[i];
            List<Campo> campos = new List<Campo> {
              new CampoNombre (caso.NombreOriginal),
              new CampoTipo (caso.Tipo)
            };

            Pdi pdi = new Pdi(manejadorDeMapa, i, clase, campos);
            pdis.Add(pdi);
              }

              // Crea los PDIs finales.
              IList<Pdi> pdisEsperados = new List<Pdi>(pdis.Count);
              for (int i = 0; i < pdis.Count; ++i)
              {
            Pdi pdiEsperado = (Pdi)pdis[i].Clone();
            string nombreEsperado = casos[i].NombreCorregido;
            if (pdiEsperado.Nombre != nombreEsperado)
            {
              pdiEsperado.ActualizaNombre(nombreEsperado, "");
            }

            pdisEsperados.Add(pdiEsperado);
              }
              #endregion

              // Llama al método bajo prueba.
              objectoDePrueba.ProcesarTodo();

              #region Prueba propiedades.
              // Prueba propiedad Elementos.
              for (int i = 0; i < objectoDePrueba.Elementos.Count; ++i)
              {
            Assert.That(objectoDePrueba.Elementos[i].Nombre, Is.EqualTo(pdisEsperados[i].Nombre), "Elementos[" + i + "].Nombre");
              }
              #endregion
        }
 /// <summary>
 /// Constructor.
 /// </summary>
 /// <param name="elManejadorDeMapa">El manejador del mapa.</param>
 /// <param name="elNúmero">El número del elemento.</param>
 /// <param name="laClase">La clase de elemento.</param>
 /// <param name="losCampos">Los campos del elemento.</param>
 public ElementoDesconocido(
     ManejadorDeMapa elManejadorDeMapa,
     int elNúmero,
     string laClase,
     IList<Campo> losCampos)
     : base(elManejadorDeMapa,
       elNúmero,
       laClase,
       misDescripciones,
       losCampos)
 {
 }
示例#41
0
        public void PruebaProcesaCaso1()
        {
            #region Preparación.
            // Crea el objeto a probar.
            IEscuchadorDeEstatus escuchadorDeEstatus = new EscuchadorDeEstatusPorOmisión();
            ManejadorDeMapa      manejadorDeMapa     = new ManejadorDeMapa(escuchadorDeEstatus);
            ManejadorDePdis      manejadorDePdis     = new ManejadorDePdis(manejadorDeMapa, new List <Pdi>(), escuchadorDeEstatus);
            var objectoDePrueba = new BuscadorDeErrores(manejadorDePdis, escuchadorDeEstatus);

            // Crea los elementos.
            IList <Pdi>  pdis             = manejadorDePdis.Elementos;
            const string clase            = "POI";
            var          campoCoordenadas = new CampoCoordenadas("Data", 0, new[]
            {
                new Coordenadas(10.16300, -66.00000),
                new Coordenadas(10.16199, -65.99850),
                new Coordenadas(10.16010, -65.99591),
            });

            var pdiNoCiudad = new Pdi(manejadorDeMapa, 1, clase, new List <Campo> {
                new CampoTipo("0x001"),
                campoCoordenadas
            });
            pdis.Add(pdiNoCiudad);

            var pdiCiudadCorrecta = new Pdi(manejadorDeMapa, 1, clase, new List <Campo> {
                new CampoTipo("0xb00"),
                new CampoEsCiudad(true),
                new CampoIndiceDeCiudad(79),
                campoCoordenadas
            });
            pdis.Add(pdiCiudadCorrecta);

            var pdiSinCampoEsCiudad = new Pdi(manejadorDeMapa, 1, clase, new List <Campo> {
                new CampoTipo("0xc00"),
                new CampoIndiceDeCiudad(79),
                campoCoordenadas
            });
            pdis.Add(pdiSinCampoEsCiudad);

            var pdiSinIndiceDeCiudad = new Pdi(manejadorDeMapa, 1, clase, new List <Campo> {
                new CampoTipo("0xd00"),
                new CampoEsCiudad(true),
                campoCoordenadas
            });
            pdis.Add(pdiSinIndiceDeCiudad);

            var pdiSinIndiceDeCiudadYConAttributo = new Pdi(manejadorDeMapa, 1, clase, new List <Campo> {
                new CampoTipo("0xf00"),
                new CampoAtributo(BuscadorDeErrores.AtributoIgnorarCamposCityYCityIdx),
                campoCoordenadas
            });
            pdis.Add(pdiSinIndiceDeCiudadYConAttributo);

            var pdiSinIndiceDeCiudadYSinCampoEsCiudad = new Pdi(manejadorDeMapa, 1, clase, new List <Campo> {
                new CampoTipo("0xe00"),
                campoCoordenadas
            });
            pdis.Add(pdiSinIndiceDeCiudadYSinCampoEsCiudad);

            // Deberian haber 3 errores:
            //   - 1 por el PDI sin campo de Ciudad.
            //   - 1 por el PDI sin índice de Ciudad.
            //   - 2 por el PDI sin campo de Ciudad y sin índice de Ciudad.
            const int númeroDeProblemasDetectados = 4;
            #endregion

            // Llama al método bajo prueba.
            objectoDePrueba.Procesa();

            // Prueba propiedades.
            Assert.That(objectoDePrueba.NúmeroDeElementos, Is.EqualTo(pdis.Count), "NúmeroDeElementos");
            Assert.That(objectoDePrueba.NúmeroDeProblemasDetectados, Is.EqualTo(númeroDeProblemasDetectados), "NúmeroDeProblemasDetectados");
            Assert.That(objectoDePrueba.Errores.Count, Is.EqualTo(númeroDeProblemasDetectados), "Errores.Count");

            Assert.That(
                objectoDePrueba.Errores[pdiSinCampoEsCiudad],
                Text.StartsWith("E004"),
                "Errores[pdiSinCampoEsCiudad]");

            Assert.That(
                objectoDePrueba.Errores[pdiSinIndiceDeCiudad],
                Text.StartsWith("E005"),
                "Errores[pdiSinIndiceDeCiudad]");

            Assert.That(
                objectoDePrueba.Errores[pdiSinIndiceDeCiudadYSinCampoEsCiudad],
                Text.StartsWith("E004"),
                "Errores[pdiSinIndiceDeCiudadYSinCampoEsCiudad]");

            Assert.That(
                objectoDePrueba.Errores[pdiSinIndiceDeCiudadYSinCampoEsCiudad],
                Text.Contains("E005"),
                "Errores[pdiSinIndiceDeCiudadYSinCampoEsCiudad]");

            Assert.That(
                objectoDePrueba.Errores.ContainsKey(pdiSinIndiceDeCiudadYConAttributo),
                Is.False,
                "Errores.ContainsKey(pdiSinIndiceDeCiudadYConAttributo)");

            Assert.That(
                objectoDePrueba.Errores.ContainsKey(pdiCiudadCorrecta),
                Is.False,
                "Errores.ContainsKey(pdiCiudadCorrecta)");
        }
        public void PruebaConstructor()
        {
            // Preparación.
              IEscuchadorDeEstatus escuchadorDeEstatus = new EscuchadorDeEstatusPorOmisión();
              ManejadorDeMapa manejadorDeMapa = new ManejadorDeMapa(escuchadorDeEstatus);
              ManejadorDeVías manejadorDePdis = new ManejadorDeVías(manejadorDeMapa, new List<Vía>(), escuchadorDeEstatus, null);

              // Llama al contructor bajo prueba.
              ArregladorGeneral objectoDePrueba = new ArregladorGeneral(manejadorDePdis, escuchadorDeEstatus);

              // Prueba propiedades.
              Assert.That(objectoDePrueba.NúmeroDeElementos, Is.EqualTo(0), "NúmeroDeElementos");
              Assert.That(objectoDePrueba.NúmeroDeProblemasDetectados, Is.EqualTo(0), "NúmeroDeElementosModificados");
        }
示例#43
0
 /// <summary>
 /// Constructor.
 /// </summary>
 /// <param name="elManejadorDeMapa">El manejador del mapa.</param>
 /// <param name="elNúmero">El número de la Polilínea.</param>
 /// <param name="laClase">La clase de la Polilínea.</param>
 /// <param name="losCampos">Los campos de la Polilínea.</param>
 public Polilínea(
     ManejadorDeMapa elManejadorDeMapa,
     int elNúmero,
     string laClase,
     IList<Campo> losCampos)
     : base(elManejadorDeMapa,
      elNúmero,
      laClase,
      CaracterísticasDePolilíneas.Descripciones,
      losCampos)
 {
     // Busca los campos especificos de los Polilíneas.
       foreach (Campo campo in losCampos)
       {
     CampoCoordenadas campoCoordenadas = campo as CampoCoordenadas;
     if (campoCoordenadas != null)
     {
       // Si ya tenemos coordenadas entonces solamente las remplazamos
       // si el nivel es menor.
       if (miCampoCoordenadas != CampoCoordenadas.Nulas)
       {
     if (campoCoordenadas.Nivel < miCampoCoordenadas.Nivel)
     {
       miCampoCoordenadas = campoCoordenadas;
     }
       }
       else
       {
     miCampoCoordenadas = campoCoordenadas;
       }
     }
       }
 }
示例#44
0
        private void EnMenúConectarNodosDesconectados(object elEnviador, EventArgs losArgumentos)
        {
            // Retornamos si no hay Vías seleccionadas.
            int númeroDeNodosDesconectados = miLista.SelectedIndices.Count;

            if (númeroDeNodosDesconectados == 0)
            {
                return;
            }

            if (númeroDeNodosDesconectados > 1)
            {
                // Pregunta si se quiere Estandarizar el Límite de Velocidad.
                DialogResult respuesta = MessageBox.Show(
                    string.Format("Está seguro que quiere conectar los {0} Nodos seleccionados?", númeroDeNodosDesconectados),
                    "Conectar Nodos Desconectados",
                    MessageBoxButtons.YesNo,
                    MessageBoxIcon.Warning);

                if (respuesta != DialogResult.Yes)
                {
                    return;
                }
            }

            #region Conectar Nodos Desconectados.
            ManejadorDeMapa.SuspendeEventos();
            IList <InformaciónNodoDesconectado> posibleNodoDesconectados = miInterfaseListaConMapaDeVías.MenuEditorDeVías.ObtieneEtiquetasSeleccionadas <InformaciónNodoDesconectado>();
            const string razón = "Nodo conectado manualmente.";
            foreach (InformaciónNodoDesconectado posibleNodoDesconectado in posibleNodoDesconectados)
            {
                // Conecta los nodos.
                Vía  vía               = posibleNodoDesconectado.PosibleNodoDesconectado.Vía;
                int  índice            = posibleNodoDesconectado.PosibleNodoDesconectado.Indice;
                Vía  víaDestino        = posibleNodoDesconectado.NodoDestino.Vía;
                int  índiceNodoDestino = posibleNodoDesconectado.NodoDestino.Indice;
                bool laVíaTieneOtroNodoConLasMismasCoordenadas = false;

                #region Cambia las coordenadas del nodo desconectado si no son iguales.
                Coordenadas coordenadasNodo        = posibleNodoDesconectado.PosibleNodoDesconectado.Coordenadas;
                Coordenadas coordenadasNodoDestino = posibleNodoDesconectado.NodoDestino.Coordenadas;
                if (coordenadasNodo != coordenadasNodoDestino)
                {
                    // Antes the cambiar las coordenadas tenemos que asegurarnos que la vía no tiene
                    // otro nodo con esas coordenadas.
                    foreach (Coordenadas coordenadasNodoDeLaVía in vía.Coordenadas)
                    {
                        if (coordenadasNodoDeLaVía == coordenadasNodoDestino)
                        {
                            laVíaTieneOtroNodoConLasMismasCoordenadas = true;
                            break;
                        }
                    }

                    // Si la vía no tiene otro nodo con las mismas coordenadas
                    // entonces lo conectamos.
                    if (!laVíaTieneOtroNodoConLasMismasCoordenadas)
                    {
                        vía.CambiaCoordenadas(
                            coordenadasNodoDestino,
                            índice,
                            razón);
                    }
                }
                #endregion

                // Si la vía tiene otro nodo con las mismas coordenadas
                // entonces avisamos al usuario y no lo conectamos.
                if (laVíaTieneOtroNodoConLasMismasCoordenadas)
                {
                    MessageBox.Show(
                        string.Format("La Vía # {0} tiene otro nodo con las mismas coordenadas ({1}).\nEl nodo no se va a conectar.", vía.Número, coordenadasNodo),
                        "Conecta Nodos Desconectados",
                        MessageBoxButtons.OK,
                        MessageBoxIcon.Warning);
                    continue;
                }

                #region Asegurarse que ambos nodos son ruteables.
                Nodo nodo        = vía.Nodos[índice];
                Nodo nodoDestino = víaDestino.Nodos[índiceNodoDestino];

                // Si el posible nodo desconectado es ruteable y el nodo destino
                // no es ruteable entonces usamos el identificador global del
                // posible nodo desconectado para el nodo destino.
                if (nodo.EsRuteable && !nodoDestino.EsRuteable)
                {
                    // Añade el nodo ruteable en la vía destino.
                    víaDestino.AñadeNodoRuteable(
                        índiceNodoDestino,
                        nodo.IdentificadorGlobal,
                        razón);
                }
                // Si el nodo destino es ruteable entonces usamos el identificador
                // global del nodo destino para el nodo desconectado.
                else if (nodoDestino.EsRuteable)
                {
                    // Añade el nodo ruteable en la vía.
                    vía.AñadeNodoRuteable(
                        índice,
                        nodoDestino.IdentificadorGlobal,
                        razón);
                }
                // Si ninguno de los nodos es ruteable entonces generamos un nuevo
                // índentificador global.
                else
                {
                    // Genera un nuevo identificador global.
                    int nuevoIdentificadorGlobal = GeneraNuevoIdentificadorGlobal();

                    // Añade el nodo ruteable a ambas vías.
                    vía.AñadeNodoRuteable(
                        índice,
                        nuevoIdentificadorGlobal,
                        razón);
                    víaDestino.AñadeNodoRuteable(
                        índiceNodoDestino,
                        nuevoIdentificadorGlobal,
                        razón);
                }
                #endregion
            }
            ManejadorDeMapa.RestableceEventos();

            // Notifica la edición.
            miMenú.EnvíaEventoEditó();
            #endregion
        }
        public void PruebaConstructor()
        {
            // Preparación.
              IEscuchadorDeEstatus escuchadorDeEstatus = new EscuchadorDeEstatusPorOmisión();
              ManejadorDeMapa manejadorDeMapa = new ManejadorDeMapa(escuchadorDeEstatus);
              ManejadorDePDIs manejadorDePDIs = new ManejadorDePDIs(manejadorDeMapa, new List<PDI>(), escuchadorDeEstatus);

              // Llama al contructor bajo prueba.
              BuscadorDeDuplicados objectoDePrueba = new BuscadorDeDuplicados(manejadorDePDIs, escuchadorDeEstatus);

              // Prueba propiedades.
              Assert.That(objectoDePrueba.NúmeroDeElementoProcesándose, Is.EqualTo(0), "NúmeroDeElementoProcesándose");
              Assert.That(objectoDePrueba.NúmeroDeElementos, Is.EqualTo(0), "NúmeroDeElementos");
              Assert.That(objectoDePrueba.NúmeroDeProblemasDetectados, Is.EqualTo(0), "NúmeroDeElementosModificados");
        }
示例#46
0
        public void PruebaConstructor()
        {
            // Preparación.
              IEscuchadorDeEstatus escuchadorDeEstatus = new EscuchadorDeEstatusPorOmisión();
              ManejadorDeMapa manejadorDeMapa = new ManejadorDeMapa(escuchadorDeEstatus);
              ManejadorDePdis manejadorDePdis = new ManejadorDePdis(manejadorDeMapa, new List<Pdi>(), escuchadorDeEstatus);

              // Llama al contructor bajo prueba.
              var objectoDePrueba = new BuscadorDeErrores(manejadorDePdis, escuchadorDeEstatus);

              // Prueba propiedades.
              Assert.That(objectoDePrueba.NúmeroDeElementos, Is.EqualTo(0), "NúmeroDeElementos");
              Assert.That(objectoDePrueba.NúmeroDeProblemasDetectados, Is.EqualTo(0), "NúmeroDeProblemasDetectados");
        }
        public void PruebaElimina()
        {
            // Preparación.
              ManejadorDeMapa manejadorDeMapa = new ManejadorDeMapa(new EscuchadorDeEstatusPorOmisión());
              int número = 12;
              string clase = "clase";
              string nombre = "Nombre";
              List<Campo> campos = new List<Campo> {
            new CampoNombre (nombre),
            new CampoComentario (";Comentario")
              };
              ElementoDesconocido objectoDePrueba = new ElementoDesconocido(manejadorDeMapa, número, clase, campos);
              string razón = "Razón";

              // Llama el método a probar.
              objectoDePrueba.Elimina(razón);

              // Prueba Propiedades.
              Assert.AreEqual(campos, objectoDePrueba.Campos, "Campos");
              Assert.AreEqual(clase, objectoDePrueba.Clase, "Clase");
              Assert.AreEqual(string.Empty, objectoDePrueba.Descripción, "Descripción");
              Assert.AreEqual(true, objectoDePrueba.FuéEliminado, "FuéEliminado");
              Assert.AreEqual(false, objectoDePrueba.FuéModificado, "FuéModificado");
              Assert.AreEqual(nombre, objectoDePrueba.Nombre, "Nombre");
              Assert.AreEqual(número, objectoDePrueba.Número, "Número");
              Assert.AreEqual(null, objectoDePrueba.Original, "Original");
              Assert.AreEqual(razón, objectoDePrueba.RazónParaEliminación, "RazónParaEliminación");
              Assert.That(objectoDePrueba.Tipo, Is.Null, "Tipo");
        }
        public void PruebaShowDialog()
        {
            #region Preparación general.
            // Crea un PDI para las pruebas.
            IEscuchadorDeEstatus escuchadorDeEstatus = new EscuchadorDeEstatusPorOmisión();
            ManejadorDeMapa      manejadorDeMapa     = new ManejadorDeMapa(escuchadorDeEstatus);
            string       nombre      = "Nombre";
            Tipo         tipo        = new Tipo("0xaaaa");
            const string clase       = "POI";
            Coordenadas  coordenadas = new Coordenadas(20, 30);
            List <Campo> campos      = new List <Campo> {
                new CampoNombre(nombre),
                new CampoTipo(tipo),
                new CampoCoordenadas(CampoCoordenadas.IdentificadorDeCoordenadas, 0, coordenadas)
            };
            List <Pdi> pdis = new List <Pdi> {
                new Pdi(manejadorDeMapa, 1, clase, campos)
            };
            #endregion

            #region Caso 1: Apenas aparece la ventana el usuario apreta "Cambiar"
            {
                // En este caso el método Show() debería retornar None,
                // Y la propiedad TipoNuevo debería ser el tipo nulo.

                #region Preparación.
                // Inicializa objecto de prueba.
                VentanaCambiarTipoDePdi objectoDePrueba = new VentanaCambiarTipoDePdi();
                objectoDePrueba.Pdis = pdis;

                // Crea los probadores de los elementos de la interfase.
                ButtonTester botónCambiar = new ButtonTester("miBotónCambiar", objectoDePrueba);
                #endregion

                // Llama al método a probar.
                objectoDePrueba.Show();

                // Apreta el botón de "Cambiar".
                botónCambiar.Click();

                // Probar propiedades.
                Assert.AreEqual(DialogResult.None, objectoDePrueba.DialogResult, "DialogResult");
                Assert.AreEqual(Tipo.TipoNulo, objectoDePrueba.TipoNuevo, "TipoNuevo");
                Assert.AreEqual(pdis, objectoDePrueba.Pdis, "PDIs");

                // Cierra la ventana.
                objectoDePrueba.Close();
            }
            #endregion

            #region Caso 2: Apenas aparece la ventana el usuario apreta "Cancelar"
            {
                // En este caso el método Show() debería retornar Cancel,
                // Y la propiedad TipoNuevo debería ser el tipo nulo.

                #region Preparación.
                // Inicializa objecto de prueba.
                VentanaCambiarTipoDePdi objectoDePrueba = new VentanaCambiarTipoDePdi();
                objectoDePrueba.Pdis = pdis;

                // Crea los probadores de los elementos de la interfase.
                ButtonTester botónCancelar = new ButtonTester("miBotónCancelar", objectoDePrueba);
                #endregion

                // Llama al método a probar.
                objectoDePrueba.Show();

                // Apreta el botón de "Cancelar".
                botónCancelar.Click();

                // Probar propiedades.
                Assert.AreEqual(DialogResult.Cancel, objectoDePrueba.DialogResult, "DialogResult");
                Assert.AreEqual(Tipo.TipoNulo, objectoDePrueba.TipoNuevo, "TipoNuevo");
                Assert.AreEqual(pdis, objectoDePrueba.Pdis, "PDIs");

                // Cierra la ventana.
                objectoDePrueba.Close();
            }
            #endregion

            #region Caso 3: El usuario cambia el tipo inicial por uno válido.
            {
                // En este caso el método Show() debería retornar OK,
                // y la propiedad TipoNuevo debería ser el tipo nuevo.

                #region Preparación.
                // Inicializa objecto de prueba.
                VentanaCambiarTipoDePdi objectoDePrueba = new VentanaCambiarTipoDePdi();
                objectoDePrueba.Pdis = pdis;

                // Crea un tipo válido.
                string númeroTipoNuevoVálido = "100";
                Tipo   tipoNuevoVálido       = new Tipo("0x" + númeroTipoNuevoVálido);
                Assert.IsTrue(CaracterísticasDePdis.Descripciones.ContainsKey(tipoNuevoVálido), "El tipo nuevo debe ser conocido.");

                // Crea los probadores de los elementos de la interfase.
                ButtonTester  botónCambiar   = new ButtonTester("miBotónCambiar", objectoDePrueba);
                TextBoxTester textoTipoNuevo = new TextBoxTester("miTextoTipoNuevo", objectoDePrueba);
                #endregion

                // Llama al método a probar.
                objectoDePrueba.Show();

                // Simula el usuario poniendo un tipo válido.
                textoTipoNuevo.Properties.Focus();
                textoTipoNuevo.Enter(númeroTipoNuevoVálido);

                // Apreta el botón de "Cambiar".
                botónCambiar.Properties.Focus();
                botónCambiar.Click();

                // Probar propiedades.
                Assert.AreEqual(DialogResult.OK, objectoDePrueba.DialogResult, "DialogResult");
                Assert.AreEqual(tipoNuevoVálido, objectoDePrueba.TipoNuevo, "TipoNuevo");
                Assert.AreEqual(pdis, objectoDePrueba.Pdis, "PDIs");

                // Cierra la ventana.
                objectoDePrueba.Close();
            }
            #endregion

            #region Caso 4: El usuario cambia el tipo inicial por uno desconocido.
            {
                // En este caso el método Show() debería retornar None,
                // y la propiedad TipoNuevo debería ser el tipo desconocido.

                #region Preparación.
                // Inicializa objecto de prueba.
                VentanaCambiarTipoDePdi objectoDePrueba = new VentanaCambiarTipoDePdi();
                objectoDePrueba.Pdis = pdis;

                // Crea un tipo desconocido.
                string númeroTipoNuevoDesconocido = "bbbb";
                Tipo   tipoNuevoDesconocido       = new Tipo("0x" + númeroTipoNuevoDesconocido);
                Assert.IsFalse(CaracterísticasDePdis.Descripciones.ContainsKey(tipoNuevoDesconocido), "El tipo nuevo debe ser desconocido.");

                // Crea los probadores de los elementos de la interfase.
                ButtonTester  botónCambiar   = new ButtonTester("miBotónCambiar", objectoDePrueba);
                TextBoxTester textoTipoNuevo = new TextBoxTester("miTextoTipoNuevo", objectoDePrueba);
                #endregion

                // Llama al método a probar.
                objectoDePrueba.Show();

                // Simula el usuario poniendo un tipo desconocido.
                textoTipoNuevo.Properties.Focus();
                textoTipoNuevo.Enter(númeroTipoNuevoDesconocido);

                // Apreta el botón de "Cambiar".
                botónCambiar.Properties.Focus();
                botónCambiar.Click();

                // Probar propiedades.
                Assert.AreEqual(DialogResult.None, objectoDePrueba.DialogResult, "DialogResult");
                Assert.AreEqual(tipoNuevoDesconocido, objectoDePrueba.TipoNuevo, "TipoNuevo");
                Assert.AreEqual(pdis, objectoDePrueba.Pdis, "PDIs");

                // Cierra la ventana.
                objectoDePrueba.Close();
            }
            #endregion

            #region Caso 5: El usuario cambia el tipo inicial por uno inválido.
            {
                // En este caso el método Show() debería retornar None,
                // y la propiedad TipoNuevo debería ser el tipo nulo.

                #region Preparación.
                // Inicializa objecto de prueba.
                VentanaCambiarTipoDePdi objectoDePrueba = new VentanaCambiarTipoDePdi();
                objectoDePrueba.Pdis = pdis;

                // Crea un tipo inválido.
                // Un tipo inválido es aquel que genera una excepción cuando
                // se trata de construir una clase Tipo con el.
                string númeroTipoNuevoInválido = "ww";
                bool   tipoEsInválido          = false;
                try
                {
                    new Tipo("0x" + númeroTipoNuevoInválido);
                }
                catch
                {
                    tipoEsInválido = true;
                }
                Assert.IsTrue(tipoEsInválido, "El tipo nuevo debe ser inválido.");

                // Crea los probadores de los elementos de la interfase.
                ButtonTester  botónCambiar   = new ButtonTester("miBotónCambiar", objectoDePrueba);
                TextBoxTester textoTipoNuevo = new TextBoxTester("miTextoTipoNuevo", objectoDePrueba);
                #endregion

                // Llama al método a probar.
                objectoDePrueba.Show();

                // Simula el usuario poniendo un tipo inválido.
                textoTipoNuevo.Properties.Focus();
                textoTipoNuevo.Enter(númeroTipoNuevoInválido);

                // Apreta el botón de "Cambiar".
                botónCambiar.Properties.Focus();
                botónCambiar.Click();

                // Probar propiedades.
                Assert.AreEqual(DialogResult.None, objectoDePrueba.DialogResult, "DialogResult");
                Assert.AreEqual(Tipo.TipoNulo, objectoDePrueba.TipoNuevo, "TipoNuevo");
                Assert.AreEqual(pdis, objectoDePrueba.Pdis, "PDIs");

                // Cierra la ventana.
                objectoDePrueba.Close();
            }
            #endregion

            #region Caso 6: El usuario empiezar a cambiar el tipo, pero al final lo borra y lo deja en blanco.
            {
                // En este caso el método Show() debería retornar None,
                // y la propiedad TipoNuevo debería ser el tipo nulo.

                #region Preparación.
                // Inicializa objecto de prueba.
                VentanaCambiarTipoDePdi objectoDePrueba = new VentanaCambiarTipoDePdi();
                objectoDePrueba.Pdis = pdis;

                // Crea los probadores de los elementos de la interfase.
                ButtonTester  botónCambiar   = new ButtonTester("miBotónCambiar", objectoDePrueba);
                TextBoxTester textoTipoNuevo = new TextBoxTester("miTextoTipoNuevo", objectoDePrueba);
                #endregion

                // Llama al método a probar.
                objectoDePrueba.Show();

                // Simula el usuario empezando a cambiar el tipo y despues dejandolo en blanco.
                textoTipoNuevo.Properties.Focus();
                textoTipoNuevo.Enter("123");
                textoTipoNuevo.Properties.Text = string.Empty;

                // Apreta el botón de "Cambiar".
                botónCambiar.Properties.Focus();
                botónCambiar.Click();

                // Probar propiedades.
                Assert.AreEqual(DialogResult.None, objectoDePrueba.DialogResult, "DialogResult");
                Assert.AreEqual(Tipo.TipoNulo, objectoDePrueba.TipoNuevo, "TipoNuevo");
                Assert.AreEqual(pdis, objectoDePrueba.Pdis, "PDIs");

                // Cierra la ventana.
                objectoDePrueba.Close();
            }
            #endregion

            #region Caso 7: El usuario empiezar a cambiar el tipo, pero al final cancela.
            {
                // En este caso el método Show() debería retornar Cancel,
                // y la propiedad TipoNuevo debería ser el tipo nulo.

                #region Preparación.
                // Inicializa objecto de prueba.
                VentanaCambiarTipoDePdi objectoDePrueba = new VentanaCambiarTipoDePdi();
                objectoDePrueba.Pdis = pdis;

                // Crea los probadores de los elementos de la interfase.
                ButtonTester  botónCancelar  = new ButtonTester("miBotónCancelar", objectoDePrueba);
                TextBoxTester textoTipoNuevo = new TextBoxTester("miTextoTipoNuevo", objectoDePrueba);
                #endregion

                // Llama al método a probar.
                objectoDePrueba.Show();

                // Simula el usuario empezando a cambiar el tipo y despues dejandolo en blanco.
                textoTipoNuevo.Enter("123");
                textoTipoNuevo.Properties.Text = string.Empty;

                // Apreta el botón de "Cancelar".
                botónCancelar.Click();

                // Probar propiedades.
                Assert.AreEqual(DialogResult.Cancel, objectoDePrueba.DialogResult, "DialogResult");
                Assert.AreEqual(Tipo.TipoNulo, objectoDePrueba.TipoNuevo, "TipoNuevo");

                // Cierra la ventana.
                objectoDePrueba.Close();
            }
            #endregion

            #region Caso 8: Se usa con un PDI nulo.
            {
                // En este caso el método Show() debería retornar None,
                // y la propiedad TipoNuevo debería ser el tipo nulo.

                #region Preparación.
                // Inicializa objecto de prueba.
                VentanaCambiarTipoDePdi objectoDePrueba = new VentanaCambiarTipoDePdi();
                objectoDePrueba.Pdis = null;

                // Crea los probadores de los elementos de la interfase.
                ButtonTester  botónCambiar   = new ButtonTester("miBotónCambiar", objectoDePrueba);
                TextBoxTester textoTipoNuevo = new TextBoxTester("miTextoTipoNuevo", objectoDePrueba);
                #endregion

                // Llama al método a probar.
                objectoDePrueba.Show();

                // Simula el usuario empezando a cambiar el tipo y despues dejandolo en blanco.
                textoTipoNuevo.Properties.Focus();
                textoTipoNuevo.Enter("100");
                textoTipoNuevo.Properties.Text = string.Empty;

                // Apreta el botón de "Cambiar".
                botónCambiar.Properties.Focus();
                botónCambiar.Click();

                // Probar propiedades.
                Assert.AreEqual(DialogResult.None, objectoDePrueba.DialogResult, "DialogResult");
                Assert.AreEqual(Tipo.TipoNulo, objectoDePrueba.TipoNuevo, "TipoNuevo");

                // Cierra la ventana.
                objectoDePrueba.Close();
            }
            #endregion
        }
        public void PruebaProcesaCaso1()
        {
            #region Preparación.
              // Crea el objeto a probar.
              IEscuchadorDeEstatus escuchadorDeEstatus = new EscuchadorDeEstatusPorOmisión();
              ManejadorDeMapa manejadorDeMapa = new ManejadorDeMapa(escuchadorDeEstatus);
              ManejadorDeVías manejadorDeVías = new ManejadorDeVías(manejadorDeMapa, new List<Vía>(), escuchadorDeEstatus, null);
              ArregladorGeneral objectoDePrueba = new ArregladorGeneral(manejadorDeVías, escuchadorDeEstatus);

              // Caso de prueba.
              Caso[] casos = new[] {
            //         Nombre, IndicadorDeDirección, UnSoloSentido, IndicadorDeDirecciónEsperado, UnSoloSentidoEsperado
            new Caso (    "A",                  "0",         false,                          "0",                 false), // Calle doble sentido.
            new Caso (    "B",                  "0",          true,                          "1",                  true), // Indicador de dirección = 0.
            new Caso (    "C",                  "1",         false,                          "1",                  true), // Falta UnSoloSentido.
            new Caso (    "D",                  "1",          true,                          "1",                  true), // Calle un sentido.
            new Caso (    "E",                 null,          true,                          "1",                  true), // Falta indicador de dirección.
              };
              const int númeroDeProblemasDetectados = 3;

              // Crea los elementos.
              // Vía típica:
              //   [POLYLINE]
              //   Type=0x2
              //   Label=TRONCAL 9
              //   EndLevel=3
              //   DirIndicator=1
              //   CityIdx=1
              //   RoadID=47
              //   RouteParam=5,3,1,0,0,0,0,0,0,0,0,0
              //   Data0=(10.16300,-66.00000),(10.16199,-65.99850),(10.16010,-65.99591)
              IList<Vía> vías = manejadorDeVías.Elementos;
              const string clase = "POI";
              for (int i = 0; i < casos.Length; ++i)
              {
            Caso caso = casos[i];
            List<Campo> campos = new List<Campo> {
              new CampoTipo("0x2"),
              new CampoNombre (caso.Nombre),
              new CampoGenérico("EndLevel", "3"),
              new CampoParámetrosDeRuta(
            new LímiteDeVelocidad(5),
            new ClaseDeRuta(3),
            new[] {caso.UnSoloSentido, false, false, false, false, false, false, false, false, false} ),
              new CampoCoordenadas("Data", 0, new[]
                                            {
                                              new Coordenadas(10.16300,-66.00000),
                                              new Coordenadas(10.16199,-65.99850),
                                              new Coordenadas(10.16010,-65.99591),
                                            })
            };
            if ( caso.IndicadorDeDirección != null)
            {
              campos.Add(new CampoGenérico(Vía.IdentificadorIndicadorDeDirección, caso.IndicadorDeDirección));
            }

            Vía vía = new Vía(manejadorDeMapa, i, clase, campos);
            vías.Add(vía);
              }
              #endregion

              // Llama al método bajo prueba.
              objectoDePrueba.Procesa();

              // Prueba propiedades.
              Assert.That(objectoDePrueba.NúmeroDeElementos, Is.EqualTo(vías.Count), "NúmeroDeElementos");
              Assert.That(objectoDePrueba.NúmeroDeProblemasDetectados, Is.EqualTo(númeroDeProblemasDetectados), "NúmeroDeProblemasDetectados");

              // Prueba los nobres de los PDIs.
              for (int i = 0; i < casos.Length; ++i)
              {
            Assert.That(vías[i].CampoParámetrosDeRuta.OtrosParámetros[0], Is.EqualTo(casos[i].UnSoloSentidoEsperado), "Vía[" + i + "].OtrosParámetros[0]");
            Assert.That(vías[i].CampoIndicadorDeDirección, Is.Not.Null, "Vía[" + i + "].CampoIndicadorDeDirección");
            Assert.That(vías[i].CampoIndicadorDeDirección.Texto, Is.EqualTo(casos[i].IndicadorDeDirecciónEsperado), "Vía[" + i + "].CampoIndicadorDeDirección.Texto");
              }
        }
        public void PruebaConstructor()
        {
            #region Caso 1: Operación Normal
            {
                #region Preparación.
                // Lee un mapa de prueba.
                const string            archivoDeEntrada    = @"..\..\Data\PruebaEscritorFormatoPolish.mp";
                IEscuchadorDeEstatus    escuchadorDeEstatus = new EscuchadorDeEstatusPorOmisión();
                ManejadorDeMapa         manejadorDeMapa     = new ManejadorDeMapa(escuchadorDeEstatus);
                LectorDeFormatoPolish   lector    = new LectorDeFormatoPolish(manejadorDeMapa, archivoDeEntrada);
                IList <ElementoDelMapa> elementos = lector.ElementosDelMapa;

                const string archivoDeSalida = @"PruebaEscritorFormatoPolish.Caso1.mp";
                #endregion

                // Llama al constructor.
                new EscritorDeFormatoPolish(archivoDeSalida, elementos, escuchadorDeEstatus);

                #region Prueba Archivo de Salida.
                string[] líneasDeEntrada = LéeArchivo(archivoDeEntrada);
                string[] líneasDeSalida  = LéeArchivo(archivoDeSalida);
                Assert.That(líneasDeSalida, Is.EqualTo(líneasDeEntrada), "Líneas");
                #endregion
            }
            #endregion

            #region Caso 2: Archivo de Salida inválido.
            {
                #region Preparación.
                // Crea elementos.
                IEscuchadorDeEstatus    escuchadorDeEstatus = new EscuchadorDeEstatusPorOmisión();
                IList <ElementoDelMapa> elementos           = new List <ElementoDelMapa>();

                // Archivo inválido.
                const string archivoDeSalidaInválido = @"ABC::\\&AAAA";

                // Excepción esperada.
                bool lanzóExcepción = false;
                ArgumentException excepciónEsperada = new ArgumentException(
                    "The path is not of a legal form.");
                #endregion

                // Llama al constructor en prueba.
                try
                {
                    new EscritorDeFormatoPolish(archivoDeSalidaInválido, elementos, escuchadorDeEstatus);
                }
                catch (Exception e)
                {
                    // Prueba las propiedades de la excepción.
                    Assert.That(e.GetType(), Is.EqualTo(excepciónEsperada.GetType()), "Tipo de Excepción");
                    Assert.That(e.Message, Is.EqualTo(excepciónEsperada.Message), "Excepción.Message");

                    lanzóExcepción = true;
                }

                Assert.That(lanzóExcepción, Is.True, "No se lanzó la excepción.");
            }
            #endregion

            #region Caso 3: Elemento con Campo Desconocido.
            {
                #region Preparación.
                // Crea elementos.
                IEscuchadorDeEstatus    escuchadorDeEstatus = new EscuchadorDeEstatusPorOmisión();
                IList <ElementoDelMapa> elementos           = new List <ElementoDelMapa> {
                    new ElementoDesconocido(null, 0, "Clase", new List <Campo> {
                        new CampoDesconocido()
                    })
                };

                const string archivoDeSalida = @"PruebaEscritorFormatoPolish.Caso3.mp";

                // Excepción esperada.
                bool lanzóExcepción = false;
                ArgumentException excepciónEsperada = new ArgumentException(
                    "Campo desconocido: GpsYv.ManejadorDeMapa.Pruebas.PruebaEscritorFormatoPolish+CampoDesconocido");
                #endregion

                // Llama al constructor en prueba.
                try
                {
                    new EscritorDeFormatoPolish(archivoDeSalida, elementos, escuchadorDeEstatus);
                }
                catch (Exception e)
                {
                    // Prueba las propiedades de la excepción.
                    Assert.That(e.GetType(), Is.EqualTo(excepciónEsperada.GetType()), "Tipo de Excepción");
                    Assert.That(e.Message, Is.EqualTo(excepciónEsperada.Message), "Excepción.Message");

                    lanzóExcepción = true;
                }

                Assert.That(lanzóExcepción, Is.True, "No se lanzó la excepción.");
            }
            #endregion
        }
        public void PruebaProcesa()
        {
            #region Preparación.
              // Crea el objeto a probar.
              IEscuchadorDeEstatus escuchadorDeEstatus = new EscuchadorDeEstatusPorOmisión();
              ManejadorDeMapa manejadorDeMapa = new ManejadorDeMapa(escuchadorDeEstatus);
              ManejadorDePdis manejadorDePdis = new ManejadorDePdis(manejadorDeMapa, new List<Pdi>(), escuchadorDeEstatus);
              BuscadorDeDuplicados objectoDePrueba = new BuscadorDeDuplicados(manejadorDePdis, escuchadorDeEstatus);

              // Caso de prueba.
              Caso[] casos = new[] {
            //        Tipo,     Nombre         ,  Latitud, Longitud, Indice de Duplicados   , Es Eliminado, Descripción.
            new Caso ("0x2a06", "El PUNTO"     , 10.00000, 20.00000, new[] {2,3,6,7,9}      , false       , "PDI#1"),
            new Caso ("0x2a06", "El PUNTO"     , 10.00000, 20.00000, null                   , true        , "Idéntico: Mismos nombre, tipo, y coordenada de PDI#1 : es eliminado."),
            new Caso ("0x2a05", "El PUNTO"     , 10.00000, 20.00000, null                   , false       , "Mismo tipo principal: Mismo nombre, tipo principal, y coordenada de PDI#1: es duplicado."),
            new Caso ("0x2a06", "El PUNTO"     , 10.00001, 20.00000, null                   , false       , "Cercano: Mismo nombre y tipo de PDI#1, coordenadas cercanas: es duplicado."),
            new Caso ("0x2a06", "El PUNTO"     , 10.00000, 20.02000, null                   , false       , "Lejano: Mismo nombre y tipo de PDI#1, coordenadas lejanas: no es duplicado."),
            new Caso ("0x2b06", "El PUNTO"     , 10.00000, 20.00000, null                   , false       , "Diferente tipo principal: Mismo nombre y coordenada de PDI#1, diferente tipo principal: no es duplicado."),
            new Caso ("0x2a06", "EP"           , 10.00000, 20.00000, null                   , false       , "Siglas de PDI#1, misma coordenada de PDI#1: es duplicado."),
            new Caso ("0x2a06", "EP"           , 10.00000, 20.00000, null                   , false       , "Siglas de PDI#1, coordenadas cercanas: es duplicado."),
            new Caso ("0x2a06", " EP "         , 10.00000, 20.00000, null                   , false       , "Siglas de PDI#1 con espacios en blanco, coordenadas cercanas: no es duplicado."),
            new Caso ("0x2a06", "El PUMTO"     , 10.00000, 20.00000, null                   , false       , "Nombre similar a PDI#1, coordenadas cercanas: es duplicado."),
            new Caso ("0x2a06", "EOP"          , 15.00000, 20.00000, new[] { 11 }           , false       , "PDI#2"),
            new Caso ("0x2a06", "EL OTRO PUNTO", 15.00000, 20.00000, null                   , false       , "PDI#2 es las siglas, misma coordenadas: es duplicado."),
              };
              const int númeroDeDuplicadosDetectados = 2;

              // Crea los elementos.
              IList<Pdi> elementos = manejadorDePdis.Elementos;
              const string clase = "POI";
              for (int i = 0; i < casos.Length; ++i)
              {
            Caso caso = casos[i];
            List<Campo> campos = new List<Campo> {
              new CampoNombre (caso.Nombre),
              new CampoTipo (caso.Tipo),
              new CampoCoordenadas (
            CampoCoordenadas.IdentificadorDeCoordenadas,
            0,
            new Coordenadas (caso.Latitud, caso.Longitud))
            };

            Pdi pdi = new Pdi(manejadorDeMapa, i, clase, campos);
            elementos.Add(pdi);
              }

              // Crea los duplicados.
              Dictionary<Pdi, IList<Pdi>> duplicados = new Dictionary<Pdi, IList<Pdi>>();
              for (int i = 0; i < casos.Length; ++i)
              {
            Caso caso = casos[i];
            if (caso.IndicesDeLosDuplicados != null)
            {
              List<Pdi> pdisDuplicados = new List<Pdi>();
              foreach (int j in caso.IndicesDeLosDuplicados)
              {
            pdisDuplicados.Add(elementos[j]);
              }

              Pdi pdi = elementos[i];
              duplicados.Add(pdi, pdisDuplicados);
            }
              }
              #endregion

              // Llama al método bajo prueba.
              objectoDePrueba.Procesa();

              // Prueba propiedades.
              AseguraDuplicadosSonIguales(duplicados, objectoDePrueba.GruposDeDuplicados, "GruposDeDuplicados");
              Assert.AreEqual(elementos.Count, objectoDePrueba.NúmeroDeElementos, "NúmeroDeElementos");
              Assert.AreEqual(númeroDeDuplicadosDetectados, objectoDePrueba.NúmeroDeProblemasDetectados, "NúmeroDeProblemasDetectados");

              // Prueba que se hayan eliminados los PDIs idénticos.
              for (int i = 0; i < casos.Length; ++i)
              {
            Assert.AreEqual(casos[i].EsEliminado, elementos[i].FuéEliminado, "Elemento[" + i + "].FuéEliminado");
              }
        }
示例#52
0
        public void PruebaProcesaCaso1()
        {
            #region Preparación.
              // Crea el objeto a probar.
              IEscuchadorDeEstatus escuchadorDeEstatus = new EscuchadorDeEstatusPorOmisión();
              ManejadorDeMapa manejadorDeMapa = new ManejadorDeMapa(escuchadorDeEstatus);
              ManejadorDePdis manejadorDePdis = new ManejadorDePdis(manejadorDeMapa, new List<Pdi>(), escuchadorDeEstatus);
              var objectoDePrueba = new BuscadorDeErrores(manejadorDePdis, escuchadorDeEstatus);

              // Crea los elementos.
              IList<Pdi> pdis = manejadorDePdis.Elementos;
              const string clase = "POI";
              var campoCoordenadas = new CampoCoordenadas("Data", 0, new[]
            {
              new Coordenadas(10.16300,-66.00000),
              new Coordenadas(10.16199,-65.99850),
              new Coordenadas(10.16010,-65.99591),
            });

              var pdiNoCiudad = new Pdi(manejadorDeMapa, 1, clase, new List<Campo> {
            new CampoTipo("0x001"),
            campoCoordenadas});
              pdis.Add(pdiNoCiudad);

              var pdiCiudadCorrecta = new Pdi(manejadorDeMapa, 1, clase, new List<Campo> {
            new CampoTipo("0xb00"),
            new CampoEsCiudad(true),
            new CampoIndiceDeCiudad(79),
            campoCoordenadas});
              pdis.Add(pdiCiudadCorrecta);

              var pdiSinCampoEsCiudad = new Pdi(manejadorDeMapa, 1, clase, new List<Campo> {
            new CampoTipo("0xc00"),
            new CampoIndiceDeCiudad(79),
            campoCoordenadas});
              pdis.Add(pdiSinCampoEsCiudad);

              var pdiSinIndiceDeCiudad = new Pdi(manejadorDeMapa, 1, clase, new List<Campo> {
            new CampoTipo("0xd00"),
            new CampoEsCiudad(true),
            campoCoordenadas});
              pdis.Add(pdiSinIndiceDeCiudad);

              var pdiSinIndiceDeCiudadYConAttributo = new Pdi(manejadorDeMapa, 1, clase, new List<Campo> {
            new CampoTipo("0xf00"),
            new CampoAtributo(BuscadorDeErrores.AtributoIgnorarCamposCityYCityIdx),
            campoCoordenadas});
              pdis.Add(pdiSinIndiceDeCiudadYConAttributo);

              var pdiSinIndiceDeCiudadYSinCampoEsCiudad = new Pdi(manejadorDeMapa, 1, clase, new List<Campo> {
            new CampoTipo("0xe00"),
            campoCoordenadas});
              pdis.Add(pdiSinIndiceDeCiudadYSinCampoEsCiudad);

              // Deberian haber 3 errores:
              //   - 1 por el PDI sin campo de Ciudad.
              //   - 1 por el PDI sin índice de Ciudad.
              //   - 2 por el PDI sin campo de Ciudad y sin índice de Ciudad.
              const int númeroDeProblemasDetectados = 4;
              #endregion

              // Llama al método bajo prueba.
              objectoDePrueba.Procesa();

              // Prueba propiedades.
              Assert.That(objectoDePrueba.NúmeroDeElementos, Is.EqualTo(pdis.Count), "NúmeroDeElementos");
              Assert.That(objectoDePrueba.NúmeroDeProblemasDetectados, Is.EqualTo(númeroDeProblemasDetectados), "NúmeroDeProblemasDetectados");
              Assert.That(objectoDePrueba.Errores.Count, Is.EqualTo(númeroDeProblemasDetectados), "Errores.Count");

              Assert.That(
            objectoDePrueba.Errores[pdiSinCampoEsCiudad],
            Text.StartsWith("E004"),
            "Errores[pdiSinCampoEsCiudad]");

              Assert.That(
            objectoDePrueba.Errores[pdiSinIndiceDeCiudad],
            Text.StartsWith("E005"),
            "Errores[pdiSinIndiceDeCiudad]");

              Assert.That(
               objectoDePrueba.Errores[pdiSinIndiceDeCiudadYSinCampoEsCiudad],
               Text.StartsWith("E004"),
               "Errores[pdiSinIndiceDeCiudadYSinCampoEsCiudad]");

              Assert.That(
               objectoDePrueba.Errores[pdiSinIndiceDeCiudadYSinCampoEsCiudad],
               Text.Contains("E005"),
               "Errores[pdiSinIndiceDeCiudadYSinCampoEsCiudad]");

              Assert.That(
               objectoDePrueba.Errores.ContainsKey(pdiSinIndiceDeCiudadYConAttributo),
               Is.False,
               "Errores.ContainsKey(pdiSinIndiceDeCiudadYConAttributo)");

              Assert.That(
               objectoDePrueba.Errores.ContainsKey(pdiCiudadCorrecta),
               Is.False,
               "Errores.ContainsKey(pdiCiudadCorrecta)");
        }