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); }
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()); }
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; } }
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); } }
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; }
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); 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 }
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"); } }