@designliquido/foles 0.6.2 → 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 (56) hide show
  1. package/fontes/avaliador-sintatico/avaliador-sintatico.js +188 -25
  2. package/fontes/avaliador-sintatico/avaliador-sintatico.js.map +1 -1
  3. package/fontes/lexador/palavras-reservadas/foles.d.ts +253 -238
  4. package/fontes/lexador/palavras-reservadas/foles.js +256 -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/validacoes/quantificador.js +2 -1
  18. package/fontes/modificadores/validacoes/quantificador.js.map +1 -1
  19. package/fontes/valores/dicionario-valores.js +22 -1
  20. package/fontes/valores/dicionario-valores.js.map +1 -1
  21. package/fontes/valores/metodos/borrar.d.ts +9 -0
  22. package/fontes/valores/metodos/borrar.js +20 -0
  23. package/fontes/valores/metodos/borrar.js.map +1 -0
  24. package/fontes/valores/metodos/brilho.d.ts +9 -0
  25. package/fontes/valores/metodos/brilho.js +20 -0
  26. package/fontes/valores/metodos/brilho.js.map +1 -0
  27. package/fontes/valores/metodos/escala-cinza.d.ts +9 -0
  28. package/fontes/valores/metodos/escala-cinza.js +20 -0
  29. package/fontes/valores/metodos/escala-cinza.js.map +1 -0
  30. package/fontes/valores/metodos/inverter.d.ts +9 -0
  31. package/fontes/valores/metodos/inverter.js +20 -0
  32. package/fontes/valores/metodos/inverter.js.map +1 -0
  33. package/fontes/valores/metodos/opacar.d.ts +9 -0
  34. package/fontes/valores/metodos/opacar.js +20 -0
  35. package/fontes/valores/metodos/opacar.js.map +1 -0
  36. package/fontes/valores/metodos/projetar-sombra.d.ts +14 -0
  37. package/fontes/valores/metodos/projetar-sombra.js +43 -0
  38. package/fontes/valores/metodos/projetar-sombra.js.map +1 -0
  39. package/fontes/valores/metodos/raio.d.ts +10 -0
  40. package/fontes/valores/metodos/raio.js +23 -0
  41. package/fontes/valores/metodos/raio.js.map +1 -0
  42. package/fontes/valores/metodos/rotacionar-matiz.d.ts +9 -0
  43. package/fontes/valores/metodos/rotacionar-matiz.js +20 -0
  44. package/fontes/valores/metodos/rotacionar-matiz.js.map +1 -0
  45. package/fontes/valores/metodos/saturar.d.ts +9 -0
  46. package/fontes/valores/metodos/saturar.js +20 -0
  47. package/fontes/valores/metodos/saturar.js.map +1 -0
  48. package/fontes/valores/metodos/sepia.d.ts +9 -0
  49. package/fontes/valores/metodos/sepia.js +20 -0
  50. package/fontes/valores/metodos/sepia.js.map +1 -0
  51. package/package.json +3 -2
  52. package/testes/listas/metodos.d.ts +10 -0
  53. package/testes/listas/metodos.js +49 -15
  54. package/testes/listas/metodos.js.map +1 -1
  55. package/testes/modificadores/metodos.test.js +573 -105
  56. 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,71 +227,202 @@ 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 "gradiente-linear()" com valor de ângulo', () => {
280
+ for (let index = 0; index < metodos_1.MetodoGradienteLinear.length; index += 1) {
115
281
  // Lexador
116
282
  const resultadoLexador = lexador.mapear([
117
283
  "lmht {",
118
- `${metodos_1.MetodoPassos[index]}: passos(2, salto-inicial);`,
284
+ `${metodos_1.MetodoGradienteLinear[index]}: gradiente-linear(90deg, verde, amarelo);`,
119
285
  "}"
120
286
  ]);
121
- // O Lexador deve montar um objeto de comprimento 12 sem retornar nenhum erro
122
- expect(resultadoLexador.simbolos).toHaveLength(12);
287
+ // O Lexador deve montar um objeto de comprimento 15 sem retornar nenhum erro
288
+ expect(resultadoLexador.simbolos).toHaveLength(15);
123
289
  expect(resultadoLexador.erros).toHaveLength(0);
124
290
  // O valor recebido deve ser mapeado como METODO
125
291
  expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
126
292
  expect.objectContaining({ tipo: foles_1.default.METODO }),
127
293
  ]));
