uqbar-project / wollok-ts-cli

Wollok Command Line Interface
GNU General Public License v3.0
9 stars 6 forks source link

Error al ejecutar un test que tiene mismo nombre que el archivo principal #14

Closed FerRomMu closed 5 months ago

FerRomMu commented 2 years ago

Si tanto el .wtest como alguno de los archivos .wlk tienen el mismo nombre al intentar ejecutarlo falla. Por ej en este repositorio: https://github.com/obj1unq/2021s1-simulacro-superpoderoses-lgassman

Ambos archivos se llaman igual: "superpoderoses.wlk" y "superpoderoses.wtest".

El error es el siguiente: Captura de pantalla de 2022-06-03 15-19-23

asanzo commented 2 years ago

En Wollok XText se puede hacer esto porque supone que todo import es hacer import de un archivo .wlk , en otras palabras, en XText no se podía hacer import de un archivo de test.

Por otro lado, si yo defino dos archivos de test así:

// archivo definoObjeto.wtest
object estoyEnElTest { method saluda() = "soy el del test"}

y

// archivo importoObjeto.wtest
test "Importa bien desde un test" {
    assert.equals("soy el del test", estoyEnElTest.saluda())
}

Eso anda en WollokTS pero estalla en WollokXText

¿Qué queremos @uqbar-project/wollok ?

¿Queremos que se pueda importar objetos desde un archivo de test? Esto implica lanzar error cuando alguien pone el mismo nombre de archivo para un test que para un .wlk.

¿O preferimos lo otro? (No poder importar objetos desde otro test, pero permitir que dos archivos tengan el mismo nombre)

@nscarcella sospecho que me vas a decir que lo segundo es difícil de implementar, ¿verdad?

nscarcella commented 2 years ago

No, te voy a decir que esto no se trata de importar, se trata de referenciar. Todo en el ambiente tiene que tener un nombre único si querés referenciarlo(por ejemplo, para correr un test tenés que primero encontrarlo).

También digo que las extensiones de archivo diferentes son algo heredado del eclipse, pero no se usan para nada. Un archivo es un package y vos podrías definir adentro tests u objetos o cualquier entidad y, obviamente, no pueden tener el mismo nombre. Pero el motor no se encarga de leer archivos, le llega el contenido con el nombre del archivo en que salió, así que si querés un entorno dónde puedas tener archivos con el mismo nombre y distintas extensiones solamente tenés que agregarle alguna falopa al nombre de los archivos con extensión wtest.

Dicho eso, si hay dos packages con el mismo nombre el linker los combina, así que tal vez habría que revisar si esa validación está haciendo lo que esperamos que haga porque, en principio, no veo el problema.

asanzo commented 2 years ago

GRACIAS :heart:

Ok, me parece entonces que complejizar todo más es al dope, yo me quedaría con que el nombre del archivo es el nombre del package, y no importa la extensión.

Si el linker se encuentra esto:

// archivo definoObjeto.wlk
object estoyEnElWlk { method saluda() = "soy el del wlk"}

y

// archivo definoObjeto.wtest
object estoyEnElWTest { method saluda() = "soy el del wtest"}

Entonces es cierto que tengo a disposición ambos:

image

PERO

Si en el wtest hay tests, me tira un error rarísimo:

[ERROR]: shouldMatchFileExtension at src/definoObjeto.wlk:6

cuando esa línea 6 no existe en definoObjeto.wlk pero sí existe en definoObjeto.wtest, y ese wtest sí tiene una línea 6 con el test.

¿Puede ser que el linker al "mergear" y luego tener que dar un error esté tomando el archivo original incorrecto?

nscarcella commented 2 years ago

Uhm... Sí, eso va a pasar. El objeto delega el nombre de archivo al package así que el package que queda da el nombre del archivo del que salió.

La idea el mergeo de packages es poder mergear un package con una versión más nueva del mismo package, así que este comportamiento es el esperado.

No sé, yo deprecaría las extensiones y, si querés workaroundear los proyectos que ya existen podes appendearle algo al nombre de los archivos con extensión wtest

El lun, 6 jun. 2022 15:39, asanzo @.***> escribió:

GRACIAS ❤️

Ok, me parece entonces que complejizar todo más es al dope, yo me quedaría con que el nombre del archivo es el nombre del package, y no importa la extensión.

