示例#1
0
        private static ListViewItem CreaItemDeLista(Pdi elPdi, ListViewGroup elGrupo, double laDistancia)
        {
            string tipoComoTexto = string.Empty;

            if (elPdi.Tipo != null)
            {
                tipoComoTexto = ((Tipo)elPdi.Tipo).ToString();
            }
            ListViewItem item = new ListViewItem(
                new [] {
                elPdi.Número.ToString(),
                tipoComoTexto,
                elPdi.Descripción,
                elPdi.Nombre,
                elPdi.Coordenadas.ToString(),
                laDistancia.ToString("0.0")
            },
                elGrupo)
            {
                Tag     = new ElementoConEtiqueta(elPdi),
                Checked = false
            };

            return(item);
        }
示例#2
0
        private void EnSeBuscaronDuplicados(object elEnviador, EventArgs losArgumentos)
        {
            // Añade los PDIs duplicados.
            miLista.SuspendLayout();
            miLista.Items.Clear();
            miLista.Groups.Clear();
            foreach (KeyValuePair <Pdi, IList <Pdi> > item in miBuscadorDeDuplicados.GruposDeDuplicados)
            {
                Pdi         pdiBase    = item.Key;
                IList <Pdi> duplicados = item.Value;
                List <Pdi>  pdis       = new List <Pdi> {
                    pdiBase
                };
                pdis.AddRange(duplicados);

                // Crea un grupo para cada conjunto de duplicados.
                ListViewGroup grupo = new ListViewGroup(pdiBase.Nombre)
                {
                    Tag = pdis
                };
                miLista.Groups.Add(grupo);

                // Añade todos los PDIs.
                miLista.Items.Add(CreaItemDeLista(pdiBase, grupo, 0));
                foreach (Pdi duplicado in duplicados)
                {
                    double distancia = Coordenadas.DistanciaEnMetros(pdiBase.Coordenadas, duplicado.Coordenadas);
                    miLista.Items.Add(CreaItemDeLista(duplicado, grupo, distancia));
                }
            }
            miLista.ResumeLayout(false);

            // Actualiza el Número de PDIs a Eliminar.
            ActualizaNúmeroDePdisAEliminar();
        }
        private void DibujaPdi(Pdi elPdi, Brush elPincel, int elTamaño)
        {
            // Obtiene las coordenadas gráficas del PDI.
            Point punto = CoordenadasAPixels(elPdi.Coordenadas);

            // Nos salimos si el PDI no es visible.
            if (!miAreaDeDibujo.Contains(punto))
            {
                return;
            }

            // Dibuja el PDI centrado.
            DibujaPunto(punto, elPincel, elTamaño);

            // Dibuja el nombre si la escala es lo suficentemente grande.
            if (miEscalaDeCoordenadasAPixeles > 100000)
            {
                DibujaTextoConFondo(
                    elPdi.Nombre,
                    punto.X, punto.Y + 5,
                    miLetraParaNombre,
                    miPincelParaNombre,
                    miPincelDeFondoParaNombre);
            }
        }
        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
        }
        private void EnMenúCambiarTipo(object elObjecto, EventArgs losArgumentos)
        {
            // Retornamos si no hay PDIs.
            if (Lista.SelectedIndices.Count == 0)
            {
                return;
            }

            List <Pdi> pdis = new List <Pdi>();

            foreach (int indice in Lista.SelectedIndices)
            {
                ListViewItem item = Lista.Items[indice];

                // El Tag del item de la lista tiene que ser un ElementoConEtiqueta con un PDI.
                ElementoConEtiqueta elemento = item.Tag as ElementoConEtiqueta;
                if (elemento == null)
                {
                    throw new InvalidOperationException(string.Format("El Tag del item de la lista tiene que ser un ElementoConEtiqueta, pero es: {0}", item.Tag.GetType()));
                }
                Pdi pdi = elemento.ElementoDelMapa as Pdi;
                if (pdi == null)
                {
                    throw new InvalidOperationException(string.Format("El elemento del item de la lista tiene que ser un Pdi, pero es: {0}", elemento.ElementoDelMapa.GetType()));
                }

                // Añade el PDI a la lista.
                pdis.Add(pdi);
            }

            // Muestra la ventana para cambiar el Tipo.
            VentanaCambiarTipoDePdi ventanaCambiarTipo = new VentanaCambiarTipoDePdi {
                Pdis = pdis
            };
            DialogResult resultado = ventanaCambiarTipo.ShowDialog();

            if (resultado == DialogResult.OK)
            {
                // Cambia los tipos evitando que se generen eventos con
                // cada cambio.
                ManejadorDePdis.SuspendeEventos();
                foreach (Pdi pdi in pdis)
                {
                    pdi.ActualizaTipo(ventanaCambiarTipo.TipoNuevo, "Cambio Manual");
                }

                // Restablece los eventos en el manejador de mapa.
                ManejadorDePdis.RestableceEventos();

                // Envía el evento indicando que se editaron PDIs.
                EnvíaEventoEditó();
            }
        }
        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);
            ArregladorGeneral    objectoDePrueba     = new ArregladorGeneral(manejadorDePdis, 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 RES LAS TORRES", "CONJUNTO RESIDENCIAL LAS TORRES"), // Cambia Nombre.
            };
            const int númeroDeProblemasDetectados = 6;

            // Crea los elementos.
            IList <Pdi>  pdis  = 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.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ú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(pdis[i].Nombre, Is.EqualTo(casos[i].NombreCorregido), "PDI[" + i + "].Nombre");
            }
        }
        private void LlenaItems(InterfaseListaDeElementos laLista)
        {
            // Añade los elementos.
            IDictionary <Pdi, IList <string> > alertas = miBuscadorDeAlertas.Alertas;

            foreach (KeyValuePair <Pdi, IList <string> > ítem in alertas)
            {
                // Crea el grupo.
                Pdi pdi = ítem.Key;

                // Añade los detalles de la alerta a la lista.
                IList <string> detallesDeAlerta = ítem.Value;
                string         detalle          = string.Join(" | ", detallesDeAlerta.ToArray());
                laLista.AñadeItem(new ElementoConEtiqueta(pdi), detalle);
            }
        }
    /// <summary>
    /// Añade un item a la lista.
    /// </summary>
    /// <param name="elElementoConEtiqueta">El elemento dado.</param>
    /// <param name="elColorDeFondo">El color de fondo.</param>
    /// <param name="elGrupo">El grupo.</param>
    /// <param name="losSubItemsAdicionales">Los textos de los subitems adicionales</param>
    public override void AñadeItem(ElementoConEtiqueta elElementoConEtiqueta, Color elColorDeFondo, ListViewGroup elGrupo, string[] losSubItemsAdicionales)
    {
      // Verifica que el elemento es un PDI.
      Pdi pdi = elElementoConEtiqueta.ElementoDelMapa as Pdi;
      if (pdi == null)
      {
        throw new ArgumentException("El elemento debe ser tipo Pdi. pero es " + elElementoConEtiqueta.ElementoDelMapa.GetType());
      }

      // Añade el PDI a la lista.
      
      List<string> subItems = new List<string> {
          pdi.Coordenadas.Latitud.ToString(FormatoDeCoordenada, miFormatoNumérico),
          pdi.Coordenadas.Longitud.ToString(FormatoDeCoordenada, miFormatoNumérico)};
      subItems.AddRange(losSubItemsAdicionales);

      base.AñadeItem(elElementoConEtiqueta, elColorDeFondo, elGrupo, subItems.ToArray());
    }
