@designliquido/foles 0.6.3 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (69) hide show
  1. package/fontes/avaliador-sintatico/avaliador-sintatico.js +347 -0
  2. package/fontes/avaliador-sintatico/avaliador-sintatico.js.map +1 -1
  3. package/fontes/lexador/palavras-reservadas/foles.d.ts +23 -0
  4. package/fontes/lexador/palavras-reservadas/foles.js +23 -0
  5. package/fontes/lexador/palavras-reservadas/foles.js.map +1 -1
  6. package/fontes/modificadores/transformar.js +2 -1
  7. package/fontes/modificadores/transformar.js.map +1 -1
  8. package/fontes/valores/dicionario-valores.js +41 -0
  9. package/fontes/valores/dicionario-valores.js.map +1 -1
  10. package/fontes/valores/metodos/escalamento-3d.d.ts +10 -0
  11. package/fontes/valores/metodos/escalamento-3d.js +18 -0
  12. package/fontes/valores/metodos/escalamento-3d.js.map +1 -0
  13. package/fontes/valores/metodos/escalamento-eixo-z.d.ts +8 -0
  14. package/fontes/valores/metodos/escalamento-eixo-z.js +16 -0
  15. package/fontes/valores/metodos/escalamento-eixo-z.js.map +1 -0
  16. package/fontes/valores/metodos/escalamento-horizontal.d.ts +8 -0
  17. package/fontes/valores/metodos/escalamento-horizontal.js +16 -0
  18. package/fontes/valores/metodos/escalamento-horizontal.js.map +1 -0
  19. package/fontes/valores/metodos/escalamento-vertical.d.ts +8 -0
  20. package/fontes/valores/metodos/escalamento-vertical.js +16 -0
  21. package/fontes/valores/metodos/escalamento-vertical.js.map +1 -0
  22. package/fontes/valores/metodos/escalamento.d.ts +9 -0
  23. package/fontes/valores/metodos/escalamento.js +20 -0
  24. package/fontes/valores/metodos/escalamento.js.map +1 -0
  25. package/fontes/valores/metodos/inclinar-horizontal.d.ts +9 -0
  26. package/fontes/valores/metodos/inclinar-horizontal.js +20 -0
  27. package/fontes/valores/metodos/inclinar-horizontal.js.map +1 -0
  28. package/fontes/valores/metodos/inclinar-vertical.d.ts +9 -0
  29. package/fontes/valores/metodos/inclinar-vertical.js +20 -0
  30. package/fontes/valores/metodos/inclinar-vertical.js.map +1 -0
  31. package/fontes/valores/metodos/inclinar.d.ts +11 -0
  32. package/fontes/valores/metodos/inclinar.js +25 -0
  33. package/fontes/valores/metodos/inclinar.js.map +1 -0
  34. package/fontes/valores/metodos/perspectivar.d.ts +9 -0
  35. package/fontes/valores/metodos/perspectivar.js +20 -0
  36. package/fontes/valores/metodos/perspectivar.js.map +1 -0
  37. package/fontes/valores/metodos/rotacionar-eixo-z.d.ts +9 -0
  38. package/fontes/valores/metodos/rotacionar-eixo-z.js +20 -0
  39. package/fontes/valores/metodos/rotacionar-eixo-z.js.map +1 -0
  40. package/fontes/valores/metodos/rotacionar-horizontal.d.ts +9 -0
  41. package/fontes/valores/metodos/rotacionar-horizontal.js +20 -0
  42. package/fontes/valores/metodos/rotacionar-horizontal.js.map +1 -0
  43. package/fontes/valores/metodos/rotacionar-vertical.d.ts +9 -0
  44. package/fontes/valores/metodos/rotacionar-vertical.js +20 -0
  45. package/fontes/valores/metodos/rotacionar-vertical.js.map +1 -0
  46. package/fontes/valores/metodos/rotacionar.d.ts +9 -0
  47. package/fontes/valores/metodos/rotacionar.js +20 -0
  48. package/fontes/valores/metodos/rotacionar.js.map +1 -0
  49. package/fontes/valores/metodos/translacao-3d.d.ts +13 -0
  50. package/fontes/valores/metodos/translacao-3d.js +42 -0
  51. package/fontes/valores/metodos/translacao-3d.js.map +1 -0
  52. package/fontes/valores/metodos/translacao-eixo-z.d.ts +9 -0
  53. package/fontes/valores/metodos/translacao-eixo-z.js +20 -0
  54. package/fontes/valores/metodos/translacao-eixo-z.js.map +1 -0
  55. package/fontes/valores/metodos/translacao-horizontal.d.ts +9 -0
  56. package/fontes/valores/metodos/translacao-horizontal.js +20 -0
  57. package/fontes/valores/metodos/translacao-horizontal.js.map +1 -0
  58. package/fontes/valores/metodos/translacao-vertical.d.ts +9 -0
  59. package/fontes/valores/metodos/translacao-vertical.js +20 -0
  60. package/fontes/valores/metodos/translacao-vertical.js.map +1 -0
  61. package/fontes/valores/metodos/translacao.d.ts +11 -0
  62. package/fontes/valores/metodos/translacao.js +25 -0
  63. package/fontes/valores/metodos/translacao.js.map +1 -0
  64. package/package.json +1 -1
  65. package/testes/listas/metodos.d.ts +5 -0
  66. package/testes/listas/metodos.js +17 -1
  67. package/testes/listas/metodos.js.map +1 -1
  68. package/testes/modificadores/metodos.test.js +1176 -178
  69. package/testes/modificadores/metodos.test.js.map +1 -1
@@ -276,6 +276,198 @@ describe('Testando Seletores que recebem MÉTODOS como valor', () => {
276
276
  }
277
277
  }
278
278
  });
