@designliquido/foles 0.6.2 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (112) hide show
  1. package/fontes/avaliador-sintatico/avaliador-sintatico.js +535 -25
  2. package/fontes/avaliador-sintatico/avaliador-sintatico.js.map +1 -1
  3. package/fontes/lexador/palavras-reservadas/foles.d.ts +276 -238
  4. package/fontes/lexador/palavras-reservadas/foles.js +279 -238
  5. package/fontes/lexador/palavras-reservadas/foles.js.map +1 -1
  6. package/fontes/modificadores/atributos/posicoes.d.ts +3 -0
  7. package/fontes/modificadores/atributos/posicoes.js +23 -13
  8. package/fontes/modificadores/atributos/posicoes.js.map +1 -1
  9. package/fontes/modificadores/deslocamento.js +5 -3
  10. package/fontes/modificadores/deslocamento.js.map +1 -1
  11. package/fontes/modificadores/filtro-fundo.js +1 -2
  12. package/fontes/modificadores/filtro-fundo.js.map +1 -1
  13. package/fontes/modificadores/filtro.js +1 -6
  14. package/fontes/modificadores/filtro.js.map +1 -1
  15. package/fontes/modificadores/trajeto-deslocamento.js +2 -2
  16. package/fontes/modificadores/trajeto-deslocamento.js.map +1 -1
  17. package/fontes/modificadores/transformar.js +2 -1
  18. package/fontes/modificadores/transformar.js.map +1 -1
  19. package/fontes/modificadores/validacoes/quantificador.js +2 -1
  20. package/fontes/modificadores/validacoes/quantificador.js.map +1 -1
  21. package/fontes/valores/dicionario-valores.js +63 -1
  22. package/fontes/valores/dicionario-valores.js.map +1 -1
  23. package/fontes/valores/metodos/borrar.d.ts +9 -0
  24. package/fontes/valores/metodos/borrar.js +20 -0
  25. package/fontes/valores/metodos/borrar.js.map +1 -0
  26. package/fontes/valores/metodos/brilho.d.ts +9 -0
  27. package/fontes/valores/metodos/brilho.js +20 -0
  28. package/fontes/valores/metodos/brilho.js.map +1 -0
  29. package/fontes/valores/metodos/escala-cinza.d.ts +9 -0
  30. package/fontes/valores/metodos/escala-cinza.js +20 -0
  31. package/fontes/valores/metodos/escala-cinza.js.map +1 -0
  32. package/fontes/valores/metodos/escalamento-3d.d.ts +10 -0
  33. package/fontes/valores/metodos/escalamento-3d.js +18 -0
  34. package/fontes/valores/metodos/escalamento-3d.js.map +1 -0
  35. package/fontes/valores/metodos/escalamento-eixo-z.d.ts +8 -0
  36. package/fontes/valores/metodos/escalamento-eixo-z.js +16 -0
  37. package/fontes/valores/metodos/escalamento-eixo-z.js.map +1 -0
  38. package/fontes/valores/metodos/escalamento-horizontal.d.ts +8 -0
  39. package/fontes/valores/metodos/escalamento-horizontal.js +16 -0
  40. package/fontes/valores/metodos/escalamento-horizontal.js.map +1 -0
  41. package/fontes/valores/metodos/escalamento-vertical.d.ts +8 -0
  42. package/fontes/valores/metodos/escalamento-vertical.js +16 -0
  43. package/fontes/valores/metodos/escalamento-vertical.js.map +1 -0
  44. package/fontes/valores/metodos/escalamento.d.ts +9 -0
  45. package/fontes/valores/metodos/escalamento.js +20 -0
  46. package/fontes/valores/metodos/escalamento.js.map +1 -0
  47. package/fontes/valores/metodos/inclinar-horizontal.d.ts +9 -0
  48. package/fontes/valores/metodos/inclinar-horizontal.js +20 -0
  49. package/fontes/valores/metodos/inclinar-horizontal.js.map +1 -0
  50. package/fontes/valores/metodos/inclinar-vertical.d.ts +9 -0
  51. package/fontes/valores/metodos/inclinar-vertical.js +20 -0
  52. package/fontes/valores/metodos/inclinar-vertical.js.map +1 -0
  53. package/fontes/valores/metodos/inclinar.d.ts +11 -0
  54. package/fontes/valores/metodos/inclinar.js +25 -0
  55. package/fontes/valores/metodos/inclinar.js.map +1 -0
  56. package/fontes/valores/metodos/inverter.d.ts +9 -0
  57. package/fontes/valores/metodos/inverter.js +20 -0
  58. package/fontes/valores/metodos/inverter.js.map +1 -0
  59. package/fontes/valores/metodos/opacar.d.ts +9 -0
  60. package/fontes/valores/metodos/opacar.js +20 -0
  61. package/fontes/valores/metodos/opacar.js.map +1 -0
  62. package/fontes/valores/metodos/perspectivar.d.ts +9 -0
  63. package/fontes/valores/metodos/perspectivar.js +20 -0
  64. package/fontes/valores/metodos/perspectivar.js.map +1 -0
  65. package/fontes/valores/metodos/projetar-sombra.d.ts +14 -0
  66. package/fontes/valores/metodos/projetar-sombra.js +43 -0
  67. package/fontes/valores/metodos/projetar-sombra.js.map +1 -0
  68. package/fontes/valores/metodos/raio.d.ts +10 -0
  69. package/fontes/valores/metodos/raio.js +23 -0
  70. package/fontes/valores/metodos/raio.js.map +1 -0
  71. package/fontes/valores/metodos/rotacionar-eixo-z.d.ts +9 -0
  72. package/fontes/valores/metodos/rotacionar-eixo-z.js +20 -0
  73. package/fontes/valores/metodos/rotacionar-eixo-z.js.map +1 -0
  74. package/fontes/valores/metodos/rotacionar-horizontal.d.ts +9 -0
  75. package/fontes/valores/metodos/rotacionar-horizontal.js +20 -0
  76. package/fontes/valores/metodos/rotacionar-horizontal.js.map +1 -0
  77. package/fontes/valores/metodos/rotacionar-matiz.d.ts +9 -0
  78. package/fontes/valores/metodos/rotacionar-matiz.js +20 -0
  79. package/fontes/valores/metodos/rotacionar-matiz.js.map +1 -0
  80. package/fontes/valores/metodos/rotacionar-vertical.d.ts +9 -0
  81. package/fontes/valores/metodos/rotacionar-vertical.js +20 -0
  82. package/fontes/valores/metodos/rotacionar-vertical.js.map +1 -0
  83. package/fontes/valores/metodos/rotacionar.d.ts +9 -0
  84. package/fontes/valores/metodos/rotacionar.js +20 -0
  85. package/fontes/valores/metodos/rotacionar.js.map +1 -0
  86. package/fontes/valores/metodos/saturar.d.ts +9 -0
  87. package/fontes/valores/metodos/saturar.js +20 -0
  88. package/fontes/valores/metodos/saturar.js.map +1 -0
  89. package/fontes/valores/metodos/sepia.d.ts +9 -0
  90. package/fontes/valores/metodos/sepia.js +20 -0
  91. package/fontes/valores/metodos/sepia.js.map +1 -0
  92. package/fontes/valores/metodos/translacao-3d.d.ts +13 -0
  93. package/fontes/valores/metodos/translacao-3d.js +42 -0
  94. package/fontes/valores/metodos/translacao-3d.js.map +1 -0
  95. package/fontes/valores/metodos/translacao-eixo-z.d.ts +9 -0
  96. package/fontes/valores/metodos/translacao-eixo-z.js +20 -0
  97. package/fontes/valores/metodos/translacao-eixo-z.js.map +1 -0
  98. package/fontes/valores/metodos/translacao-horizontal.d.ts +9 -0
  99. package/fontes/valores/metodos/translacao-horizontal.js +20 -0
  100. package/fontes/valores/metodos/translacao-horizontal.js.map +1 -0
  101. package/fontes/valores/metodos/translacao-vertical.d.ts +9 -0
  102. package/fontes/valores/metodos/translacao-vertical.js +20 -0
  103. package/fontes/valores/metodos/translacao-vertical.js.map +1 -0
  104. package/fontes/valores/metodos/translacao.d.ts +11 -0
  105. package/fontes/valores/metodos/translacao.js +25 -0
  106. package/fontes/valores/metodos/translacao.js.map +1 -0
  107. package/package.json +3 -2
  108. package/testes/listas/metodos.d.ts +15 -0
  109. package/testes/listas/metodos.js +65 -15
  110. package/testes/listas/metodos.js.map +1 -1
  111. package/testes/modificadores/metodos.test.js +1581 -115
  112. package/testes/modificadores/metodos.test.js.map +1 -1
@@ -21,75 +21,200 @@ describe('Testando Seletores que recebem MÉTODOS como valor', () => {
21
21
  avaliador = new avaliador_sintatico_1.AvaliadorSintatico(importador);
22
22
  tradutor = new serializadores_1.Serializador();
23
23
  });
24
- it('Atribuindo Método "encaixar-conteúdo" (fit-content)', () => {
25
- for (let index = 0; index < metodos_1.MetodoEncaixarConteudo.length; index += 1) {
24
+ it('Atribuindo Método "borrar()"', () => {
25
+ for (let index = 0; index < metodos_1.MetodoBorrar.length; index += 1) {
26
+ const valoresAceitos = ['100px', '100%', '0.1', '0', '1', '1.75'];
27
+ for (let valIndex = 0; valIndex < valoresAceitos.length; valIndex += 1) {
28
+ // Lexador
29
+ const resultadoLexador = lexador.mapear([
30
+ "lmht {",
31
+ `${metodos_1.MetodoBorrar[index]}: borrar(${valoresAceitos[valIndex]});`,
32
+ "}"
33
+ ]);
34
+ // O Lexador não deve encontrar erros
35
+ expect(resultadoLexador.erros).toHaveLength(0);
36
+ // O valor recebido deve ser mapeado como METODO
37
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
38
+ expect.objectContaining({ tipo: foles_1.default.METODO }),
39
+ ]));
40
+ // O Lexador deve montar um objeto de comprimento 11 caso haja quantificador e 10 caso não haja
41
+ if (valIndex === 0 || valIndex === 1) {
42
+ expect(resultadoLexador.simbolos).toHaveLength(11);
43
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
44
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
45
+ expect.objectContaining({ tipo: foles_1.default.QUANTIFICADOR }),
46
+ ]));
47
+ }
48
+ else {
49
+ expect(resultadoLexador.simbolos).toHaveLength(10);
50
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
51
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
52
+ ]));
53
+ }
54
+ // Avaliador Sintático
55
+ const resultadoAvaliadorSintatico = avaliador.analisar(resultadoLexador.simbolos);
56
+ // O Avaliador deve montar um objeto com os devidos nomes FolEs e CSS
57
+ expect(resultadoAvaliadorSintatico[0].modificadores[0].propriedadeCss).toStrictEqual(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoBorrar[index]]);
58
+ // Tradutor
59
+ const resultadoTradutor = tradutor.serializar(resultadoAvaliadorSintatico);
60
+ // O Tradutor deve serializar de acordo e traduzir borrar para blur
61
+ expect(resultadoTradutor).toContain(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoBorrar[index]]);
62
+ expect(resultadoTradutor).toContain(`blur(${valoresAceitos[valIndex]});`);
63
+ }
64
+ }
65
+ });
66
+ it('Atribuindo Método "brilho()"', () => {
67
+ for (let index = 0; index < metodos_1.MetodoBrilho.length; index += 1) {
68
+ const valoresAceitos = ['100px', '100%', '0.1', '0', '1', '1.75'];
69
+ for (let valIndex = 0; valIndex < valoresAceitos.length; valIndex += 1) {
70
+ // Lexador
71
+ const resultadoLexador = lexador.mapear([
72
+ "lmht {",
73
+ `${metodos_1.MetodoBrilho[index]}: brilho(${valoresAceitos[valIndex]});`,
74
+ "}"
75
+ ]);
76
+ // O Lexador não deve encontrar erros
77
+ expect(resultadoLexador.erros).toHaveLength(0);
78
+ // O valor recebido deve ser mapeado como METODO
79
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
80
+ expect.objectContaining({ tipo: foles_1.default.METODO }),
81
+ ]));
82
+ // O Lexador deve montar um objeto de comprimento 11 caso haja quantificador e 10 caso não haja
83
+ if (valIndex === 0 || valIndex === 1) {
84
+ expect(resultadoLexador.simbolos).toHaveLength(11);
85
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
86
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
87
+ expect.objectContaining({ tipo: foles_1.default.QUANTIFICADOR }),
88
+ ]));
89
+ }
90
+ else {
91
+ expect(resultadoLexador.simbolos).toHaveLength(10);
92
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
93
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
94
+ ]));
95
+ }
96
+ // Avaliador Sintático
97
+ const resultadoAvaliadorSintatico = avaliador.analisar(resultadoLexador.simbolos);
98
+ // O Avaliador deve montar um objeto com os devidos nomes FolEs e CSS
99
+ expect(resultadoAvaliadorSintatico[0].modificadores[0].propriedadeCss).toStrictEqual(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoBrilho[index]]);
100
+ // Tradutor
101
+ const resultadoTradutor = tradutor.serializar(resultadoAvaliadorSintatico);
102
+ // O Tradutor deve serializar de acordo e traduzir brilho para brightness
103
+ expect(resultadoTradutor).toContain(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoBrilho[index]]);
104
+ expect(resultadoTradutor).toContain(`brightness(${valoresAceitos[valIndex]});`);
105
+ }
106
+ }
107
+ });
108
+ it('Atribuindo Método "calcular()"', () => {
109
+ for (let index = 0; index < metodos_1.MetodoCalcular.length; index += 1) {
26
110
  // Lexador
27
111
  const resultadoLexador = lexador.mapear([
28
112
  "lmht {",
29
- `${metodos_1.MetodoEncaixarConteudo[index]}: encaixar-conteúdo(200px);`,
113
+ `${metodos_1.MetodoCalcular[index]}: calcular(100px - 80px);`,
30
114
  "}"
31
115
  ]);
32
- // O Lexador deve montar um objeto de comprimento 11 sem retornar nenhum erro
33
- expect(resultadoLexador.simbolos).toHaveLength(11);
116
+ // O Lexador deve montar um objeto de comprimento 14 sem retornar nenhum erro
117
+ expect(resultadoLexador.simbolos).toHaveLength(14);
34
118
  expect(resultadoLexador.erros).toHaveLength(0);
35
119
  // O valor recebido deve ser mapeado como METODO
36
120
  expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
37
121
  expect.objectContaining({ tipo: foles_1.default.METODO }),
38
122
  ]));
