@@ -348,4 +348,157 @@ tente {
348348 expect ( nucleoExecucao . dialetos [ 'pitugues' ] ) . toBe ( 'Pituguês' ) ;
349349 } ) ;
350350 } ) ;
351+
352+ describe ( 'Modo LAIR - Declaração de variáveis' , ( ) => {
353+ it ( 'Deve retornar valor ao declarar variável numérica' , async ( ) => {
354+ const nucleoExecucao = new NucleoExecucao ( '0.1' ) ;
355+ nucleoExecucao . configurarDialeto ( ) ;
356+
357+ const resultado = await nucleoExecucao . executarLinhas ( [ 'var a = 1' ] ) ;
358+
359+ expect ( resultado . resultado ) . toBeDefined ( ) ;
360+ expect ( resultado . resultado . length ) . toBeGreaterThan ( 0 ) ;
361+ const valorResultado = resultado . resultado [ 0 ] as any ;
362+ expect ( valorResultado ) . toHaveProperty ( 'valorRetornado' ) ;
363+ expect ( valorResultado . valorRetornado ) . toHaveProperty ( 'valor' , 1 ) ;
364+ expect ( valorResultado . valorRetornado ) . toHaveProperty ( 'tipo' , 'número' ) ;
365+ } ) ;
366+
367+ it ( 'Deve retornar valor ao declarar variável textual' , async ( ) => {
368+ const nucleoExecucao = new NucleoExecucao ( '0.1' ) ;
369+ nucleoExecucao . configurarDialeto ( ) ;
370+
371+ const resultado = await nucleoExecucao . executarLinhas ( [ 'var nome = "João"' ] ) ;
372+
373+ expect ( resultado . resultado ) . toBeDefined ( ) ;
374+ expect ( resultado . resultado . length ) . toBeGreaterThan ( 0 ) ;
375+ const valorResultado = resultado . resultado [ 0 ] as any ;
376+ expect ( valorResultado ) . toHaveProperty ( 'valorRetornado' ) ;
377+ expect ( valorResultado . valorRetornado ) . toHaveProperty ( 'valor' , 'João' ) ;
378+ expect ( valorResultado . valorRetornado ) . toHaveProperty ( 'tipo' , 'texto' ) ;
379+ } ) ;
380+
381+ it ( 'Deve retornar valor ao declarar variável lógica' , async ( ) => {
382+ const nucleoExecucao = new NucleoExecucao ( '0.1' ) ;
383+ nucleoExecucao . configurarDialeto ( ) ;
384+
385+ const resultado = await nucleoExecucao . executarLinhas ( [ 'var ativo = verdadeiro' ] ) ;
386+
387+ expect ( resultado . resultado ) . toBeDefined ( ) ;
388+ expect ( resultado . resultado . length ) . toBeGreaterThan ( 0 ) ;
389+ const valorResultado = resultado . resultado [ 0 ] as any ;
390+ expect ( valorResultado ) . toHaveProperty ( 'valorRetornado' ) ;
391+ expect ( valorResultado . valorRetornado ) . toHaveProperty ( 'valor' , true ) ;
392+ expect ( valorResultado . valorRetornado ) . toHaveProperty ( 'tipo' , 'lógico' ) ;
393+ } ) ;
394+
395+ it ( 'Deve retornar valor ao declarar variável com dicionário' , async ( ) => {
396+ const nucleoExecucao = new NucleoExecucao ( '0.1' ) ;
397+ nucleoExecucao . configurarDialeto ( ) ;
398+
399+ const resultado = await nucleoExecucao . executarLinhas ( [ 'var dados = {"nome": "João", "idade": 30}' ] ) ;
400+
401+ expect ( resultado . resultado ) . toBeDefined ( ) ;
402+ expect ( resultado . resultado . length ) . toBeGreaterThan ( 0 ) ;
403+ const valorResultado = resultado . resultado [ 0 ] as any ;
404+ expect ( valorResultado ) . toHaveProperty ( 'valorRetornado' ) ;
405+ expect ( valorResultado . valorRetornado ) . toHaveProperty ( 'valor' ) ;
406+ expect ( valorResultado . valorRetornado . valor ) . toHaveProperty ( 'nome' , 'João' ) ;
407+ expect ( valorResultado . valorRetornado . valor ) . toHaveProperty ( 'idade' , 30 ) ;
408+ expect ( valorResultado . valorRetornado ) . toHaveProperty ( 'tipo' , 'dicionário' ) ;
409+ } ) ;
410+
411+ it ( 'Deve retornar valor ao declarar constante numérica' , async ( ) => {
412+ const nucleoExecucao = new NucleoExecucao ( '0.1' ) ;
413+ nucleoExecucao . configurarDialeto ( ) ;
414+
415+ const resultado = await nucleoExecucao . executarLinhas ( [ 'const PI = 3.14' ] ) ;
416+
417+ expect ( resultado . resultado ) . toBeDefined ( ) ;
418+ expect ( resultado . resultado . length ) . toBeGreaterThan ( 0 ) ;
419+ const valorResultado = resultado . resultado [ 0 ] as any ;
420+ expect ( valorResultado ) . toHaveProperty ( 'valorRetornado' ) ;
421+ expect ( valorResultado . valorRetornado ) . toHaveProperty ( 'valor' , 3.14 ) ;
422+ expect ( valorResultado . valorRetornado ) . toHaveProperty ( 'tipo' , 'número' ) ;
423+ } ) ;
424+ } ) ;
425+
426+ describe ( 'Modo LAIR - Inspeção de variáveis' , ( ) => {
427+ it ( 'Deve retornar estrutura completa ao inspecionar variável numérica' , async ( ) => {
428+ const nucleoExecucao = new NucleoExecucao ( '0.1' ) ;
429+ nucleoExecucao . configurarDialeto ( ) ;
430+ // Ativa modo LAIR para manter contexto entre chamadas
431+ ( nucleoExecucao . avaliadorSintatico as any ) . modoLair = true ;
432+
433+ await nucleoExecucao . executarLinhas ( [ 'var a = 42' ] ) ;
434+ const resultado = await nucleoExecucao . executarLinhas ( [ 'a' ] ) ;
435+
436+ expect ( resultado . resultado ) . toBeDefined ( ) ;
437+ expect ( resultado . resultado . length ) . toBeGreaterThan ( 0 ) ;
438+ expect ( resultado . resultado [ 0 ] ) . toHaveProperty ( 'valorRetornado' ) ;
439+ expect ( resultado . resultado [ 0 ] . valorRetornado ) . toHaveProperty ( 'valor' , 42 ) ;
440+ expect ( resultado . resultado [ 0 ] . valorRetornado ) . toHaveProperty ( 'tipo' , 'número' ) ;
441+ } ) ;
442+
443+ it ( 'Deve retornar estrutura completa ao inspecionar variável textual' , async ( ) => {
444+ const nucleoExecucao = new NucleoExecucao ( '0.1' ) ;
445+ nucleoExecucao . configurarDialeto ( ) ;
446+ // Ativa modo LAIR para manter contexto entre chamadas
447+ ( nucleoExecucao . avaliadorSintatico as any ) . modoLair = true ;
448+
449+ await nucleoExecucao . executarLinhas ( [ 'var mensagem = "Olá mundo"' ] ) ;
450+ const resultado = await nucleoExecucao . executarLinhas ( [ 'mensagem' ] ) ;
451+
452+ expect ( resultado . resultado ) . toBeDefined ( ) ;
453+ expect ( resultado . resultado . length ) . toBeGreaterThan ( 0 ) ;
454+ expect ( resultado . resultado [ 0 ] ) . toHaveProperty ( 'valorRetornado' ) ;
455+ expect ( resultado . resultado [ 0 ] . valorRetornado ) . toHaveProperty ( 'valor' , 'Olá mundo' ) ;
456+ expect ( resultado . resultado [ 0 ] . valorRetornado ) . toHaveProperty ( 'tipo' , 'texto' ) ;
457+ } ) ;
458+
459+ it ( 'Deve retornar estrutura completa ao inspecionar variável lógica' , async ( ) => {
460+ const nucleoExecucao = new NucleoExecucao ( '0.1' ) ;
461+ nucleoExecucao . configurarDialeto ( ) ;
462+ // Ativa modo LAIR para manter contexto entre chamadas
463+ ( nucleoExecucao . avaliadorSintatico as any ) . modoLair = true ;
464+
465+ await nucleoExecucao . executarLinhas ( [ 'var ativo = falso' ] ) ;
466+ const resultado = await nucleoExecucao . executarLinhas ( [ 'ativo' ] ) ;
467+
468+ expect ( resultado . resultado ) . toBeDefined ( ) ;
469+ expect ( resultado . resultado . length ) . toBeGreaterThan ( 0 ) ;
470+ expect ( resultado . resultado [ 0 ] ) . toHaveProperty ( 'valorRetornado' ) ;
471+ expect ( resultado . resultado [ 0 ] . valorRetornado ) . toHaveProperty ( 'valor' , false ) ;
472+ expect ( resultado . resultado [ 0 ] . valorRetornado ) . toHaveProperty ( 'tipo' , 'lógico' ) ;
473+ } ) ;
474+
475+ it ( 'Deve retornar estrutura completa ao inspecionar dicionário' , async ( ) => {
476+ const nucleoExecucao = new NucleoExecucao ( '0.1' ) ;
477+ nucleoExecucao . configurarDialeto ( ) ;
478+ // Ativa modo LAIR para manter contexto entre chamadas
479+ ( nucleoExecucao . avaliadorSintatico as any ) . modoLair = true ;
480+
481+ await nucleoExecucao . executarLinhas ( [ 'var pessoa = {"nome": "Maria", "idade": 25}' ] ) ;
482+ const resultado = await nucleoExecucao . executarLinhas ( [ 'pessoa' ] ) ;
483+
484+ expect ( resultado . resultado ) . toBeDefined ( ) ;
485+ expect ( resultado . resultado . length ) . toBeGreaterThan ( 0 ) ;
486+ expect ( resultado . resultado [ 0 ] ) . toHaveProperty ( 'valorRetornado' ) ;
487+ expect ( resultado . resultado [ 0 ] . valorRetornado ) . toHaveProperty ( 'valor' ) ;
488+ expect ( resultado . resultado [ 0 ] . valorRetornado . valor ) . toHaveProperty ( 'nome' , 'Maria' ) ;
489+ expect ( resultado . resultado [ 0 ] . valorRetornado . valor ) . toHaveProperty ( 'idade' , 25 ) ;
490+ expect ( resultado . resultado [ 0 ] . valorRetornado ) . toHaveProperty ( 'tipo' , 'dicionário' ) ;
491+ } ) ;
492+
493+ it ( 'Deve retornar declarações junto com resultado' , async ( ) => {
494+ const nucleoExecucao = new NucleoExecucao ( '0.1' ) ;
495+ nucleoExecucao . configurarDialeto ( ) ;
496+
497+ const resultado : any = await nucleoExecucao . executarLinhas ( [ 'var x = 10' ] ) ;
498+
499+ expect ( resultado ) . toHaveProperty ( 'declaracoes' ) ;
500+ expect ( resultado . declaracoes ) . toBeDefined ( ) ;
501+ expect ( resultado . declaracoes . length ) . toBeGreaterThan ( 0 ) ;
502+ } ) ;
503+ } ) ;
351504} ) ;
0 commit comments