279
+ it('Atribuindo Método "escalamento()"', () => {
280
+ for (let index = 0; index < metodos_1.MetodosEscalamento.length; index += 1) {
281
+ const valoresAceitos = ['0.1', '0', '1', '1.75'];
282
+ for (let valIndex = 0; valIndex < valoresAceitos.length; valIndex += 1) {
283
+ // Lexador
284
+ const resultadoLexador = lexador.mapear([
285
+ "lmht {",
286
+ `${metodos_1.MetodosEscalamento[index]}: escalamento(${valoresAceitos[valIndex]});`,
287
+ "}"
288
+ ]);
289
+ // O Lexador não deve encontrar erros
290
+ expect(resultadoLexador.erros).toHaveLength(0);
291
+ // O valor recebido deve ser mapeado como METODO
292
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
293
+ expect.objectContaining({ tipo: foles_1.default.METODO }),
294
+ ]));
295
+ // O Lexador deve montar um objeto de comprimento 10
296
+ expect(resultadoLexador.simbolos).toHaveLength(10);
297
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
298
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
299
+ ]));
300
+ // Avaliador Sintático
301
+ const resultadoAvaliadorSintatico = avaliador.analisar(resultadoLexador.simbolos);
302
+ // O Avaliador deve montar um objeto com os devidos nomes FolEs e CSS
303
+ expect(resultadoAvaliadorSintatico[0].modificadores[0].propriedadeCss).toStrictEqual(metodos_1.TraducaoValoresMetodos[metodos_1.MetodosEscalamento[index]]);
304
+ // Tradutor
305
+ const resultadoTradutor = tradutor.serializar(resultadoAvaliadorSintatico);
306
+ // O Tradutor deve serializar de acordo e traduzir escalamento para scale
307
+ expect(resultadoTradutor).toContain(metodos_1.TraducaoValoresMetodos[metodos_1.MetodosEscalamento[index]]);
308
+ expect(resultadoTradutor).toContain(`scale(${valoresAceitos[valIndex]});`);
309
+ }
310
+ }
311
+ });
312
+ it('Atribuindo Método "escalamento()" com múltiplos valores', () => {
313
+ for (let index = 0; index < metodos_1.MetodosEscalamento.length; index += 1) {
314
+ // Lexador
315
+ const resultadoLexador = lexador.mapear([
316
+ "lmht {",
317
+ `${metodos_1.MetodosEscalamento[index]}: escalamento(1.3, 0.4);`,
318
+ "}"
319
+ ]);
320
+ // O Lexador não deve encontrar erros
321
+ expect(resultadoLexador.erros).toHaveLength(0);
322
+ // O valor recebido deve ser mapeado como METODO
323
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
324
+ expect.objectContaining({ tipo: foles_1.default.METODO }),
325
+ ]));
326
+ // O Lexador deve montar um objeto de comprimento 12
327
+ expect(resultadoLexador.simbolos).toHaveLength(12);
328
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
329
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
330
+ ]));
331
+ // Avaliador Sintático
332
+ const resultadoAvaliadorSintatico = avaliador.analisar(resultadoLexador.simbolos);
333
+ // O Avaliador deve montar um objeto com os devidos nomes FolEs e CSS
334
+ expect(resultadoAvaliadorSintatico[0].modificadores[0].propriedadeCss).toStrictEqual(metodos_1.TraducaoValoresMetodos[metodos_1.MetodosEscalamento[index]]);
335
+ // Tradutor
336
+ const resultadoTradutor = tradutor.serializar(resultadoAvaliadorSintatico);
337
+ // O Tradutor deve serializar de acordo e traduzir escalamento para scale
338
+ expect(resultadoTradutor).toContain(metodos_1.TraducaoValoresMetodos[metodos_1.MetodosEscalamento[index]]);
339
+ expect(resultadoTradutor).toContain(`scale(1.3, 0.4);`);
340
+ }
341
+ });
342
+ it('Atribuindo Método "escalamento-3d()"', () => {
343
+ for (let index = 0; index < metodos_1.MetodosEscalamento.length; index += 1) {
344
+ // Lexador
345
+ const resultadoLexador = lexador.mapear([
346
+ "lmht {",
347
+ `${metodos_1.MetodosEscalamento[index]}: escalamento-3d(0.5, 1, 1.7);`,
348
+ "}"
349
+ ]);
350
+ // O Lexador não deve encontrar erros
351
+ expect(resultadoLexador.erros).toHaveLength(0);
352
+ // O valor recebido deve ser mapeado como METODO
353
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
354
+ expect.objectContaining({ tipo: foles_1.default.METODO }),
355
+ ]));
356
+ // O Lexador deve montar um objeto de comprimento 14
357
+ expect(resultadoLexador.simbolos).toHaveLength(14);
358
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
359
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
360
+ ]));
361
+ // Avaliador Sintático
362
+ const resultadoAvaliadorSintatico = avaliador.analisar(resultadoLexador.simbolos);
363
+ // O Avaliador deve montar um objeto com os devidos nomes FolEs e CSS
364
+ expect(resultadoAvaliadorSintatico[0].modificadores[0].propriedadeCss).toStrictEqual(metodos_1.TraducaoValoresMetodos[metodos_1.MetodosEscalamento[index]]);
365
+ // Tradutor
366
+ const resultadoTradutor = tradutor.serializar(resultadoAvaliadorSintatico);
367
+ // O Tradutor deve serializar de acordo e traduzir escalamento-3d para scale3d
368
+ expect(resultadoTradutor).toContain(metodos_1.TraducaoValoresMetodos[metodos_1.MetodosEscalamento[index]]);
369
+ expect(resultadoTradutor).toContain(`scale3d(0.5, 1, 1.7);`);
370
+ }
371
+ });
372
+ it('Atribuindo Método "escalamento-eixo-z()"', () => {
373
+ for (let index = 0; index < metodos_1.MetodosEscalamento.length; index += 1) {
374
+ const valoresAceitos = ['0.1', '0', '1', '1.75'];
375
+ for (let valIndex = 0; valIndex < valoresAceitos.length; valIndex += 1) {
376
+ // Lexador
377
+ const resultadoLexador = lexador.mapear([
378
+ "lmht {",
379
+ `${metodos_1.MetodosEscalamento[index]}: escalamento-eixo-z(${valoresAceitos[valIndex]});`,
380
+ "}"
381
+ ]);
382
+ // O Lexador não deve encontrar erros
383
+ expect(resultadoLexador.erros).toHaveLength(0);
384
+ // O valor recebido deve ser mapeado como METODO
385
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
386
+ expect.objectContaining({ tipo: foles_1.default.METODO }),
387
+ ]));
388
+ // O Lexador deve montar um objeto de comprimento 10
389
+ expect(resultadoLexador.simbolos).toHaveLength(10);
390
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
391
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
392
+ ]));
393
+ // Avaliador Sintático
394
+ const resultadoAvaliadorSintatico = avaliador.analisar(resultadoLexador.simbolos);
395
+ // O Avaliador deve montar um objeto com os devidos nomes FolEs e CSS
396
+ expect(resultadoAvaliadorSintatico[0].modificadores[0].propriedadeCss).toStrictEqual(metodos_1.TraducaoValoresMetodos[metodos_1.MetodosEscalamento[index]]);
397
+ // Tradutor
398
+ const resultadoTradutor = tradutor.serializar(resultadoAvaliadorSintatico);
399
+ // O Tradutor deve serializar de acordo e traduzir escalamento-eixo-z para scaleZ
400
+ expect(resultadoTradutor).toContain(metodos_1.TraducaoValoresMetodos[metodos_1.MetodosEscalamento[index]]);
401
+ expect(resultadoTradutor).toContain(`scaleZ(${valoresAceitos[valIndex]});`);
402
+ }
403
+ }
404
+ });
405
+ it('Atribuindo Método "escalamento-horizontal()"', () => {
406
+ for (let index = 0; index < metodos_1.MetodosEscalamento.length; index += 1) {
407
+ const valoresAceitos = ['0.1', '0', '1', '1.75'];
408
+ for (let valIndex = 0; valIndex < valoresAceitos.length; valIndex += 1) {
409
+ // Lexador
410
+ const resultadoLexador = lexador.mapear([
411
+ "lmht {",
412
+ `${metodos_1.MetodosEscalamento[index]}: escalamento-horizontal(${valoresAceitos[valIndex]});`,
413
+ "}"
414
+ ]);
415
+ // O Lexador não deve encontrar erros
416
+ expect(resultadoLexador.erros).toHaveLength(0);
417
+ // O valor recebido deve ser mapeado como METODO
418
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
419
+ expect.objectContaining({ tipo: foles_1.default.METODO }),
420
+ ]));
421
+ // O Lexador deve montar um objeto de comprimento 10
422
+ expect(resultadoLexador.simbolos).toHaveLength(10);
423
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
424
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
425
+ ]));
426
+ // Avaliador Sintático
427
+ const resultadoAvaliadorSintatico = avaliador.analisar(resultadoLexador.simbolos);
428
+ // O Avaliador deve montar um objeto com os devidos nomes FolEs e CSS
429
+ expect(resultadoAvaliadorSintatico[0].modificadores[0].propriedadeCss).toStrictEqual(metodos_1.TraducaoValoresMetodos[metodos_1.MetodosEscalamento[index]]);
430
+ // Tradutor
431
+ const resultadoTradutor = tradutor.serializar(resultadoAvaliadorSintatico);
432
+ // O Tradutor deve serializar de acordo e traduzir escalamento-horizontal para scaleX
433
+ expect(resultadoTradutor).toContain(metodos_1.TraducaoValoresMetodos[metodos_1.MetodosEscalamento[index]]);
434
+ expect(resultadoTradutor).toContain(`scaleX(${valoresAceitos[valIndex]});`);
435
+ }
436
+ }
437
+ });
438
+ it('Atribuindo Método "escalamento-vertical()"', () => {
439
+ for (let index = 0; index < metodos_1.MetodosEscalamento.length; index += 1) {
440
+ const valoresAceitos = ['0.1', '0', '1', '1.75'];
441
+ for (let valIndex = 0; valIndex < valoresAceitos.length; valIndex += 1) {
442
+ // Lexador
443
+ const resultadoLexador = lexador.mapear([
444
+ "lmht {",
445
+ `${metodos_1.MetodosEscalamento[index]}: escalamento-vertical(${valoresAceitos[valIndex]});`,
446
+ "}"
447
+ ]);
448
+ // O Lexador não deve encontrar erros
449
+ expect(resultadoLexador.erros).toHaveLength(0);
450
+ // O valor recebido deve ser mapeado como METODO
451
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
452
+ expect.objectContaining({ tipo: foles_1.default.METODO }),
453
+ ]));
454
+ // O Lexador deve montar um objeto de comprimento 10
455
+ expect(resultadoLexador.simbolos).toHaveLength(10);
456
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
457
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
458
+ ]));
459
+ // Avaliador Sintático
460
+ const resultadoAvaliadorSintatico = avaliador.analisar(resultadoLexador.simbolos);
461
+ // O Avaliador deve montar um objeto com os devidos nomes FolEs e CSS
462
+ expect(resultadoAvaliadorSintatico[0].modificadores[0].propriedadeCss).toStrictEqual(metodos_1.TraducaoValoresMetodos[metodos_1.MetodosEscalamento[index]]);
463
+ // Tradutor
464
+ const resultadoTradutor = tradutor.serializar(resultadoAvaliadorSintatico);
465
+ // O Tradutor deve serializar de acordo e traduzir escalamento-vertical para scaleY
466
+ expect(resultadoTradutor).toContain(metodos_1.TraducaoValoresMetodos[metodos_1.MetodosEscalamento[index]]);
467
+ expect(resultadoTradutor).toContain(`scaleY(${valoresAceitos[valIndex]});`);
468
+ }
469
+ }
470
+ });
279
471
  it('Atribuindo Método "gradiente-linear()" com valor de ângulo', () => {
280
472
  for (let index = 0; index < metodos_1.MetodoGradienteLinear.length; index += 1) {
281
473
  // Lexador
@@ -353,14 +545,14 @@ describe('Testando Seletores que recebem MÉTODOS como valor', () => {
353
545
  }
354
546
  }
355
547
  });
356
- it('Atribuindo Método "inverter()"', () => {
357
- for (let index = 0; index < metodos_1.MetodoInverter.length; index += 1) {
358
- const valoresAceitos = ['100px', '100%', '0.1', '0', '1', '1.75'];
548
+ it('Atribuindo Método "inclinar()"', () => {
549
+ for (let index = 0; index < metodos_1.MetodosInclinar.length; index += 1) {
550
+ const valoresAceitos = ['18deg', '3.142rad', '0', '1'];
359
551
  for (let valIndex = 0; valIndex < valoresAceitos.length; valIndex += 1) {
360
552
  // Lexador
361
553
  const resultadoLexador = lexador.mapear([
362
554
  "lmht {",
363
- `${metodos_1.MetodoInverter[index]}: inverter(${valoresAceitos[valIndex]});`,
555
+ `${metodos_1.MetodosInclinar[index]}: inclinar(${valoresAceitos[valIndex]});`,
364
556
  "}"
365
557
  ]);
366
558
  // O Lexador não deve encontrar erros
@@ -386,31 +578,31 @@ describe('Testando Seletores que recebem MÉTODOS como valor', () => {
386
578
  // Avaliador Sintático
387
579
  const resultadoAvaliadorSintatico = avaliador.analisar(resultadoLexador.simbolos);
388
580
  // O Avaliador deve montar um objeto com os devidos nomes FolEs e CSS
389
- expect(resultadoAvaliadorSintatico[0].modificadores[0].propriedadeCss).toStrictEqual(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoInverter[index]]);
581
+ expect(resultadoAvaliadorSintatico[0].modificadores[0].propriedadeCss).toStrictEqual(metodos_1.TraducaoValoresMetodos[metodos_1.MetodosInclinar[index]]);
390
582
  // Tradutor
391
583
  const resultadoTradutor = tradutor.serializar(resultadoAvaliadorSintatico);
392
- // O Tradutor deve serializar de acordo e traduzir inverter para invert
393
- expect(resultadoTradutor).toContain(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoInverter[index]]);
394
- expect(resultadoTradutor).toContain(`invert(${valoresAceitos[valIndex]});`);
584
+ // O Tradutor deve serializar de acordo e traduzir inclinar para skew
585
+ expect(resultadoTradutor).toContain(metodos_1.TraducaoValoresMetodos[metodos_1.MetodosInclinar[index]]);
586
+ expect(resultadoTradutor).toContain(`skew(${valoresAceitos[valIndex]});`);
395
587
  }
396
588
  }
397
589
  });
398
- it('Atribuindo Método "limitar" (clamp)', () => {
399
- for (let index = 0; index < metodos_1.MetodoLimitar.length; index += 1) {
590
+ it('Atribuindo Método "inclinar() com múltiplos valores"', () => {
591
+ for (let index = 0; index < metodos_1.MetodosInclinar.length; index += 1) {
400
592
  // Lexador
401
593
  const resultadoLexador = lexador.mapear([
402
594
  "lmht {",
403
- `${metodos_1.MetodoLimitar[index]}: limitar(10vw, 20em, 100vw);`,
595
+ `${metodos_1.MetodosInclinar[index]}: inclinar(15deg, 15deg);`,
404
596
  "}"
405
597
  ]);
406
- // O Lexador deve montar um objeto de comprimento 17 sem retornar nenhum erro
407
- expect(resultadoLexador.simbolos).toHaveLength(17);
598
+ // O Lexador não deve encontrar erros
408
599
  expect(resultadoLexador.erros).toHaveLength(0);
409
600
  // O valor recebido deve ser mapeado como METODO
410
601
  expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
411
602
  expect.objectContaining({ tipo: foles_1.default.METODO }),
412
603
  ]));
413
- // O Lexador também deve encontrar números e quantificadores no mapeamento
604
+ // O Lexador deve montar um objeto de comprimento 14
605
+ expect(resultadoLexador.simbolos).toHaveLength(14);
414
606
  expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
415
607
  expect.objectContaining({ tipo: foles_1.default.NUMERO }),
416
608
  expect.objectContaining({ tipo: foles_1.default.QUANTIFICADOR }),
@@ -418,58 +610,864 @@ describe('Testando Seletores que recebem MÉTODOS como valor', () => {
418
610
  // Avaliador Sintático
419
611
  const resultadoAvaliadorSintatico = avaliador.analisar(resultadoLexador.simbolos);
420
612
  // O Avaliador deve montar um objeto com os devidos nomes FolEs e CSS
421
- expect(resultadoAvaliadorSintatico[0].modificadores[0].propriedadeCss).toStrictEqual(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoLimitar[index]]);
613
+ expect(resultadoAvaliadorSintatico[0].modificadores[0].propriedadeCss).toStrictEqual(metodos_1.TraducaoValoresMetodos[metodos_1.MetodosInclinar[index]]);
422
614
  // Tradutor
423
615
  const resultadoTradutor = tradutor.serializar(resultadoAvaliadorSintatico);
424
- expect(resultadoTradutor).toContain(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoLimitar[index]]);
425
- expect(resultadoTradutor).toContain('clamp(10vw, 20em, 100vw);');
616
+ // O Tradutor deve serializar de acordo e traduzir inclinar para skew
617
+ expect(resultadoTradutor).toContain(metodos_1.TraducaoValoresMetodos[metodos_1.MetodosInclinar[index]]);
618
+ expect(resultadoTradutor).toContain(`skew(15deg, 15deg);`);
619
+ }
620
+ });
621
+ it('Atribuindo Método "inclinar-horizontal()"', () => {
622
+ for (let index = 0; index < metodos_1.MetodosInclinar.length; index += 1) {
623
+ const valoresAceitos = ['18deg', '3.142rad', '0', '1'];
624
+ for (let valIndex = 0; valIndex < valoresAceitos.length; valIndex += 1) {
625
+ // Lexador
626
+ const resultadoLexador = lexador.mapear([
627
+ "lmht {",
628
+ `${metodos_1.MetodosInclinar[index]}: inclinar-horizontal(${valoresAceitos[valIndex]});`,
629
+ "}"
630
+ ]);
631
+ // O Lexador não deve encontrar erros
632
+ expect(resultadoLexador.erros).toHaveLength(0);
633
+ // O valor recebido deve ser mapeado como METODO
634
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
635
+ expect.objectContaining({ tipo: foles_1.default.METODO }),
636
+ ]));
637
+ // O Lexador deve montar um objeto de comprimento 11 caso haja quantificador e 10 caso não haja
638
+ if (valIndex === 0 || valIndex === 1) {
639
+ expect(resultadoLexador.simbolos).toHaveLength(11);
640
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
641
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
642
+ expect.objectContaining({ tipo: foles_1.default.QUANTIFICADOR }),
643
+ ]));
644
+ }
645
+ else {
646
+ expect(resultadoLexador.simbolos).toHaveLength(10);
647
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
648
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
649
+ ]));
650
+ }
651
+ // Avaliador Sintático
652
+ const resultadoAvaliadorSintatico = avaliador.analisar(resultadoLexador.simbolos);
653
+ // O Avaliador deve montar um objeto com os devidos nomes FolEs e CSS
654
+ expect(resultadoAvaliadorSintatico[0].modificadores[0].propriedadeCss).toStrictEqual(metodos_1.TraducaoValoresMetodos[metodos_1.MetodosInclinar[index]]);
655
+ // Tradutor
656
+ const resultadoTradutor = tradutor.serializar(resultadoAvaliadorSintatico);
657
+ // O Tradutor deve serializar de acordo e traduzir inclinar-horizontal para skewX
658
+ expect(resultadoTradutor).toContain(metodos_1.TraducaoValoresMetodos[metodos_1.MetodosInclinar[index]]);
659
+ expect(resultadoTradutor).toContain(`skewX(${valoresAceitos[valIndex]});`);
660
+ }
661
+ }
662
+ });
663
+ it('Atribuindo Método "inclinar-vertical()"', () => {
664
+ for (let index = 0; index < metodos_1.MetodosInclinar.length; index += 1) {
665
+ const valoresAceitos = ['18deg', '3.142rad', '0', '1'];
666
+ for (let valIndex = 0; valIndex < valoresAceitos.length; valIndex += 1) {
667
+ // Lexador
668
+ const resultadoLexador = lexador.mapear([
669
+ "lmht {",
670
+ `${metodos_1.MetodosInclinar[index]}: inclinar-vertical(${valoresAceitos[valIndex]});`,
671
+ "}"
672
+ ]);
673
+ // O Lexador não deve encontrar erros
674
+ expect(resultadoLexador.erros).toHaveLength(0);
675
+ // O valor recebido deve ser mapeado como METODO
676
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
677
+ expect.objectContaining({ tipo: foles_1.default.METODO }),
678
+ ]));
679
+ // O Lexador deve montar um objeto de comprimento 11 caso haja quantificador e 10 caso não haja
680
+ if (valIndex === 0 || valIndex === 1) {
681
+ expect(resultadoLexador.simbolos).toHaveLength(11);
682
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
683
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
684
+ expect.objectContaining({ tipo: foles_1.default.QUANTIFICADOR }),
685
+ ]));
686
+ }
687
+ else {
688
+ expect(resultadoLexador.simbolos).toHaveLength(10);
689
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
690
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
691
+ ]));
692
+ }
693
+ // Avaliador Sintático
694
+ const resultadoAvaliadorSintatico = avaliador.analisar(resultadoLexador.simbolos);
695
+ // O Avaliador deve montar um objeto com os devidos nomes FolEs e CSS
696
+ expect(resultadoAvaliadorSintatico[0].modificadores[0].propriedadeCss).toStrictEqual(metodos_1.TraducaoValoresMetodos[metodos_1.MetodosInclinar[index]]);
697
+ // Tradutor
698
+ const resultadoTradutor = tradutor.serializar(resultadoAvaliadorSintatico);
699
+ // O Tradutor deve serializar de acordo e traduzir inclinar-vertical para skewY
700
+ expect(resultadoTradutor).toContain(metodos_1.TraducaoValoresMetodos[metodos_1.MetodosInclinar[index]]);
701
+ expect(resultadoTradutor).toContain(`skewY(${valoresAceitos[valIndex]});`);
702
+ }
703
+ }
704
+ });
705
+ it('Atribuindo Método "inverter()"', () => {
706
+ for (let index = 0; index < metodos_1.MetodoInverter.length; index += 1) {
707
+ const valoresAceitos = ['100px', '100%', '0.1', '0', '1', '1.75'];
708
+ for (let valIndex = 0; valIndex < valoresAceitos.length; valIndex += 1) {
709
+ // Lexador
710
+ const resultadoLexador = lexador.mapear([
711
+ "lmht {",
712
+ `${metodos_1.MetodoInverter[index]}: inverter(${valoresAceitos[valIndex]});`,
713
+ "}"
714
+ ]);
715
+ // O Lexador não deve encontrar erros
716
+ expect(resultadoLexador.erros).toHaveLength(0);
717
+ // O valor recebido deve ser mapeado como METODO
718
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
719
+ expect.objectContaining({ tipo: foles_1.default.METODO }),
720
+ ]));
721
+ // O Lexador deve montar um objeto de comprimento 11 caso haja quantificador e 10 caso não haja
722
+ if (valIndex === 0 || valIndex === 1) {
723
+ expect(resultadoLexador.simbolos).toHaveLength(11);
724
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
725
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
726
+ expect.objectContaining({ tipo: foles_1.default.QUANTIFICADOR }),
727
+ ]));
728
+ }
729
+ else {
730
+ expect(resultadoLexador.simbolos).toHaveLength(10);
731
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
732
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
733
+ ]));
734
+ }
735
+ // Avaliador Sintático
736
+ const resultadoAvaliadorSintatico = avaliador.analisar(resultadoLexador.simbolos);
737
+ // O Avaliador deve montar um objeto com os devidos nomes FolEs e CSS
738
+ expect(resultadoAvaliadorSintatico[0].modificadores[0].propriedadeCss).toStrictEqual(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoInverter[index]]);
739
+ // Tradutor
740
+ const resultadoTradutor = tradutor.serializar(resultadoAvaliadorSintatico);
741
+ // O Tradutor deve serializar de acordo e traduzir inverter para invert
742
+ expect(resultadoTradutor).toContain(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoInverter[index]]);
743
+ expect(resultadoTradutor).toContain(`invert(${valoresAceitos[valIndex]});`);
744
+ }
745
+ }
746
+ });
747
+ it('Atribuindo Método "limitar" (clamp)', () => {
748
+ for (let index = 0; index < metodos_1.MetodoLimitar.length; index += 1) {
749
+ // Lexador
750
+ const resultadoLexador = lexador.mapear([
751
+ "lmht {",
752
+ `${metodos_1.MetodoLimitar[index]}: limitar(10vw, 20em, 100vw);`,
753
+ "}"
754
+ ]);
755
+ // O Lexador deve montar um objeto de comprimento 17 sem retornar nenhum erro
756
+ expect(resultadoLexador.simbolos).toHaveLength(17);
757
+ expect(resultadoLexador.erros).toHaveLength(0);
758
+ // O valor recebido deve ser mapeado como METODO
759
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
760
+ expect.objectContaining({ tipo: foles_1.default.METODO }),
761
+ ]));
762
+ // O Lexador também deve encontrar números e quantificadores no mapeamento
763
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
764
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
765
+ expect.objectContaining({ tipo: foles_1.default.QUANTIFICADOR }),
766
+ ]));
767
+ // Avaliador Sintático
768
+ const resultadoAvaliadorSintatico = avaliador.analisar(resultadoLexador.simbolos);
769
+ // O Avaliador deve montar um objeto com os devidos nomes FolEs e CSS
770
+ expect(resultadoAvaliadorSintatico[0].modificadores[0].propriedadeCss).toStrictEqual(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoLimitar[index]]);
771
+ // Tradutor
772
+ const resultadoTradutor = tradutor.serializar(resultadoAvaliadorSintatico);
773
+ expect(resultadoTradutor).toContain(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoLimitar[index]]);
774
+ expect(resultadoTradutor).toContain('clamp(10vw, 20em, 100vw);');
775
+ }
776
+ });
777
+ it('Atribuindo Método "linear()"', () => {
778
+ for (let index = 0; index < metodos_1.MetodoLinear.length; index += 1) {
779
+ // Lexador
780
+ const resultadoLexador = lexador.mapear([
781
+ "lmht {",
782
+ `${metodos_1.MetodoLinear[index]}: linear(0, 0.25, 1);`,
783
+ "}"
784
+ ]);
785
+ // O Lexador deve montar um objeto de comprimento 14 sem retornar nenhum erro
786
+ expect(resultadoLexador.simbolos).toHaveLength(14);
787
+ expect(resultadoLexador.erros).toHaveLength(0);
788
+ // O valor recebido deve ser mapeado como METODO
789
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
790
+ expect.objectContaining({ tipo: foles_1.default.METODO }),
791
+ ]));
792
+ // O Lexador também deve encontrar números no mapeamento
793
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
794
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
795
+ ]));
796
+ // Avaliador Sintático
797
+ const resultadoAvaliadorSintatico = avaliador.analisar(resultadoLexador.simbolos);
798
+ // O Avaliador deve montar um objeto com os devidos nomes FolEs e CSS
799
+ expect(resultadoAvaliadorSintatico[0].modificadores[0].propriedadeCss).toStrictEqual(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoLinear[index]]);
800
+ // // // // Tradutor
801
+ const resultadoTradutor = tradutor.serializar(resultadoAvaliadorSintatico);
802
+ expect(resultadoTradutor).toContain(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoLinear[index]]);
803
+ expect(resultadoTradutor).toContain('linear(0, 0.25, 1);');
804
+ }
805
+ });
806
+ it('Atribuindo Método "minmax()"', () => {
807
+ for (let index = 0; index < metodos_1.MetodoMinMax.length; index += 1) {
808
+ // Lexador
809
+ const resultadoLexador = lexador.mapear([
810
+ "lmht {",
811
+ `${metodos_1.MetodoMinMax[index]}: minmax(100px, conteúdo-máximo);`,
812
+ "}"
813
+ ]);
814
+ // O Lexador deve montar um objeto de comprimento 13 sem retornar nenhum erro
815
+ expect(resultadoLexador.simbolos).toHaveLength(13);
816
+ expect(resultadoLexador.erros).toHaveLength(0);
817
+ // O valor recebido deve ser mapeado como METODO
818
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
819
+ expect.objectContaining({ tipo: foles_1.default.METODO }),
820
+ ]));
821
+ // O Lexador também deve encontrar número e quantificador no mapeamento
822
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
823
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
824
+ expect.objectContaining({ tipo: foles_1.default.QUANTIFICADOR }),
825
+ ]));
826
+ // Avaliador Sintático
827
+ const resultadoAvaliadorSintatico = avaliador.analisar(resultadoLexador.simbolos);
828
+ // O Avaliador deve montar um objeto com os devidos nomes FolEs e CSS
829
+ expect(resultadoAvaliadorSintatico[0].modificadores[0].propriedadeCss).toStrictEqual(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoMinMax[index]]);
830
+ // // // // Tradutor
831
+ const resultadoTradutor = tradutor.serializar(resultadoAvaliadorSintatico);
832
+ expect(resultadoTradutor).toContain(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoMinMax[index]]);
833
+ expect(resultadoTradutor).toContain('minmax(100px, max-content);');
834
+ }
835
+ });
836
+ it('Atribuindo Método "opacar()"', () => {
837
+ for (let index = 0; index < metodos_1.MetodoOpacar.length; index += 1) {
838
+ const valoresAceitos = ['100px', '100%', '0.1', '0', '1', '1.75'];
839
+ for (let valIndex = 0; valIndex < valoresAceitos.length; valIndex += 1) {
840
+ // Lexador
841
+ const resultadoLexador = lexador.mapear([
842
+ "lmht {",
843
+ `${metodos_1.MetodoOpacar[index]}: opacar(${valoresAceitos[valIndex]});`,
844
+ "}"
845
+ ]);
846
+ // O Lexador não deve encontrar erros
847
+ expect(resultadoLexador.erros).toHaveLength(0);
848
+ // O valor recebido deve ser mapeado como METODO
849
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
850
+ expect.objectContaining({ tipo: foles_1.default.METODO }),
851
+ ]));
852
+ // O Lexador deve montar um objeto de comprimento 11 caso haja quantificador e 10 caso não haja
853
+ if (valIndex === 0 || valIndex === 1) {
854
+ expect(resultadoLexador.simbolos).toHaveLength(11);
855
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
856
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
857
+ expect.objectContaining({ tipo: foles_1.default.QUANTIFICADOR }),
858
+ ]));
859
+ }
860
+ else {
861
+ expect(resultadoLexador.simbolos).toHaveLength(10);
862
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
863
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
864
+ ]));
865
+ }
866
+ // Avaliador Sintático
867
+ const resultadoAvaliadorSintatico = avaliador.analisar(resultadoLexador.simbolos);
868
+ // O Avaliador deve montar um objeto com os devidos nomes FolEs e CSS
869
+ expect(resultadoAvaliadorSintatico[0].modificadores[0].propriedadeCss).toStrictEqual(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoOpacar[index]]);
870
+ // Tradutor
871
+ const resultadoTradutor = tradutor.serializar(resultadoAvaliadorSintatico);
872
+ // O Tradutor deve serializar de acordo e traduzir opacar para opacity
873
+ expect(resultadoTradutor).toContain(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoOpacar[index]]);
874
+ expect(resultadoTradutor).toContain(`opacity(${valoresAceitos[valIndex]});`);
875
+ }
876
+ }
877
+ });
878
+ it('Atribuindo Método "passos" (steps)', () => {
879
+ for (let index = 0; index < metodos_1.MetodoPassos.length; index += 1) {
880
+ // Lexador
881
+ const resultadoLexador = lexador.mapear([
882
+ "lmht {",
883
+ `${metodos_1.MetodoPassos[index]}: passos(2, salto-inicial);`,
884
+ "}"
885
+ ]);
886
+ // O Lexador deve montar um objeto de comprimento 12 sem retornar nenhum erro
887
+ expect(resultadoLexador.simbolos).toHaveLength(12);
888
+ expect(resultadoLexador.erros).toHaveLength(0);
889
+ // O valor recebido deve ser mapeado como METODO
890
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
891
+ expect.objectContaining({ tipo: foles_1.default.METODO }),
892
+ ]));
893
+ // O Lexador também deve encontrar número e qualitativo no mapeamento
894
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
895
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
896
+ expect.objectContaining({ tipo: foles_1.default.QUALITATIVO }),
897
+ ]));
898
+ // Avaliador Sintático
899
+ const resultadoAvaliadorSintatico = avaliador.analisar(resultadoLexador.simbolos);
900
+ // O Avaliador deve montar um objeto com os devidos nomes FolEs e CSS
901
+ expect(resultadoAvaliadorSintatico[0].modificadores[0].propriedadeCss).toStrictEqual(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoPassos[index]]);
902
+ // // // // Tradutor
903
+ const resultadoTradutor = tradutor.serializar(resultadoAvaliadorSintatico);
904
+ expect(resultadoTradutor).toContain(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoPassos[index]]);
905
+ expect(resultadoTradutor).toContain('steps(2, jump-start);');
906
+ }
907
+ });
908
+ it('Atribuindo Método "perspectivar()"', () => {
909
+ for (let index = 0; index < metodos_1.MetodoPerspectivar.length; index += 1) {
910
+ const valoresAceitos = ['800px', '6.5cm', '0.1', '0', '1', '1.75', 'nenhuma'];
911
+ for (let valIndex = 0; valIndex < valoresAceitos.length; valIndex += 1) {
912
+ // Lexador
913
+ const resultadoLexador = lexador.mapear([
914
+ "lmht {",
915
+ `${metodos_1.MetodoPerspectivar[index]}: perspectivar(${valoresAceitos[valIndex]});`,
916
+ "}"
917
+ ]);
918
+ // O Lexador não deve encontrar erros
919
+ expect(resultadoLexador.erros).toHaveLength(0);
920
+ // O valor recebido deve ser mapeado como METODO
921
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
922
+ expect.objectContaining({ tipo: foles_1.default.METODO }),
923
+ ]));
924
+ // O Lexador deve montar um objeto de comprimento 11 caso haja quantificador e 10 caso não haja
925
+ if (valIndex === 0 || valIndex === 1) {
926
+ expect(resultadoLexador.simbolos).toHaveLength(11);
927
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
928
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
929
+ expect.objectContaining({ tipo: foles_1.default.QUANTIFICADOR }),
930
+ ]));
931
+ }
932
+ else if (valIndex !== 6) {
933
+ expect(resultadoLexador.simbolos).toHaveLength(10);
934
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
935
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
936
+ ]));
937
+ }
938
+ else {
939
+ expect(resultadoLexador.simbolos).toHaveLength(10);
940
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
941
+ expect.objectContaining({ tipo: foles_1.default.IDENTIFICADOR }),
942
+ ]));
943
+ }
944
+ // Avaliador Sintático
945
+ const resultadoAvaliadorSintatico = avaliador.analisar(resultadoLexador.simbolos);
946
+ // O Avaliador deve montar um objeto com os devidos nomes FolEs e CSS
947
+ expect(resultadoAvaliadorSintatico[0].modificadores[0].propriedadeCss).toStrictEqual(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoPerspectivar[index]]);
948
+ // Tradutor
949
+ const resultadoTradutor = tradutor.serializar(resultadoAvaliadorSintatico);
950
+ // O Tradutor deve serializar de acordo e traduzir perspectivar para perspective
951
+ expect(resultadoTradutor).toContain(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoPerspectivar[index]]);
952
+ expect(resultadoTradutor).toContain(`perspective(${valoresAceitos[valIndex]});`);
953
+ }
954
+ }
955
+ });
956
+ it('Atribuindo Método "projetar-sombra()" com valores de comprimento somente', () => {
957
+ for (let index = 0; index < metodos_1.MetodoProjetarSombra.length; index += 1) {
958
+ const comprimentos = ['15px 15px', '15px 15px 15px', '0.5rem 0.5rem', '0.5rem 0.5rem 1rem'];
959
+ for (let posIndex = 0; posIndex < comprimentos.length; posIndex += 1) {
960
+ // Lexador
961
+ const resultadoLexador = lexador.mapear([
962
+ "lmht {",
963
+ `${metodos_1.MetodoProjetarSombra[index]}: projetar-sombra(${comprimentos[posIndex]});`,
964
+ "}"
965
+ ]);
966
+ // O Lexador deve montar um objeto de acordo, sem retornar nenhum erro
967
+ expect(resultadoLexador.erros).toHaveLength(0);
968
+ // O valor recebido deve ser mapeado como METODO
969
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
970
+ expect.objectContaining({ tipo: foles_1.default.METODO }),
971
+ ]));
972
+ // O Lexador também deve sempre encontrar valores e quantificadores na operação
973
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
974
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
975
+ expect.objectContaining({ tipo: foles_1.default.QUANTIFICADOR }),
976
+ ]));
977
+ // Avaliador Sintático
978
+ const resultadoAvaliadorSintatico = avaliador.analisar(resultadoLexador.simbolos);
979
+ // O Avaliador deve montar um objeto com os devidos nomes FolEs e CSS
980
+ expect(resultadoAvaliadorSintatico[0].modificadores[0].propriedadeCss).toStrictEqual(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoProjetarSombra[index]]);
981
+ // Tradutor
982
+ const resultadoTradutor = tradutor.serializar(resultadoAvaliadorSintatico);
983
+ // O Tradutor deve serializar de acordo e traduzir projetar-sombra para drop-shadow
984
+ expect(resultadoTradutor).toContain(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoProjetarSombra[index]]);
985
+ expect(resultadoTradutor).toContain(`drop-shadow(${comprimentos[posIndex]});`);
986
+ }
987
+ }
988
+ });
989
+ it('Atribuindo Método "projetar-sombra()" com valores de cor e de comprimento', () => {
990
+ for (let index = 0; index < metodos_1.MetodoProjetarSombra.length; index += 1) {
991
+ const comprimentos = ['15px 15px vermelho', '15px 15px 15px vermelho', 'vermelho 0.5rem 0.5rem', 'vermelho 0.5rem 0.5rem 1rem'];
992
+ for (let posIndex = 0; posIndex < comprimentos.length; posIndex += 1) {
993
+ // Lexador
994
+ const resultadoLexador = lexador.mapear([
995
+ "lmht {",
996
+ `${metodos_1.MetodoProjetarSombra[index]}: projetar-sombra(${comprimentos[posIndex]});`,
997
+ "}"
998
+ ]);
999
+ // O Lexador deve montar um objeto de acordo, sem retornar nenhum erro
1000
+ expect(resultadoLexador.erros).toHaveLength(0);
1001
+ // O valor recebido deve ser mapeado como METODO
1002
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
1003
+ expect.objectContaining({ tipo: foles_1.default.METODO }),
1004
+ ]));
1005
+ // O Lexador também deve sempre encontrar valores e quantificadores na operação
1006
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
1007
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
1008
+ expect.objectContaining({ tipo: foles_1.default.QUANTIFICADOR }),
1009
+ ]));
1010
+ // Avaliador Sintático
1011
+ const resultadoAvaliadorSintatico = avaliador.analisar(resultadoLexador.simbolos);
1012
+ // O Avaliador deve montar um objeto com os devidos nomes FolEs e CSS
1013
+ expect(resultadoAvaliadorSintatico[0].modificadores[0].propriedadeCss).toStrictEqual(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoProjetarSombra[index]]);
1014
+ // Tradutor
1015
+ const resultadoTradutor = tradutor.serializar(resultadoAvaliadorSintatico);
1016
+ // O Tradutor deve serializar de acordo e traduzir vermelho para red
1017
+ expect(resultadoTradutor).toContain(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoProjetarSombra[index]]);
1018
+ expect(resultadoTradutor).toContain('red');
1019
+ }
1020
+ }
1021
+ });
1022
+ it('Atribuindo Método "raio()" com valores de posição e número/quantificador', () => {
1023
+ for (let index = 0; index < metodos_1.MetodoRaio.length; index += 1) {
1024
+ const valoresAceitos = ['lado-mais-próximo', 'lado-mais-proximo', 'canto-mais-próximo', 'canto-mais-proximo', 'lado-mais-distante', 'canto-mais-distante', 'lados', 'conter'];
1025
+ const traducaoValoresAceitos = ['closest-side', 'closest-side', 'closest-corner', 'closest-corner', 'farthest-side', 'farthest-corner', 'sides', 'contain'];
1026
+ for (let valIndex = 0; valIndex < valoresAceitos.length; valIndex += 1) {
1027
+ // Lexador
1028
+ const resultadoLexador = lexador.mapear([
1029
+ "lmht {",
1030
+ `${metodos_1.MetodoRaio[index]}: raio(${valoresAceitos[valIndex]} 200deg);`,
1031
+ "}"
1032
+ ]);
1033
+ // O Lexador não deve encontrar erros
1034
+ expect(resultadoLexador.erros).toHaveLength(0);
1035
+ // O valor recebido deve ser mapeado como METODO
1036
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
1037
+ expect.objectContaining({ tipo: foles_1.default.METODO }),
1038
+ ]));
1039
+ // O Lexador deve montar um objeto de comprimento 12
1040
+ expect(resultadoLexador.simbolos).toHaveLength(12);
1041
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
1042
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
1043
+ expect.objectContaining({ tipo: foles_1.default.QUANTIFICADOR }),
1044
+ ]));
1045
+ // Avaliador Sintático
1046
+ const resultadoAvaliadorSintatico = avaliador.analisar(resultadoLexador.simbolos);
1047
+ // O Avaliador deve montar um objeto com os devidos nomes FolEs e CSS
1048
+ expect(resultadoAvaliadorSintatico[0].modificadores[0].propriedadeCss).toStrictEqual(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoRaio[index]]);
1049
+ // Tradutor
1050
+ const resultadoTradutor = tradutor.serializar(resultadoAvaliadorSintatico);
1051
+ // O Tradutor deve serializar de acordo e traduzir raio para ray
1052
+ expect(resultadoTradutor).toContain(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoRaio[index]]);
1053
+ expect(resultadoTradutor).toContain(`ray(${traducaoValoresAceitos[valIndex]} 200deg);`);
1054
+ }
1055
+ }
1056
+ });
1057
+ it('Atribuindo Método "raio()" com somente número/quantificador', () => {
1058
+ for (let index = 0; index < metodos_1.MetodoRaio.length; index += 1) {
1059
+ // Lexador
1060
+ const resultadoLexador = lexador.mapear([
1061
+ "lmht {",
1062
+ `${metodos_1.MetodoRaio[index]}: raio(200deg);`,
1063
+ "}"
1064
+ ]);
1065
+ // O Lexador não deve encontrar erros
1066
+ expect(resultadoLexador.erros).toHaveLength(0);
1067
+ // O valor recebido deve ser mapeado como METODO
1068
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
1069
+ expect.objectContaining({ tipo: foles_1.default.METODO }),
1070
+ ]));
1071
+ // O Lexador deve montar um objeto de comprimento 11
1072
+ expect(resultadoLexador.simbolos).toHaveLength(11);
1073
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
1074
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
1075
+ expect.objectContaining({ tipo: foles_1.default.QUANTIFICADOR }),
1076
+ ]));
1077
+ // Avaliador Sintático
1078
+ const resultadoAvaliadorSintatico = avaliador.analisar(resultadoLexador.simbolos);
1079
+ // O Avaliador deve montar um objeto com os devidos nomes FolEs e CSS
1080
+ expect(resultadoAvaliadorSintatico[0].modificadores[0].propriedadeCss).toStrictEqual(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoRaio[index]]);
1081
+ // Tradutor
1082
+ const resultadoTradutor = tradutor.serializar(resultadoAvaliadorSintatico);
1083
+ // O Tradutor deve serializar de acordo e traduzir raio para ray
1084
+ expect(resultadoTradutor).toContain(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoRaio[index]]);
1085
+ expect(resultadoTradutor).toContain(`ray(200deg);`);
1086
+ }
1087
+ });
1088
+ it('Atribuindo Método "rotacionar()"', () => {
1089
+ for (let index = 0; index < metodos_1.MetodosRotacionar.length; index += 1) {
1090
+ const valoresAceitos = ['45deg', '3.142rad', '0.1', '0', '1', '1.75'];
1091
+ for (let valIndex = 0; valIndex < valoresAceitos.length; valIndex += 1) {
1092
+ // Lexador
1093
+ const resultadoLexador = lexador.mapear([
1094
+ "lmht {",
1095
+ `${metodos_1.MetodosRotacionar[index]}: rotacionar(${valoresAceitos[valIndex]});`,
1096
+ "}"
1097
+ ]);
1098
+ // O Lexador não deve encontrar erros
1099
+ expect(resultadoLexador.erros).toHaveLength(0);
1100
+ // O valor recebido deve ser mapeado como METODO
1101
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
1102
+ expect.objectContaining({ tipo: foles_1.default.METODO }),
1103
+ ]));
1104
+ // O Lexador deve montar um objeto de comprimento 11 caso haja quantificador e 10 caso não haja
1105
+ if (valIndex === 0 || valIndex === 1) {
1106
+ expect(resultadoLexador.simbolos).toHaveLength(11);
1107
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
1108
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
1109
+ expect.objectContaining({ tipo: foles_1.default.QUANTIFICADOR }),
1110
+ ]));
1111
+ }
1112
+ else {
1113
+ expect(resultadoLexador.simbolos).toHaveLength(10);
1114
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
1115
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
1116
+ ]));
1117
+ }
1118
+ // Avaliador Sintático
1119
+ const resultadoAvaliadorSintatico = avaliador.analisar(resultadoLexador.simbolos);
1120
+ // O Avaliador deve montar um objeto com os devidos nomes FolEs e CSS
1121
+ expect(resultadoAvaliadorSintatico[0].modificadores[0].propriedadeCss).toStrictEqual(metodos_1.TraducaoValoresMetodos[metodos_1.MetodosRotacionar[index]]);
1122
+ // Tradutor
1123
+ const resultadoTradutor = tradutor.serializar(resultadoAvaliadorSintatico);
1124
+ // O Tradutor deve serializar de acordo e traduzir rotacionar para rotate
1125
+ expect(resultadoTradutor).toContain(metodos_1.TraducaoValoresMetodos[metodos_1.MetodosRotacionar[index]]);
1126
+ expect(resultadoTradutor).toContain(`rotate(${valoresAceitos[valIndex]});`);
1127
+ }
1128
+ }
1129
+ });
1130
+ it('Atribuindo Método "rotacionar-eixo-z()"', () => {
1131
+ for (let index = 0; index < metodos_1.MetodosRotacionar.length; index += 1) {
1132
+ const valoresAceitos = ['45deg', '3.142rad', '0.1', '0', '1', '1.75'];
1133
+ for (let valIndex = 0; valIndex < valoresAceitos.length; valIndex += 1) {
1134
+ // Lexador
1135
+ const resultadoLexador = lexador.mapear([
1136
+ "lmht {",
1137
+ `${metodos_1.MetodosRotacionar[index]}: rotacionar-eixo-z(${valoresAceitos[valIndex]});`,
1138
+ "}"
1139
+ ]);
1140
+ // O Lexador não deve encontrar erros
1141
+ expect(resultadoLexador.erros).toHaveLength(0);
1142
+ // O valor recebido deve ser mapeado como METODO
1143
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
1144
+ expect.objectContaining({ tipo: foles_1.default.METODO }),
1145
+ ]));
1146
+ // O Lexador deve montar um objeto de comprimento 11 caso haja quantificador e 10 caso não haja
1147
+ if (valIndex === 0 || valIndex === 1) {
1148
+ expect(resultadoLexador.simbolos).toHaveLength(11);
1149
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
1150
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
1151
+ expect.objectContaining({ tipo: foles_1.default.QUANTIFICADOR }),
1152
+ ]));
1153
+ }
1154
+ else {
1155
+ expect(resultadoLexador.simbolos).toHaveLength(10);
1156
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
1157
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
1158
+ ]));
1159
+ }
1160
+ // Avaliador Sintático
1161
+ const resultadoAvaliadorSintatico = avaliador.analisar(resultadoLexador.simbolos);
1162
+ // O Avaliador deve montar um objeto com os devidos nomes FolEs e CSS
1163
+ expect(resultadoAvaliadorSintatico[0].modificadores[0].propriedadeCss).toStrictEqual(metodos_1.TraducaoValoresMetodos[metodos_1.MetodosRotacionar[index]]);
1164
+ // Tradutor
1165
+ const resultadoTradutor = tradutor.serializar(resultadoAvaliadorSintatico);
1166
+ // O Tradutor deve serializar de acordo e traduzir rotacionar-eixo-z para rotateZ
1167
+ expect(resultadoTradutor).toContain(metodos_1.TraducaoValoresMetodos[metodos_1.MetodosRotacionar[index]]);
1168
+ expect(resultadoTradutor).toContain(`rotateZ(${valoresAceitos[valIndex]});`);
1169
+ }
1170
+ }
1171
+ });
1172
+ it('Atribuindo Método "rotacionar-horizontal()"', () => {
1173
+ for (let index = 0; index < metodos_1.MetodosRotacionar.length; index += 1) {
1174
+ const valoresAceitos = ['45deg', '3.142rad', '0.1', '0', '1', '1.75'];
1175
+ for (let valIndex = 0; valIndex < valoresAceitos.length; valIndex += 1) {
1176
+ // Lexador
1177
+ const resultadoLexador = lexador.mapear([
1178
+ "lmht {",
1179
+ `${metodos_1.MetodosRotacionar[index]}: rotacionar-horizontal(${valoresAceitos[valIndex]});`,
1180
+ "}"
1181
+ ]);
1182
+ // O Lexador não deve encontrar erros
1183
+ expect(resultadoLexador.erros).toHaveLength(0);
1184
+ // O valor recebido deve ser mapeado como METODO
1185
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
1186
+ expect.objectContaining({ tipo: foles_1.default.METODO }),
1187
+ ]));
1188
+ // O Lexador deve montar um objeto de comprimento 11 caso haja quantificador e 10 caso não haja
1189
+ if (valIndex === 0 || valIndex === 1) {
1190
+ expect(resultadoLexador.simbolos).toHaveLength(11);
1191
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
1192
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
1193
+ expect.objectContaining({ tipo: foles_1.default.QUANTIFICADOR }),
1194
+ ]));
1195
+ }
1196
+ else {
1197
+ expect(resultadoLexador.simbolos).toHaveLength(10);
1198
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
1199
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
1200
+ ]));
1201
+ }
1202
+ // Avaliador Sintático
1203
+ const resultadoAvaliadorSintatico = avaliador.analisar(resultadoLexador.simbolos);
1204
+ // O Avaliador deve montar um objeto com os devidos nomes FolEs e CSS
1205
+ expect(resultadoAvaliadorSintatico[0].modificadores[0].propriedadeCss).toStrictEqual(metodos_1.TraducaoValoresMetodos[metodos_1.MetodosRotacionar[index]]);
1206
+ // Tradutor
1207
+ const resultadoTradutor = tradutor.serializar(resultadoAvaliadorSintatico);
1208
+ // O Tradutor deve serializar de acordo e traduzir rotacionar-horizontal para rotateX
1209
+ expect(resultadoTradutor).toContain(metodos_1.TraducaoValoresMetodos[metodos_1.MetodosRotacionar[index]]);
1210
+ expect(resultadoTradutor).toContain(`rotateX(${valoresAceitos[valIndex]});`);
1211
+ }
1212
+ }
1213
+ });
1214
+ it('Atribuindo Método "rotacionar-matiz()"', () => {
1215
+ for (let index = 0; index < metodos_1.MetodoRotacionarMatiz.length; index += 1) {
1216
+ const valoresAceitos = ['100px', '100%', '0.1', '0', '1', '1.75'];
1217
+ for (let valIndex = 0; valIndex < valoresAceitos.length; valIndex += 1) {
1218
+ // Lexador
1219
+ const resultadoLexador = lexador.mapear([
1220
+ "lmht {",
1221
+ `${metodos_1.MetodoRotacionarMatiz[index]}: rotacionar-matiz(${valoresAceitos[valIndex]});`,
1222
+ "}"
1223
+ ]);
1224
+ // O Lexador não deve encontrar erros
1225
+ expect(resultadoLexador.erros).toHaveLength(0);
1226
+ // O valor recebido deve ser mapeado como METODO
1227
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
1228
+ expect.objectContaining({ tipo: foles_1.default.METODO }),
1229
+ ]));
1230
+ // O Lexador deve montar um objeto de comprimento 11 caso haja quantificador e 10 caso não haja
1231
+ if (valIndex === 0 || valIndex === 1) {
1232
+ expect(resultadoLexador.simbolos).toHaveLength(11);
1233
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
1234
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
1235
+ expect.objectContaining({ tipo: foles_1.default.QUANTIFICADOR }),
1236
+ ]));
1237
+ }
1238
+ else {
1239
+ expect(resultadoLexador.simbolos).toHaveLength(10);
1240
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
1241
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
1242
+ ]));
1243
+ }
1244
+ // Avaliador Sintático
1245
+ const resultadoAvaliadorSintatico = avaliador.analisar(resultadoLexador.simbolos);
1246
+ // O Avaliador deve montar um objeto com os devidos nomes FolEs e CSS
1247
+ expect(resultadoAvaliadorSintatico[0].modificadores[0].propriedadeCss).toStrictEqual(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoRotacionarMatiz[index]]);
1248
+ // Tradutor
1249
+ const resultadoTradutor = tradutor.serializar(resultadoAvaliadorSintatico);
1250
+ // O Tradutor deve serializar de acordo e traduzir rotacionar-matiz para hue-rotate
1251
+ expect(resultadoTradutor).toContain(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoRotacionarMatiz[index]]);
1252
+ expect(resultadoTradutor).toContain(`hue-rotate(${valoresAceitos[valIndex]});`);
1253
+ }
1254
+ }
1255
+ });
1256
+ it('Atribuindo Método "rotacionar-vertical()"', () => {
1257
+ for (let index = 0; index < metodos_1.MetodosRotacionar.length; index += 1) {
1258
+ const valoresAceitos = ['45deg', '3.142rad', '0.1', '0', '1', '1.75'];
1259
+ for (let valIndex = 0; valIndex < valoresAceitos.length; valIndex += 1) {
1260
+ // Lexador
1261
+ const resultadoLexador = lexador.mapear([
1262
+ "lmht {",
1263
+ `${metodos_1.MetodosRotacionar[index]}: rotacionar-vertical(${valoresAceitos[valIndex]});`,
1264
+ "}"
1265
+ ]);
1266
+ // O Lexador não deve encontrar erros
1267
+ expect(resultadoLexador.erros).toHaveLength(0);
1268
+ // O valor recebido deve ser mapeado como METODO
1269
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
1270
+ expect.objectContaining({ tipo: foles_1.default.METODO }),
1271
+ ]));
1272
+ // O Lexador deve montar um objeto de comprimento 11 caso haja quantificador e 10 caso não haja
1273
+ if (valIndex === 0 || valIndex === 1) {
1274
+ expect(resultadoLexador.simbolos).toHaveLength(11);
1275
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
1276
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
1277
+ expect.objectContaining({ tipo: foles_1.default.QUANTIFICADOR }),
1278
+ ]));
1279
+ }
1280
+ else {
1281
+ expect(resultadoLexador.simbolos).toHaveLength(10);
1282
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
1283
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
1284
+ ]));
1285
+ }
1286
+ // Avaliador Sintático
1287
+ const resultadoAvaliadorSintatico = avaliador.analisar(resultadoLexador.simbolos);
1288
+ // O Avaliador deve montar um objeto com os devidos nomes FolEs e CSS
1289
+ expect(resultadoAvaliadorSintatico[0].modificadores[0].propriedadeCss).toStrictEqual(metodos_1.TraducaoValoresMetodos[metodos_1.MetodosRotacionar[index]]);
1290
+ // Tradutor
1291
+ const resultadoTradutor = tradutor.serializar(resultadoAvaliadorSintatico);
1292
+ // O Tradutor deve serializar de acordo e traduzir rotacionar-vertical para rotateY
1293
+ expect(resultadoTradutor).toContain(metodos_1.TraducaoValoresMetodos[metodos_1.MetodosRotacionar[index]]);
1294
+ expect(resultadoTradutor).toContain(`rotateY(${valoresAceitos[valIndex]});`);
1295
+ }
1296
+ }
1297
+ });
1298
+ it('Atribuindo Método "saturar()"', () => {
1299
+ for (let index = 0; index < metodos_1.MetodoSaturar.length; index += 1) {
1300
+ const valoresAceitos = ['100px', '100%', '0.1', '0', '1', '1.75'];
1301
+ for (let valIndex = 0; valIndex < valoresAceitos.length; valIndex += 1) {
1302
+ // Lexador
1303
+ const resultadoLexador = lexador.mapear([
1304
+ "lmht {",
1305
+ `${metodos_1.MetodoSaturar[index]}: saturar(${valoresAceitos[valIndex]});`,
1306
+ "}"
1307
+ ]);
1308
+ // O Lexador não deve encontrar erros
1309
+ expect(resultadoLexador.erros).toHaveLength(0);
1310
+ // O valor recebido deve ser mapeado como METODO
1311
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
1312
+ expect.objectContaining({ tipo: foles_1.default.METODO }),
1313
+ ]));
1314
+ // O Lexador deve montar um objeto de comprimento 11 caso haja quantificador e 10 caso não haja
1315
+ if (valIndex === 0 || valIndex === 1) {
1316
+ expect(resultadoLexador.simbolos).toHaveLength(11);
1317
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
1318
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
1319
+ expect.objectContaining({ tipo: foles_1.default.QUANTIFICADOR }),
1320
+ ]));
1321
+ }
1322
+ else {
1323
+ expect(resultadoLexador.simbolos).toHaveLength(10);
1324
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
1325
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
1326
+ ]));
1327
+ }
1328
+ // Avaliador Sintático
1329
+ const resultadoAvaliadorSintatico = avaliador.analisar(resultadoLexador.simbolos);
1330
+ // O Avaliador deve montar um objeto com os devidos nomes FolEs e CSS
1331
+ expect(resultadoAvaliadorSintatico[0].modificadores[0].propriedadeCss).toStrictEqual(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoSaturar[index]]);
1332
+ // Tradutor
1333
+ const resultadoTradutor = tradutor.serializar(resultadoAvaliadorSintatico);
1334
+ // O Tradutor deve serializar de acordo e traduzir saturar para saturate
1335
+ expect(resultadoTradutor).toContain(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoSaturar[index]]);
1336
+ expect(resultadoTradutor).toContain(`saturate(${valoresAceitos[valIndex]});`);
1337
+ }
1338
+ }
1339
+ });
1340
+ it('Atribuindo Método "sepia()"', () => {
1341
+ for (let index = 0; index < metodos_1.MetodoSepia.length; index += 1) {
1342
+ const valoresAceitos = ['100px', '100%', '0.1', '0', '1', '1.75'];
1343
+ for (let valIndex = 0; valIndex < valoresAceitos.length; valIndex += 1) {
1344
+ // Lexador
1345
+ const resultadoLexador = lexador.mapear([
1346
+ "lmht {",
1347
+ `${metodos_1.MetodoSepia[index]}: sepia(${valoresAceitos[valIndex]});`,
1348
+ "}"
1349
+ ]);
1350
+ // O Lexador não deve encontrar erros
1351
+ expect(resultadoLexador.erros).toHaveLength(0);
1352
+ // O valor recebido deve ser mapeado como METODO
1353
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
1354
+ expect.objectContaining({ tipo: foles_1.default.METODO }),
1355
+ ]));
1356
+ // O Lexador deve montar um objeto de comprimento 11 caso haja quantificador e 10 caso não haja
1357
+ if (valIndex === 0 || valIndex === 1) {
1358
+ expect(resultadoLexador.simbolos).toHaveLength(11);
1359
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
1360
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
1361
+ expect.objectContaining({ tipo: foles_1.default.QUANTIFICADOR }),
1362
+ ]));
1363
+ }
1364
+ else {
1365
+ expect(resultadoLexador.simbolos).toHaveLength(10);
1366
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
1367
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
1368
+ ]));
1369
+ }
1370
+ // Avaliador Sintático
1371
+ const resultadoAvaliadorSintatico = avaliador.analisar(resultadoLexador.simbolos);
1372
+ // O Avaliador deve montar um objeto com os devidos nomes FolEs e CSS
1373
+ expect(resultadoAvaliadorSintatico[0].modificadores[0].propriedadeCss).toStrictEqual(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoSepia[index]]);
1374
+ // Tradutor
1375
+ const resultadoTradutor = tradutor.serializar(resultadoAvaliadorSintatico);
1376
+ // O Tradutor deve serializar de acordo e traduzir sépia para sepia
1377
+ expect(resultadoTradutor).toContain(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoSepia[index]]);
1378
+ expect(resultadoTradutor).toContain(`sepia(${valoresAceitos[valIndex]});`);
1379
+ }
1380
+ }
1381
+ });
1382
+ it('Atribuindo Método "translação()"', () => {
1383
+ for (let index = 0; index < metodos_1.MetodosTranslacao.length; index += 1) {
1384
+ const valoresAceitos = ['18deg', '3.142rad', '0', '1'];
1385
+ for (let valIndex = 0; valIndex < valoresAceitos.length; valIndex += 1) {
1386
+ // Lexador
1387
+ const resultadoLexador = lexador.mapear([
1388
+ "lmht {",
1389
+ `${metodos_1.MetodosTranslacao[index]}: translação(${valoresAceitos[valIndex]});`,
1390
+ "}"
1391
+ ]);
1392
+ // O Lexador não deve encontrar erros
1393
+ expect(resultadoLexador.erros).toHaveLength(0);
1394
+ // O valor recebido deve ser mapeado como METODO
1395
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
1396
+ expect.objectContaining({ tipo: foles_1.default.METODO }),
1397
+ ]));
1398
+ // O Lexador deve montar um objeto de comprimento 11 caso haja quantificador e 10 caso não haja
1399
+ if (valIndex === 0 || valIndex === 1) {
1400
+ expect(resultadoLexador.simbolos).toHaveLength(11);
1401
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
1402
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
1403
+ expect.objectContaining({ tipo: foles_1.default.QUANTIFICADOR }),
1404
+ ]));
1405
+ }
1406
+ else {
1407
+ expect(resultadoLexador.simbolos).toHaveLength(10);
1408
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
1409
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
1410
+ ]));
1411
+ }
1412
+ // Avaliador Sintático
1413
+ const resultadoAvaliadorSintatico = avaliador.analisar(resultadoLexador.simbolos);
1414
+ // O Avaliador deve montar um objeto com os devidos nomes FolEs e CSS
1415
+ expect(resultadoAvaliadorSintatico[0].modificadores[0].propriedadeCss).toStrictEqual(metodos_1.TraducaoValoresMetodos[metodos_1.MetodosTranslacao[index]]);
1416
+ // Tradutor
1417
+ const resultadoTradutor = tradutor.serializar(resultadoAvaliadorSintatico);
1418
+ // O Tradutor deve serializar de acordo e traduzir translação para translate
1419
+ expect(resultadoTradutor).toContain(metodos_1.TraducaoValoresMetodos[metodos_1.MetodosTranslacao[index]]);
1420
+ expect(resultadoTradutor).toContain(`translate(${valoresAceitos[valIndex]});`);
1421
+ }
426
1422
  }