39
- // O Lexador também deve encontrar número e quantificador no mapeamento
123
+ // O Lexador também deve encontrar números e quantificadores no mapeamento
40
124
  expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
41
125
  expect.objectContaining({ tipo: foles_1.default.NUMERO }),
42
126
  expect.objectContaining({ tipo: foles_1.default.QUANTIFICADOR }),
43
127
  ]));
44
128
  // Avaliador Sintático
45
129
  const resultadoAvaliadorSintatico = avaliador.analisar(resultadoLexador.simbolos);
46
- expect(resultadoAvaliadorSintatico[0].modificadores[0].propriedadeCss).toStrictEqual(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoEncaixarConteudo[index]]);
47
- // // // Tradutor
130
+ // O Avaliador deve montar um objeto com os devidos nomes FolEs e CSS
131
+ expect(resultadoAvaliadorSintatico[0].modificadores[0].propriedadeCss).toStrictEqual(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoCalcular[index]]);
132
+ // Tradutor
48
133
  const resultadoTradutor = tradutor.serializar(resultadoAvaliadorSintatico);
49
- expect(resultadoTradutor).toContain(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoEncaixarConteudo[index]]);
50
- expect(resultadoTradutor).toContain('fit-content(200px)');
134
+ expect(resultadoTradutor).toContain(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoCalcular[index]]);
135
+ expect(resultadoTradutor).toContain('calc(100px - 80px);');
51
136
  }
52
137
  });
53
- it('Atribuindo Método "limitar" (clamp)', () => {
54
- for (let index = 0; index < metodos_1.MetodoLimitar.length; index += 1) {
138
+ it('Atribuindo Método "contraste()"', () => {
139
+ for (let index = 0; index < metodos_1.MetodoContraste.length; index += 1) {
140
+ const valoresAceitos = ['100px', '100%', '0.1', '0', '1', '1.75'];
141
+ for (let valIndex = 0; valIndex < valoresAceitos.length; valIndex += 1) {
142
+ // Lexador
143
+ const resultadoLexador = lexador.mapear([
144
+ "lmht {",
145
+ `${metodos_1.MetodoContraste[index]}: contraste(${valoresAceitos[valIndex]});`,
146
+ "}"
147
+ ]);
148
+ // O Lexador deve montar um objeto de comprimento 11 caso haja quantificador e 10 caso não haja
149
+ if (valIndex === 0 || valIndex === 1) {
150
+ expect(resultadoLexador.simbolos).toHaveLength(11);
151
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
152
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
153
+ expect.objectContaining({ tipo: foles_1.default.QUANTIFICADOR }),
154
+ ]));
155
+ }
156
+ else {
157
+ expect(resultadoLexador.simbolos).toHaveLength(10);
158
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
159
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
160
+ ]));
161
+ }
162
+ // O Lexador não deve encontrar erros
163
+ expect(resultadoLexador.erros).toHaveLength(0);
164
+ // O valor recebido deve ser mapeado como METODO
165
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
166
+ expect.objectContaining({ tipo: foles_1.default.METODO }),
167
+ ]));
168
+ // Avaliador Sintático
169
+ const resultadoAvaliadorSintatico = avaliador.analisar(resultadoLexador.simbolos);
170
+ // O Avaliador deve montar um objeto com os devidos nomes FolEs e CSS
171
+ expect(resultadoAvaliadorSintatico[0].modificadores[0].propriedadeCss).toStrictEqual(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoContraste[index]]);
172
+ // Tradutor
173
+ const resultadoTradutor = tradutor.serializar(resultadoAvaliadorSintatico);
174
+ expect(resultadoTradutor).toContain(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoContraste[index]]);
175
+ expect(resultadoTradutor).toContain(`contrast(${valoresAceitos[valIndex]});`);
176
+ }
177
+ }
178
+ });
179
+ it('Atribuindo Método "curva-cúbica" (cubic-bezier)', () => {
180
+ for (let index = 0; index < metodos_1.MetodoCurvaCubica.length; index += 1) {
55
181
  // Lexador
56
182
  const resultadoLexador = lexador.mapear([
57
183
  "lmht {",
58
- `${metodos_1.MetodoLimitar[index]}: limitar(10vw, 20em, 100vw);`,
184
+ `${metodos_1.MetodoCurvaCubica[index]}: curva-cúbica(0.42, 0.0, 1.0, 1.0);`,
59
185
  "}"
60
186
  ]);
61
- // O Lexador deve montar um objeto de comprimento 17 sem retornar nenhum erro
62
- expect(resultadoLexador.simbolos).toHaveLength(17);
187
+ // O Lexador deve montar um objeto de comprimento 16 sem retornar nenhum erro
188
+ expect(resultadoLexador.simbolos).toHaveLength(16);
63
189
  expect(resultadoLexador.erros).toHaveLength(0);
64
190
  // O valor recebido deve ser mapeado como METODO
65
191
  expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
66
192
  expect.objectContaining({ tipo: foles_1.default.METODO }),
67
193
  ]));
68
- // O Lexador também deve encontrar números e quantificadores no mapeamento
194
+ // O Lexador também deve encontrar números no mapeamento
69
195
  expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
70
196
  expect.objectContaining({ tipo: foles_1.default.NUMERO }),
71
- expect.objectContaining({ tipo: foles_1.default.QUANTIFICADOR }),
72
197
  ]));
73
198
  // Avaliador Sintático
74
199
  const resultadoAvaliadorSintatico = avaliador.analisar(resultadoLexador.simbolos);
75
200
  // O Avaliador deve montar um objeto com os devidos nomes FolEs e CSS
76
- expect(resultadoAvaliadorSintatico[0].modificadores[0].propriedadeCss).toStrictEqual(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoLimitar[index]]);
77
- // Tradutor
201
+ expect(resultadoAvaliadorSintatico[0].modificadores[0].propriedadeCss).toStrictEqual(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoCurvaCubica[index]]);
202
+ // // // // Tradutor
78
203
  const resultadoTradutor = tradutor.serializar(resultadoAvaliadorSintatico);
79
- expect(resultadoTradutor).toContain(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoLimitar[index]]);
80
- expect(resultadoTradutor).toContain('clamp(10vw, 20em, 100vw);');
204
+ expect(resultadoTradutor).toContain(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoCurvaCubica[index]]);
205
+ expect(resultadoTradutor).toContain('cubic-bezier(0.42, 0, 1, 1);');
81
206
  }
82
207
  });
83
- it('Atribuindo Método "minmax()"', () => {
84
- for (let index = 0; index < metodos_1.MetodoMinMax.length; index += 1) {
208
+ it('Atribuindo Método "encaixar-conteúdo" (fit-content)', () => {
209
+ for (let index = 0; index < metodos_1.MetodoEncaixarConteudo.length; index += 1) {
85
210
  // Lexador
86
211
  const resultadoLexador = lexador.mapear([
87
212
  "lmht {",
88
- `${metodos_1.MetodoMinMax[index]}: minmax(100px, conteúdo-máximo);`,
213
+ `${metodos_1.MetodoEncaixarConteudo[index]}: encaixar-conteúdo(200px);`,
89
214
  "}"
90
215
  ]);
91
- // O Lexador deve montar um objeto de comprimento 13 sem retornar nenhum erro
92
- expect(resultadoLexador.simbolos).toHaveLength(13);
216
+ // O Lexador deve montar um objeto de comprimento 11 sem retornar nenhum erro
217
+ expect(resultadoLexador.simbolos).toHaveLength(11);
93
218
  expect(resultadoLexador.erros).toHaveLength(0);
94
219
  // O valor recebido deve ser mapeado como METODO
95
220
  expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
@@ -102,118 +227,1216 @@ describe('Testando Seletores que recebem MÉTODOS como valor', () => {
102
227
  ]));
103
228
  // Avaliador Sintático
104
229
  const resultadoAvaliadorSintatico = avaliador.analisar(resultadoLexador.simbolos);
105
- // O Avaliador deve montar um objeto com os devidos nomes FolEs e CSS
106
- expect(resultadoAvaliadorSintatico[0].modificadores[0].propriedadeCss).toStrictEqual(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoMinMax[index]]);
107
- // // // // Tradutor
230
+ expect(resultadoAvaliadorSintatico[0].modificadores[0].propriedadeCss).toStrictEqual(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoEncaixarConteudo[index]]);
231
+ // // // Tradutor
108
232
  const resultadoTradutor = tradutor.serializar(resultadoAvaliadorSintatico);
109
- expect(resultadoTradutor).toContain(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoMinMax[index]]);
110
- expect(resultadoTradutor).toContain('minmax(100px, max-content);');
233
+ expect(resultadoTradutor).toContain(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoEncaixarConteudo[index]]);
234
+ expect(resultadoTradutor).toContain('fit-content(200px)');
111
235
  }
112
236
  });
113
- it('Atribuindo Método "passos" (steps)', () => {
114
- for (let index = 0; index < metodos_1.MetodoPassos.length; index += 1) {
237
+ it('Atribuindo Método "escala-cinza()"', () => {
238
+ for (let index = 0; index < metodos_1.MetodoEscalaCinza.length; index += 1) {
239
+ const valoresAceitos = ['100px', '100%', '0.1', '0', '1', '1.75'];
240
+ for (let valIndex = 0; valIndex < valoresAceitos.length; valIndex += 1) {
241
+ // Lexador
242
+ const resultadoLexador = lexador.mapear([
243
+ "lmht {",
244
+ `${metodos_1.MetodoEscalaCinza[index]}: escala-cinza(${valoresAceitos[valIndex]});`,
245
+ "}"
246
+ ]);
247
+ // O Lexador não deve encontrar erros
248
+ expect(resultadoLexador.erros).toHaveLength(0);
249
+ // O valor recebido deve ser mapeado como METODO
250
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
251
+ expect.objectContaining({ tipo: foles_1.default.METODO }),
252
+ ]));
253
+ // O Lexador deve montar um objeto de comprimento 11 caso haja quantificador e 10 caso não haja
254
+ if (valIndex === 0 || valIndex === 1) {
255
+ expect(resultadoLexador.simbolos).toHaveLength(11);
256
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
257
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
258
+ expect.objectContaining({ tipo: foles_1.default.QUANTIFICADOR }),
259
+ ]));
260
+ }
261
+ else {
262
+ expect(resultadoLexador.simbolos).toHaveLength(10);
263
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
264
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
265
+ ]));
266
+ }
267
+ // Avaliador Sintático
268
+ const resultadoAvaliadorSintatico = avaliador.analisar(resultadoLexador.simbolos);
269
+ // O Avaliador deve montar um objeto com os devidos nomes FolEs e CSS
270
+ expect(resultadoAvaliadorSintatico[0].modificadores[0].propriedadeCss).toStrictEqual(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoEscalaCinza[index]]);
271
+ // Tradutor
272
+ const resultadoTradutor = tradutor.serializar(resultadoAvaliadorSintatico);
273
+ // O Tradutor deve serializar de acordo e traduzir escala-cinza para grayscale
274
+ expect(resultadoTradutor).toContain(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoEscalaCinza[index]]);
275
+ expect(resultadoTradutor).toContain(`grayscale(${valoresAceitos[valIndex]});`);
276
+ }
277
+ }
278
+ });
279
+ it('Atribuindo Método "escalamento()"', () => {
280
+ for (let index = 0; index < metodos_1.MetodosEscalamento.length; index += 1) {
281
+ const valoresAceitos = ['0.1', '0', '1', '1.75'];
282
+ for (let valIndex = 0; valIndex < valoresAceitos.length; valIndex += 1) {
283
+ // Lexador
284
+ const resultadoLexador = lexador.mapear([
285
+ "lmht {",
286
+ `${metodos_1.MetodosEscalamento[index]}: escalamento(${valoresAceitos[valIndex]});`,
287
+ "}"
288
+ ]);
289
+ // O Lexador não deve encontrar erros
290
+ expect(resultadoLexador.erros).toHaveLength(0);
291
+ // O valor recebido deve ser mapeado como METODO
292
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
293
+ expect.objectContaining({ tipo: foles_1.default.METODO }),
294
+ ]));
295
+ // O Lexador deve montar um objeto de comprimento 10
296
+ expect(resultadoLexador.simbolos).toHaveLength(10);
297
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
298
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
299
+ ]));
300
+ // Avaliador Sintático
301
+ const resultadoAvaliadorSintatico = avaliador.analisar(resultadoLexador.simbolos);
302
+ // O Avaliador deve montar um objeto com os devidos nomes FolEs e CSS
303
+ expect(resultadoAvaliadorSintatico[0].modificadores[0].propriedadeCss).toStrictEqual(metodos_1.TraducaoValoresMetodos[metodos_1.MetodosEscalamento[index]]);
304
+ // Tradutor
305
+ const resultadoTradutor = tradutor.serializar(resultadoAvaliadorSintatico);
306
+ // O Tradutor deve serializar de acordo e traduzir escalamento para scale
307
+ expect(resultadoTradutor).toContain(metodos_1.TraducaoValoresMetodos[metodos_1.MetodosEscalamento[index]]);
308
+ expect(resultadoTradutor).toContain(`scale(${valoresAceitos[valIndex]});`);
309
+ }
310
+ }
311
+ });
312
+ it('Atribuindo Método "escalamento()" com múltiplos valores', () => {
313
+ for (let index = 0; index < metodos_1.MetodosEscalamento.length; index += 1) {
115
314
  // Lexador
116
315
  const resultadoLexador = lexador.mapear([
117
316
  "lmht {",
118
- `${metodos_1.MetodoPassos[index]}: passos(2, salto-inicial);`,
317
+ `${metodos_1.MetodosEscalamento[index]}: escalamento(1.3, 0.4);`,
119
318
  "}"
120
319
  ]);
121
- // O Lexador deve montar um objeto de comprimento 12 sem retornar nenhum erro
122
- expect(resultadoLexador.simbolos).toHaveLength(12);
320
+ // O Lexador não deve encontrar erros
123
321
  expect(resultadoLexador.erros).toHaveLength(0);
124
322
  // O valor recebido deve ser mapeado como METODO
125
323
  expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
126
324
  expect.objectContaining({ tipo: foles_1.default.METODO }),
127
325
  ]));
128
- // O Lexador também deve encontrar número e qualitativo no mapeamento
326
+ // O Lexador deve montar um objeto de comprimento 12
327
+ expect(resultadoLexador.simbolos).toHaveLength(12);
129
328
  expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