示例#9
0
        private void LlenaItems(InterfaseListaDeElementos laLista)
        {
            // Añade los PDIs.
            IDictionary <Pdi, string> errores = miBuscadorDeErrores.Errores;

            foreach (KeyValuePair <Pdi, string> error in errores)
            {
                Pdi    pdi   = error.Key;
                string razón = error.Value;
                laLista.AñadeItem(new ElementoConEtiqueta(pdi), razón);
            }

            // Activa el menú de Edición si hay elementos en la lista.
            if (errores.Count > 0)
            {
                miMenú.Enabled = true;
            }
            else
            {
                miMenú.Enabled = false;
            }
        }
示例#10
0
        private void EnClick(object laLista, MouseEventArgs losArgumentosDelRatón)
        {
            // Obtiene el grupo seleccionado.
            ListView            lista       = (ListView)laLista;
            ListViewHitTestInfo información = lista.HitTest(losArgumentosDelRatón.Location);
            ListViewGroup       grupo       = información.Item.Group;
            List <Pdi>          pdis        = (List <Pdi>)grupo.Tag;

            // Busca el rango visible para los PDIs.
            IList <ElementoDelMapa> elementos = new List <ElementoDelMapa>(pdis.ToArray());
            RectangleF  rectánguloQueEncierra = InterfaseMapa.RectanguloQueEncierra(elementos);
            const float margen            = 0.0001f;
            RectangleF  rectánguloVisible = new RectangleF(
                rectánguloQueEncierra.X - margen,
                rectánguloQueEncierra.Y - margen,
                rectánguloQueEncierra.Width + (2 * margen),
                rectánguloQueEncierra.Height + (2 * margen));

            // Dibuja los PDIs como PDIs adicionales para resaltarlos.
            miMapa.PuntosAddicionales.Clear();
            Pdi pdiSeleccionado = ((ElementoConEtiqueta)información.Item.Tag).ElementoDelMapa as Pdi;

            miMapa.PuntosAddicionales.Add(new InterfaseMapa.PuntoAdicional(
                                              pdiSeleccionado.Coordenadas, miPincelDePdi, 13));
            foreach (Pdi pdi in pdis)
            {
                miMapa.PuntosAddicionales.Add(new InterfaseMapa.PuntoAdicional(
                                                  pdi.Coordenadas, miPincelDePdiDuplicado, 7));
            }

            // Muestra el mapa en la region deseada.
            miMapa.Enabled = true;
            miMapa.RectánguloVisibleEnCoordenadas = rectánguloVisible;
            miMapa.MuestraTodoElMapa = false;
            miMapa.Refresh();
        }
        private void EnMenúGuardarArchivoPdis(object elObjecto, EventArgs losArgumentos)
        {
            // Retornamos si no hay Vías seleccionadas.
              if (Lista.SelectedIndices.Count == 0)
              {
            return;
              }

              // Crea el nombre del archivo de salida.
              string archivo = Path.GetFullPath(ManejadorDeVías.ManejadorDeMapa.Archivo);
              string directorio = Path.GetDirectoryName(archivo);
              string nombre = Path.GetFileName(archivo);
              string nombreDeSalida = Path.ChangeExtension(nombre, ".PDIsDeVías.mp");

              // Ventana de guardar.
              SaveFileDialog ventanaDeGuardar = new SaveFileDialog {
            Title = "Guarda archivo de PDIs para localización de Vía(s)",
            AutoUpgradeEnabled = true,
            AddExtension = true,
            CheckPathExists = true,
            Filter = ManejadorDeMapa.FiltrosDeExtensiones,
            InitialDirectory = directorio,
            FileName = nombreDeSalida,
            OverwritePrompt = true,
            ValidateNames = true
              };
              DialogResult respuesta = ventanaDeGuardar.ShowDialog();
              if (respuesta == DialogResult.OK)
              {
            // El primer elemento de cada lista tiene que ser el encabezado.
            List<ElementoDelMapa> elementos = new List<ElementoDelMapa> { ManejadorDeVías.ManejadorDeMapa.Encabezado };

            // Genera la lista de PDIs.
            IList<Vía> vías = ObtieneElementosSeleccionados<Vía>();
            foreach (Vía vía in vías)
            {
              // Crea los campos para el PDI.
              int índiceDeLaCoordenadaCentral = vía.Coordenadas.Length / 2;
              List<Campo> campos = new List<Campo> {
            new CampoNombre("Vía #" + vía.Número),
            new CampoCoordenadas(
              "Data0",
              0,
              vía.Coordenadas[índiceDeLaCoordenadaCentral]),
            new CampoTipo("0x1604"),
            new CampoGenérico("EndLevel", "3")
              };

              // Crea el PDI y añadelo a la lista.
              Pdi pdi = new Pdi(
            ManejadorDeVías.ManejadorDeMapa,
            0,
            "POI",
            campos);
              elementos.Add(pdi);
            }

            // Guarda el archivo.
            new EscritorDeFormatoPolish(
              ventanaDeGuardar.FileName,
              elementos,
              ManejadorDeVías.EscuchadorDeEstatus);
              }
        }
        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");
              }
        }
        private void EnMenúGuardarArchivoPdis(object elObjecto, EventArgs losArgumentos)
        {
            // Retornamos si no hay PDIs seleccionadas.
            if (Lista.SelectedIndices.Count == 0)
            {
                return;
            }

            // Crea el nombre del archivo de salida.
            string archivo        = Path.GetFullPath(this.ManejadorDePdis.ManejadorDeMapa.Archivo);
            string directorio     = Path.GetDirectoryName(archivo);
            string nombre         = Path.GetFileName(archivo);
            string nombreDeSalida = Path.ChangeExtension(nombre, ".PDIs.mp");

            // Ventana de guardar.
            SaveFileDialog ventanaDeGuardar = new SaveFileDialog
            {
                Title = "Guarda archivo de localización de PDI(s)",
                AutoUpgradeEnabled = true,
                AddExtension       = true,
                CheckPathExists    = true,
                Filter             = ManejadorDeMapa.FiltrosDeExtensiones,
                InitialDirectory   = directorio,
                FileName           = nombreDeSalida,
                OverwritePrompt    = true,
                ValidateNames      = true
            };
            DialogResult respuesta = ventanaDeGuardar.ShowDialog();

            if (respuesta == DialogResult.OK)
            {
                // El primer elemento de cada lista tiene que ser el encabezado.
                List <ElementoDelMapa> elementos = new List <ElementoDelMapa> {
                    this.ManejadorDePdis.ManejadorDeMapa.Encabezado
                };

                // Genera la lista de PDIs.
                IList <Pdi> pdis = ObtieneElementosSeleccionados <Pdi>();
                foreach (Pdi pdi in pdis)
                {
                    // Crea los campos para el PDI.
                    List <Campo> campos = new List <Campo> {
                        new CampoNombre("PDI #" + pdi.Número),
                        new CampoCoordenadas(
                            "Data0",
                            0,
                            pdi.Coordenadas),
                        new CampoTipo("0x1604"),
                        new CampoGenérico("EndLevel", "3")
                    };

                    // Crea el PDI y añadelo a la lista.
                    Pdi pdiNuevo = new Pdi(
                        this.ManejadorDePdis.ManejadorDeMapa,
                        0,
                        "POI",
                        campos);
                    elementos.Add(pdiNuevo);
                }

                // Guarda el archivo.
                new EscritorDeFormatoPolish(
                    ventanaDeGuardar.FileName,
                    elementos,
                    this.ManejadorDePdis.EscuchadorDeEstatus);
            }
        }
