@designliquido/foles 0.6.1 → 0.6.3

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 (83) hide show
  1. package/fontes/avaliador-sintatico/avaliador-sintatico.d.ts +1 -0
  2. package/fontes/avaliador-sintatico/avaliador-sintatico.js +281 -26
  3. package/fontes/avaliador-sintatico/avaliador-sintatico.js.map +1 -1
  4. package/fontes/foles.js +2 -2
  5. package/fontes/foles.js.map +1 -1
  6. package/fontes/lexador/palavras-reservadas/foles.d.ts +256 -238
  7. package/fontes/lexador/palavras-reservadas/foles.js +259 -238
  8. package/fontes/lexador/palavras-reservadas/foles.js.map +1 -1
  9. package/fontes/modificadores/atributos/posicoes.d.ts +3 -0
  10. package/fontes/modificadores/atributos/posicoes.js +23 -13
  11. package/fontes/modificadores/atributos/posicoes.js.map +1 -1
  12. package/fontes/modificadores/conteudo.js +2 -2
  13. package/fontes/modificadores/conteudo.js.map +1 -1
  14. package/fontes/modificadores/deslocamento.js +5 -3
  15. package/fontes/modificadores/deslocamento.js.map +1 -1
  16. package/fontes/modificadores/espacamento.js +2 -1
  17. package/fontes/modificadores/espacamento.js.map +1 -1
  18. package/fontes/modificadores/filtro-fundo.js +1 -2
  19. package/fontes/modificadores/filtro-fundo.js.map +1 -1
  20. package/fontes/modificadores/filtro.js +1 -6
  21. package/fontes/modificadores/filtro.js.map +1 -1
  22. package/fontes/modificadores/imagem-mascara.js +2 -3
  23. package/fontes/modificadores/imagem-mascara.js.map +1 -1
  24. package/fontes/modificadores/origem-imagem-borda.js +1 -1
  25. package/fontes/modificadores/origem-imagem-borda.js.map +1 -1
  26. package/fontes/modificadores/trajeto-deslocamento.js +2 -2
  27. package/fontes/modificadores/trajeto-deslocamento.js.map +1 -1
  28. package/fontes/modificadores/validacoes/quantificador.js +2 -1
  29. package/fontes/modificadores/validacoes/quantificador.js.map +1 -1
  30. package/fontes/valores/dicionario-valores.js +28 -1
  31. package/fontes/valores/dicionario-valores.js.map +1 -1
  32. package/fontes/valores/metodos/borrar.d.ts +9 -0
  33. package/fontes/valores/metodos/borrar.js +20 -0
  34. package/fontes/valores/metodos/borrar.js.map +1 -0
  35. package/fontes/valores/metodos/brilho.d.ts +9 -0
  36. package/fontes/valores/metodos/brilho.js +20 -0
  37. package/fontes/valores/metodos/brilho.js.map +1 -0
  38. package/fontes/valores/metodos/calcular.d.ts +12 -0
  39. package/fontes/valores/metodos/calcular.js +20 -0
  40. package/fontes/valores/metodos/calcular.js.map +1 -0
  41. package/fontes/valores/metodos/contraste.d.ts +9 -0
  42. package/fontes/valores/metodos/contraste.js +20 -0
  43. package/fontes/valores/metodos/contraste.js.map +1 -0
  44. package/fontes/valores/metodos/escala-cinza.d.ts +9 -0
  45. package/fontes/valores/metodos/escala-cinza.js +20 -0
  46. package/fontes/valores/metodos/escala-cinza.js.map +1 -0
  47. package/fontes/valores/metodos/gradiente-linear.d.ts +11 -0
  48. package/fontes/valores/metodos/gradiente-linear.js +22 -0
  49. package/fontes/valores/metodos/gradiente-linear.js.map +1 -0
  50. package/fontes/valores/metodos/inverter.d.ts +9 -0
  51. package/fontes/valores/metodos/inverter.js +20 -0
  52. package/fontes/valores/metodos/inverter.js.map +1 -0
  53. package/fontes/valores/metodos/opacar.d.ts +9 -0
  54. package/fontes/valores/metodos/opacar.js +20 -0
  55. package/fontes/valores/metodos/opacar.js.map +1 -0
  56. package/fontes/valores/metodos/projetar-sombra.d.ts +14 -0
  57. package/fontes/valores/metodos/projetar-sombra.js +43 -0
  58. package/fontes/valores/metodos/projetar-sombra.js.map +1 -0
  59. package/fontes/valores/metodos/raio.d.ts +10 -0
  60. package/fontes/valores/metodos/raio.js +23 -0
  61. package/fontes/valores/metodos/raio.js.map +1 -0
  62. package/fontes/valores/metodos/rotacionar-matiz.d.ts +9 -0
  63. package/fontes/valores/metodos/rotacionar-matiz.js +20 -0
  64. package/fontes/valores/metodos/rotacionar-matiz.js.map +1 -0
  65. package/fontes/valores/metodos/saturar.d.ts +9 -0
  66. package/fontes/valores/metodos/saturar.js +20 -0
  67. package/fontes/valores/metodos/saturar.js.map +1 -0
  68. package/fontes/valores/metodos/sepia.d.ts +9 -0
  69. package/fontes/valores/metodos/sepia.js +20 -0
  70. package/fontes/valores/metodos/sepia.js.map +1 -0
  71. package/package.json +3 -2
  72. package/testes/listas/metodos.d.ts +13 -0
  73. package/testes/listas/metodos.js +63 -7
  74. package/testes/listas/metodos.js.map +1 -1
  75. package/testes/listas/valor-numerico.d.ts +1 -0
  76. package/testes/listas/valor-numerico.js +14 -10
  77. package/testes/listas/valor-numerico.js.map +1 -1
  78. package/testes/modificadores/metodos.test.js +653 -37
  79. package/testes/modificadores/metodos.test.js.map +1 -1
  80. package/testes/modificadores/valor-numerico.test.js +114 -28
  81. package/testes/modificadores/valor-numerico.test.js.map +1 -1
  82. package/testes/tradutor.test.js +1 -1
  83. package/testes/tradutor.test.js.map +1 -1