130
329
  expect.objectContaining({ tipo: foles_1.default.NUMERO }),
131
- expect.objectContaining({ tipo: foles_1.default.QUALITATIVO }),
132
330
  ]));
133
331
  // Avaliador Sintático
134
332
  const resultadoAvaliadorSintatico = avaliador.analisar(resultadoLexador.simbolos);
135
333
  // O Avaliador deve montar um objeto com os devidos nomes FolEs e CSS
136
- expect(resultadoAvaliadorSintatico[0].modificadores[0].propriedadeCss).toStrictEqual(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoPassos[index]]);
137
- // // // // Tradutor
334
+ expect(resultadoAvaliadorSintatico[0].modificadores[0].propriedadeCss).toStrictEqual(metodos_1.TraducaoValoresMetodos[metodos_1.MetodosEscalamento[index]]);
335
+ // Tradutor
138
336
  const resultadoTradutor = tradutor.serializar(resultadoAvaliadorSintatico);
139
- expect(resultadoTradutor).toContain(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoPassos[index]]);
140
- expect(resultadoTradutor).toContain('steps(2, jump-start);');
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);`);
141
340
  }
142
341
  });
143
- it('Atribuindo Método "curva-cúbica" (cubic-bezier)', () => {
144
- for (let index = 0; index < metodos_1.MetodoCurvaCubica.length; index += 1) {
342
+ it('Atribuindo Método "escalamento-3d()"', () => {
343
+ for (let index = 0; index < metodos_1.MetodosEscalamento.length; index += 1) {
145
344
  // Lexador
146
345
  const resultadoLexador = lexador.mapear([
147
346
  "lmht {",
148
- `${metodos_1.MetodoCurvaCubica[index]}: curva-cúbica(0.42, 0.0, 1.0, 1.0);`,
347
+ `${metodos_1.MetodosEscalamento[index]}: escalamento-3d(0.5, 1, 1.7);`,
149
348
  "}"
150
349
  ]);
151
- // O Lexador deve montar um objeto de comprimento 16 sem retornar nenhum erro
152
- expect(resultadoLexador.simbolos).toHaveLength(16);
350
+ // O Lexador não deve encontrar erros
153
351
  expect(resultadoLexador.erros).toHaveLength(0);
154
352
  // O valor recebido deve ser mapeado como METODO
155
353
  expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
156
354
  expect.objectContaining({ tipo: foles_1.default.METODO }),
157
355
  ]));
158
- // O Lexador também deve encontrar números no mapeamento
356
+ // O Lexador deve montar um objeto de comprimento 14
357
+ expect(resultadoLexador.simbolos).toHaveLength(14);
159
358
  expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
160
359
  expect.objectContaining({ tipo: foles_1.default.NUMERO }),
161
360
  ]));
162
361
  // Avaliador Sintático
163
362
  const resultadoAvaliadorSintatico = avaliador.analisar(resultadoLexador.simbolos);
164
363
  // O Avaliador deve montar um objeto com os devidos nomes FolEs e CSS
165
- expect(resultadoAvaliadorSintatico[0].modificadores[0].propriedadeCss).toStrictEqual(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoCurvaCubica[index]]);
166
- // // // // Tradutor
364
+ expect(resultadoAvaliadorSintatico[0].modificadores[0].propriedadeCss).toStrictEqual(metodos_1.TraducaoValoresMetodos[metodos_1.MetodosEscalamento[index]]);
365
+ // Tradutor
167
366
  const resultadoTradutor = tradutor.serializar(resultadoAvaliadorSintatico);
168
- expect(resultadoTradutor).toContain(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoCurvaCubica[index]]);
169
- expect(resultadoTradutor).toContain('cubic-bezier(0.42, 0, 1, 1);');
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);`);
170
370
  }
171
371
  });
172
- it('Atribuindo Método "linear()"', () => {
173
- for (let index = 0; index < metodos_1.MetodoLinear.length; index += 1) {
174
- // Lexador
175
- const resultadoLexador = lexador.mapear([
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', () => {
472
+ for (let index = 0; index < metodos_1.MetodoGradienteLinear.length; index += 1) {
473
+ // Lexador
474
+ const resultadoLexador = lexador.mapear([
176
475
  "lmht {",
177
- `${metodos_1.MetodoLinear[index]}: linear(0, 0.25, 1);`,
476
+ `${metodos_1.MetodoGradienteLinear[index]}: gradiente-linear(90deg, verde, amarelo);`,
178
477
  "}"
179
478
  ]);
180
- // O Lexador deve montar um objeto de comprimento 14 sem retornar nenhum erro
181
- expect(resultadoLexador.simbolos).toHaveLength(14);
479
+ // O Lexador deve montar um objeto de comprimento 15 sem retornar nenhum erro
480
+ expect(resultadoLexador.simbolos).toHaveLength(15);
182
481
  expect(resultadoLexador.erros).toHaveLength(0);
183
482
  // O valor recebido deve ser mapeado como METODO
184
483
  expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
185
484
  expect.objectContaining({ tipo: foles_1.default.METODO }),
186
485
  ]));
187
- // O Lexador também deve encontrar números no mapeamento
486
+ // O Lexador também deve encontrar número e quantificador no mapeamento
188
487
  expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
189
488
  expect.objectContaining({ tipo: foles_1.default.NUMERO }),
489
+ expect.objectContaining({ tipo: foles_1.default.QUANTIFICADOR }),
190
490
  ]));
191
491
  // Avaliador Sintático
192
492
  const resultadoAvaliadorSintatico = avaliador.analisar(resultadoLexador.simbolos);
193
493
  // O Avaliador deve montar um objeto com os devidos nomes FolEs e CSS
194
- expect(resultadoAvaliadorSintatico[0].modificadores[0].propriedadeCss).toStrictEqual(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoLinear[index]]);
195
- // // // // Tradutor
494
+ expect(resultadoAvaliadorSintatico[0].modificadores[0].propriedadeCss).toStrictEqual(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoGradienteLinear[index]]);
495
+ // Tradutor
196
496
  const resultadoTradutor = tradutor.serializar(resultadoAvaliadorSintatico);