427
1423
  });
428
- it('Atribuindo Método "linear()"', () => {
429
- for (let index = 0; index < metodos_1.MetodoLinear.length; index += 1) {
1424
+ it('Atribuindo Método "translacao() com múltiplos valores"', () => {
1425
+ for (let index = 0; index < metodos_1.MetodosTranslacao.length; index += 1) {
430
1426
  // Lexador
431
1427
  const resultadoLexador = lexador.mapear([
432
1428
  "lmht {",
433
- `${metodos_1.MetodoLinear[index]}: linear(0, 0.25, 1);`,
1429
+ `${metodos_1.MetodosTranslacao[index]}: translacao(3ch, 3mm);`,
434
1430
  "}"
435
1431
  ]);
436
- // O Lexador deve montar um objeto de comprimento 14 sem retornar nenhum erro
437
- expect(resultadoLexador.simbolos).toHaveLength(14);
1432
+ // O Lexador não deve encontrar erros
438
1433
  expect(resultadoLexador.erros).toHaveLength(0);
439
1434
  // O valor recebido deve ser mapeado como METODO
440
1435
  expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
441
1436
  expect.objectContaining({ tipo: foles_1.default.METODO }),
442
1437
  ]));
443
- // O Lexador também deve encontrar números no mapeamento
1438
+ // O Lexador deve montar um objeto de comprimento 14
1439
+ expect(resultadoLexador.simbolos).toHaveLength(14);
444
1440
  expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
445
1441
  expect.objectContaining({ tipo: foles_1.default.NUMERO }),
1442
+ expect.objectContaining({ tipo: foles_1.default.QUANTIFICADOR }),
446
1443
  ]));