128
- // O Lexador também deve encontrar número e qualitativo no mapeamento
294
+ // O Lexador também deve encontrar número e quantificador no mapeamento
129
295
  expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
130
296
  expect.objectContaining({ tipo: foles_1.default.NUMERO }),
131
- expect.objectContaining({ tipo: foles_1.default.QUALITATIVO }),
297
+ expect.objectContaining({ tipo: foles_1.default.QUANTIFICADOR }),
132
298
  ]));
133
299
  // Avaliador Sintático
134
300
  const resultadoAvaliadorSintatico = avaliador.analisar(resultadoLexador.simbolos);
135
301
  // 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
302
+ expect(resultadoAvaliadorSintatico[0].modificadores[0].propriedadeCss).toStrictEqual(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoGradienteLinear[index]]);
303
+ // Tradutor
138
304
  const resultadoTradutor = tradutor.serializar(resultadoAvaliadorSintatico);
139
- expect(resultadoTradutor).toContain(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoPassos[index]]);
140
- expect(resultadoTradutor).toContain('steps(2, jump-start);');
305
+ expect(resultadoTradutor).toContain(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoGradienteLinear[index]]);
306
+ expect(resultadoTradutor).toContain('linear-gradient(90deg, green, yellow);');
141
307
  }
142
308
  });
143
- it('Atribuindo Método "curva-cúbica" (cubic-bezier)', () => {
144
- for (let index = 0; index < metodos_1.MetodoCurvaCubica.length; index += 1) {
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
+ });
398
+ it('Atribuindo Método "limitar" (clamp)', () => {
399
+ for (let index = 0; index < metodos_1.MetodoLimitar.length; index += 1) {
145
400
  // Lexador
146
401
  const resultadoLexador = lexador.mapear([
147
402
  "lmht {",
148
- `${metodos_1.MetodoCurvaCubica[index]}: curva-cúbica(0.42, 0.0, 1.0, 1.0);`,
403
+ `${metodos_1.MetodoLimitar[index]}: limitar(10vw, 20em, 100vw);`,
149
404
  "}"
150
405
  ]);
151
- // O Lexador deve montar um objeto de comprimento 16 sem retornar nenhum erro
152
- expect(resultadoLexador.simbolos).toHaveLength(16);
406
+ // O Lexador deve montar um objeto de comprimento 17 sem retornar nenhum erro
407
+ expect(resultadoLexador.simbolos).toHaveLength(17);
153
408
  expect(resultadoLexador.erros).toHaveLength(0);
154
409
  // O valor recebido deve ser mapeado como METODO
155
410
  expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
156
411
  expect.objectContaining({ tipo: foles_1.default.METODO }),
157
412
  ]));
158
- // O Lexador também deve encontrar números no mapeamento
413
+ // O Lexador também deve encontrar números e quantificadores no mapeamento
159
414
  expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
160
415
  expect.objectContaining({ tipo: foles_1.default.NUMERO }),
416
+ expect.objectContaining({ tipo: foles_1.default.QUANTIFICADOR }),
161
417
  ]));
162
418
  // Avaliador Sintático
163
419
  const resultadoAvaliadorSintatico = avaliador.analisar(resultadoLexador.simbolos);
164
420
  // 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
421
+ expect(resultadoAvaliadorSintatico[0].modificadores[0].propriedadeCss).toStrictEqual(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoLimitar[index]]);
422
+ // Tradutor
167
423
  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);');
