uqbar-project / wollok

Wollok Programming Language
GNU General Public License v3.0
60 stars 16 forks source link

Tests con diagrama dinámico activado no resetean el estado de los objetos entre tests #1935

Closed asanzo closed 3 years ago

asanzo commented 3 years ago

¡Buenas!

¿Esto es esperable?

image

object pepita {
    var property energia = 100
}

test "modifica el estado" {
    pepita.energia(50)
}

test "no debería ver lo del test anterior" {
    assert.equals(50, pepita.energia())
}

El segundo test da amarillo (lo esperable) cuando se corren los tests de forma normal, pero da verde corriendo con el diagrama dinámico.

asanzo commented 3 years ago

Están mal puestos los valores de los tests pero creo que se entiende el problema.

PalumboN commented 3 years ago

@fdodino Esto puede venir de la mano de que el diagrama dinámicoo fue pensado solamente para tests con only, no? Estaría bueno que no te deje ejecutarlo si no tenés ninguno con eso (o que te muestre un mensajito o algo así).

fdodino commented 3 years ago

Qué loco, no se me ocurrió que fuese posible ésto. Voy a ver cómo puedo agregarle controles, en principio la opción de ejecutar los tests con el diagrama dinámico activado está deshabilitado si seleccionás varios archivos, pero es más complicado hacer la validación basado en el archivo sin parsearlo antes.

asanzo commented 3 years ago

En realidad lo enseñé mal yo la primera clase. Ni lo iba a decir y me apareció en la carita la opción y la expliqué diciendo "ah, se pueden correr así o así", sin explicar en ningún momento lo de que se puede correr uno sólo.

Por cierto ¿Cómo se corre uno solo? Hago click derecho en los tests de la pestaña "Tests de Wollok" y no hace nada. Selecciono uno en esa ventana y le doy al botoncito "correr con diagrama dinámico" pero los corre todos. Hago click derecho en el código sobre el nombre de un test, le doy Ejecutar como -> tests con diagrama dinámico pero también los corre todos.

Es como que en toda la interfaz lo que siento es que siempre tengo disponibles ambos botones (correr sin y con diagrama) y que no depende del contexto.

fdodino commented 3 years ago

Hola @asanzo , mirate https://www.wollok.org/tour/ en particular el Test Runner te cuenta todo eso. Yo voy a mirarlo en cuanto pueda para ver si saco un fix. Me llama mucho la atención que ejecutarlo con o sin diagrama dinámico cambie los resultados, porque no debería modificar al intérprete.

asanzo commented 3 years ago

¡Gracias, Dodine! Recuerdo haber visto el feature hace poco en alguna lista, haber dicho "que interesante que se diga por sintaxis y no por GUI" y olvidarme horriblemente luego. La clase que viene algo voy a contar de esto.

fdodino commented 3 years ago

Bueno, empecé a verlo @asanzo. Una cosa rara es que si envolvés los tests en un describe funciona bien:

object pepita {
    var property energia = 100
}

describe "pepita" {

    test "modifica el estado" {
        pepita.energia(50)
    }

    test "no debería ver lo del test anterior" {
        assert.equals(50, pepita.energia())
    }

}

no importa si lo ejecutás con o sin el diagrama dinámico

issue1935

Sigo anotando acá qué encuentro.

asanzo commented 3 years ago

¡Uh, alta pista esa!

.... Nada que ver pero: Me pone un poco nervioso que yo haya propuesto arriba tests incorrectos :sweat_smile:

Así los tests siempre deberían dar verde, así no hay que pensar:

object pepita {
    var property energia = 100
}

test "modifica el estado" {
    pepita.energia(50)
}

test "no debería ver lo del test anterior" {
    assert.equals(100, pepita.energia())
}

(si dan amarillo, está mal)

fdodino commented 3 years ago

Bueno, me costó bastante, el diseño del intérprete es bastante perfectible (tenemos llamadas recursivas que van llenando el stack de variables y parece mentira que activar el diagrama dinámico produce efecto colateral en el estado interno del intérprete). Por ahora agregué un flag adicional y con eso anduvo:

issue1935

Voy a aprovechar para meter un fix más que tiene que ver con el describe (#1933)