447
1444
  // Avaliador Sintático
448
1445
  const resultadoAvaliadorSintatico = avaliador.analisar(resultadoLexador.simbolos);
449
1446
  // O Avaliador deve montar um objeto com os devidos nomes FolEs e CSS
450
- expect(resultadoAvaliadorSintatico[0].modificadores[0].propriedadeCss).toStrictEqual(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoLinear[index]]);
451
- // // // // Tradutor
1447
+ expect(resultadoAvaliadorSintatico[0].modificadores[0].propriedadeCss).toStrictEqual(metodos_1.TraducaoValoresMetodos[metodos_1.MetodosTranslacao[index]]);
1448
+ // Tradutor
452
1449
  const resultadoTradutor = tradutor.serializar(resultadoAvaliadorSintatico);
453
- expect(resultadoTradutor).toContain(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoLinear[index]]);
454
- expect(resultadoTradutor).toContain('linear(0, 0.25, 1);');
1450
+ // O Tradutor deve serializar de acordo e traduzir translacao para translate
1451
+ expect(resultadoTradutor).toContain(metodos_1.TraducaoValoresMetodos[metodos_1.MetodosTranslacao[index]]);
1452
+ expect(resultadoTradutor).toContain(`translate(3ch, 3mm);`);
455
1453
  }