197
- expect(resultadoTradutor).toContain(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoLinear[index]]);
198
- expect(resultadoTradutor).toContain('linear(0, 0.25, 1);');
497
+ expect(resultadoTradutor).toContain(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoGradienteLinear[index]]);
498
+ expect(resultadoTradutor).toContain('linear-gradient(90deg, green, yellow);');
499
+ }
500
+ });
501
+ it('Atribuindo Método "gradiente-linear()" com valor de posição', () => {
502
+ for (let index = 0; index < metodos_1.MetodoGradienteLinear.length; index += 1) {
503
+ const posicoes = ['superior', 'inferior', 'direita', 'esquerda'];
504
+ for (let posIndex = 0; posIndex < posicoes.length; posIndex += 1) {
505
+ // Lexador
506
+ const resultadoLexador = lexador.mapear([
507
+ "lmht {",
508
+ `${metodos_1.MetodoGradienteLinear[index]}: gradiente-linear(${posicoes[posIndex]}, azul, vermelho);`,
509
+ "}"
510
+ ]);
511
+ // O Lexador deve montar um objeto de comprimento 14 sem retornar nenhum erro
512
+ expect(resultadoLexador.simbolos).toHaveLength(14);
513
+ expect(resultadoLexador.erros).toHaveLength(0);
514
+ // O valor recebido deve ser mapeado como METODO
515
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
516
+ expect.objectContaining({ tipo: foles_1.default.METODO }),
517
+ ]));
518
+ // O Lexador também deve encontrar um qualitativo no mapeamento, referente à posição
519
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
520
+ expect.objectContaining({ tipo: foles_1.default.QUALITATIVO }),
521
+ ]));
522
+ // Avaliador Sintático
523
+ const resultadoAvaliadorSintatico = avaliador.analisar(resultadoLexador.simbolos);
524
+ // O Avaliador deve montar um objeto com os devidos nomes FolEs e CSS
525
+ expect(resultadoAvaliadorSintatico[0].modificadores[0].propriedadeCss).toStrictEqual(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoGradienteLinear[index]]);
526
+ // Tradutor
527
+ const resultadoTradutor = tradutor.serializar(resultadoAvaliadorSintatico);
528
+ expect(resultadoTradutor).toContain(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoGradienteLinear[index]]);
529
+ switch (posicoes[posIndex]) {
530
+ case 'superior':
531
+ expect(resultadoTradutor).toContain('linear-gradient(0deg, blue, red);');
532
+ break;
533
+ case 'direita':
534
+ expect(resultadoTradutor).toContain('linear-gradient(90deg, blue, red);');
535
+ break;
536
+ case 'inferior':
537
+ expect(resultadoTradutor).toContain('linear-gradient(180deg, blue, red);');
538
+ break;
539
+ case 'esquerda':
540
+ expect(resultadoTradutor).toContain('linear-gradient(270deg, blue, red);');
541
+ break;
542
+ default:
543
+ break;
544
+ }
545
+ }
546
+ }
547
+ });
548
+ it('Atribuindo Método "inclinar()"', () => {
549
+ for (let index = 0; index < metodos_1.MetodosInclinar.length; index += 1) {
550
+ const valoresAceitos = ['18deg', '3.142rad', '0', '1'];
551
+ for (let valIndex = 0; valIndex < valoresAceitos.length; valIndex += 1) {
552
+ // Lexador
553
+ const resultadoLexador = lexador.mapear([
554
+ "lmht {",
555
+ `${metodos_1.MetodosInclinar[index]}: inclinar(${valoresAceitos[valIndex]});`,
556
+ "}"
557
+ ]);
558
+ // O Lexador não deve encontrar erros
559
+ expect(resultadoLexador.erros).toHaveLength(0);
560
+ // O valor recebido deve ser mapeado como METODO
561
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
562
+ expect.objectContaining({ tipo: foles_1.default.METODO }),
563
+ ]));
564
+ // O Lexador deve montar um objeto de comprimento 11 caso haja quantificador e 10 caso não haja
565
+ if (valIndex === 0 || valIndex === 1) {
566
+ expect(resultadoLexador.simbolos).toHaveLength(11);
567
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
568
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
569
+ expect.objectContaining({ tipo: foles_1.default.QUANTIFICADOR }),
570
+ ]));
571
+ }
572
+ else {
573
+ expect(resultadoLexador.simbolos).toHaveLength(10);
574
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
575
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
576
+ ]));
577
+ }
578
+ // Avaliador Sintático
579
+ const resultadoAvaliadorSintatico = avaliador.analisar(resultadoLexador.simbolos);
580
+ // O Avaliador deve montar um objeto com os devidos nomes FolEs e CSS
581
+ expect(resultadoAvaliadorSintatico[0].modificadores[0].propriedadeCss).toStrictEqual(metodos_1.TraducaoValoresMetodos[metodos_1.MetodosInclinar[index]]);
582
+ // Tradutor
583
+ const resultadoTradutor = tradutor.serializar(resultadoAvaliadorSintatico);
584
+ // O Tradutor deve serializar de acordo e traduzir inclinar para skew
585
+ expect(resultadoTradutor).toContain(metodos_1.TraducaoValoresMetodos[metodos_1.MetodosInclinar[index]]);
586
+ expect(resultadoTradutor).toContain(`skew(${valoresAceitos[valIndex]});`);
587
+ }
588
+ }
589
+ });
590
+ it('Atribuindo Método "inclinar() com múltiplos valores"', () => {
591
+ for (let index = 0; index < metodos_1.MetodosInclinar.length; index += 1) {
592
+ // Lexador
593
+ const resultadoLexador = lexador.mapear([
594
+ "lmht {",
595
+ `${metodos_1.MetodosInclinar[index]}: inclinar(15deg, 15deg);`,
596
+ "}"
597
+ ]);
598
+ // O Lexador não deve encontrar erros
599
+ expect(resultadoLexador.erros).toHaveLength(0);
600
+ // O valor recebido deve ser mapeado como METODO
601
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
602
+ expect.objectContaining({ tipo: foles_1.default.METODO }),
603
+ ]));
604
+ // O Lexador deve montar um objeto de comprimento 14
605
+ expect(resultadoLexador.simbolos).toHaveLength(14);
606
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
607
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
608
+ expect.objectContaining({ tipo: foles_1.default.QUANTIFICADOR }),
609
+ ]));
610
+ // Avaliador Sintático
611
+ const resultadoAvaliadorSintatico = avaliador.analisar(resultadoLexador.simbolos);
612
+ // O Avaliador deve montar um objeto com os devidos nomes FolEs e CSS
613
+ expect(resultadoAvaliadorSintatico[0].modificadores[0].propriedadeCss).toStrictEqual(metodos_1.TraducaoValoresMetodos[metodos_1.MetodosInclinar[index]]);
614
+ // Tradutor
615
+ const resultadoTradutor = tradutor.serializar(resultadoAvaliadorSintatico);
616
+ // O Tradutor deve serializar de acordo e traduzir inclinar para skew
617
+ expect(resultadoTradutor).toContain(metodos_1.TraducaoValoresMetodos[metodos_1.MetodosInclinar[index]]);
618
+ expect(resultadoTradutor).toContain(`skew(15deg, 15deg);`);
619
+ }
620
+ });
621
+ it('Atribuindo Método "inclinar-horizontal()"', () => {
622
+ for (let index = 0; index < metodos_1.MetodosInclinar.length; index += 1) {
623
+ const valoresAceitos = ['18deg', '3.142rad', '0', '1'];
624
+ for (let valIndex = 0; valIndex < valoresAceitos.length; valIndex += 1) {
625
+ // Lexador
626
+ const resultadoLexador = lexador.mapear([
627
+ "lmht {",
628
+ `${metodos_1.MetodosInclinar[index]}: inclinar-horizontal(${valoresAceitos[valIndex]});`,
629
+ "}"
630
+ ]);
631
+ // O Lexador não deve encontrar erros
632
+ expect(resultadoLexador.erros).toHaveLength(0);
633
+ // O valor recebido deve ser mapeado como METODO
634
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
635
+ expect.objectContaining({ tipo: foles_1.default.METODO }),
636
+ ]));
637
+ // O Lexador deve montar um objeto de comprimento 11 caso haja quantificador e 10 caso não haja
638
+ if (valIndex === 0 || valIndex === 1) {
639
+ expect(resultadoLexador.simbolos).toHaveLength(11);
640
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
641
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
642
+ expect.objectContaining({ tipo: foles_1.default.QUANTIFICADOR }),
643
+ ]));
644
+ }
645
+ else {
646
+ expect(resultadoLexador.simbolos).toHaveLength(10);
647
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
648
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
649
+ ]));
650
+ }
651
+ // Avaliador Sintático
652
+ const resultadoAvaliadorSintatico = avaliador.analisar(resultadoLexador.simbolos);
653
+ // O Avaliador deve montar um objeto com os devidos nomes FolEs e CSS
654
+ expect(resultadoAvaliadorSintatico[0].modificadores[0].propriedadeCss).toStrictEqual(metodos_1.TraducaoValoresMetodos[metodos_1.MetodosInclinar[index]]);
655
+ // Tradutor
656
+ const resultadoTradutor = tradutor.serializar(resultadoAvaliadorSintatico);
657
+ // O Tradutor deve serializar de acordo e traduzir inclinar-horizontal para skewX
658
+ expect(resultadoTradutor).toContain(metodos_1.TraducaoValoresMetodos[metodos_1.MetodosInclinar[index]]);
659
+ expect(resultadoTradutor).toContain(`skewX(${valoresAceitos[valIndex]});`);
660
+ }
661
+ }
662
+ });
663
+ it('Atribuindo Método "inclinar-vertical()"', () => {
664
+ for (let index = 0; index < metodos_1.MetodosInclinar.length; index += 1) {
665
+ const valoresAceitos = ['18deg', '3.142rad', '0', '1'];
666
+ for (let valIndex = 0; valIndex < valoresAceitos.length; valIndex += 1) {
667
+ // Lexador
668
+ const resultadoLexador = lexador.mapear([
669
+ "lmht {",
670
+ `${metodos_1.MetodosInclinar[index]}: inclinar-vertical(${valoresAceitos[valIndex]});`,
671
+ "}"
672
+ ]);
673
+ // O Lexador não deve encontrar erros
674
+ expect(resultadoLexador.erros).toHaveLength(0);
675
+ // O valor recebido deve ser mapeado como METODO
676
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
677
+ expect.objectContaining({ tipo: foles_1.default.METODO }),
678
+ ]));
679
+ // O Lexador deve montar um objeto de comprimento 11 caso haja quantificador e 10 caso não haja
680
+ if (valIndex === 0 || valIndex === 1) {
681
+ expect(resultadoLexador.simbolos).toHaveLength(11);
682
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
683
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
684
+ expect.objectContaining({ tipo: foles_1.default.QUANTIFICADOR }),
685
+ ]));
686
+ }
687
+ else {
688
+ expect(resultadoLexador.simbolos).toHaveLength(10);
689
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
690
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
691
+ ]));
692
+ }
693
+ // Avaliador Sintático
694
+ const resultadoAvaliadorSintatico = avaliador.analisar(resultadoLexador.simbolos);
695
+ // O Avaliador deve montar um objeto com os devidos nomes FolEs e CSS
696
+ expect(resultadoAvaliadorSintatico[0].modificadores[0].propriedadeCss).toStrictEqual(metodos_1.TraducaoValoresMetodos[metodos_1.MetodosInclinar[index]]);
697
+ // Tradutor
698
+ const resultadoTradutor = tradutor.serializar(resultadoAvaliadorSintatico);
699
+ // O Tradutor deve serializar de acordo e traduzir inclinar-vertical para skewY
700
+ expect(resultadoTradutor).toContain(metodos_1.TraducaoValoresMetodos[metodos_1.MetodosInclinar[index]]);
701
+ expect(resultadoTradutor).toContain(`skewY(${valoresAceitos[valIndex]});`);
702
+ }
703
+ }
704
+ });
705
+ it('Atribuindo Método "inverter()"', () => {
706
+ for (let index = 0; index < metodos_1.MetodoInverter.length; index += 1) {
707
+ const valoresAceitos = ['100px', '100%', '0.1', '0', '1', '1.75'];
708
+ for (let valIndex = 0; valIndex < valoresAceitos.length; valIndex += 1) {
709
+ // Lexador
710
+ const resultadoLexador = lexador.mapear([
711
+ "lmht {",
712
+ `${metodos_1.MetodoInverter[index]}: inverter(${valoresAceitos[valIndex]});`,
713
+ "}"
714
+ ]);
715
+ // O Lexador não deve encontrar erros
716
+ expect(resultadoLexador.erros).toHaveLength(0);
717
+ // O valor recebido deve ser mapeado como METODO
718
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
719
+ expect.objectContaining({ tipo: foles_1.default.METODO }),
720
+ ]));
721
+ // O Lexador deve montar um objeto de comprimento 11 caso haja quantificador e 10 caso não haja
722
+ if (valIndex === 0 || valIndex === 1) {
723
+ expect(resultadoLexador.simbolos).toHaveLength(11);
724
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
725
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
726
+ expect.objectContaining({ tipo: foles_1.default.QUANTIFICADOR }),
727
+ ]));
728
+ }
729
+ else {
730
+ expect(resultadoLexador.simbolos).toHaveLength(10);
731
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
732
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
733
+ ]));
734
+ }
735
+ // Avaliador Sintático
736
+ const resultadoAvaliadorSintatico = avaliador.analisar(resultadoLexador.simbolos);
737
+ // O Avaliador deve montar um objeto com os devidos nomes FolEs e CSS
738
+ expect(resultadoAvaliadorSintatico[0].modificadores[0].propriedadeCss).toStrictEqual(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoInverter[index]]);
739
+ // Tradutor
740
+ const resultadoTradutor = tradutor.serializar(resultadoAvaliadorSintatico);
741
+ // O Tradutor deve serializar de acordo e traduzir inverter para invert
742
+ expect(resultadoTradutor).toContain(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoInverter[index]]);
743
+ expect(resultadoTradutor).toContain(`invert(${valoresAceitos[valIndex]});`);
744
+ }
745
+ }
746
+ });
747
+ it('Atribuindo Método "limitar" (clamp)', () => {
748
+ for (let index = 0; index < metodos_1.MetodoLimitar.length; index += 1) {
749
+ // Lexador
750
+ const resultadoLexador = lexador.mapear([
751
+ "lmht {",
752
+ `${metodos_1.MetodoLimitar[index]}: limitar(10vw, 20em, 100vw);`,
753
+ "}"
754
+ ]);
755
+ // O Lexador deve montar um objeto de comprimento 17 sem retornar nenhum erro
756
+ expect(resultadoLexador.simbolos).toHaveLength(17);
757
+ expect(resultadoLexador.erros).toHaveLength(0);
758
+ // O valor recebido deve ser mapeado como METODO
759
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
760
+ expect.objectContaining({ tipo: foles_1.default.METODO }),
761
+ ]));
762
+ // O Lexador também deve encontrar números e quantificadores no mapeamento
763
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
764
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
765
+ expect.objectContaining({ tipo: foles_1.default.QUANTIFICADOR }),
766
+ ]));
767
+ // Avaliador Sintático
768
+ const resultadoAvaliadorSintatico = avaliador.analisar(resultadoLexador.simbolos);
769
+ // O Avaliador deve montar um objeto com os devidos nomes FolEs e CSS
770
+ expect(resultadoAvaliadorSintatico[0].modificadores[0].propriedadeCss).toStrictEqual(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoLimitar[index]]);
771
+ // Tradutor
772
+ const resultadoTradutor = tradutor.serializar(resultadoAvaliadorSintatico);
773
+ expect(resultadoTradutor).toContain(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoLimitar[index]]);
774
+ expect(resultadoTradutor).toContain('clamp(10vw, 20em, 100vw);');
775
+ }
776
+ });
777
+ it('Atribuindo Método "linear()"', () => {
778
+ for (let index = 0; index < metodos_1.MetodoLinear.length; index += 1) {
779
+ // Lexador
780
+ const resultadoLexador = lexador.mapear([
781
+ "lmht {",
782
+ `${metodos_1.MetodoLinear[index]}: linear(0, 0.25, 1);`,
783
+ "}"
784
+ ]);
785
+ // O Lexador deve montar um objeto de comprimento 14 sem retornar nenhum erro
786
+ expect(resultadoLexador.simbolos).toHaveLength(14);
787
+ expect(resultadoLexador.erros).toHaveLength(0);
788
+ // O valor recebido deve ser mapeado como METODO
789
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
790
+ expect.objectContaining({ tipo: foles_1.default.METODO }),
791
+ ]));
792
+ // O Lexador também deve encontrar números no mapeamento
793
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
794
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
795
+ ]));
796
+ // Avaliador Sintático
797
+ const resultadoAvaliadorSintatico = avaliador.analisar(resultadoLexador.simbolos);
798
+ // O Avaliador deve montar um objeto com os devidos nomes FolEs e CSS
799
+ expect(resultadoAvaliadorSintatico[0].modificadores[0].propriedadeCss).toStrictEqual(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoLinear[index]]);
800
+ // // // // Tradutor
801
+ const resultadoTradutor = tradutor.serializar(resultadoAvaliadorSintatico);
802
+ expect(resultadoTradutor).toContain(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoLinear[index]]);
803
+ expect(resultadoTradutor).toContain('linear(0, 0.25, 1);');
804
+ }
805
+ });
806
+ it('Atribuindo Método "minmax()"', () => {
807
+ for (let index = 0; index < metodos_1.MetodoMinMax.length; index += 1) {
808
+ // Lexador
809
+ const resultadoLexador = lexador.mapear([
810
+ "lmht {",
811
+ `${metodos_1.MetodoMinMax[index]}: minmax(100px, conteúdo-máximo);`,
812
+ "}"
813
+ ]);
814
+ // O Lexador deve montar um objeto de comprimento 13 sem retornar nenhum erro
815
+ expect(resultadoLexador.simbolos).toHaveLength(13);
816
+ expect(resultadoLexador.erros).toHaveLength(0);
817
+ // O valor recebido deve ser mapeado como METODO
818
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
819
+ expect.objectContaining({ tipo: foles_1.default.METODO }),
820
+ ]));
821
+ // O Lexador também deve encontrar número e quantificador no mapeamento
822
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
823
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
824
+ expect.objectContaining({ tipo: foles_1.default.QUANTIFICADOR }),
825
+ ]));
826
+ // Avaliador Sintático
827
+ const resultadoAvaliadorSintatico = avaliador.analisar(resultadoLexador.simbolos);
828
+ // O Avaliador deve montar um objeto com os devidos nomes FolEs e CSS
829
+ expect(resultadoAvaliadorSintatico[0].modificadores[0].propriedadeCss).toStrictEqual(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoMinMax[index]]);
830
+ // // // // Tradutor
831
+ const resultadoTradutor = tradutor.serializar(resultadoAvaliadorSintatico);
832
+ expect(resultadoTradutor).toContain(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoMinMax[index]]);
833
+ expect(resultadoTradutor).toContain('minmax(100px, max-content);');
834
+ }
835
+ });
836
+ it('Atribuindo Método "opacar()"', () => {
837
+ for (let index = 0; index < metodos_1.MetodoOpacar.length; index += 1) {
838
+ const valoresAceitos = ['100px', '100%', '0.1', '0', '1', '1.75'];
839
+ for (let valIndex = 0; valIndex < valoresAceitos.length; valIndex += 1) {
840
+ // Lexador
841
+ const resultadoLexador = lexador.mapear([
842
+ "lmht {",
843
+ `${metodos_1.MetodoOpacar[index]}: opacar(${valoresAceitos[valIndex]});`,
844
+ "}"
845
+ ]);
846
+ // O Lexador não deve encontrar erros
847
+ expect(resultadoLexador.erros).toHaveLength(0);
848
+ // O valor recebido deve ser mapeado como METODO
849
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
850
+ expect.objectContaining({ tipo: foles_1.default.METODO }),
851
+ ]));
852
+ // O Lexador deve montar um objeto de comprimento 11 caso haja quantificador e 10 caso não haja
853
+ if (valIndex === 0 || valIndex === 1) {
854
+ expect(resultadoLexador.simbolos).toHaveLength(11);
855
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
856
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
857
+ expect.objectContaining({ tipo: foles_1.default.QUANTIFICADOR }),
858
+ ]));
859
+ }
860
+ else {
861
+ expect(resultadoLexador.simbolos).toHaveLength(10);
862
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
863
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
864
+ ]));
865
+ }
866
+ // Avaliador Sintático
867
+ const resultadoAvaliadorSintatico = avaliador.analisar(resultadoLexador.simbolos);
868
+ // O Avaliador deve montar um objeto com os devidos nomes FolEs e CSS
869
+ expect(resultadoAvaliadorSintatico[0].modificadores[0].propriedadeCss).toStrictEqual(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoOpacar[index]]);
870
+ // Tradutor
871
+ const resultadoTradutor = tradutor.serializar(resultadoAvaliadorSintatico);
872
+ // O Tradutor deve serializar de acordo e traduzir opacar para opacity
873
+ expect(resultadoTradutor).toContain(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoOpacar[index]]);
874
+ expect(resultadoTradutor).toContain(`opacity(${valoresAceitos[valIndex]});`);
875
+ }
876
+ }
877
+ });
878
+ it('Atribuindo Método "passos" (steps)', () => {
879
+ for (let index = 0; index < metodos_1.MetodoPassos.length; index += 1) {
880
+ // Lexador
881
+ const resultadoLexador = lexador.mapear([
882
+ "lmht {",
883
+ `${metodos_1.MetodoPassos[index]}: passos(2, salto-inicial);`,
884
+ "}"
885
+ ]);
886
+ // O Lexador deve montar um objeto de comprimento 12 sem retornar nenhum erro
887
+ expect(resultadoLexador.simbolos).toHaveLength(12);
888
+ expect(resultadoLexador.erros).toHaveLength(0);
889
+ // O valor recebido deve ser mapeado como METODO
890
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
891
+ expect.objectContaining({ tipo: foles_1.default.METODO }),
892
+ ]));
893
+ // O Lexador também deve encontrar número e qualitativo no mapeamento
894
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
895
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
896
+ expect.objectContaining({ tipo: foles_1.default.QUALITATIVO }),
897
+ ]));
898
+ // Avaliador Sintático
899
+ const resultadoAvaliadorSintatico = avaliador.analisar(resultadoLexador.simbolos);
900
+ // O Avaliador deve montar um objeto com os devidos nomes FolEs e CSS
901
+ expect(resultadoAvaliadorSintatico[0].modificadores[0].propriedadeCss).toStrictEqual(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoPassos[index]]);
902
+ // // // // Tradutor
903
+ const resultadoTradutor = tradutor.serializar(resultadoAvaliadorSintatico);
904
+ expect(resultadoTradutor).toContain(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoPassos[index]]);
905
+ expect(resultadoTradutor).toContain('steps(2, jump-start);');
906
+ }
907
+ });
908
+ it('Atribuindo Método "perspectivar()"', () => {
909
+ for (let index = 0; index < metodos_1.MetodoPerspectivar.length; index += 1) {
910
+ const valoresAceitos = ['800px', '6.5cm', '0.1', '0', '1', '1.75', 'nenhuma'];
911
+ for (let valIndex = 0; valIndex < valoresAceitos.length; valIndex += 1) {
912
+ // Lexador
913
+ const resultadoLexador = lexador.mapear([
914
+ "lmht {",
915
+ `${metodos_1.MetodoPerspectivar[index]}: perspectivar(${valoresAceitos[valIndex]});`,
916
+ "}"
917
+ ]);
918
+ // O Lexador não deve encontrar erros
919
+ expect(resultadoLexador.erros).toHaveLength(0);
920
+ // O valor recebido deve ser mapeado como METODO
921
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
922
+ expect.objectContaining({ tipo: foles_1.default.METODO }),
923
+ ]));
924
+ // O Lexador deve montar um objeto de comprimento 11 caso haja quantificador e 10 caso não haja
925
+ if (valIndex === 0 || valIndex === 1) {
926
+ expect(resultadoLexador.simbolos).toHaveLength(11);
927
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
928
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
929
+ expect.objectContaining({ tipo: foles_1.default.QUANTIFICADOR }),
930
+ ]));
931
+ }
932
+ else if (valIndex !== 6) {
933
+ expect(resultadoLexador.simbolos).toHaveLength(10);
934
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
935
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
936
+ ]));
937
+ }
938
+ else {
939
+ expect(resultadoLexador.simbolos).toHaveLength(10);
940
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
941
+ expect.objectContaining({ tipo: foles_1.default.IDENTIFICADOR }),
942
+ ]));
943
+ }
944
+ // Avaliador Sintático
945
+ const resultadoAvaliadorSintatico = avaliador.analisar(resultadoLexador.simbolos);
946
+ // O Avaliador deve montar um objeto com os devidos nomes FolEs e CSS
947
+ expect(resultadoAvaliadorSintatico[0].modificadores[0].propriedadeCss).toStrictEqual(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoPerspectivar[index]]);
948
+ // Tradutor
949
+ const resultadoTradutor = tradutor.serializar(resultadoAvaliadorSintatico);
950
+ // O Tradutor deve serializar de acordo e traduzir perspectivar para perspective
951
+ expect(resultadoTradutor).toContain(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoPerspectivar[index]]);
952
+ expect(resultadoTradutor).toContain(`perspective(${valoresAceitos[valIndex]});`);
953
+ }
954
+ }
955
+ });
956
+ it('Atribuindo Método "projetar-sombra()" com valores de comprimento somente', () => {
957
+ for (let index = 0; index < metodos_1.MetodoProjetarSombra.length; index += 1) {
958
+ const comprimentos = ['15px 15px', '15px 15px 15px', '0.5rem 0.5rem', '0.5rem 0.5rem 1rem'];
959
+ for (let posIndex = 0; posIndex < comprimentos.length; posIndex += 1) {
960
+ // Lexador
961
+ const resultadoLexador = lexador.mapear([
962
+ "lmht {",
963
+ `${metodos_1.MetodoProjetarSombra[index]}: projetar-sombra(${comprimentos[posIndex]});`,
964
+ "}"
965
+ ]);
966
+ // O Lexador deve montar um objeto de acordo, sem retornar nenhum erro
967
+ expect(resultadoLexador.erros).toHaveLength(0);
968
+ // O valor recebido deve ser mapeado como METODO
969
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
970
+ expect.objectContaining({ tipo: foles_1.default.METODO }),
971
+ ]));
972
+ // O Lexador também deve sempre encontrar valores e quantificadores na operação
973
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
974
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
975
+ expect.objectContaining({ tipo: foles_1.default.QUANTIFICADOR }),
976
+ ]));
977
+ // Avaliador Sintático
978
+ const resultadoAvaliadorSintatico = avaliador.analisar(resultadoLexador.simbolos);
979
+ // O Avaliador deve montar um objeto com os devidos nomes FolEs e CSS
980
+ expect(resultadoAvaliadorSintatico[0].modificadores[0].propriedadeCss).toStrictEqual(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoProjetarSombra[index]]);
981
+ // Tradutor
982
+ const resultadoTradutor = tradutor.serializar(resultadoAvaliadorSintatico);
983
+ // O Tradutor deve serializar de acordo e traduzir projetar-sombra para drop-shadow
984
+ expect(resultadoTradutor).toContain(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoProjetarSombra[index]]);
985
+ expect(resultadoTradutor).toContain(`drop-shadow(${comprimentos[posIndex]});`);
986
+ }
987
+ }
988
+ });
989
+ it('Atribuindo Método "projetar-sombra()" com valores de cor e de comprimento', () => {
990
+ for (let index = 0; index < metodos_1.MetodoProjetarSombra.length; index += 1) {
991
+ const comprimentos = ['15px 15px vermelho', '15px 15px 15px vermelho', 'vermelho 0.5rem 0.5rem', 'vermelho 0.5rem 0.5rem 1rem'];
992
+ for (let posIndex = 0; posIndex < comprimentos.length; posIndex += 1) {
993
+ // Lexador
994
+ const resultadoLexador = lexador.mapear([
995
+ "lmht {",
996
+ `${metodos_1.MetodoProjetarSombra[index]}: projetar-sombra(${comprimentos[posIndex]});`,
997
+ "}"
998
+ ]);
999
+ // O Lexador deve montar um objeto de acordo, sem retornar nenhum erro
1000
+ expect(resultadoLexador.erros).toHaveLength(0);
1001
+ // O valor recebido deve ser mapeado como METODO
1002
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
1003
+ expect.objectContaining({ tipo: foles_1.default.METODO }),
1004
+ ]));
1005
+ // O Lexador também deve sempre encontrar valores e quantificadores na operação
1006
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
1007
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
1008
+ expect.objectContaining({ tipo: foles_1.default.QUANTIFICADOR }),
1009
+ ]));
1010
+ // Avaliador Sintático
1011
+ const resultadoAvaliadorSintatico = avaliador.analisar(resultadoLexador.simbolos);
1012
+ // O Avaliador deve montar um objeto com os devidos nomes FolEs e CSS
1013
+ expect(resultadoAvaliadorSintatico[0].modificadores[0].propriedadeCss).toStrictEqual(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoProjetarSombra[index]]);
1014
+ // Tradutor
1015
+ const resultadoTradutor = tradutor.serializar(resultadoAvaliadorSintatico);
1016
+ // O Tradutor deve serializar de acordo e traduzir vermelho para red
1017
+ expect(resultadoTradutor).toContain(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoProjetarSombra[index]]);
1018
+ expect(resultadoTradutor).toContain('red');
1019
+ }
1020
+ }
1021
+ });
1022
+ it('Atribuindo Método "raio()" com valores de posição e número/quantificador', () => {
1023
+ for (let index = 0; index < metodos_1.MetodoRaio.length; index += 1) {
1024
+ const valoresAceitos = ['lado-mais-próximo', 'lado-mais-proximo', 'canto-mais-próximo', 'canto-mais-proximo', 'lado-mais-distante', 'canto-mais-distante', 'lados', 'conter'];
1025
+ const traducaoValoresAceitos = ['closest-side', 'closest-side', 'closest-corner', 'closest-corner', 'farthest-side', 'farthest-corner', 'sides', 'contain'];
1026
+ for (let valIndex = 0; valIndex < valoresAceitos.length; valIndex += 1) {
1027
+ // Lexador
1028
+ const resultadoLexador = lexador.mapear([
1029
+ "lmht {",
1030
+ `${metodos_1.MetodoRaio[index]}: raio(${valoresAceitos[valIndex]} 200deg);`,
1031
+ "}"
1032
+ ]);
1033
+ // O Lexador não deve encontrar erros
1034
+ expect(resultadoLexador.erros).toHaveLength(0);
1035
+ // O valor recebido deve ser mapeado como METODO
1036
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
1037
+ expect.objectContaining({ tipo: foles_1.default.METODO }),
1038
+ ]));
1039
+ // O Lexador deve montar um objeto de comprimento 12
1040
+ expect(resultadoLexador.simbolos).toHaveLength(12);
1041
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
1042
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
1043
+ expect.objectContaining({ tipo: foles_1.default.QUANTIFICADOR }),
1044
+ ]));
1045
+ // Avaliador Sintático
1046
+ const resultadoAvaliadorSintatico = avaliador.analisar(resultadoLexador.simbolos);
1047
+ // O Avaliador deve montar um objeto com os devidos nomes FolEs e CSS
1048
+ expect(resultadoAvaliadorSintatico[0].modificadores[0].propriedadeCss).toStrictEqual(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoRaio[index]]);
1049
+ // Tradutor
1050
+ const resultadoTradutor = tradutor.serializar(resultadoAvaliadorSintatico);
1051
+ // O Tradutor deve serializar de acordo e traduzir raio para ray
1052
+ expect(resultadoTradutor).toContain(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoRaio[index]]);
1053
+ expect(resultadoTradutor).toContain(`ray(${traducaoValoresAceitos[valIndex]} 200deg);`);
1054
+ }
1055
+ }
1056
+ });
1057
+ it('Atribuindo Método "raio()" com somente número/quantificador', () => {
1058
+ for (let index = 0; index < metodos_1.MetodoRaio.length; index += 1) {
1059
+ // Lexador
1060
+ const resultadoLexador = lexador.mapear([
1061
+ "lmht {",
1062
+ `${metodos_1.MetodoRaio[index]}: raio(200deg);`,
1063
+ "}"
1064
+ ]);
1065
+ // O Lexador não deve encontrar erros
1066
+ expect(resultadoLexador.erros).toHaveLength(0);
1067
+ // O valor recebido deve ser mapeado como METODO
1068
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
1069
+ expect.objectContaining({ tipo: foles_1.default.METODO }),
1070
+ ]));
1071
+ // O Lexador deve montar um objeto de comprimento 11
1072
+ expect(resultadoLexador.simbolos).toHaveLength(11);
1073
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
1074
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
1075
+ expect.objectContaining({ tipo: foles_1.default.QUANTIFICADOR }),
1076
+ ]));
1077
+ // Avaliador Sintático
1078
+ const resultadoAvaliadorSintatico = avaliador.analisar(resultadoLexador.simbolos);
1079
+ // O Avaliador deve montar um objeto com os devidos nomes FolEs e CSS
1080
+ expect(resultadoAvaliadorSintatico[0].modificadores[0].propriedadeCss).toStrictEqual(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoRaio[index]]);
1081
+ // Tradutor
1082
+ const resultadoTradutor = tradutor.serializar(resultadoAvaliadorSintatico);
1083
+ // O Tradutor deve serializar de acordo e traduzir raio para ray
1084
+ expect(resultadoTradutor).toContain(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoRaio[index]]);
1085
+ expect(resultadoTradutor).toContain(`ray(200deg);`);
1086
+ }
1087
+ });
1088
+ it('Atribuindo Método "rotacionar()"', () => {
1089
+ for (let index = 0; index < metodos_1.MetodosRotacionar.length; index += 1) {
1090
+ const valoresAceitos = ['45deg', '3.142rad', '0.1', '0', '1', '1.75'];
1091
+ for (let valIndex = 0; valIndex < valoresAceitos.length; valIndex += 1) {
1092
+ // Lexador
1093
+ const resultadoLexador = lexador.mapear([
1094
+ "lmht {",
1095
+ `${metodos_1.MetodosRotacionar[index]}: rotacionar(${valoresAceitos[valIndex]});`,
1096
+ "}"
1097
+ ]);
1098
+ // O Lexador não deve encontrar erros
1099
+ expect(resultadoLexador.erros).toHaveLength(0);
1100
+ // O valor recebido deve ser mapeado como METODO
1101
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
1102
+ expect.objectContaining({ tipo: foles_1.default.METODO }),
1103
+ ]));
1104
+ // O Lexador deve montar um objeto de comprimento 11 caso haja quantificador e 10 caso não haja
1105
+ if (valIndex === 0 || valIndex === 1) {
1106
+ expect(resultadoLexador.simbolos).toHaveLength(11);
1107
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
1108
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
1109
+ expect.objectContaining({ tipo: foles_1.default.QUANTIFICADOR }),
1110
+ ]));
1111
+ }
1112
+ else {
1113
+ expect(resultadoLexador.simbolos).toHaveLength(10);
1114
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
1115
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
1116
+ ]));
1117
+ }
1118
+ // Avaliador Sintático
1119
+ const resultadoAvaliadorSintatico = avaliador.analisar(resultadoLexador.simbolos);
1120
+ // O Avaliador deve montar um objeto com os devidos nomes FolEs e CSS
1121
+ expect(resultadoAvaliadorSintatico[0].modificadores[0].propriedadeCss).toStrictEqual(metodos_1.TraducaoValoresMetodos[metodos_1.MetodosRotacionar[index]]);
1122
+ // Tradutor
1123
+ const resultadoTradutor = tradutor.serializar(resultadoAvaliadorSintatico);
1124
+ // O Tradutor deve serializar de acordo e traduzir rotacionar para rotate
1125
+ expect(resultadoTradutor).toContain(metodos_1.TraducaoValoresMetodos[metodos_1.MetodosRotacionar[index]]);
1126
+ expect(resultadoTradutor).toContain(`rotate(${valoresAceitos[valIndex]});`);
1127
+ }
1128
+ }
1129
+ });
1130
+ it('Atribuindo Método "rotacionar-eixo-z()"', () => {
1131
+ for (let index = 0; index < metodos_1.MetodosRotacionar.length; index += 1) {
1132
+ const valoresAceitos = ['45deg', '3.142rad', '0.1', '0', '1', '1.75'];
1133
+ for (let valIndex = 0; valIndex < valoresAceitos.length; valIndex += 1) {
1134
+ // Lexador
1135
+ const resultadoLexador = lexador.mapear([
1136
+ "lmht {",
1137
+ `${metodos_1.MetodosRotacionar[index]}: rotacionar-eixo-z(${valoresAceitos[valIndex]});`,
1138
+ "}"
1139
+ ]);
1140
+ // O Lexador não deve encontrar erros
1141
+ expect(resultadoLexador.erros).toHaveLength(0);
1142
+ // O valor recebido deve ser mapeado como METODO
1143
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
1144
+ expect.objectContaining({ tipo: foles_1.default.METODO }),
1145
+ ]));
1146
+ // O Lexador deve montar um objeto de comprimento 11 caso haja quantificador e 10 caso não haja
1147
+ if (valIndex === 0 || valIndex === 1) {
1148
+ expect(resultadoLexador.simbolos).toHaveLength(11);
1149
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
1150
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
1151
+ expect.objectContaining({ tipo: foles_1.default.QUANTIFICADOR }),
1152
+ ]));
1153
+ }
1154
+ else {
1155
+ expect(resultadoLexador.simbolos).toHaveLength(10);
1156
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
1157
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
1158
+ ]));
1159
+ }
1160
+ // Avaliador Sintático
1161
+ const resultadoAvaliadorSintatico = avaliador.analisar(resultadoLexador.simbolos);
1162
+ // O Avaliador deve montar um objeto com os devidos nomes FolEs e CSS
1163
+ expect(resultadoAvaliadorSintatico[0].modificadores[0].propriedadeCss).toStrictEqual(metodos_1.TraducaoValoresMetodos[metodos_1.MetodosRotacionar[index]]);
1164
+ // Tradutor
1165
+ const resultadoTradutor = tradutor.serializar(resultadoAvaliadorSintatico);
1166
+ // O Tradutor deve serializar de acordo e traduzir rotacionar-eixo-z para rotateZ
1167
+ expect(resultadoTradutor).toContain(metodos_1.TraducaoValoresMetodos[metodos_1.MetodosRotacionar[index]]);
1168
+ expect(resultadoTradutor).toContain(`rotateZ(${valoresAceitos[valIndex]});`);
1169
+ }
1170
+ }
1171
+ });
1172
+ it('Atribuindo Método "rotacionar-horizontal()"', () => {
1173
+ for (let index = 0; index < metodos_1.MetodosRotacionar.length; index += 1) {
1174
+ const valoresAceitos = ['45deg', '3.142rad', '0.1', '0', '1', '1.75'];
1175
+ for (let valIndex = 0; valIndex < valoresAceitos.length; valIndex += 1) {
1176
+ // Lexador
1177
+ const resultadoLexador = lexador.mapear([
1178
+ "lmht {",
1179
+ `${metodos_1.MetodosRotacionar[index]}: rotacionar-horizontal(${valoresAceitos[valIndex]});`,
1180
+ "}"
1181
+ ]);
1182
+ // O Lexador não deve encontrar erros
1183
+ expect(resultadoLexador.erros).toHaveLength(0);
1184
+ // O valor recebido deve ser mapeado como METODO
1185
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
1186
+ expect.objectContaining({ tipo: foles_1.default.METODO }),
1187
+ ]));
1188
+ // O Lexador deve montar um objeto de comprimento 11 caso haja quantificador e 10 caso não haja
1189
+ if (valIndex === 0 || valIndex === 1) {
1190
+ expect(resultadoLexador.simbolos).toHaveLength(11);
1191
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
1192
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
1193
+ expect.objectContaining({ tipo: foles_1.default.QUANTIFICADOR }),
1194
+ ]));
1195
+ }
1196
+ else {
1197
+ expect(resultadoLexador.simbolos).toHaveLength(10);
1198
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
1199
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
1200
+ ]));
1201
+ }
1202
+ // Avaliador Sintático
1203
+ const resultadoAvaliadorSintatico = avaliador.analisar(resultadoLexador.simbolos);
1204
+ // O Avaliador deve montar um objeto com os devidos nomes FolEs e CSS
1205
+ expect(resultadoAvaliadorSintatico[0].modificadores[0].propriedadeCss).toStrictEqual(metodos_1.TraducaoValoresMetodos[metodos_1.MetodosRotacionar[index]]);
1206
+ // Tradutor
1207
+ const resultadoTradutor = tradutor.serializar(resultadoAvaliadorSintatico);
1208
+ // O Tradutor deve serializar de acordo e traduzir rotacionar-horizontal para rotateX
1209
+ expect(resultadoTradutor).toContain(metodos_1.TraducaoValoresMetodos[metodos_1.MetodosRotacionar[index]]);
1210
+ expect(resultadoTradutor).toContain(`rotateX(${valoresAceitos[valIndex]});`);
1211
+ }
1212
+ }
1213
+ });
1214
+ it('Atribuindo Método "rotacionar-matiz()"', () => {
1215
+ for (let index = 0; index < metodos_1.MetodoRotacionarMatiz.length; index += 1) {
1216
+ const valoresAceitos = ['100px', '100%', '0.1', '0', '1', '1.75'];
1217
+ for (let valIndex = 0; valIndex < valoresAceitos.length; valIndex += 1) {
1218
+ // Lexador
1219
+ const resultadoLexador = lexador.mapear([
1220
+ "lmht {",
1221
+ `${metodos_1.MetodoRotacionarMatiz[index]}: rotacionar-matiz(${valoresAceitos[valIndex]});`,
1222
+ "}"
1223
+ ]);
1224
+ // O Lexador não deve encontrar erros
1225
+ expect(resultadoLexador.erros).toHaveLength(0);
1226
+ // O valor recebido deve ser mapeado como METODO
1227
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
1228
+ expect.objectContaining({ tipo: foles_1.default.METODO }),
1229
+ ]));
1230
+ // O Lexador deve montar um objeto de comprimento 11 caso haja quantificador e 10 caso não haja
1231
+ if (valIndex === 0 || valIndex === 1) {
1232
+ expect(resultadoLexador.simbolos).toHaveLength(11);
1233
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
1234
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
1235
+ expect.objectContaining({ tipo: foles_1.default.QUANTIFICADOR }),
1236
+ ]));
1237
+ }
1238
+ else {
1239
+ expect(resultadoLexador.simbolos).toHaveLength(10);
1240
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
1241
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
1242
+ ]));
1243
+ }
1244
+ // Avaliador Sintático
1245
+ const resultadoAvaliadorSintatico = avaliador.analisar(resultadoLexador.simbolos);
1246
+ // O Avaliador deve montar um objeto com os devidos nomes FolEs e CSS
1247
+ expect(resultadoAvaliadorSintatico[0].modificadores[0].propriedadeCss).toStrictEqual(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoRotacionarMatiz[index]]);
1248
+ // Tradutor
1249
+ const resultadoTradutor = tradutor.serializar(resultadoAvaliadorSintatico);
1250
+ // O Tradutor deve serializar de acordo e traduzir rotacionar-matiz para hue-rotate
1251
+ expect(resultadoTradutor).toContain(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoRotacionarMatiz[index]]);
1252
+ expect(resultadoTradutor).toContain(`hue-rotate(${valoresAceitos[valIndex]});`);
1253
+ }
1254
+ }
1255
+ });
1256
+ it('Atribuindo Método "rotacionar-vertical()"', () => {
1257
+ for (let index = 0; index < metodos_1.MetodosRotacionar.length; index += 1) {
1258
+ const valoresAceitos = ['45deg', '3.142rad', '0.1', '0', '1', '1.75'];
1259
+ for (let valIndex = 0; valIndex < valoresAceitos.length; valIndex += 1) {
1260
+ // Lexador
1261
+ const resultadoLexador = lexador.mapear([
1262
+ "lmht {",
1263
+ `${metodos_1.MetodosRotacionar[index]}: rotacionar-vertical(${valoresAceitos[valIndex]});`,
1264
+ "}"
1265
+ ]);
1266
+ // O Lexador não deve encontrar erros
1267
+ expect(resultadoLexador.erros).toHaveLength(0);
1268
+ // O valor recebido deve ser mapeado como METODO
1269
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
1270
+ expect.objectContaining({ tipo: foles_1.default.METODO }),
1271
+ ]));
1272
+ // O Lexador deve montar um objeto de comprimento 11 caso haja quantificador e 10 caso não haja
1273
+ if (valIndex === 0 || valIndex === 1) {
1274
+ expect(resultadoLexador.simbolos).toHaveLength(11);
1275
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
1276
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
1277
+ expect.objectContaining({ tipo: foles_1.default.QUANTIFICADOR }),
1278
+ ]));
1279
+ }
1280
+ else {
1281
+ expect(resultadoLexador.simbolos).toHaveLength(10);
1282
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
1283
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
1284
+ ]));
1285
+ }
1286
+ // Avaliador Sintático
1287
+ const resultadoAvaliadorSintatico = avaliador.analisar(resultadoLexador.simbolos);
1288
+ // O Avaliador deve montar um objeto com os devidos nomes FolEs e CSS
1289
+ expect(resultadoAvaliadorSintatico[0].modificadores[0].propriedadeCss).toStrictEqual(metodos_1.TraducaoValoresMetodos[metodos_1.MetodosRotacionar[index]]);
1290
+ // Tradutor
1291
+ const resultadoTradutor = tradutor.serializar(resultadoAvaliadorSintatico);
1292
+ // O Tradutor deve serializar de acordo e traduzir rotacionar-vertical para rotateY
1293
+ expect(resultadoTradutor).toContain(metodos_1.TraducaoValoresMetodos[metodos_1.MetodosRotacionar[index]]);
1294
+ expect(resultadoTradutor).toContain(`rotateY(${valoresAceitos[valIndex]});`);
1295
+ }
1296
+ }
1297
+ });
1298
+ it('Atribuindo Método "saturar()"', () => {
1299
+ for (let index = 0; index < metodos_1.MetodoSaturar.length; index += 1) {
1300
+ const valoresAceitos = ['100px', '100%', '0.1', '0', '1', '1.75'];
1301
+ for (let valIndex = 0; valIndex < valoresAceitos.length; valIndex += 1) {
1302
+ // Lexador
1303
+ const resultadoLexador = lexador.mapear([
1304
+ "lmht {",
1305
+ `${metodos_1.MetodoSaturar[index]}: saturar(${valoresAceitos[valIndex]});`,
1306
+ "}"
1307
+ ]);
1308
+ // O Lexador não deve encontrar erros
1309
+ expect(resultadoLexador.erros).toHaveLength(0);
1310
+ // O valor recebido deve ser mapeado como METODO
1311
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
1312
+ expect.objectContaining({ tipo: foles_1.default.METODO }),
1313
+ ]));
1314
+ // O Lexador deve montar um objeto de comprimento 11 caso haja quantificador e 10 caso não haja
1315
+ if (valIndex === 0 || valIndex === 1) {
1316
+ expect(resultadoLexador.simbolos).toHaveLength(11);
1317
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
1318
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
1319
+ expect.objectContaining({ tipo: foles_1.default.QUANTIFICADOR }),
1320
+ ]));
1321
+ }
1322
+ else {
1323
+ expect(resultadoLexador.simbolos).toHaveLength(10);
1324
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
1325
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
1326
+ ]));
1327
+ }
1328
+ // Avaliador Sintático
1329
+ const resultadoAvaliadorSintatico = avaliador.analisar(resultadoLexador.simbolos);
1330
+ // O Avaliador deve montar um objeto com os devidos nomes FolEs e CSS
1331
+ expect(resultadoAvaliadorSintatico[0].modificadores[0].propriedadeCss).toStrictEqual(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoSaturar[index]]);
1332
+ // Tradutor
1333
+ const resultadoTradutor = tradutor.serializar(resultadoAvaliadorSintatico);
1334
+ // O Tradutor deve serializar de acordo e traduzir saturar para saturate
1335
+ expect(resultadoTradutor).toContain(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoSaturar[index]]);
1336
+ expect(resultadoTradutor).toContain(`saturate(${valoresAceitos[valIndex]});`);
1337
+ }
1338
+ }
1339
+ });
1340
+ it('Atribuindo Método "sepia()"', () => {
1341
+ for (let index = 0; index < metodos_1.MetodoSepia.length; index += 1) {
1342
+ const valoresAceitos = ['100px', '100%', '0.1', '0', '1', '1.75'];
1343
+ for (let valIndex = 0; valIndex < valoresAceitos.length; valIndex += 1) {
1344
+ // Lexador
1345
+ const resultadoLexador = lexador.mapear([
1346
+ "lmht {",
1347
+ `${metodos_1.MetodoSepia[index]}: sepia(${valoresAceitos[valIndex]});`,
1348
+ "}"
1349
+ ]);
1350
+ // O Lexador não deve encontrar erros
1351
+ expect(resultadoLexador.erros).toHaveLength(0);
1352
+ // O valor recebido deve ser mapeado como METODO
1353
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
1354
+ expect.objectContaining({ tipo: foles_1.default.METODO }),
1355
+ ]));
1356
+ // O Lexador deve montar um objeto de comprimento 11 caso haja quantificador e 10 caso não haja
1357
+ if (valIndex === 0 || valIndex === 1) {
1358
+ expect(resultadoLexador.simbolos).toHaveLength(11);
1359
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
1360
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
1361
+ expect.objectContaining({ tipo: foles_1.default.QUANTIFICADOR }),
1362
+ ]));
1363
+ }
1364
+ else {
1365
+ expect(resultadoLexador.simbolos).toHaveLength(10);
1366
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
1367
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
1368
+ ]));
1369
+ }
1370
+ // Avaliador Sintático
1371
+ const resultadoAvaliadorSintatico = avaliador.analisar(resultadoLexador.simbolos);
1372
+ // O Avaliador deve montar um objeto com os devidos nomes FolEs e CSS
1373
+ expect(resultadoAvaliadorSintatico[0].modificadores[0].propriedadeCss).toStrictEqual(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoSepia[index]]);
1374
+ // Tradutor
1375
+ const resultadoTradutor = tradutor.serializar(resultadoAvaliadorSintatico);
1376
+ // O Tradutor deve serializar de acordo e traduzir sépia para sepia
1377
+ expect(resultadoTradutor).toContain(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoSepia[index]]);
1378
+ expect(resultadoTradutor).toContain(`sepia(${valoresAceitos[valIndex]});`);
1379
+ }
1380
+ }
1381
+ });
1382
+ it('Atribuindo Método "translação()"', () => {
1383
+ for (let index = 0; index < metodos_1.MetodosTranslacao.length; index += 1) {
1384
+ const valoresAceitos = ['18deg', '3.142rad', '0', '1'];
1385
+ for (let valIndex = 0; valIndex < valoresAceitos.length; valIndex += 1) {
1386
+ // Lexador
1387
+ const resultadoLexador = lexador.mapear([
1388
+ "lmht {",
1389
+ `${metodos_1.MetodosTranslacao[index]}: translação(${valoresAceitos[valIndex]});`,
1390
+ "}"
1391
+ ]);
1392
+ // O Lexador não deve encontrar erros
1393
+ expect(resultadoLexador.erros).toHaveLength(0);
1394
+ // O valor recebido deve ser mapeado como METODO
1395
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
1396
+ expect.objectContaining({ tipo: foles_1.default.METODO }),
1397
+ ]));
1398
+ // O Lexador deve montar um objeto de comprimento 11 caso haja quantificador e 10 caso não haja
1399
+ if (valIndex === 0 || valIndex === 1) {
1400
+ expect(resultadoLexador.simbolos).toHaveLength(11);
1401
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
1402
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
1403
+ expect.objectContaining({ tipo: foles_1.default.QUANTIFICADOR }),
1404
+ ]));
1405
+ }
1406
+ else {
1407
+ expect(resultadoLexador.simbolos).toHaveLength(10);
1408
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
1409
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
1410
+ ]));
1411
+ }
1412
+ // Avaliador Sintático
1413
+ const resultadoAvaliadorSintatico = avaliador.analisar(resultadoLexador.simbolos);
1414
+ // O Avaliador deve montar um objeto com os devidos nomes FolEs e CSS
1415
+ expect(resultadoAvaliadorSintatico[0].modificadores[0].propriedadeCss).toStrictEqual(metodos_1.TraducaoValoresMetodos[metodos_1.MetodosTranslacao[index]]);
1416
+ // Tradutor
1417
+ const resultadoTradutor = tradutor.serializar(resultadoAvaliadorSintatico);
1418
+ // O Tradutor deve serializar de acordo e traduzir translação para translate
1419
+ expect(resultadoTradutor).toContain(metodos_1.TraducaoValoresMetodos[metodos_1.MetodosTranslacao[index]]);
1420
+ expect(resultadoTradutor).toContain(`translate(${valoresAceitos[valIndex]});`);
1421
+ }
199
1422
  }
