@designliquido/foles 0.6.3 → 0.7.1

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