456
1454
  });
457
- it('Atribuindo Método "minmax()"', () => {
458
- for (let index = 0; index < metodos_1.MetodoMinMax.length; index += 1) {
1455
+ it('Atribuindo Método "translação-3d()"', () => {
1456
+ for (let index = 0; index < metodos_1.MetodosTranslacao.length; index += 1) {
459
1457
  // Lexador
460
1458
  const resultadoLexador = lexador.mapear([
461
1459
  "lmht {",
462
- `${metodos_1.MetodoMinMax[index]}: minmax(100px, conteúdo-máximo);`,
1460
+ `${metodos_1.MetodosTranslacao[index]}: translacao-3d(5ch, 0.4in, 5em);`,
463
1461
  "}"
464
1462
  ]);
465
- // O Lexador deve montar um objeto de comprimento 13 sem retornar nenhum erro
466
- expect(resultadoLexador.simbolos).toHaveLength(13);
1463
+ // O Lexador não deve encontrar erros
467
1464
  expect(resultadoLexador.erros).toHaveLength(0);
468
1465
  // O valor recebido deve ser mapeado como METODO
469
1466
  expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
470
1467
  expect.objectContaining({ tipo: foles_1.default.METODO }),
471
1468
  ]));
472
- // O Lexador também deve encontrar número e quantificador no mapeamento
1469
+ // O Lexador deve montar um objeto de comprimento 17
1470
+ expect(resultadoLexador.simbolos).toHaveLength(17);
473
1471
  expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
474
1472
  expect.objectContaining({ tipo: foles_1.default.NUMERO }),
475
1473
  expect.objectContaining({ tipo: foles_1.default.QUANTIFICADOR }),
@@ -477,21 +1475,32 @@ describe('Testando Seletores que recebem MÉTODOS como valor', () => {
477
1475
  // Avaliador Sintático
478
1476
  const resultadoAvaliadorSintatico = avaliador.analisar(resultadoLexador.simbolos);
479
1477
  // O Avaliador deve montar um objeto com os devidos nomes FolEs e CSS
480
- expect(resultadoAvaliadorSintatico[0].modificadores[0].propriedadeCss).toStrictEqual(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoMinMax[index]]);
481
- // // // // Tradutor
1478
+ expect(resultadoAvaliadorSintatico[0].modificadores[0].propriedadeCss).toStrictEqual(metodos_1.TraducaoValoresMetodos[metodos_1.MetodosTranslacao[index]]);
1479
+ // Tradutor
482
1480
  const resultadoTradutor = tradutor.serializar(resultadoAvaliadorSintatico);
483
- expect(resultadoTradutor).toContain(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoMinMax[index]]);
484
- expect(resultadoTradutor).toContain('minmax(100px, max-content);');
1481
+ // O Tradutor deve serializar de acordo e traduzir translação-3d para translate3d
1482
+ expect(resultadoTradutor).toContain(metodos_1.TraducaoValoresMetodos[metodos_1.MetodosTranslacao[index]]);
1483
+ expect(resultadoTradutor).toContain(`translate3d(5ch, 0.4in, 5em);`);
485
1484
  }
486
1485
  });