200
1423
  });
201
- it('Atribuindo Método "calc()"', () => {
202
- for (let index = 0; index < metodos_1.MetodoCalcular.length; index += 1) {
1424
+ it('Atribuindo Método "translacao() com múltiplos valores"', () => {
1425
+ for (let index = 0; index < metodos_1.MetodosTranslacao.length; index += 1) {
203
1426
  // Lexador
204
1427
  const resultadoLexador = lexador.mapear([
205
1428
  "lmht {",
206
- `${metodos_1.MetodoCalcular[index]}: calcular(100px - 80px);`,
1429
+ `${metodos_1.MetodosTranslacao[index]}: translacao(3ch, 3mm);`,
207
1430
  "}"
208
1431
  ]);
209
- // O Lexador deve montar um objeto de comprimento 14 sem retornar nenhum erro
210
- expect(resultadoLexador.simbolos).toHaveLength(14);
1432
+ // O Lexador não deve encontrar erros
211
1433
  expect(resultadoLexador.erros).toHaveLength(0);
212
1434
  // O valor recebido deve ser mapeado como METODO
213
1435
  expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
214
1436
  expect.objectContaining({ tipo: foles_1.default.METODO }),
215
1437
  ]));
216
- // O Lexador também deve encontrar números e quantificadores no mapeamento
1438
+ // O Lexador deve montar um objeto de comprimento 14
1439
+ expect(resultadoLexador.simbolos).toHaveLength(14);
217
1440
  expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
218
1441
  expect.objectContaining({ tipo: foles_1.default.NUMERO }),
219
1442
  expect.objectContaining({ tipo: foles_1.default.QUANTIFICADOR }),
@@ -221,29 +1444,30 @@ describe('Testando Seletores que recebem MÉTODOS como valor', () => {
221
1444
  // Avaliador Sintático
222
1445
  const resultadoAvaliadorSintatico = avaliador.analisar(resultadoLexador.simbolos);
223
1446
  // O Avaliador deve montar um objeto com os devidos nomes FolEs e CSS
224
- expect(resultadoAvaliadorSintatico[0].modificadores[0].propriedadeCss).toStrictEqual(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoCalcular[index]]);
1447
+ expect(resultadoAvaliadorSintatico[0].modificadores[0].propriedadeCss).toStrictEqual(metodos_1.TraducaoValoresMetodos[metodos_1.MetodosTranslacao[index]]);
225
1448
  // Tradutor
226
1449
  const resultadoTradutor = tradutor.serializar(resultadoAvaliadorSintatico);
227
- expect(resultadoTradutor).toContain(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoCalcular[index]]);
228
- expect(resultadoTradutor).toContain('calc(100px - 80px);');
1450
+ // O Tradutor deve serializar de acordo e traduzir translacao para translate
1451
+ expect(resultadoTradutor).toContain(metodos_1.TraducaoValoresMetodos[metodos_1.MetodosTranslacao[index]]);
1452
+ expect(resultadoTradutor).toContain(`translate(3ch, 3mm);`);
229
1453
  }
230
1454
  });