424
+ expect(resultadoTradutor).toContain(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoLimitar[index]]);
425
+ expect(resultadoTradutor).toContain('clamp(10vw, 20em, 100vw);');
170
426
  }
171
427
  });
172
428
  it('Atribuindo Método "linear()"', () => {
@@ -198,22 +454,22 @@ describe('Testando Seletores que recebem MÉTODOS como valor', () => {
198
454
  expect(resultadoTradutor).toContain('linear(0, 0.25, 1);');
199
455
  }
200
456
  });
201
- it('Atribuindo Método "calc()"', () => {
202
- for (let index = 0; index < metodos_1.MetodoCalcular.length; index += 1) {
457
+ it('Atribuindo Método "minmax()"', () => {
458
+ for (let index = 0; index < metodos_1.MetodoMinMax.length; index += 1) {
203
459
  // Lexador
204
460
  const resultadoLexador = lexador.mapear([
205
461
  "lmht {",
206
- `${metodos_1.MetodoCalcular[index]}: calcular(100px - 80px);`,
462
+ `${metodos_1.MetodoMinMax[index]}: minmax(100px, conteúdo-máximo);`,
207
463
  "}"
208
464
  ]);
209
- // O Lexador deve montar um objeto de comprimento 14 sem retornar nenhum erro
210
- expect(resultadoLexador.simbolos).toHaveLength(14);
465
+ // O Lexador deve montar um objeto de comprimento 13 sem retornar nenhum erro
466
+ expect(resultadoLexador.simbolos).toHaveLength(13);
211
467
  expect(resultadoLexador.erros).toHaveLength(0);
212
468
  // O valor recebido deve ser mapeado como METODO
213
469
  expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
214
470
  expect.objectContaining({ tipo: foles_1.default.METODO }),
215
471
  ]));
216
- // O Lexador também deve encontrar números e quantificadores no mapeamento
472
+ // O Lexador também deve encontrar número e quantificador no mapeamento
217
473
  expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
218
474
  expect.objectContaining({ tipo: foles_1.default.NUMERO }),
219
475
  expect.objectContaining({ tipo: foles_1.default.QUANTIFICADOR }),
@@ -221,100 +477,275 @@ describe('Testando Seletores que recebem MÉTODOS como valor', () => {
221
477
  // Avaliador Sintático
222
478
  const resultadoAvaliadorSintatico = avaliador.analisar(resultadoLexador.simbolos);
223
479
  // 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]]);
225
- // Tradutor
480
+ expect(resultadoAvaliadorSintatico[0].modificadores[0].propriedadeCss).toStrictEqual(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoMinMax[index]]);
481
+ // // // // Tradutor
226
482
  const resultadoTradutor = tradutor.serializar(resultadoAvaliadorSintatico);
227
- expect(resultadoTradutor).toContain(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoCalcular[index]]);
228
- expect(resultadoTradutor).toContain('calc(100px - 80px);');
483
+ expect(resultadoTradutor).toContain(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoMinMax[index]]);
484
+ expect(resultadoTradutor).toContain('minmax(100px, max-content);');
229
485
  }
230
486
  });
231
- it('Atribuindo Método "linear-gradient()" com valor de ângulo', () => {
232
- for (let index = 0; index < metodos_1.MetodoGradienteLinear.length; index += 1) {
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
+ });
529
+ it('Atribuindo Método "passos" (steps)', () => {
530
+ for (let index = 0; index < metodos_1.MetodoPassos.length; index += 1) {
233
531
  // Lexador
234
532
  const resultadoLexador = lexador.mapear([
235
533
  "lmht {",
236
- `${metodos_1.MetodoGradienteLinear[index]}: gradiente-linear(90deg, verde, amarelo);`,
534
+ `${metodos_1.MetodoPassos[index]}: passos(2, salto-inicial);`,
237
535
  "}"
238
536
  ]);
239
- // O Lexador deve montar um objeto de comprimento 15 sem retornar nenhum erro
240
- expect(resultadoLexador.simbolos).toHaveLength(15);
537
+ // O Lexador deve montar um objeto de comprimento 12 sem retornar nenhum erro
538
+ expect(resultadoLexador.simbolos).toHaveLength(12);
241
539
  expect(resultadoLexador.erros).toHaveLength(0);
242
540
  // O valor recebido deve ser mapeado como METODO
243
541
  expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
244
542
  expect.objectContaining({ tipo: foles_1.default.METODO }),
245
543
  ]));
246
- // O Lexador também deve encontrar número e quantificador no mapeamento
544
+ // O Lexador também deve encontrar número e qualitativo no mapeamento
247
545
  expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
248
546
  expect.objectContaining({ tipo: foles_1.default.NUMERO }),
249
- expect.objectContaining({ tipo: foles_1.default.QUANTIFICADOR }),
547
+ expect.objectContaining({ tipo: foles_1.default.QUALITATIVO }),
250
548
  ]));