487
- it('Atribuindo Método "opacar()"', () => {
488
- for (let index = 0; index < metodos_1.MetodoOpacar.length; index += 1) {
489
- const valoresAceitos = ['100px', '100%', '0.1', '0', '1', '1.75'];
1486
+ it('Atribuindo Método "translação-3d() cobrindo todos os casos"', () => {
1487
+ for (let index = 0; index < metodos_1.MetodosTranslacao.length; index += 1) {
1488
+ const valoresAceitos = [
1489
+ '0',
1490
+ '0, 62px, 135px',
1491
+ '2.7rem, 0, 1rem',
1492
+ '5ch, 0.4in, 0',
1493
+ '0, 0, 135px',
1494
+ '0, 2.7rem, 0',
1495
+ '5ch, 0, 0',
1496
+ '42px, 62px, 135px',
1497
+ '0, 0, 0',
1498
+ ];
490
1499
  for (let valIndex = 0; valIndex < valoresAceitos.length; valIndex += 1) {
491
1500
  // Lexador
492
1501
  const resultadoLexador = lexador.mapear([
493
1502
  "lmht {",
494
- `${metodos_1.MetodoOpacar[index]}: opacar(${valoresAceitos[valIndex]});`,
1503
+ `${metodos_1.MetodosTranslacao[index]}: translação-3d(${valoresAceitos[valIndex]});`,
495
1504
  "}"
496
1505
  ]);
497
1506
  // O Lexador não deve encontrar erros
@@ -501,15 +1510,35 @@ describe('Testando Seletores que recebem MÉTODOS como valor', () => {
501
1510
  expect.objectContaining({ tipo: foles_1.default.METODO }),
502
1511
  ]));
503
1512
  // O Lexador deve montar um objeto de comprimento 11 caso haja quantificador e 10 caso não haja
504
- if (valIndex === 0 || valIndex === 1) {
505
- expect(resultadoLexador.simbolos).toHaveLength(11);
1513
+ if (valIndex === 0) {
1514
+ expect(resultadoLexador.simbolos).toHaveLength(10);
1515
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
1516
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
1517
+ ]));
1518
+ }
1519
+ else if (valIndex === 1 || valIndex === 2 || valIndex === 3) {
1520
+ expect(resultadoLexador.simbolos).toHaveLength(16);
1521
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
1522
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
1523
+ expect.objectContaining({ tipo: foles_1.default.QUANTIFICADOR }),
1524
+ ]));
1525
+ }
1526
+ else if (valIndex === 4 || valIndex === 5 || valIndex === 6) {
1527
+ expect(resultadoLexador.simbolos).toHaveLength(15);
1528
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
1529
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
1530
+ expect.objectContaining({ tipo: foles_1.default.QUANTIFICADOR }),
1531
+ ]));
1532
+ }
1533
+ else if (valIndex === 7) {
1534
+ expect(resultadoLexador.simbolos).toHaveLength(17);
506
1535
  expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
507
1536
  expect.objectContaining({ tipo: foles_1.default.NUMERO }),
508
1537
  expect.objectContaining({ tipo: foles_1.default.QUANTIFICADOR }),
509
1538
  ]));