231
- it('Atribuindo Método "linear-gradient()" com valor de ângulo', () => {
232
- for (let index = 0; index < metodos_1.MetodoGradienteLinear.length; index += 1) {
1455
+ it('Atribuindo Método "translação-3d()"', () => {
1456
+ for (let index = 0; index < metodos_1.MetodosTranslacao.length; index += 1) {
233
1457
  // Lexador
234
1458
  const resultadoLexador = lexador.mapear([
235
1459
  "lmht {",
236
- `${metodos_1.MetodoGradienteLinear[index]}: gradiente-linear(90deg, verde, amarelo);`,
1460
+ `${metodos_1.MetodosTranslacao[index]}: translacao-3d(5ch, 0.4in, 5em);`,
237
1461
  "}"
238
1462
  ]);
239
- // O Lexador deve montar um objeto de comprimento 15 sem retornar nenhum erro
240
- expect(resultadoLexador.simbolos).toHaveLength(15);
1463
+ // O Lexador não deve encontrar erros
241
1464
  expect(resultadoLexador.erros).toHaveLength(0);
242
1465
  // O valor recebido deve ser mapeado como METODO
243
1466
  expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
244
1467
  expect.objectContaining({ tipo: foles_1.default.METODO }),
245
1468
  ]));
246
- // O Lexador também deve encontrar número e quantificador no mapeamento
1469
+ // O Lexador deve montar um objeto de comprimento 17
1470
+ expect(resultadoLexador.simbolos).toHaveLength(17);
247
1471
  expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
248
1472
  expect.objectContaining({ tipo: foles_1.default.NUMERO }),
249
1473
  expect.objectContaining({ tipo: foles_1.default.QUANTIFICADOR }),
@@ -251,70 +1475,191 @@ describe('Testando Seletores que recebem MÉTODOS como valor', () => {
251
1475
  // Avaliador Sintático
252
1476
  const resultadoAvaliadorSintatico = avaliador.analisar(resultadoLexador.simbolos);
253
1477
  // O Avaliador deve montar um objeto com os devidos nomes FolEs e CSS
254
- expect(resultadoAvaliadorSintatico[0].modificadores[0].propriedadeCss).toStrictEqual(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoGradienteLinear[index]]);
1478
+ expect(resultadoAvaliadorSintatico[0].modificadores[0].propriedadeCss).toStrictEqual(metodos_1.TraducaoValoresMetodos[metodos_1.MetodosTranslacao[index]]);
255
1479
  // Tradutor
256
1480
  const resultadoTradutor = tradutor.serializar(resultadoAvaliadorSintatico);
257
- expect(resultadoTradutor).toContain(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoGradienteLinear[index]]);
258
- expect(resultadoTradutor).toContain('linear-gradient(90deg, green, yellow);');
1481
+ // O Tradutor deve serializar de acordo e traduzir translação-3d para translate3d
1482
+ expect(resultadoTradutor).toContain(metodos_1.TraducaoValoresMetodos[metodos_1.MetodosTranslacao[index]]);
1483
+ expect(resultadoTradutor).toContain(`translate3d(5ch, 0.4in, 5em);`);
259
1484
  }
260
1485
  });