Si el linker se encuentra esto:

// archivo definoObjeto.wlk object estoyEnElWlk { method saluda() = "soy el del wlk"}

y

// archivo definoObjeto.wtest object estoyEnElWTest { method saluda() = "soy el del wtest"}

Entonces es cierto que tengo a disposición ambos:

[image: image] https://user-images.githubusercontent.com/5421992/172224593-7c9bde1c-4698-4152-b7c5-89f024f5670a.png

PERO

Si en el wtest hay tests, me tira un error rarísimo:

[ERROR]: shouldMatchFileExtension at src/definoObjeto.wlk:6

cuando esa línea 6 no existe en definoObjeto.wlk pero sí existe en definoObjeto.wtest, y ese wtest sí tiene una línea 6 con el test.

¿Puede ser que el linker al "mergear" y luego tener que dar un error esté tomando el archivo original incorrecto?

— Reply to this email directly, view it on GitHub https://github.com/uqbar-project/wollok-ts-cli/issues/14#issuecomment-1147764659, or unsubscribe https://github.com/notifications/unsubscribe-auth/AAFPE2YYTPNBGTYRJQNZ6KTVNZAXRANCNFSM5XZZOOTA . You are receiving this because you were mentioned.Message ID: @.***>

asanzo commented 2 years ago

Hay un poquito de discusión sobre esto por acá también: https://discord.com/channels/737094307902914570/982059683550486578/983431134585188402

PalumboN commented 5 months ago

Con los últimos cambios, el repo del ejemplo solamente se queja del mismo nombre entre los archivos .wlk y .wtest, que es el comportamiento esperado actualmente.

Igual todo se puede ejecutar si se skipean las validaciones.

  2021s1-simulacro-superpoderoses-lgassman git:(master) wollok test
🧪 Running all tests on /Users/palumbon/git/2021s1-simulacro-superpoderoses-lgassman
🌏 Building environment for /Users/palumbon/git/2021s1-simulacro-superpoderoses-lgassman...

[ERROR]: shouldNotDuplicatePackageName at src/superpoderoses.wlk:--
[ERROR]: shouldReturnAValueOnAllFlows at src/superpoderoses.wlk:66
[ERROR]: shouldNotDuplicatePackageName at src/superpoderoses.wtest:--
💥 Uh-oh... Unexpected Error!
Fatal error while running validations. Aborting run due to validation errors!
➜  2021s1-simulacro-superpoderoses-lgassman git:(master) ✗ wollok test --skip-validations
error: unknown option '--skip-validations'
(Did you mean --skipValidations?)
➜  2021s1-simulacro-superpoderoses-lgassman git:(master) ✗ wollok test --skipValidations 
🧪 Running all tests on /Users/palumbon/git/2021s1-simulacro-superpoderoses-lgassman
🌏 Building environment for /Users/palumbon/git/2021s1-simulacro-superpoderoses-lgassman...

Running 14 tests...
 src
   superpoderoses
     "Superpoderoses"
         ✓ "punto 1.1 capacidad de batalla que aporta un poder"
         ✓ "punto 1.2 capacidad de batalla de un personaje"
         ✓ "punto 2.1 Saber el miembro vulnerable de un equipo"
         ✓ "punto 2.2 Saber la calidad de un equipo"
         ✓ "punto 2.3 Saber los mejores poderes de un equipo"
         ✓ "punto 3.1 personajes contra el peligro"
         ✓ "punto 3.2 Saber si un peligro es sensato "
         ✓ "punto 4.1 Afrontar peligro individualmente: OK"
         ✓ "punto 4.1 Afrontar peligro individualmente: no OK por radioactividad"
         ✓ "punto 4.1 Afrontar peligro individualmente: no OK por capacidad de batalla"
         ✓ "punto 4.2  Afrontar peligro (moderado) en equipo  "
         ✓ "punto 4.2  Afrontar peligro (alto) en equipo (no ok)"
         ✓ "punto 5.1  Metahumano "
         ✓ "punto 5.2  Mago "

 ✓ 14 passing  

También esetá el error shouldReturnAValueOnAllFlows que no debería, está reportado acá: https://github.com/uqbar-project/wollok-ts/issues/253

También cambiamos la API para tener más control de lo que se ejecuta: https://github.com/uqbar-project/wollok-ts-cli/pull/162