510
1539
  }
511
1540
  else {
512
- expect(resultadoLexador.simbolos).toHaveLength(10);
1541
+ expect(resultadoLexador.simbolos).toHaveLength(14);
513
1542
  expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
514
1543
  expect.objectContaining({ tipo: foles_1.default.NUMERO }),
515
1544
  ]));
@@ -517,120 +1546,112 @@ describe('Testando Seletores que recebem MÉTODOS como valor', () => {
517
1546
  // Avaliador Sintático
518
1547
  const resultadoAvaliadorSintatico = avaliador.analisar(resultadoLexador.simbolos);
519
1548
  // O Avaliador deve montar um objeto com os devidos nomes FolEs e CSS
520
- expect(resultadoAvaliadorSintatico[0].modificadores[0].propriedadeCss).toStrictEqual(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoOpacar[index]]);
1549
+ expect(resultadoAvaliadorSintatico[0].modificadores[0].propriedadeCss).toStrictEqual(metodos_1.TraducaoValoresMetodos[metodos_1.MetodosTranslacao[index]]);
521
1550
  // Tradutor
522
1551
  const resultadoTradutor = tradutor.serializar(resultadoAvaliadorSintatico);
523
- // O Tradutor deve serializar de acordo e traduzir opacar para opacity
524
- expect(resultadoTradutor).toContain(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoOpacar[index]]);
525
- expect(resultadoTradutor).toContain(`opacity(${valoresAceitos[valIndex]});`);
1552
+ // O Tradutor deve serializar de acordo e traduzir translação-3d para translate3d
1553
+ expect(resultadoTradutor).toContain(metodos_1.TraducaoValoresMetodos[metodos_1.MetodosTranslacao[index]]);
1554
+ if (valIndex !== 8) {
1555
+ expect(resultadoTradutor).toContain(`translate3d(${valoresAceitos[valIndex]});`);
1556
+ }
1557
+ else {
1558
+ expect(resultadoTradutor).toContain(`translate3d(0);`);
1559
+ }
526
1560
  }
527
1561
  }
528
1562
  });
529
- it('Atribuindo Método "passos" (steps)', () => {
530
- for (let index = 0; index < metodos_1.MetodoPassos.length; index += 1) {
531
- // Lexador
532
- const resultadoLexador = lexador.mapear([
533
- "lmht {",
534
- `${metodos_1.MetodoPassos[index]}: passos(2, salto-inicial);`,
535
- "}"
536
- ]);
537
- // O Lexador deve montar um objeto de comprimento 12 sem retornar nenhum erro
538
- expect(resultadoLexador.simbolos).toHaveLength(12);
539
- expect(resultadoLexador.erros).toHaveLength(0);
540
- // O valor recebido deve ser mapeado como METODO
541
- expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
542
- expect.objectContaining({ tipo: foles_1.default.METODO }),
543
- ]));
544
- // O Lexador também deve encontrar número e qualitativo no mapeamento
545
- expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
546
- expect.objectContaining({ tipo: foles_1.default.NUMERO }),
547
- expect.objectContaining({ tipo: foles_1.default.QUALITATIVO }),
548
- ]));
549
- // Avaliador Sintático
550
- const resultadoAvaliadorSintatico = avaliador.analisar(resultadoLexador.simbolos);
551
- // O Avaliador deve montar um objeto com os devidos nomes FolEs e CSS
552
- expect(resultadoAvaliadorSintatico[0].modificadores[0].propriedadeCss).toStrictEqual(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoPassos[index]]);
553
- // // // // Tradutor
554
- const resultadoTradutor = tradutor.serializar(resultadoAvaliadorSintatico);
555
- expect(resultadoTradutor).toContain(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoPassos[index]]);
556
- expect(resultadoTradutor).toContain('steps(2, jump-start);');
557
- }
558
- });
559
- it('Atribuindo Método "projetar-sombra()" com valores de comprimento somente', () => {
560
- for (let index = 0; index < metodos_1.MetodoProjetarSombra.length; index += 1) {
561
- const comprimentos = ['15px 15px', '15px 15px 15px', '0.5rem 0.5rem', '0.5rem 0.5rem 1rem'];
562
- for (let posIndex = 0; posIndex < comprimentos.length; posIndex += 1) {
1563
+ it('Atribuindo Método "translação-eixo-z()"', () => {
1564
+ for (let index = 0; index < metodos_1.MetodosTranslacao.length; index += 1) {
1565
+ const valoresAceitos = ['42px', '3ch', '0'];
1566
+ for (let valIndex = 0; valIndex < valoresAceitos.length; valIndex += 1) {
563
1567
  // Lexador
564
1568
  const resultadoLexador = lexador.mapear([
565
1569
  "lmht {",
566
- `${metodos_1.MetodoProjetarSombra[index]}: projetar-sombra(${comprimentos[posIndex]});`,
1570
+ `${metodos_1.MetodosTranslacao[index]}: translação-eixo-z(${valoresAceitos[valIndex]});`,
567
1571
  "}"
568
1572
  ]);
569
- // O Lexador deve montar um objeto de acordo, sem retornar nenhum erro
1573
+ // O Lexador não deve encontrar erros
570
1574
  expect(resultadoLexador.erros).toHaveLength(0);
571
1575
  // O valor recebido deve ser mapeado como METODO
572
1576
  expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
573
1577
  expect.objectContaining({ tipo: foles_1.default.METODO }),
574
1578
  ]));
575
- // O Lexador também deve sempre encontrar valores e quantificadores na operação
576
- expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
577
- expect.objectContaining({ tipo: foles_1.default.NUMERO }),
578
- expect.objectContaining({ tipo: foles_1.default.QUANTIFICADOR }),
579
- ]));
1579
+ // O Lexador deve montar um objeto de comprimento 11 caso haja quantificador e 10 caso não haja
1580
+ if (valIndex === 0 || valIndex === 1) {
1581
+ expect(resultadoLexador.simbolos).toHaveLength(11);
1582
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
1583
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
1584
+ expect.objectContaining({ tipo: foles_1.default.QUANTIFICADOR }),
1585
+ ]));
1586
+ }
1587
+ else {
1588
+ expect(resultadoLexador.simbolos).toHaveLength(10);
1589
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
1590
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
1591
+ ]));
1592
+ }
580
1593
  // Avaliador Sintático
581
1594
  const resultadoAvaliadorSintatico = avaliador.analisar(resultadoLexador.simbolos);
582
1595
  // O Avaliador deve montar um objeto com os devidos nomes FolEs e CSS
583
- expect(resultadoAvaliadorSintatico[0].modificadores[0].propriedadeCss).toStrictEqual(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoProjetarSombra[index]]);
1596
+ expect(resultadoAvaliadorSintatico[0].modificadores[0].propriedadeCss).toStrictEqual(metodos_1.TraducaoValoresMetodos[metodos_1.MetodosTranslacao[index]]);
584
1597
  // Tradutor
585
1598
  const resultadoTradutor = tradutor.serializar(resultadoAvaliadorSintatico);
586
- // O Tradutor deve serializar de acordo e traduzir projetar-sombra para drop-shadow
587
- expect(resultadoTradutor).toContain(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoProjetarSombra[index]]);
588
- expect(resultadoTradutor).toContain(`drop-shadow(${comprimentos[posIndex]});`);
1599
+ // O Tradutor deve serializar de acordo e traduzir translação-eixo-z para translateZ
1600
+ expect(resultadoTradutor).toContain(metodos_1.TraducaoValoresMetodos[metodos_1.MetodosTranslacao[index]]);
1601
+ expect(resultadoTradutor).toContain(`translateZ(${valoresAceitos[valIndex]});`);
589
1602
  }
590
1603
  }
591
1604
  });
592
- it('Atribuindo Método "projetar-sombra()" com valores de cor e de comprimento', () => {
593
- for (let index = 0; index < metodos_1.MetodoProjetarSombra.length; index += 1) {
594
- const comprimentos = ['15px 15px vermelho', '15px 15px 15px vermelho', 'vermelho 0.5rem 0.5rem', 'vermelho 0.5rem 0.5rem 1rem'];
595
- for (let posIndex = 0; posIndex < comprimentos.length; posIndex += 1) {
1605
+ it('Atribuindo Método "translacao-eixo-z()"', () => {
1606
+ for (let index = 0; index < metodos_1.MetodosTranslacao.length; index += 1) {
1607
+ const valoresAceitos = ['42px', '3ch', '0'];
1608
+ for (let valIndex = 0; valIndex < valoresAceitos.length; valIndex += 1) {
596
1609
  // Lexador
597
1610
  const resultadoLexador = lexador.mapear([
598
1611
  "lmht {",
599
- `${metodos_1.MetodoProjetarSombra[index]}: projetar-sombra(${comprimentos[posIndex]});`,
1612
+ `${metodos_1.MetodosTranslacao[index]}: translacao-eixo-z(${valoresAceitos[valIndex]});`,
600
1613
  "}"
601
1614
  ]);
602
- // O Lexador deve montar um objeto de acordo, sem retornar nenhum erro
1615
+ // O Lexador não deve encontrar erros
603
1616
  expect(resultadoLexador.erros).toHaveLength(0);
604
1617
  // O valor recebido deve ser mapeado como METODO
605
1618
  expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
606
1619
  expect.objectContaining({ tipo: foles_1.default.METODO }),
607
1620
  ]));
608
- // O Lexador também deve sempre encontrar valores e quantificadores na operação
609
- expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
610
- expect.objectContaining({ tipo: foles_1.default.NUMERO }),
611
- expect.objectContaining({ tipo: foles_1.default.QUANTIFICADOR }),
612
- ]));
1621
+ // O Lexador deve montar um objeto de comprimento 11 caso haja quantificador e 10 caso não haja
1622
+ if (valIndex === 0 || valIndex === 1) {
1623
+ expect(resultadoLexador.simbolos).toHaveLength(11);
1624
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
1625
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
1626
+ expect.objectContaining({ tipo: foles_1.default.QUANTIFICADOR }),
1627
+ ]));
1628
+ }
1629
+ else {
1630
+ expect(resultadoLexador.simbolos).toHaveLength(10);
1631
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
1632
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
1633
+ ]));
1634
+ }
613
1635
  // Avaliador Sintático
614
1636
  const resultadoAvaliadorSintatico = avaliador.analisar(resultadoLexador.simbolos);
615
1637
  // O Avaliador deve montar um objeto com os devidos nomes FolEs e CSS
616
- expect(resultadoAvaliadorSintatico[0].modificadores[0].propriedadeCss).toStrictEqual(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoProjetarSombra[index]]);
1638
+ expect(resultadoAvaliadorSintatico[0].modificadores[0].propriedadeCss).toStrictEqual(metodos_1.TraducaoValoresMetodos[metodos_1.MetodosTranslacao[index]]);
617
1639
  // Tradutor
618
1640
  const resultadoTradutor = tradutor.serializar(resultadoAvaliadorSintatico);
619
- // O Tradutor deve serializar de acordo e traduzir vermelho para red
620
- expect(resultadoTradutor).toContain(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoProjetarSombra[index]]);
621
- expect(resultadoTradutor).toContain('red');
1641
+ // O Tradutor deve serializar de acordo e traduzir translacao-eixo-z para translateZ
1642
+ expect(resultadoTradutor).toContain(metodos_1.TraducaoValoresMetodos[metodos_1.MetodosTranslacao[index]]);
1643
+ expect(resultadoTradutor).toContain(`translateZ(${valoresAceitos[valIndex]});`);
622
1644
  }
623
1645
  }
624
1646
  });