@@ -21,6 +21,190 @@ 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 "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) {
110
+ // Lexador
111
+ const resultadoLexador = lexador.mapear([
112
+ "lmht {",
113
+ `${metodos_1.MetodoCalcular[index]}: calcular(100px - 80px);`,
114
+ "}"
115
+ ]);
116
+ // O Lexador deve montar um objeto de comprimento 14 sem retornar nenhum erro
117
+ expect(resultadoLexador.simbolos).toHaveLength(14);
118
+ expect(resultadoLexador.erros).toHaveLength(0);
119
+ // O valor recebido deve ser mapeado como METODO
120
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
121
+ expect.objectContaining({ tipo: foles_1.default.METODO }),
122
+ ]));
123
+ // O Lexador também deve encontrar números e quantificadores no mapeamento
124
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
125
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
126
+ expect.objectContaining({ tipo: foles_1.default.QUANTIFICADOR }),
127
+ ]));
128
+ // Avaliador Sintático
129
+ const resultadoAvaliadorSintatico = avaliador.analisar(resultadoLexador.simbolos);
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
133
+ const resultadoTradutor = tradutor.serializar(resultadoAvaliadorSintatico);
134
+ expect(resultadoTradutor).toContain(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoCalcular[index]]);
135
+ expect(resultadoTradutor).toContain('calc(100px - 80px);');
136
+ }
137
+ });
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) {
181
+ // Lexador
182
+ const resultadoLexador = lexador.mapear([
183
+ "lmht {",
184
+ `${metodos_1.MetodoCurvaCubica[index]}: curva-cúbica(0.42, 0.0, 1.0, 1.0);`,
185
+ "}"
186
+ ]);
187
+ // O Lexador deve montar um objeto de comprimento 16 sem retornar nenhum erro
188
+ expect(resultadoLexador.simbolos).toHaveLength(16);
189
+ expect(resultadoLexador.erros).toHaveLength(0);
190
+ // O valor recebido deve ser mapeado como METODO
191
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
192
+ expect.objectContaining({ tipo: foles_1.default.METODO }),
193
+ ]));
194
+ // O Lexador também deve encontrar números no mapeamento
195
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
196
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
197
+ ]));
198
+ // Avaliador Sintático
199
+ const resultadoAvaliadorSintatico = avaliador.analisar(resultadoLexador.simbolos);
200
+ // O Avaliador deve montar um objeto com os devidos nomes FolEs e CSS
201
+ expect(resultadoAvaliadorSintatico[0].modificadores[0].propriedadeCss).toStrictEqual(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoCurvaCubica[index]]);
202
+ // // // // Tradutor
203
+ const resultadoTradutor = tradutor.serializar(resultadoAvaliadorSintatico);
204
+ expect(resultadoTradutor).toContain(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoCurvaCubica[index]]);
205
+ expect(resultadoTradutor).toContain('cubic-bezier(0.42, 0, 1, 1);');
206
+ }
207
+ });
24
208
  it('Atribuindo Método "encaixar-conteúdo" (fit-content)', () => {
25
209
  for (let index = 0; index < metodos_1.MetodoEncaixarConteudo.length; index += 1) {
26
210
  // Lexador
@@ -50,6 +234,167 @@ describe('Testando Seletores que recebem MÉTODOS como valor', () => {
50
234
  expect(resultadoTradutor).toContain('fit-content(200px)');
51
235
  }
52
236
  });
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 "gradiente-linear()" com valor de ângulo', () => {
280
+ for (let index = 0; index < metodos_1.MetodoGradienteLinear.length; index += 1) {
281
+ // Lexador
282
+ const resultadoLexador = lexador.mapear([
283
+ "lmht {",
284
+ `${metodos_1.MetodoGradienteLinear[index]}: gradiente-linear(90deg, verde, amarelo);`,
285
+ "}"
286
+ ]);
287
+ // O Lexador deve montar um objeto de comprimento 15 sem retornar nenhum erro
288
+ expect(resultadoLexador.simbolos).toHaveLength(15);
289
+ expect(resultadoLexador.erros).toHaveLength(0);
290
+ // O valor recebido deve ser mapeado como METODO
291
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
292
+ expect.objectContaining({ tipo: foles_1.default.METODO }),
293
+ ]));
294
+ // O Lexador também deve encontrar número e quantificador no mapeamento
295
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
296
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
297
+ expect.objectContaining({ tipo: foles_1.default.QUANTIFICADOR }),
298
+ ]));
299
+ // Avaliador Sintático
300
+ const resultadoAvaliadorSintatico = avaliador.analisar(resultadoLexador.simbolos);
301
+ // O Avaliador deve montar um objeto com os devidos nomes FolEs e CSS
302
+ expect(resultadoAvaliadorSintatico[0].modificadores[0].propriedadeCss).toStrictEqual(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoGradienteLinear[index]]);
303
+ // Tradutor
304
+ const resultadoTradutor = tradutor.serializar(resultadoAvaliadorSintatico);
305
+ expect(resultadoTradutor).toContain(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoGradienteLinear[index]]);
306
+ expect(resultadoTradutor).toContain('linear-gradient(90deg, green, yellow);');
307
+ }
308
+ });
309
+ it('Atribuindo Método "gradiente-linear()" com valor de posição', () => {
310
+ for (let index = 0; index < metodos_1.MetodoGradienteLinear.length; index += 1) {
311
+ const posicoes = ['superior', 'inferior', 'direita', 'esquerda'];
312
+ for (let posIndex = 0; posIndex < posicoes.length; posIndex += 1) {
313
+ // Lexador
314
+ const resultadoLexador = lexador.mapear([
315
+ "lmht {",
316
+ `${metodos_1.MetodoGradienteLinear[index]}: gradiente-linear(${posicoes[posIndex]}, azul, vermelho);`,
317
+ "}"
318
+ ]);
319
+ // O Lexador deve montar um objeto de comprimento 14 sem retornar nenhum erro
320
+ expect(resultadoLexador.simbolos).toHaveLength(14);
321
+ expect(resultadoLexador.erros).toHaveLength(0);
322
+ // O valor recebido deve ser mapeado como METODO
323
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
324
+ expect.objectContaining({ tipo: foles_1.default.METODO }),
325
+ ]));
326
+ // O Lexador também deve encontrar um qualitativo no mapeamento, referente à posição
327
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
328
+ expect.objectContaining({ tipo: foles_1.default.QUALITATIVO }),
329
+ ]));
330
+ // Avaliador Sintático
331
+ const resultadoAvaliadorSintatico = avaliador.analisar(resultadoLexador.simbolos);
332
+ // O Avaliador deve montar um objeto com os devidos nomes FolEs e CSS
333
+ expect(resultadoAvaliadorSintatico[0].modificadores[0].propriedadeCss).toStrictEqual(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoGradienteLinear[index]]);
334
+ // Tradutor
335
+ const resultadoTradutor = tradutor.serializar(resultadoAvaliadorSintatico);
336
+ expect(resultadoTradutor).toContain(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoGradienteLinear[index]]);
337
+ switch (posicoes[posIndex]) {
338
+ case 'superior':
339
+ expect(resultadoTradutor).toContain('linear-gradient(0deg, blue, red);');
340
+ break;
341
+ case 'direita':
342
+ expect(resultadoTradutor).toContain('linear-gradient(90deg, blue, red);');
343
+ break;
344
+ case 'inferior':
345
+ expect(resultadoTradutor).toContain('linear-gradient(180deg, blue, red);');
346
+ break;
347
+ case 'esquerda':
348
+ expect(resultadoTradutor).toContain('linear-gradient(270deg, blue, red);');
349
+ break;
350
+ default:
351
+ break;
352
+ }
353
+ }
354
+ }
355
+ });
356
+ it('Atribuindo Método "inverter()"', () => {
357
+ for (let index = 0; index < metodos_1.MetodoInverter.length; index += 1) {
358
+ const valoresAceitos = ['100px', '100%', '0.1', '0', '1', '1.75'];
359
+ for (let valIndex = 0; valIndex < valoresAceitos.length; valIndex += 1) {
360
+ // Lexador
361
+ const resultadoLexador = lexador.mapear([
362
+ "lmht {",
363
+ `${metodos_1.MetodoInverter[index]}: inverter(${valoresAceitos[valIndex]});`,
364
+ "}"
365
+ ]);
366
+ // O Lexador não deve encontrar erros
367
+ expect(resultadoLexador.erros).toHaveLength(0);
368
+ // O valor recebido deve ser mapeado como METODO
369
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
370
+ expect.objectContaining({ tipo: foles_1.default.METODO }),
371
+ ]));
372
+ // O Lexador deve montar um objeto de comprimento 11 caso haja quantificador e 10 caso não haja
373
+ if (valIndex === 0 || valIndex === 1) {
374
+ expect(resultadoLexador.simbolos).toHaveLength(11);
375
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
376
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
377
+ expect.objectContaining({ tipo: foles_1.default.QUANTIFICADOR }),
378
+ ]));
379
+ }
380
+ else {
381
+ expect(resultadoLexador.simbolos).toHaveLength(10);
382
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
383
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
384
+ ]));
385
+ }
386
+ // Avaliador Sintático
387
+ const resultadoAvaliadorSintatico = avaliador.analisar(resultadoLexador.simbolos);
388
+ // O Avaliador deve montar um objeto com os devidos nomes FolEs e CSS
389
+ expect(resultadoAvaliadorSintatico[0].modificadores[0].propriedadeCss).toStrictEqual(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoInverter[index]]);
390
+ // Tradutor
391
+ const resultadoTradutor = tradutor.serializar(resultadoAvaliadorSintatico);
392
+ // O Tradutor deve serializar de acordo e traduzir inverter para invert
393
+ expect(resultadoTradutor).toContain(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoInverter[index]]);
394
+ expect(resultadoTradutor).toContain(`invert(${valoresAceitos[valIndex]});`);
395
+ }
396
+ }
397
+ });
53
398
  it('Atribuindo Método "limitar" (clamp)', () => {
54
399
  for (let index = 0; index < metodos_1.MetodoLimitar.length; index += 1) {
55
400
  // Lexador
@@ -80,6 +425,35 @@ describe('Testando Seletores que recebem MÉTODOS como valor', () => {
80
425
  expect(resultadoTradutor).toContain('clamp(10vw, 20em, 100vw);');
81
426
  }
82
427
  });
428
+ it('Atribuindo Método "linear()"', () => {
429
+ for (let index = 0; index < metodos_1.MetodoLinear.length; index += 1) {
430
+ // Lexador
431
+ const resultadoLexador = lexador.mapear([
432
+ "lmht {",
433
+ `${metodos_1.MetodoLinear[index]}: linear(0, 0.25, 1);`,
434
+ "}"
435
+ ]);
436
+ // O Lexador deve montar um objeto de comprimento 14 sem retornar nenhum erro
437
+ expect(resultadoLexador.simbolos).toHaveLength(14);
438
+ expect(resultadoLexador.erros).toHaveLength(0);
439
+ // O valor recebido deve ser mapeado como METODO
440
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
441
+ expect.objectContaining({ tipo: foles_1.default.METODO }),
442
+ ]));
443
+ // O Lexador também deve encontrar números no mapeamento
444
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
445
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
446
+ ]));
447
+ // Avaliador Sintático
448
+ const resultadoAvaliadorSintatico = avaliador.analisar(resultadoLexador.simbolos);
449
+ // O Avaliador deve montar um objeto com os devidos nomes FolEs e CSS
450
+ expect(resultadoAvaliadorSintatico[0].modificadores[0].propriedadeCss).toStrictEqual(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoLinear[index]]);
451
+ // // // // Tradutor
452
+ const resultadoTradutor = tradutor.serializar(resultadoAvaliadorSintatico);
453
+ expect(resultadoTradutor).toContain(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoLinear[index]]);
454
+ expect(resultadoTradutor).toContain('linear(0, 0.25, 1);');
455
+ }
456
+ });
83
457
  it('Atribuindo Método "minmax()"', () => {
84
458
  for (let index = 0; index < metodos_1.MetodoMinMax.length; index += 1) {
85
459
  // Lexador
@@ -110,6 +484,48 @@ describe('Testando Seletores que recebem MÉTODOS como valor', () => {
110
484
  expect(resultadoTradutor).toContain('minmax(100px, max-content);');
111
485
  }
112
486
  });
487
+ it('Atribuindo Método "opacar()"', () => {
488
+ for (let index = 0; index < metodos_1.MetodoOpacar.length; index += 1) {
489
+ const valoresAceitos = ['100px', '100%', '0.1', '0', '1', '1.75'];
490
+ for (let valIndex = 0; valIndex < valoresAceitos.length; valIndex += 1) {
491
+ // Lexador
492
+ const resultadoLexador = lexador.mapear([
493
+ "lmht {",
494
+ `${metodos_1.MetodoOpacar[index]}: opacar(${valoresAceitos[valIndex]});`,
495
+ "}"
496
+ ]);
497
+ // O Lexador não deve encontrar erros
498
+ expect(resultadoLexador.erros).toHaveLength(0);
499
+ // O valor recebido deve ser mapeado como METODO
500
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
501
+ expect.objectContaining({ tipo: foles_1.default.METODO }),
502
+ ]));
503
+ // O Lexador deve montar um objeto de comprimento 11 caso haja quantificador e 10 caso não haja
504
+ if (valIndex === 0 || valIndex === 1) {
505
+ expect(resultadoLexador.simbolos).toHaveLength(11);
506
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
507
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
508
+ expect.objectContaining({ tipo: foles_1.default.QUANTIFICADOR }),
509
+ ]));
510
+ }
511
+ else {
512
+ expect(resultadoLexador.simbolos).toHaveLength(10);
513
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
514
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
515
+ ]));
516
+ }
517
+ // Avaliador Sintático
518
+ const resultadoAvaliadorSintatico = avaliador.analisar(resultadoLexador.simbolos);
519
+ // O Avaliador deve montar um objeto com os devidos nomes FolEs e CSS
520
+ expect(resultadoAvaliadorSintatico[0].modificadores[0].propriedadeCss).toStrictEqual(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoOpacar[index]]);
521
+ // Tradutor
522
+ const resultadoTradutor = tradutor.serializar(resultadoAvaliadorSintatico);
523
+ // O Tradutor deve serializar de acordo e traduzir opacar para opacity
524
+ expect(resultadoTradutor).toContain(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoOpacar[index]]);
525
+ expect(resultadoTradutor).toContain(`opacity(${valoresAceitos[valIndex]});`);
526
+ }
527
+ }
528
+ });
113
529
  it('Atribuindo Método "passos" (steps)', () => {
114
530
  for (let index = 0; index < metodos_1.MetodoPassos.length; index += 1) {
115
531
  // Lexador
@@ -140,62 +556,262 @@ describe('Testando Seletores que recebem MÉTODOS como valor', () => {
140
556
  expect(resultadoTradutor).toContain('steps(2, jump-start);');
141
557
  }
142
558
  });
143
- it('Atribuindo Método "curva-cúbica" (cubic-bezier)', () => {
144
- for (let index = 0; index < metodos_1.MetodoCurvaCubica.length; index += 1) {
145
- // Lexador
146
- const resultadoLexador = lexador.mapear([
147
- "lmht {",
148
- `${metodos_1.MetodoCurvaCubica[index]}: curva-cúbica(0.42, 0.0, 1.0, 1.0);`,
149
- "}"
150
- ]);
151
- // O Lexador deve montar um objeto de comprimento 16 sem retornar nenhum erro
152
- expect(resultadoLexador.simbolos).toHaveLength(16);
153
- expect(resultadoLexador.erros).toHaveLength(0);
154
- // O valor recebido deve ser mapeado como METODO
155
- expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
156
- expect.objectContaining({ tipo: foles_1.default.METODO }),
157
- ]));
158
- // O Lexador também deve encontrar números no mapeamento
159
- expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
160
- expect.objectContaining({ tipo: foles_1.default.NUMERO }),
161
- ]));
162
- // Avaliador Sintático
163
- const resultadoAvaliadorSintatico = avaliador.analisar(resultadoLexador.simbolos);
164
- // 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
167
- 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);');
559
+ it('Atribuindo Método "projetar-sombra()" com valores de comprimento somente', () => {
560
+ for (let index = 0; index < metodos_1.MetodoProjetarSombra.length; index += 1) {
561
+ const comprimentos = ['15px 15px', '15px 15px 15px', '0.5rem 0.5rem', '0.5rem 0.5rem 1rem'];
562
+ for (let posIndex = 0; posIndex < comprimentos.length; posIndex += 1) {
563
+ // Lexador
564
+ const resultadoLexador = lexador.mapear([
565
+ "lmht {",
566
+ `${metodos_1.MetodoProjetarSombra[index]}: projetar-sombra(${comprimentos[posIndex]});`,
567
+ "}"
568
+ ]);
569
+ // O Lexador deve montar um objeto de acordo, sem retornar nenhum erro
570
+ expect(resultadoLexador.erros).toHaveLength(0);
571
+ // O valor recebido deve ser mapeado como METODO
572
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
573
+ expect.objectContaining({ tipo: foles_1.default.METODO }),
574
+ ]));
575
+ // O Lexador também deve sempre encontrar valores e quantificadores na operação
576
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
577
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
578
+ expect.objectContaining({ tipo: foles_1.default.QUANTIFICADOR }),
579
+ ]));
580
+ // Avaliador Sintático
581
+ const resultadoAvaliadorSintatico = avaliador.analisar(resultadoLexador.simbolos);
582
+ // O Avaliador deve montar um objeto com os devidos nomes FolEs e CSS
583
+ expect(resultadoAvaliadorSintatico[0].modificadores[0].propriedadeCss).toStrictEqual(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoProjetarSombra[index]]);
584
+ // Tradutor
585
+ const resultadoTradutor = tradutor.serializar(resultadoAvaliadorSintatico);
586
+ // O Tradutor deve serializar de acordo e traduzir projetar-sombra para drop-shadow
587
+ expect(resultadoTradutor).toContain(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoProjetarSombra[index]]);
588
+ expect(resultadoTradutor).toContain(`drop-shadow(${comprimentos[posIndex]});`);
589
+ }
170
590
  }
