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