251
549
  // Avaliador Sintático
252
550
  const resultadoAvaliadorSintatico = avaliador.analisar(resultadoLexador.simbolos);
253
551
  // 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]]);
255
- // Tradutor
552
+ expect(resultadoAvaliadorSintatico[0].modificadores[0].propriedadeCss).toStrictEqual(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoPassos[index]]);
553
+ // // // // Tradutor
256
554
  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);');
555
+ expect(resultadoTradutor).toContain(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoPassos[index]]);
556
+ expect(resultadoTradutor).toContain('steps(2, jump-start);');
259
557
  }
260
558
  });
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) {
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) {
265
563
  // Lexador
266
564
  const resultadoLexador = lexador.mapear([
267
565
  "lmht {",
268
- `${metodos_1.MetodoGradienteLinear[index]}: gradiente-linear(${posicoes[posIndex]}, azul, vermelho);`,
566
+ `${metodos_1.MetodoProjetarSombra[index]}: projetar-sombra(${comprimentos[posIndex]});`,
269
567
  "}"
270
568
  ]);
271
- // O Lexador deve montar um objeto de comprimento 14 sem retornar nenhum erro
272
- expect(resultadoLexador.simbolos).toHaveLength(14);
569
+ // O Lexador deve montar um objeto de acordo, sem retornar nenhum erro
273
570
  expect(resultadoLexador.erros).toHaveLength(0);
274
571
  // O valor recebido deve ser mapeado como METODO
275
572
  expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
276
573
  expect.objectContaining({ tipo: foles_1.default.METODO }),
277
574
  ]));
278
- // O Lexador também deve encontrar um qualitativo no mapeamento, referente à posição
575
+ // O Lexador também deve sempre encontrar valores e quantificadores na operação
279
576
  expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
280
- expect.objectContaining({ tipo: foles_1.default.QUALITATIVO }),
577
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
578
+ expect.objectContaining({ tipo: foles_1.default.QUANTIFICADOR }),
281
579
  ]));
282
580
  // Avaliador Sintático
283
581
  const resultadoAvaliadorSintatico = avaliador.analisar(resultadoLexador.simbolos);
284
582
  // 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]]);
583
+ expect(resultadoAvaliadorSintatico[0].modificadores[0].propriedadeCss).toStrictEqual(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoProjetarSombra[index]]);
286
584
  // Tradutor