261
- it('Atribuindo Método "linear-gradient()" com valor de posição', () => {
262
- for (let index = 0; index < metodos_1.MetodoGradienteLinear.length; index += 1) {
263
- const posicoes = ['superior', 'inferior', 'direita', 'esquerda'];
264
- for (let posIndex = 0; posIndex < posicoes.length; posIndex += 1) {
1486
+ it('Atribuindo Método "translação-3d() cobrindo todos os casos"', () => {
1487
+ for (let index = 0; index < metodos_1.MetodosTranslacao.length; index += 1) {
1488
+ const valoresAceitos = [
1489
+ '0',
1490
+ '0, 62px, 135px',
1491
+ '2.7rem, 0, 1rem',
1492
+ '5ch, 0.4in, 0',
1493
+ '0, 0, 135px',
1494
+ '0, 2.7rem, 0',
1495
+ '5ch, 0, 0',
1496
+ '42px, 62px, 135px',
1497
+ '0, 0, 0',
1498
+ ];
1499
+ for (let valIndex = 0; valIndex < valoresAceitos.length; valIndex += 1) {
265
1500
  // Lexador
266
1501
  const resultadoLexador = lexador.mapear([
267
1502
  "lmht {",
268
- `${metodos_1.MetodoGradienteLinear[index]}: gradiente-linear(${posicoes[posIndex]}, azul, vermelho);`,
1503
+ `${metodos_1.MetodosTranslacao[index]}: translação-3d(${valoresAceitos[valIndex]});`,
269
1504
  "}"
270
1505
  ]);
271
- // O Lexador deve montar um objeto de comprimento 14 sem retornar nenhum erro
272
- expect(resultadoLexador.simbolos).toHaveLength(14);
1506
+ // O Lexador não deve encontrar erros
273
1507
  expect(resultadoLexador.erros).toHaveLength(0);
274
1508
  // O valor recebido deve ser mapeado como METODO
275
1509
  expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
276
1510
  expect.objectContaining({ tipo: foles_1.default.METODO }),
277
1511
  ]));
278
- // O Lexador também deve encontrar um qualitativo no mapeamento, referente à posição
1512
+ // O Lexador deve montar um objeto de comprimento 11 caso haja quantificador e 10 caso não haja
1513
+ if (valIndex === 0) {
1514
+ expect(resultadoLexador.simbolos).toHaveLength(10);
1515
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
1516
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
1517
+ ]));
1518
+ }
1519
+ else if (valIndex === 1 || valIndex === 2 || valIndex === 3) {
1520
+ expect(resultadoLexador.simbolos).toHaveLength(16);
1521
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
1522
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
1523
+ expect.objectContaining({ tipo: foles_1.default.QUANTIFICADOR }),
1524
+ ]));
1525
+ }
1526
+ else if (valIndex === 4 || valIndex === 5 || valIndex === 6) {
1527
+ expect(resultadoLexador.simbolos).toHaveLength(15);
1528
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
1529
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
1530
+ expect.objectContaining({ tipo: foles_1.default.QUANTIFICADOR }),
1531
+ ]));
1532
+ }
1533
+ else if (valIndex === 7) {
1534
+ expect(resultadoLexador.simbolos).toHaveLength(17);
1535
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
1536
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
1537
+ expect.objectContaining({ tipo: foles_1.default.QUANTIFICADOR }),
1538
+ ]));
1539
+ }
1540
+ else {
1541
+ expect(resultadoLexador.simbolos).toHaveLength(14);
1542
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
1543
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
1544
+ ]));
1545
+ }
1546
+ // Avaliador Sintático
1547
+ const resultadoAvaliadorSintatico = avaliador.analisar(resultadoLexador.simbolos);
1548
+ // O Avaliador deve montar um objeto com os devidos nomes FolEs e CSS
1549
+ expect(resultadoAvaliadorSintatico[0].modificadores[0].propriedadeCss).toStrictEqual(metodos_1.TraducaoValoresMetodos[metodos_1.MetodosTranslacao[index]]);
1550
+ // Tradutor
1551
+ const resultadoTradutor = tradutor.serializar(resultadoAvaliadorSintatico);
1552
+ // O Tradutor deve serializar de acordo e traduzir translação-3d para translate3d
1553
+ expect(resultadoTradutor).toContain(metodos_1.TraducaoValoresMetodos[metodos_1.MetodosTranslacao[index]]);
1554
+ if (valIndex !== 8) {
1555
+ expect(resultadoTradutor).toContain(`translate3d(${valoresAceitos[valIndex]});`);
1556
+ }
1557
+ else {
1558
+ expect(resultadoTradutor).toContain(`translate3d(0);`);
1559
+ }
1560
+ }
1561
+ }
1562
+ });
1563
+ it('Atribuindo Método "translação-eixo-z()"', () => {
1564
+ for (let index = 0; index < metodos_1.MetodosTranslacao.length; index += 1) {
1565
+ const valoresAceitos = ['42px', '3ch', '0'];
1566
+ for (let valIndex = 0; valIndex < valoresAceitos.length; valIndex += 1) {
1567
+ // Lexador
1568
+ const resultadoLexador = lexador.mapear([
1569
+ "lmht {",
1570
+ `${metodos_1.MetodosTranslacao[index]}: translação-eixo-z(${valoresAceitos[valIndex]});`,
1571
+ "}"
1572
+ ]);
1573
+ // O Lexador não deve encontrar erros
1574
+ expect(resultadoLexador.erros).toHaveLength(0);
1575
+ // O valor recebido deve ser mapeado como METODO
279
1576
  expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
280
- expect.objectContaining({ tipo: foles_1.default.QUALITATIVO }),
1577
+ expect.objectContaining({ tipo: foles_1.default.METODO }),
281
1578
  ]));
1579
+ // O Lexador deve montar um objeto de comprimento 11 caso haja quantificador e 10 caso não haja
1580
+ if (valIndex === 0 || valIndex === 1) {
1581
+ expect(resultadoLexador.simbolos).toHaveLength(11);
1582
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
1583
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
1584
+ expect.objectContaining({ tipo: foles_1.default.QUANTIFICADOR }),
1585
+ ]));
1586
+ }
1587
+ else {
1588
+ expect(resultadoLexador.simbolos).toHaveLength(10);
1589
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
1590
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
1591
+ ]));
1592
+ }
282
1593
  // Avaliador Sintático
283
1594
  const resultadoAvaliadorSintatico = avaliador.analisar(resultadoLexador.simbolos);
284
1595
  // O Avaliador deve montar um objeto com os devidos nomes FolEs e CSS
