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
        }
Example #2
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");
        }
Example #3
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");
        }
Example #4
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");
            }
        }
Example #5
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");
        }
        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");
        }
        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");
              }
        }
Example #8
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);
              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");
        }
        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
        }
Example #11
0
        static void Main(string[] args)
        {
            string directorioDeEntrada;
            string directorioDeSalida;

            #region Selecciona el directorio de entrada.
            using (FolderBrowserDialog ventanaDeDirectorios = new FolderBrowserDialog())
            {
                ventanaDeDirectorios.Description         = "Selecciona el directorio con las fuentes:";
                ventanaDeDirectorios.ShowNewFolderButton = false;
                ventanaDeDirectorios.SelectedPath        = Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetName().CodeBase);
                DialogResult respuesta = ventanaDeDirectorios.ShowDialog();

                // Nos salimos si el usuario cancela.
                if (respuesta != DialogResult.OK)
                {
                    Console.WriteLine("Cancelado por el usuario.");
                    Environment.Exit(1);
                }

                directorioDeEntrada = ventanaDeDirectorios.SelectedPath;
                Console.WriteLine(string.Format("Directorio con las fuentes: {0}", directorioDeEntrada));
            }
            #endregion

            #region Selecciona el directorio de salida.
            using (FolderBrowserDialog ventanaDeDirectorios = new FolderBrowserDialog())
            {
                ventanaDeDirectorios.Description         = "Selecciona el directorio de salida:";
                ventanaDeDirectorios.ShowNewFolderButton = true;
                DialogResult respuesta = ventanaDeDirectorios.ShowDialog();

                // Nos salimos si el usuario cancela.
                if (respuesta != DialogResult.OK)
                {
                    Console.WriteLine("Cancelado por el usuario.");
                    Environment.Exit(1);
                }

                directorioDeSalida = ventanaDeDirectorios.SelectedPath;
                Console.WriteLine(string.Format("Directorio de Salida: {0}", directorioDeSalida));
            }
            #endregion

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

            IEscuchadorDeEstatus            escuchadorDeEstatus           = new EscuchadorDeEstatusPorOmisión();
            ManejadorDeMapa.ManejadorDeMapa manejadorDeMapa               = new ManejadorDeMapa.ManejadorDeMapa(escuchadorDeEstatus);
            RemplazadorDeLetrasEspeciales   remplazadorDeLetrasEspeciales = new RemplazadorDeLetrasEspeciales(
                manejadorDeMapa.ManejadorDeElementos,
                escuchadorDeEstatus);

            DirectoryInfo informaciónDelDirectorio = new DirectoryInfo(directorioDeEntrada);
            FileInfo[]    archivosFuente           = informaciónDelDirectorio.GetFiles("*.mp");

            foreach (FileInfo archivo in archivosFuente)
            {
                Console.WriteLine(string.Format("Procesando '{0}' ... ", archivo.FullName));
                Console.WriteLine();

                // Lee mapa.
                Console.Write("Leyendo mapa ... ");
                manejadorDeMapa.Abrir(archivo.FullName);
                Console.WriteLine("listo.");

                // Remplaza las letras especiales.
                Console.Write("Cambiando caracteres ... ");
                int número = remplazadorDeLetrasEspeciales.Procesa();
                Console.WriteLine(string.Format(" cambiados {0} nombres", número));

                // Verifica que el archivo de salida no existe.
                string archivoDeSalida = Path.Combine(directorioDeSalida, archivo.Name);
                if (File.Exists(archivoDeSalida))
                {
                    DialogResult respuesta = MessageBox.Show(
                        string.Format("El archivo de salida '{0}' existe. El directorio de salida debe estar vacio. El programa terminará.", archivoDeSalida),
                        "Archivo de Salida",
                        MessageBoxButtons.OK,
                        MessageBoxIcon.Error);

                    Console.WriteLine("Archivo de salida existe.");
                    Environment.Exit(1);
                    break;
                }

                // 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();
            }
        }
Example #12
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");
        }
Example #13
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 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");
              }
        }
Example #16
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 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 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");
            }
        }
        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");
        }
Example #21
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();
            }
        }
        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");
        }
        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
        }