171
591
  });
172
- it('Atribuindo Método "linear()"', () => {
173
- for (let index = 0; index < metodos_1.MetodoLinear.length; index += 1) {
592
+ it('Atribuindo Método "projetar-sombra()" com valores de cor e de comprimento', () => {
593
+ for (let index = 0; index < metodos_1.MetodoProjetarSombra.length; index += 1) {
594
+ const comprimentos = ['15px 15px vermelho', '15px 15px 15px vermelho', 'vermelho 0.5rem 0.5rem', 'vermelho 0.5rem 0.5rem 1rem'];
595
+ for (let posIndex = 0; posIndex < comprimentos.length; posIndex += 1) {
596
+ // Lexador
597
+ const resultadoLexador = lexador.mapear([
598
+ "lmht {",
599
+ `${metodos_1.MetodoProjetarSombra[index]}: projetar-sombra(${comprimentos[posIndex]});`,
600
+ "}"
601
+ ]);
602
+ // O Lexador deve montar um objeto de acordo, sem retornar nenhum erro
603
+ expect(resultadoLexador.erros).toHaveLength(0);
604
+ // O valor recebido deve ser mapeado como METODO
605
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
606
+ expect.objectContaining({ tipo: foles_1.default.METODO }),
607
+ ]));
608
+ // O Lexador também deve sempre encontrar valores e quantificadores na operação
609
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
610
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
611
+ expect.objectContaining({ tipo: foles_1.default.QUANTIFICADOR }),
612
+ ]));
613
+ // Avaliador Sintático
614
+ const resultadoAvaliadorSintatico = avaliador.analisar(resultadoLexador.simbolos);
615
+ // O Avaliador deve montar um objeto com os devidos nomes FolEs e CSS
616
+ expect(resultadoAvaliadorSintatico[0].modificadores[0].propriedadeCss).toStrictEqual(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoProjetarSombra[index]]);
617
+ // Tradutor
618
+ const resultadoTradutor = tradutor.serializar(resultadoAvaliadorSintatico);
619
+ // O Tradutor deve serializar de acordo e traduzir vermelho para red
620
+ expect(resultadoTradutor).toContain(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoProjetarSombra[index]]);
621
+ expect(resultadoTradutor).toContain('red');
622
+ }
623
+ }
624
+ });
625
+ it('Atribuindo Método "raio()" com valores de posição e número/quantificador', () => {
626
+ for (let index = 0; index < metodos_1.MetodoRaio.length; index += 1) {
627
+ const valoresAceitos = ['lado-mais-próximo', 'lado-mais-proximo', 'canto-mais-próximo', 'canto-mais-proximo', 'lado-mais-distante', 'canto-mais-distante', 'lados', 'conter'];
628
+ const traducaoValoresAceitos = ['closest-side', 'closest-side', 'closest-corner', 'closest-corner', 'farthest-side', 'farthest-corner', 'sides', 'contain'];
629
+ for (let valIndex = 0; valIndex < valoresAceitos.length; valIndex += 1) {
630
+ // Lexador
631
+ const resultadoLexador = lexador.mapear([
632
+ "lmht {",
633
+ `${metodos_1.MetodoRaio[index]}: raio(${valoresAceitos[valIndex]} 200deg);`,
634
+ "}"
635
+ ]);
636
+ // O Lexador não deve encontrar erros
637
+ expect(resultadoLexador.erros).toHaveLength(0);
638
+ // O valor recebido deve ser mapeado como METODO
639
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
640
+ expect.objectContaining({ tipo: foles_1.default.METODO }),
641
+ ]));
642
+ // O Lexador deve montar um objeto de comprimento 12
643
+ expect(resultadoLexador.simbolos).toHaveLength(12);
644
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
645
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
646
+ expect.objectContaining({ tipo: foles_1.default.QUANTIFICADOR }),
647
+ ]));
648
+ // Avaliador Sintático
649
+ const resultadoAvaliadorSintatico = avaliador.analisar(resultadoLexador.simbolos);
650
+ // O Avaliador deve montar um objeto com os devidos nomes FolEs e CSS
651
+ expect(resultadoAvaliadorSintatico[0].modificadores[0].propriedadeCss).toStrictEqual(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoRaio[index]]);
652
+ // Tradutor
653
+ const resultadoTradutor = tradutor.serializar(resultadoAvaliadorSintatico);
654
+ // O Tradutor deve serializar de acordo e traduzir raio para ray
655
+ expect(resultadoTradutor).toContain(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoRaio[index]]);
656
+ expect(resultadoTradutor).toContain(`ray(${traducaoValoresAceitos[valIndex]} 200deg);`);
657
+ }
658
+ }
659
+ });
660
+ it('Atribuindo Método "raio()" com somente número/quantificador', () => {
661
+ for (let index = 0; index < metodos_1.MetodoRaio.length; index += 1) {
174
662
  // Lexador
175
663
  const resultadoLexador = lexador.mapear([
176
664
  "lmht {",
177
- `${metodos_1.MetodoLinear[index]}: linear(0, 0.25, 1);`,
665
+ `${metodos_1.MetodoRaio[index]}: raio(200deg);`,
178
666
  "}"
179
667
  ]);
180
- // O Lexador deve montar um objeto de comprimento 14 sem retornar nenhum erro
181
- expect(resultadoLexador.simbolos).toHaveLength(14);
668
+ // O Lexador não deve encontrar erros
182
669
  expect(resultadoLexador.erros).toHaveLength(0);
183
670
  // O valor recebido deve ser mapeado como METODO
184
671
  expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
185
672
  expect.objectContaining({ tipo: foles_1.default.METODO }),
186
673
  ]));