287
585
  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;
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
+ }
590
+ }
591
+ });
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) {
662
+ // Lexador
663
+ const resultadoLexador = lexador.mapear([
664
+ "lmht {",
665
+ `${metodos_1.MetodoRaio[index]}: raio(200deg);`,
666
+ "}"
667
+ ]);
668
+ // O Lexador não deve encontrar erros
669
+ expect(resultadoLexador.erros).toHaveLength(0);
670
+ // O valor recebido deve ser mapeado como METODO
671
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
672
+ expect.objectContaining({ tipo: foles_1.default.METODO }),
673
+ ]));
674
+ // O Lexador deve montar um objeto de comprimento 11
675
+ expect(resultadoLexador.simbolos).toHaveLength(11);
676
+ expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
677
+ expect.objectContaining({ tipo: foles_1.default.NUMERO }),
678
+ expect.objectContaining({ tipo: foles_1.default.QUANTIFICADOR }),
679
+ ]));
680
+ // Avaliador Sintático
681
+ const resultadoAvaliadorSintatico = avaliador.analisar(resultadoLexador.simbolos);
682
+ // O Avaliador deve montar um objeto com os devidos nomes FolEs e CSS
683
+ expect(resultadoAvaliadorSintatico[0].modificadores[0].propriedadeCss).toStrictEqual(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoRaio[index]]);
684
+ // Tradutor
685
+ const resultadoTradutor = tradutor.serializar(resultadoAvaliadorSintatico);
686
+ // O Tradutor deve serializar de acordo e traduzir raio para ray
687
+ expect(resultadoTradutor).toContain(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoRaio[index]]);
688
+ expect(resultadoTradutor).toContain(`ray(200deg);`);
689
+ }
690
+ });
691
+ it('Atribuindo Método "rotacionar-matiz()"', () => {
692
+ for (let index = 0; index < metodos_1.MetodoRotacionarMatiz.length; index += 1) {
693
+ const valoresAceitos = ['100px', '100%', '0.1', '0', '1', '1.75'];
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
+ ]));
304
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]});`);
305
730
  }
306
731
  }
307
732
  });
308
- it('Atribuindo Método "contrast()"', () => {
309
- for (let index = 0; index < metodos_1.MetodoContraste.length; index += 1) {
733
+ it('Atribuindo Método "saturar()"', () => {
734
+ for (let index = 0; index < metodos_1.MetodoSaturar.length; index += 1) {
310
735
  const valoresAceitos = ['100px', '100%', '0.1', '0', '1', '1.75'];
311
736
  for (let valIndex = 0; valIndex < valoresAceitos.length; valIndex += 1) {
312
737
  // Lexador
313
738
  const resultadoLexador = lexador.mapear([
314
739
  "lmht {",
315
- `${metodos_1.MetodoContraste[index]}: contraste(${valoresAceitos[valIndex]});`,
740
+ `${metodos_1.MetodoSaturar[index]}: saturar(${valoresAceitos[valIndex]});`,
316
741
  "}"
317
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
+ ]));
318
749
  // O Lexador deve montar um objeto de comprimento 11 caso haja quantificador e 10 caso não haja
319
750
  if (valIndex === 0 || valIndex === 1) {
320
751
  expect(resultadoLexador.simbolos).toHaveLength(11);
@@ -329,20 +760,57 @@ describe('Testando Seletores que recebem MÉTODOS como valor', () => {
329
760
  expect.objectContaining({ tipo: foles_1.default.NUMERO }),
330
761
  ]));
331
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
+ ]);
332
785
  // O Lexador não deve encontrar erros
333
786
  expect(resultadoLexador.erros).toHaveLength(0);
334
787
  // O valor recebido deve ser mapeado como METODO
335
788
  expect(resultadoLexador.simbolos).toEqual(expect.arrayContaining([
336
789
  expect.objectContaining({ tipo: foles_1.default.METODO }),
337
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
+ }
338
805
  // Avaliador Sintático
339
806
  const resultadoAvaliadorSintatico = avaliador.analisar(resultadoLexador.simbolos);
340
807
  // 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]]);
808
+ expect(resultadoAvaliadorSintatico[0].modificadores[0].propriedadeCss).toStrictEqual(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoSepia[index]]);
342
809
  // Tradutor
343
810
  const resultadoTradutor = tradutor.serializar(resultadoAvaliadorSintatico);
344
- expect(resultadoTradutor).toContain(metodos_1.TraducaoValoresMetodos[metodos_1.MetodoContraste[index]]);
345
- expect(resultadoTradutor).toContain(`contrast(${valoresAceitos[valIndex]});`);
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]});`);
346
814
  }
347
815
  }
348
816
  });