示例#14
0
        private void DibujaPdi(Pdi elPdi, Brush elPincel, int elTamaño)
        {
            // Obtiene las coordenadas gráficas del PDI.
              Point punto = CoordenadasAPixels(elPdi.Coordenadas);

              // Nos salimos si el PDI no es visible.
              if (!miAreaDeDibujo.Contains(punto))
              {
            return;
              }

              // Dibuja el PDI centrado.
              DibujaPunto(punto, elPincel, elTamaño);

              // Dibuja el nombre si la escala es lo suficentemente grande.
              if (miEscalaDeCoordenadasAPixeles > 100000)
              {
            DibujaTextoConFondo(
              elPdi.Nombre,
              punto.X, punto.Y + 5,
              miLetraParaNombre,
              miPincelParaNombre,
              miPincelDeFondoParaNombre);
              }
        }
示例#15
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);
              ArregladorGeneral objectoDePrueba = new ArregladorGeneral(manejadorDePdis, 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 RES LAS TORRES", "CONJUNTO RESIDENCIAL LAS TORRES"), // Cambia Nombre.
              };
              const int númeroDeProblemasDetectados = 6;

              // Crea los elementos.
              IList<Pdi> pdis = 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.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ú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(pdis[i].Nombre, Is.EqualTo(casos[i].NombreCorregido), "PDI[" + i + "].Nombre");
              }
        }
        private static ListViewItem CreaItemDeLista(Pdi elPdi, ListViewGroup elGrupo, double laDistancia)
        {
            string tipoComoTexto = string.Empty;
              if (elPdi.Tipo != null)
              {
            tipoComoTexto = ((Tipo)elPdi.Tipo).ToString();
              }
              ListViewItem item = new ListViewItem(
              new [] {
                elPdi.Número.ToString(),
                tipoComoTexto,
                elPdi.Descripción,
                elPdi.Nombre,
                elPdi.Coordenadas.ToString(),
                laDistancia.ToString("0.0")
              },
              elGrupo)
            {
              Tag = new ElementoConEtiqueta(elPdi),
              Checked = false
            };

              return item;
        }