187
- // O Lexador também deve encontrar números no mapeamento
674
+ // O Lexador deve montar um objeto de comprimento 11
675
+ expect(resultadoLexador.simbolos).toHaveLength(11);
188
676
  expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
189
677
  expect.objectContaining({ tipo: foles_1.default.NUMERO }),
678
+ expect.objectContaining({ tipo: foles_1.default.QUANTIFICADOR }),
190
679
  ]));
191
680
  // Avaliador Sintático
192
681
  const resultadoAvaliadorSintatico = avaliador.analisar(resultadoLexador.simbolos);
193
682
  // 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
683
+ expect(resultadoAvaliadorSintatico[0].modificadores[0].propriedadeCss).toStrictEqual(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoRaio[index]]);
684
+ // Tradutor
196
685
  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);');
686
+ // O Tradutor deve serializar de acordo e traduzir raio para ray
687
+ expect(resultadoTradutor).toContain(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoRaio[index]]);
688
+ expect(resultadoTradutor).toContain(`ray(200deg);`);
689
+ }
690
+ });
691
+ it('Atribuindo Método "rotacionar-matiz()"', () => {
692
+ for (let index = 0; index < metodos_1.MetodoRotacionarMatiz.length; index += 1) {
693
+ const valoresAceitos = ['100px', '100%', '0.1', '0', '1', '1.75'];
694
+ for (let valIndex = 0; valIndex < valoresAceitos.length; valIndex += 1) {
695
+ // Lexador
696
+ const resultadoLexador = lexador.mapear([
697
+ "lmht {",
698
+ `${metodos_1.MetodoRotacionarMatiz[index]}: rotacionar-matiz(${valoresAceitos[valIndex]});`,
699
+ "}"
700
+ ]);
701
+ // O Lexador não deve encontrar erros
702
+ expect(resultadoLexador.erros).toHaveLength(0);
703
+ // O valor recebido deve ser mapeado como METODO
704
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
705
+ expect.objectContaining({ tipo: foles_1.default.METODO }),
706
+ ]));
707
+ // O Lexador deve montar um objeto de comprimento 11 caso haja quantificador e 10 caso não haja
708
+ if (valIndex === 0 || valIndex === 1) {
709
+ expect(resultadoLexador.simbolos).toHaveLength(11);
710
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
711
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
712
+ expect.objectContaining({ tipo: foles_1.default.QUANTIFICADOR }),
713
+ ]));
714
+ }
715
+ else {
716
+ expect(resultadoLexador.simbolos).toHaveLength(10);
717
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
718
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
719
+ ]));
720
+ }
721
+ // Avaliador Sintático
722
+ const resultadoAvaliadorSintatico = avaliador.analisar(resultadoLexador.simbolos);
723
+ // O Avaliador deve montar um objeto com os devidos nomes FolEs e CSS
724
+ expect(resultadoAvaliadorSintatico[0].modificadores[0].propriedadeCss).toStrictEqual(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoRotacionarMatiz[index]]);
725
+ // Tradutor
726
+ const resultadoTradutor = tradutor.serializar(resultadoAvaliadorSintatico);
727
+ // O Tradutor deve serializar de acordo e traduzir rotacionar-matiz para hue-rotate
728
+ expect(resultadoTradutor).toContain(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoRotacionarMatiz[index]]);
729
+ expect(resultadoTradutor).toContain(`hue-rotate(${valoresAceitos[valIndex]});`);
730
+ }
731
+ }
732
+ });
733
+ it('Atribuindo Método "saturar()"', () => {
734
+ for (let index = 0; index < metodos_1.MetodoSaturar.length; index += 1) {
735
+ const valoresAceitos = ['100px', '100%', '0.1', '0', '1', '1.75'];
736
+ for (let valIndex = 0; valIndex < valoresAceitos.length; valIndex += 1) {
737
+ // Lexador
738
+ const resultadoLexador = lexador.mapear([
739
+ "lmht {",
740
+ `${metodos_1.MetodoSaturar[index]}: saturar(${valoresAceitos[valIndex]});`,
741
+ "}"
742
+ ]);
743
+ // O Lexador não deve encontrar erros
744
+ expect(resultadoLexador.erros).toHaveLength(0);
745
+ // O valor recebido deve ser mapeado como METODO
746
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
747
+ expect.objectContaining({ tipo: foles_1.default.METODO }),
748
+ ]));
749
+ // O Lexador deve montar um objeto de comprimento 11 caso haja quantificador e 10 caso não haja
750
+ if (valIndex === 0 || valIndex === 1) {
751
+ expect(resultadoLexador.simbolos).toHaveLength(11);
752
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
753
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
754
+ expect.objectContaining({ tipo: foles_1.default.QUANTIFICADOR }),
755
+ ]));
756
+ }
757
+ else {
758
+ expect(resultadoLexador.simbolos).toHaveLength(10);
759
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
760
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
761
+ ]));
762
+ }
763
+ // Avaliador Sintático
764
+ const resultadoAvaliadorSintatico = avaliador.analisar(resultadoLexador.simbolos);
765
+ // O Avaliador deve montar um objeto com os devidos nomes FolEs e CSS
766
+ expect(resultadoAvaliadorSintatico[0].modificadores[0].propriedadeCss).toStrictEqual(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoSaturar[index]]);
767
+ // Tradutor
768
+ const resultadoTradutor = tradutor.serializar(resultadoAvaliadorSintatico);
769
+ // O Tradutor deve serializar de acordo e traduzir saturar para saturate
770
+ expect(resultadoTradutor).toContain(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoSaturar[index]]);
771
+ expect(resultadoTradutor).toContain(`saturate(${valoresAceitos[valIndex]});`);
772
+ }
773
+ }
774
+ });
775
+ it('Atribuindo Método "sepia()"', () => {
776
+ for (let index = 0; index < metodos_1.MetodoSepia.length; index += 1) {
777
+ const valoresAceitos = ['100px', '100%', '0.1', '0', '1', '1.75'];
778
+ for (let valIndex = 0; valIndex < valoresAceitos.length; valIndex += 1) {
779
+ // Lexador
780
+ const resultadoLexador = lexador.mapear([
781
+ "lmht {",
782
+ `${metodos_1.MetodoSepia[index]}: sepia(${valoresAceitos[valIndex]});`,
783
+ "}"
784
+ ]);
785
+ // O Lexador não deve encontrar erros
786
+ expect(resultadoLexador.erros).toHaveLength(0);
787
+ // O valor recebido deve ser mapeado como METODO
788
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
789
+ expect.objectContaining({ tipo: foles_1.default.METODO }),
790
+ ]));
791
+ // O Lexador deve montar um objeto de comprimento 11 caso haja quantificador e 10 caso não haja
792
+ if (valIndex === 0 || valIndex === 1) {
793
+ expect(resultadoLexador.simbolos).toHaveLength(11);
794
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
795
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
796
+ expect.objectContaining({ tipo: foles_1.default.QUANTIFICADOR }),
797
+ ]));
798
+ }
799
+ else {
800
+ expect(resultadoLexador.simbolos).toHaveLength(10);
801
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
802
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
803
+ ]));
804
+ }
805
+ // Avaliador Sintático
806
+ const resultadoAvaliadorSintatico = avaliador.analisar(resultadoLexador.simbolos);
807
+ // O Avaliador deve montar um objeto com os devidos nomes FolEs e CSS
808
+ expect(resultadoAvaliadorSintatico[0].modificadores[0].propriedadeCss).toStrictEqual(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoSepia[index]]);
809
+ // Tradutor
810
+ const resultadoTradutor = tradutor.serializar(resultadoAvaliadorSintatico);
811
+ // O Tradutor deve serializar de acordo e traduzir sépia para sepia
812
+ expect(resultadoTradutor).toContain(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoSepia[index]]);
813
+ expect(resultadoTradutor).toContain(`sepia(${valoresAceitos[valIndex]});`);
814
+ }
199
815
  }
200
816
  });
201
817
  });