285
- expect(resultadoAvaliadorSintatico[0].modificadores[0].propriedadeCss).toStrictEqual(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoGradienteLinear[index]]);
1596
+ expect(resultadoAvaliadorSintatico[0].modificadores[0].propriedadeCss).toStrictEqual(metodos_1.TraducaoValoresMetodos[metodos_1.MetodosTranslacao[index]]);
286
1597
  // Tradutor
287
1598
  const resultadoTradutor = tradutor.serializar(resultadoAvaliadorSintatico);
288
- expect(resultadoTradutor).toContain(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoGradienteLinear[index]]);
289
- switch (posicoes[posIndex]) {
290
- case 'superior':
291
- expect(resultadoTradutor).toContain('linear-gradient(0deg, blue, red);');
292
- break;
293
- case 'direita':
294
- expect(resultadoTradutor).toContain('linear-gradient(90deg, blue, red);');
295
- break;
296
- case 'inferior':
297
- expect(resultadoTradutor).toContain('linear-gradient(180deg, blue, red);');
298
- break;
299
- case 'esquerda':
300
- expect(resultadoTradutor).toContain('linear-gradient(270deg, blue, red);');
301
- break;
302
- default:
303
- break;
1599
+ // O Tradutor deve serializar de acordo e traduzir translação-eixo-z para translateZ
1600
+ expect(resultadoTradutor).toContain(metodos_1.TraducaoValoresMetodos[metodos_1.MetodosTranslacao[index]]);
1601
+ expect(resultadoTradutor).toContain(`translateZ(${valoresAceitos[valIndex]});`);
1602
+ }
1603
+ }
1604
+ });
1605
+ it('Atribuindo Método "translacao-eixo-z()"', () => {
1606
+ for (let index = 0; index < metodos_1.MetodosTranslacao.length; index += 1) {
1607
+ const valoresAceitos = ['42px', '3ch', '0'];
1608
+ for (let valIndex = 0; valIndex < valoresAceitos.length; valIndex += 1) {
1609
+ // Lexador
1610
+ const resultadoLexador = lexador.mapear([
1611
+ "lmht {",
1612
+ `${metodos_1.MetodosTranslacao[index]}: translacao-eixo-z(${valoresAceitos[valIndex]});`,
1613
+ "}"
1614
+ ]);
1615
+ // O Lexador não deve encontrar erros
1616
+ expect(resultadoLexador.erros).toHaveLength(0);
1617
+ // O valor recebido deve ser mapeado como METODO
1618
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
1619
+ expect.objectContaining({ tipo: foles_1.default.METODO }),
1620
+ ]));
1621
+ // O Lexador deve montar um objeto de comprimento 11 caso haja quantificador e 10 caso não haja
1622
+ if (valIndex === 0 || valIndex === 1) {
1623
+ expect(resultadoLexador.simbolos).toHaveLength(11);
1624
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
1625
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
1626
+ expect.objectContaining({ tipo: foles_1.default.QUANTIFICADOR }),
1627
+ ]));
1628
+ }
1629
+ else {
1630
+ expect(resultadoLexador.simbolos).toHaveLength(10);
1631
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
1632
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
1633
+ ]));
304
1634
  }
1635
+ // Avaliador Sintático
1636
+ const resultadoAvaliadorSintatico = avaliador.analisar(resultadoLexador.simbolos);
1637
+ // O Avaliador deve montar um objeto com os devidos nomes FolEs e CSS
1638
+ expect(resultadoAvaliadorSintatico[0].modificadores[0].propriedadeCss).toStrictEqual(metodos_1.TraducaoValoresMetodos[metodos_1.MetodosTranslacao[index]]);
1639
+ // Tradutor
1640
+ const resultadoTradutor = tradutor.serializar(resultadoAvaliadorSintatico);
1641
+ // O Tradutor deve serializar de acordo e traduzir translacao-eixo-z para translateZ
1642
+ expect(resultadoTradutor).toContain(metodos_1.TraducaoValoresMetodos[metodos_1.MetodosTranslacao[index]]);
1643
+ expect(resultadoTradutor).toContain(`translateZ(${valoresAceitos[valIndex]});`);
305
1644
  }
306
1645
  }
307
1646
  });
308
- it('Atribuindo Método "contrast()"', () => {
309
- for (let index = 0; index < metodos_1.MetodoContraste.length; index += 1) {
310
- const valoresAceitos = ['100px', '100%', '0.1', '0', '1', '1.75'];
1647
+ it('Atribuindo Método "translação-horizontal()"', () => {
1648
+ for (let index = 0; index < metodos_1.MetodosTranslacao.length; index += 1) {
1649
+ const valoresAceitos = ['42px', '3ch', '0'];
311
1650
  for (let valIndex = 0; valIndex < valoresAceitos.length; valIndex += 1) {
312
1651
  // Lexador
313
1652
  const resultadoLexador = lexador.mapear([
314
1653
  "lmht {",
315
- `${metodos_1.MetodoContraste[index]}: contraste(${valoresAceitos[valIndex]});`,
1654
+ `${metodos_1.MetodosTranslacao[index]}: translação-horizontal(${valoresAceitos[valIndex]});`,
316
1655
  "}"
317
1656
  ]);
1657
+ // O Lexador não deve encontrar erros
1658
+ expect(resultadoLexador.erros).toHaveLength(0);
1659
+ // O valor recebido deve ser mapeado como METODO
1660
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
1661
+ expect.objectContaining({ tipo: foles_1.default.METODO }),
1662
+ ]));
318
1663
  // O Lexador deve montar um objeto de comprimento 11 caso haja quantificador e 10 caso não haja
319
1664
  if (valIndex === 0 || valIndex === 1) {
320
1665
  expect(resultadoLexador.simbolos).toHaveLength(11);
@@ -329,20 +1674,141 @@ describe('Testando Seletores que recebem MÉTODOS como valor', () => {
329
1674
  expect.objectContaining({ tipo: foles_1.default.NUMERO }),
330
1675
  ]));
331
1676
  }
1677
+ // Avaliador Sintático
1678
+ const resultadoAvaliadorSintatico = avaliador.analisar(resultadoLexador.simbolos);
1679
+ // O Avaliador deve montar um objeto com os devidos nomes FolEs e CSS
1680
+ expect(resultadoAvaliadorSintatico[0].modificadores[0].propriedadeCss).toStrictEqual(metodos_1.TraducaoValoresMetodos[metodos_1.MetodosTranslacao[index]]);
1681
+ // Tradutor
1682
+ const resultadoTradutor = tradutor.serializar(resultadoAvaliadorSintatico);
1683
+ // O Tradutor deve serializar de acordo e traduzir translação-horizontal para translateX
1684
+ expect(resultadoTradutor).toContain(metodos_1.TraducaoValoresMetodos[metodos_1.MetodosTranslacao[index]]);
1685
+ expect(resultadoTradutor).toContain(`translateX(${valoresAceitos[valIndex]});`);
1686
+ }
1687
+ }
1688
+ });
1689
+ it('Atribuindo Método "translacao-horizontal()"', () => {
1690
+ for (let index = 0; index < metodos_1.MetodosTranslacao.length; index += 1) {
1691
+ const valoresAceitos = ['42px', '3ch', '0'];
1692
+ for (let valIndex = 0; valIndex < valoresAceitos.length; valIndex += 1) {
1693
+ // Lexador
1694
+ const resultadoLexador = lexador.mapear([
1695
+ "lmht {",
1696
+ `${metodos_1.MetodosTranslacao[index]}: translacao-horizontal(${valoresAceitos[valIndex]});`,
1697
+ "}"
1698
+ ]);
332
1699
  // O Lexador não deve encontrar erros
333
1700
  expect(resultadoLexador.erros).toHaveLength(0);
334
1701
  // O valor recebido deve ser mapeado como METODO
335
1702
  expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
336
1703
  expect.objectContaining({ tipo: foles_1.default.METODO }),
337
1704
  ]));
1705
+ // O Lexador deve montar um objeto de comprimento 11 caso haja quantificador e 10 caso não haja
1706
+ if (valIndex === 0 || valIndex === 1) {
1707
+ expect(resultadoLexador.simbolos).toHaveLength(11);
1708
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
1709
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
1710
+ expect.objectContaining({ tipo: foles_1.default.QUANTIFICADOR }),
1711
+ ]));
1712
+ }
1713
+ else {
1714
+ expect(resultadoLexador.simbolos).toHaveLength(10);
1715
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
1716
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
1717
+ ]));
1718
+ }
338
1719
  // Avaliador Sintático
339
1720
  const resultadoAvaliadorSintatico = avaliador.analisar(resultadoLexador.simbolos);
340
1721
  // O Avaliador deve montar um objeto com os devidos nomes FolEs e CSS
341
- expect(resultadoAvaliadorSintatico[0].modificadores[0].propriedadeCss).toStrictEqual(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoContraste[index]]);
1722
+ expect(resultadoAvaliadorSintatico[0].modificadores[0].propriedadeCss).toStrictEqual(metodos_1.TraducaoValoresMetodos[metodos_1.MetodosTranslacao[index]]);
342
1723
  // Tradutor
343
1724
  const resultadoTradutor = tradutor.serializar(resultadoAvaliadorSintatico);
344
- expect(resultadoTradutor).toContain(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoContraste[index]]);
345
- expect(resultadoTradutor).toContain(`contrast(${valoresAceitos[valIndex]});`);
1725
+ // O Tradutor deve serializar de acordo e traduzir translação-horizontal para translateX
1726
+ expect(resultadoTradutor).toContain(metodos_1.TraducaoValoresMetodos[metodos_1.MetodosTranslacao[index]]);
1727
+ expect(resultadoTradutor).toContain(`translateX(${valoresAceitos[valIndex]});`);
1728
+ }
1729
+ }
1730
+ });
1731
+ it('Atribuindo Método "translação-vertical()"', () => {
1732
+ for (let index = 0; index < metodos_1.MetodosTranslacao.length; index += 1) {
1733
+ const valoresAceitos = ['42px', '3ch', '0'];
1734
+ for (let valIndex = 0; valIndex < valoresAceitos.length; valIndex += 1) {
1735
+ // Lexador
1736
+ const resultadoLexador = lexador.mapear([
1737
+ "lmht {",
1738
+ `${metodos_1.MetodosTranslacao[index]}: translação-vertical(${valoresAceitos[valIndex]});`,
1739
+ "}"
1740
+ ]);
1741
+ // O Lexador não deve encontrar erros
1742
+ expect(resultadoLexador.erros).toHaveLength(0);
1743
+ // O valor recebido deve ser mapeado como METODO
1744
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
1745
+ expect.objectContaining({ tipo: foles_1.default.METODO }),
1746
+ ]));
1747
+ // O Lexador deve montar um objeto de comprimento 11 caso haja quantificador e 10 caso não haja
1748
+ if (valIndex === 0 || valIndex === 1) {
1749
+ expect(resultadoLexador.simbolos).toHaveLength(11);
1750
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
1751
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
1752
+ expect.objectContaining({ tipo: foles_1.default.QUANTIFICADOR }),
1753
+ ]));
1754
+ }
1755
+ else {
1756
+ expect(resultadoLexador.simbolos).toHaveLength(10);
1757
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
1758
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
1759
+ ]));
1760
+ }
1761
+ // Avaliador Sintático
1762
+ const resultadoAvaliadorSintatico = avaliador.analisar(resultadoLexador.simbolos);
1763
+ // O Avaliador deve montar um objeto com os devidos nomes FolEs e CSS
1764
+ expect(resultadoAvaliadorSintatico[0].modificadores[0].propriedadeCss).toStrictEqual(metodos_1.TraducaoValoresMetodos[metodos_1.MetodosTranslacao[index]]);
1765
+ // Tradutor
1766
+ const resultadoTradutor = tradutor.serializar(resultadoAvaliadorSintatico);
1767
+ // O Tradutor deve serializar de acordo e traduzir translação-vertical para translateY
1768
+ expect(resultadoTradutor).toContain(metodos_1.TraducaoValoresMetodos[metodos_1.MetodosTranslacao[index]]);
1769
+ expect(resultadoTradutor).toContain(`translateY(${valoresAceitos[valIndex]});`);
1770
+ }
1771
+ }
1772
+ });
1773
+ it('Atribuindo Método "translacao-vertical()"', () => {
1774
+ for (let index = 0; index < metodos_1.MetodosTranslacao.length; index += 1) {
1775
+ const valoresAceitos = ['42px', '3ch', '0'];
1776
+ for (let valIndex = 0; valIndex < valoresAceitos.length; valIndex += 1) {
1777
+ // Lexador
1778
+ const resultadoLexador = lexador.mapear([
1779
+ "lmht {",
1780
+ `${metodos_1.MetodosTranslacao[index]}: translacao-vertical(${valoresAceitos[valIndex]});`,
1781
+ "}"
1782
+ ]);
1783
+ // O Lexador não deve encontrar erros
1784
+ expect(resultadoLexador.erros).toHaveLength(0);
1785
+ // O valor recebido deve ser mapeado como METODO
1786
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
1787
+ expect.objectContaining({ tipo: foles_1.default.METODO }),
1788
+ ]));
1789
+ // O Lexador deve montar um objeto de comprimento 11 caso haja quantificador e 10 caso não haja
1790
+ if (valIndex === 0 || valIndex === 1) {
1791
+ expect(resultadoLexador.simbolos).toHaveLength(11);
1792
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
1793
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
1794
+ expect.objectContaining({ tipo: foles_1.default.QUANTIFICADOR }),
1795
+ ]));
1796
+ }
1797
+ else {
1798
+ expect(resultadoLexador.simbolos).toHaveLength(10);
1799
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
1800
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
1801
+ ]));
1802
+ }
1803
+ // Avaliador Sintático
1804
+ const resultadoAvaliadorSintatico = avaliador.analisar(resultadoLexador.simbolos);
1805
+ // O Avaliador deve montar um objeto com os devidos nomes FolEs e CSS
1806
+ expect(resultadoAvaliadorSintatico[0].modificadores[0].propriedadeCss).toStrictEqual(metodos_1.TraducaoValoresMetodos[metodos_1.MetodosTranslacao[index]]);
1807
+ // Tradutor
1808
+ const resultadoTradutor = tradutor.serializar(resultadoAvaliadorSintatico);
1809
+ // O Tradutor deve serializar de acordo e traduzir translação-vertical para translateY
1810
+ expect(resultadoTradutor).toContain(metodos_1.TraducaoValoresMetodos[metodos_1.MetodosTranslacao[index]]);
1811
+ expect(resultadoTradutor).toContain(`translateY(${valoresAceitos[valIndex]});`);
346
1812
  }
347
1813
  }
348
1814
  });