示例#17
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)");
        }
示例#18
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 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
        }
示例#20
0
        private void EnMenúGuardarArchivoPdisParaLocalizarNodosDesconectados(object elObjecto, EventArgs losArgumentos)
        {
            // Retornamos si no hay Vías seleccionadas.
            if (miLista.SelectedIndices.Count == 0)
            {
                return;
            }

            // Crea el nombre del archivo de salida.
            string archivo        = Path.GetFullPath(ManejadorDeMapa.Archivo);
            string directorio     = Path.GetDirectoryName(archivo);
            string nombre         = Path.GetFileName(archivo);
            string nombreDeSalida = Path.ChangeExtension(nombre, ".PDIsDeNodosDesconectados.mp");

            // Ventana de guardar.
            SaveFileDialog ventanaDeGuardar = new SaveFileDialog
            {
                Title = "Guarda archivo de PDIs para localización de Nodos Desconectados",
                AutoUpgradeEnabled = true,
                AddExtension       = true,
                CheckPathExists    = true,
                Filter             = ManejadorDeMapa.FiltrosDeExtensiones,
                InitialDirectory   = directorio,
                FileName           = nombreDeSalida,
                OverwritePrompt    = true,
                ValidateNames      = true
            };
            DialogResult respuesta = ventanaDeGuardar.ShowDialog();

            if (respuesta == DialogResult.OK)
            {
                // El primer elemento de cada lista tiene que ser el encabezado.
                List <ElementoDelMapa> elementos = new List <ElementoDelMapa> {
                    ManejadorDeMapa.Encabezado
                };

                // Genera la lista de PDIs.
                IList <InformaciónNodoDesconectado> posibleNodoDesconectados =
                    miMenú.ObtieneEtiquetasSeleccionadas <InformaciónNodoDesconectado>();
                foreach (InformaciónNodoDesconectado posibleNodoDesconectado in posibleNodoDesconectados)
                {
                    // Crea los campos para el PDI.
                    List <Campo> campos = new List <Campo> {
                        new CampoNombre(string.Format("Nodo Desconectado de Vía # {0}",
                                                      posibleNodoDesconectado.PosibleNodoDesconectado.Vía.Número)),
                        new CampoCoordenadas(
                            "Data0",
                            0,
                            posibleNodoDesconectado.PosibleNodoDesconectado.Coordenadas),
                        new CampoTipo("0x1604"),
                        new CampoGenérico("EndLevel", "3")
                    };

                    // Crea el PDI y añadelo a la lista.
                    Pdi pdi = new Pdi(
                        ManejadorDeMapa,
                        0,
                        "POI",
                        campos);
                    elementos.Add(pdi);
                }

                // Guarda el archivo.
                new EscritorDeFormatoPolish(
                    ventanaDeGuardar.FileName,
                    elementos,
                    miInterfaseListaConMapaDeVías.EscuchadorDeEstatus);
            }
        }
        private void EnMenúGuardarArchivoPdisParaLocalizarNodosDesconectados(object elObjecto, EventArgs losArgumentos)
        {
            // Retornamos si no hay Vías seleccionadas.
              if (miLista.SelectedIndices.Count == 0)
              {
            return;
              }

              // Crea el nombre del archivo de salida.
              string archivo = Path.GetFullPath(ManejadorDeMapa.Archivo);
              string directorio = Path.GetDirectoryName(archivo);
              string nombre = Path.GetFileName(archivo);
              string nombreDeSalida = Path.ChangeExtension(nombre, ".PDIsDeNodosDesconectados.mp");

              // Ventana de guardar.
              SaveFileDialog ventanaDeGuardar = new SaveFileDialog
              {
            Title = "Guarda archivo de PDIs para localización de Nodos Desconectados",
            AutoUpgradeEnabled = true,
            AddExtension = true,
            CheckPathExists = true,
            Filter = ManejadorDeMapa.FiltrosDeExtensiones,
            InitialDirectory = directorio,
            FileName = nombreDeSalida,
            OverwritePrompt = true,
            ValidateNames = true
              };
              DialogResult respuesta = ventanaDeGuardar.ShowDialog();
              if (respuesta == DialogResult.OK)
              {
            // El primer elemento de cada lista tiene que ser el encabezado.
            List<ElementoDelMapa> elementos = new List<ElementoDelMapa> { ManejadorDeMapa.Encabezado };

            // Genera la lista de PDIs.
            IList<InformaciónNodoDesconectado> posibleNodoDesconectados =
              miMenú.ObtieneEtiquetasSeleccionadas<InformaciónNodoDesconectado>();
            foreach (InformaciónNodoDesconectado posibleNodoDesconectado in posibleNodoDesconectados)
            {
              // Crea los campos para el PDI.
              List<Campo> campos = new List<Campo> {
            new CampoNombre(string.Format("Nodo Desconectado de Vía # {0}",
              posibleNodoDesconectado.PosibleNodoDesconectado.Vía.Número)),
            new CampoCoordenadas(
              "Data0",
              0,
              posibleNodoDesconectado.PosibleNodoDesconectado.Coordenadas),
            new CampoTipo("0x1604"),
            new CampoGenérico("EndLevel", "3")
              };

              // Crea el PDI y añadelo a la lista.
              Pdi pdi = new Pdi(
            ManejadorDeMapa,
            0,
            "POI",
            campos);
              elementos.Add(pdi);
            }

            // Guarda el archivo.
            new EscritorDeFormatoPolish(
              ventanaDeGuardar.FileName,
              elementos,
              miInterfaseListaConMapaDeVías.EscuchadorDeEstatus);
              }
        }
        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");
            }
        }