625
- it('Atribuindo Método "raio()" com valores de posição e número/quantificador', () => {
626
- for (let index = 0; index < metodos_1.MetodoRaio.length; index += 1) {
627
- const valoresAceitos = ['lado-mais-próximo', 'lado-mais-proximo', 'canto-mais-próximo', 'canto-mais-proximo', 'lado-mais-distante', 'canto-mais-distante', 'lados', 'conter'];
628
- const traducaoValoresAceitos = ['closest-side', 'closest-side', 'closest-corner', 'closest-corner', 'farthest-side', 'farthest-corner', 'sides', 'contain'];
1647
+ it('Atribuindo Método "translação-horizontal()"', () => {
1648
+ for (let index = 0; index < metodos_1.MetodosTranslacao.length; index += 1) {
1649
+ const valoresAceitos = ['42px', '3ch', '0'];
629
1650
  for (let valIndex = 0; valIndex < valoresAceitos.length; valIndex += 1) {
630
1651
  // Lexador
631
1652
  const resultadoLexador = lexador.mapear([
632
1653
  "lmht {",
633
- `${metodos_1.MetodoRaio[index]}: raio(${valoresAceitos[valIndex]} 200deg);`,
1654
+ `${metodos_1.MetodosTranslacao[index]}: translação-horizontal(${valoresAceitos[valIndex]});`,
634
1655
  "}"
635
1656
  ]);
636
1657
  // O Lexador não deve encontrar erros
@@ -639,63 +1660,40 @@ describe('Testando Seletores que recebem MÉTODOS como valor', () => {
639
1660
  expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
640
1661
  expect.objectContaining({ tipo: foles_1.default.METODO }),
641
1662
  ]));
642
- // O Lexador deve montar um objeto de comprimento 12
643
- expect(resultadoLexador.simbolos).toHaveLength(12);
644
- expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
645
- expect.objectContaining({ tipo: foles_1.default.NUMERO }),
646
- expect.objectContaining({ tipo: foles_1.default.QUANTIFICADOR }),
647
- ]));
1663
+ // O Lexador deve montar um objeto de comprimento 11 caso haja quantificador e 10 caso não haja
1664
+ if (valIndex === 0 || valIndex === 1) {
1665
+ expect(resultadoLexador.simbolos).toHaveLength(11);
1666
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
1667
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
1668
+ expect.objectContaining({ tipo: foles_1.default.QUANTIFICADOR }),
1669
+ ]));
1670
+ }
1671
+ else {
1672
+ expect(resultadoLexador.simbolos).toHaveLength(10);
1673
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
1674
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
1675
+ ]));
1676
+ }
648
1677
  // Avaliador Sintático
649
1678
  const resultadoAvaliadorSintatico = avaliador.analisar(resultadoLexador.simbolos);
650
1679
  // O Avaliador deve montar um objeto com os devidos nomes FolEs e CSS
651
- expect(resultadoAvaliadorSintatico[0].modificadores[0].propriedadeCss).toStrictEqual(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoRaio[index]]);
1680
+ expect(resultadoAvaliadorSintatico[0].modificadores[0].propriedadeCss).toStrictEqual(metodos_1.TraducaoValoresMetodos[metodos_1.MetodosTranslacao[index]]);
652
1681
  // Tradutor
653
1682
  const resultadoTradutor = tradutor.serializar(resultadoAvaliadorSintatico);
654
- // O Tradutor deve serializar de acordo e traduzir raio para ray
655
- expect(resultadoTradutor).toContain(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoRaio[index]]);
656
- expect(resultadoTradutor).toContain(`ray(${traducaoValoresAceitos[valIndex]} 200deg);`);
1683
+ // O Tradutor deve serializar de acordo e traduzir translação-horizontal para translateX
1684
+ expect(resultadoTradutor).toContain(metodos_1.TraducaoValoresMetodos[metodos_1.MetodosTranslacao[index]]);
1685
+ expect(resultadoTradutor).toContain(`translateX(${valoresAceitos[valIndex]});`);
657
1686
  }
658
1687
  }
659
1688
  });
660
- it('Atribuindo Método "raio()" com somente número/quantificador', () => {
661
- for (let index = 0; index < metodos_1.MetodoRaio.length; index += 1) {
662
- // Lexador
663
- const resultadoLexador = lexador.mapear([
664
- "lmht {",
665
- `${metodos_1.MetodoRaio[index]}: raio(200deg);`,
666
- "}"
667
- ]);
668
- // O Lexador não deve encontrar erros
669
- expect(resultadoLexador.erros).toHaveLength(0);
670
- // O valor recebido deve ser mapeado como METODO
671
- expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
672
- expect.objectContaining({ tipo: foles_1.default.METODO }),
673
- ]));
674
- // O Lexador deve montar um objeto de comprimento 11
675
- expect(resultadoLexador.simbolos).toHaveLength(11);
676
- expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
677
- expect.objectContaining({ tipo: foles_1.default.NUMERO }),
678
- expect.objectContaining({ tipo: foles_1.default.QUANTIFICADOR }),
679
- ]));
680
- // Avaliador Sintático
681
- const resultadoAvaliadorSintatico = avaliador.analisar(resultadoLexador.simbolos);
682
- // O Avaliador deve montar um objeto com os devidos nomes FolEs e CSS
683
- expect(resultadoAvaliadorSintatico[0].modificadores[0].propriedadeCss).toStrictEqual(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoRaio[index]]);
684
- // Tradutor
685
- const resultadoTradutor = tradutor.serializar(resultadoAvaliadorSintatico);
686
- // O Tradutor deve serializar de acordo e traduzir raio para ray
687
- expect(resultadoTradutor).toContain(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoRaio[index]]);
688
- expect(resultadoTradutor).toContain(`ray(200deg);`);
689
- }
690
- });
691
- it('Atribuindo Método "rotacionar-matiz()"', () => {
692
- for (let index = 0; index < metodos_1.MetodoRotacionarMatiz.length; index += 1) {
693
- const valoresAceitos = ['100px', '100%', '0.1', '0', '1', '1.75'];
1689
+ it('Atribuindo Método "translacao-horizontal()"', () => {
1690
+ for (let index = 0; index < metodos_1.MetodosTranslacao.length; index += 1) {
1691
+ const valoresAceitos = ['42px', '3ch', '0'];
694
1692
  for (let valIndex = 0; valIndex < valoresAceitos.length; valIndex += 1) {
695
1693
  // Lexador
696
1694
  const resultadoLexador = lexador.mapear([
697
1695
  "lmht {",
698
- `${metodos_1.MetodoRotacionarMatiz[index]}: rotacionar-matiz(${valoresAceitos[valIndex]});`,
1696
+ `${metodos_1.MetodosTranslacao[index]}: translacao-horizontal(${valoresAceitos[valIndex]});`,
699
1697
  "}"
700
1698
  ]);
701
1699
  // O Lexador não deve encontrar erros
@@ -721,23 +1719,23 @@ describe('Testando Seletores que recebem MÉTODOS como valor', () => {
721
1719
  // Avaliador Sintático
722
1720
  const resultadoAvaliadorSintatico = avaliador.analisar(resultadoLexador.simbolos);
723
1721
  // O Avaliador deve montar um objeto com os devidos nomes FolEs e CSS
724
- expect(resultadoAvaliadorSintatico[0].modificadores[0].propriedadeCss).toStrictEqual(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoRotacionarMatiz[index]]);
1722
+ expect(resultadoAvaliadorSintatico[0].modificadores[0].propriedadeCss).toStrictEqual(metodos_1.TraducaoValoresMetodos[metodos_1.MetodosTranslacao[index]]);
725
1723
  // Tradutor
726
1724
  const resultadoTradutor = tradutor.serializar(resultadoAvaliadorSintatico);
727
- // O Tradutor deve serializar de acordo e traduzir rotacionar-matiz para hue-rotate
728
- expect(resultadoTradutor).toContain(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoRotacionarMatiz[index]]);
729
- expect(resultadoTradutor).toContain(`hue-rotate(${valoresAceitos[valIndex]});`);
1725
+ // O Tradutor deve serializar de acordo e traduzir translação-horizontal para translateX
1726
+ expect(resultadoTradutor).toContain(metodos_1.TraducaoValoresMetodos[metodos_1.MetodosTranslacao[index]]);
1727
+ expect(resultadoTradutor).toContain(`translateX(${valoresAceitos[valIndex]});`);
730
1728
  }
731
1729
  }
732
1730
  });
733
- it('Atribuindo Método "saturar()"', () => {
734
- for (let index = 0; index < metodos_1.MetodoSaturar.length; index += 1) {
735
- const valoresAceitos = ['100px', '100%', '0.1', '0', '1', '1.75'];
1731
+ it('Atribuindo Método "translação-vertical()"', () => {
1732
+ for (let index = 0; index < metodos_1.MetodosTranslacao.length; index += 1) {
1733
+ const valoresAceitos = ['42px', '3ch', '0'];
736
1734
  for (let valIndex = 0; valIndex < valoresAceitos.length; valIndex += 1) {
737
1735
  // Lexador
738
1736
  const resultadoLexador = lexador.mapear([
739
1737
  "lmht {",
740
- `${metodos_1.MetodoSaturar[index]}: saturar(${valoresAceitos[valIndex]});`,
1738
+ `${metodos_1.MetodosTranslacao[index]}: translação-vertical(${valoresAceitos[valIndex]});`,
741
1739
  "}"
742
1740
  ]);
743
1741
  // O Lexador não deve encontrar erros
@@ -763,23 +1761,23 @@ describe('Testando Seletores que recebem MÉTODOS como valor', () => {
763
1761
  // Avaliador Sintático
764
1762
  const resultadoAvaliadorSintatico = avaliador.analisar(resultadoLexador.simbolos);
765
1763
  // O Avaliador deve montar um objeto com os devidos nomes FolEs e CSS
766
- expect(resultadoAvaliadorSintatico[0].modificadores[0].propriedadeCss).toStrictEqual(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoSaturar[index]]);
1764
+ expect(resultadoAvaliadorSintatico[0].modificadores[0].propriedadeCss).toStrictEqual(metodos_1.TraducaoValoresMetodos[metodos_1.MetodosTranslacao[index]]);
767
1765
  // Tradutor
768
1766
  const resultadoTradutor = tradutor.serializar(resultadoAvaliadorSintatico);
769
- // O Tradutor deve serializar de acordo e traduzir saturar para saturate
770
- expect(resultadoTradutor).toContain(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoSaturar[index]]);
771
- expect(resultadoTradutor).toContain(`saturate(${valoresAceitos[valIndex]});`);
1767
+ // O Tradutor deve serializar de acordo e traduzir translação-vertical para translateY
1768
+ expect(resultadoTradutor).toContain(metodos_1.TraducaoValoresMetodos[metodos_1.MetodosTranslacao[index]]);
1769
+ expect(resultadoTradutor).toContain(`translateY(${valoresAceitos[valIndex]});`);
772
1770
  }
773
1771
  }
774
1772
  });
775
- it('Atribuindo Método "sepia()"', () => {
776
- for (let index = 0; index < metodos_1.MetodoSepia.length; index += 1) {
777
- const valoresAceitos = ['100px', '100%', '0.1', '0', '1', '1.75'];
1773
+ it('Atribuindo Método "translacao-vertical()"', () => {
1774
+ for (let index = 0; index < metodos_1.MetodosTranslacao.length; index += 1) {
1775
+ const valoresAceitos = ['42px', '3ch', '0'];
778
1776
  for (let valIndex = 0; valIndex < valoresAceitos.length; valIndex += 1) {
779
1777
  // Lexador
780
1778
  const resultadoLexador = lexador.mapear([
781
1779
  "lmht {",
782
- `${metodos_1.MetodoSepia[index]}: sepia(${valoresAceitos[valIndex]});`,
1780
+ `${metodos_1.MetodosTranslacao[index]}: translacao-vertical(${valoresAceitos[valIndex]});`,
783
1781
  "}"
784
1782
  ]);
785
1783
  // O Lexador não deve encontrar erros
@@ -805,12 +1803,12 @@ describe('Testando Seletores que recebem MÉTODOS como valor', () => {
805
1803
  // Avaliador Sintático
806
1804
  const resultadoAvaliadorSintatico = avaliador.analisar(resultadoLexador.simbolos);
807
1805
  // O Avaliador deve montar um objeto com os devidos nomes FolEs e CSS
808
- expect(resultadoAvaliadorSintatico[0].modificadores[0].propriedadeCss).toStrictEqual(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoSepia[index]]);
1806
+ expect(resultadoAvaliadorSintatico[0].modificadores[0].propriedadeCss).toStrictEqual(metodos_1.TraducaoValoresMetodos[metodos_1.MetodosTranslacao[index]]);
809
1807
  // Tradutor
810
1808
  const resultadoTradutor = tradutor.serializar(resultadoAvaliadorSintatico);
811
- // O Tradutor deve serializar de acordo e traduzir sépia para sepia
812
- expect(resultadoTradutor).toContain(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoSepia[index]]);
813
- expect(resultadoTradutor).toContain(`sepia(${valoresAceitos[valIndex]});`);
1809
+ // O Tradutor deve serializar de acordo e traduzir translação-vertical para translateY
1810
+ expect(resultadoTradutor).toContain(metodos_1.TraducaoValoresMetodos[metodos_1.MetodosTranslacao[index]]);
1811
+ expect(resultadoTradutor).toContain(`translateY(${valoresAceitos[valIndex]});`);
814
1812
  }
815
1813
  }
816
1814
  });