forked from enlightenment/efl
Evas filters: Add test cases for the script parser
Basic syntax checks and instructions coverage.
This commit is contained in:
parent
74d8403217
commit
78c7931575
|
@ -1607,6 +1607,7 @@ tests/evas/evas_test_textblock.c \
|
|||
tests/evas/evas_test_text.c \
|
||||
tests/evas/evas_test_callbacks.c \
|
||||
tests/evas/evas_test_render_engines.c \
|
||||
tests/evas/evas_test_filters.c \
|
||||
tests/evas/evas_tests_helpers.h \
|
||||
tests/evas/evas_suite.h
|
||||
|
||||
|
|
|
@ -24,6 +24,7 @@ static const Evas_Test_Case etc[] = {
|
|||
{ "Object Text", evas_test_text },
|
||||
{ "Callbacks", evas_test_callbacks },
|
||||
{ "Render Engines", evas_test_render_engines },
|
||||
{ "Filters", evas_test_filters },
|
||||
{ NULL, NULL }
|
||||
};
|
||||
|
||||
|
|
|
@ -9,6 +9,7 @@ void evas_test_textblock(TCase *tc);
|
|||
void evas_test_text(TCase *tc);
|
||||
void evas_test_callbacks(TCase *tc);
|
||||
void evas_test_render_engines(TCase *tc);
|
||||
void evas_test_filters(TCase *tc);
|
||||
|
||||
|
||||
#endif /* _EVAS_SUITE_H */
|
||||
|
|
|
@ -0,0 +1,211 @@
|
|||
/* Unit test cases for the filters submodule.
|
||||
* For now, limited to Evas_Object_Text, but I prefer to separate these
|
||||
* functions from the core text object.
|
||||
*/
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
# include "config.h"
|
||||
#endif
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
#include "evas_suite.h"
|
||||
#include "Evas.h"
|
||||
#include "evas_tests_helpers.h"
|
||||
#include "../../lib/evas/include/evas_filter.h"
|
||||
|
||||
#if !defined(EFL_EO_API_SUPPORT) || !defined(EFL_BETA_API_SUPPORT)
|
||||
# define BUILD_FILTER_TESTS 0
|
||||
#else
|
||||
# define BUILD_FILTER_TESTS 1
|
||||
#endif
|
||||
|
||||
#if BUILD_FILTER_TESTS
|
||||
|
||||
/* These are the same as in evas_test_text.c */
|
||||
|
||||
#define TEST_FONT_NAME "DejaVuSans,UnDotum"
|
||||
#define TEST_FONT_SOURCE TESTS_SRC_DIR "/TestFont.eet"
|
||||
|
||||
#define START_FILTER_TEST() \
|
||||
Evas *evas; \
|
||||
Evas_Object *to; \
|
||||
evas = EVAS_TEST_INIT_EVAS(); \
|
||||
evas_font_hinting_set(evas, EVAS_FONT_HINTING_AUTO); \
|
||||
to = evas_object_text_add(evas); \
|
||||
evas_object_text_font_source_set(to, TEST_FONT_SOURCE); \
|
||||
do \
|
||||
{ \
|
||||
} \
|
||||
while (0)
|
||||
|
||||
#define END_FILTER_TEST() \
|
||||
do \
|
||||
{ \
|
||||
evas_object_del(to); \
|
||||
evas_free(evas); \
|
||||
evas_shutdown(); \
|
||||
} \
|
||||
while (0)
|
||||
|
||||
|
||||
START_TEST(evas_filter_parser)
|
||||
{
|
||||
Evas_Filter_Program *pgm;
|
||||
|
||||
#define CHECK_FILTER(_a, _v) do { \
|
||||
pgm = evas_filter_program_new("evas_suite"); \
|
||||
fail_if(evas_filter_program_parse(pgm, _a) != _v); \
|
||||
evas_filter_program_del(pgm); \
|
||||
} while (0)
|
||||
#define CHKGOOD(_a) CHECK_FILTER(_a, EINA_TRUE)
|
||||
#define CHKBAAD(_a) CHECK_FILTER(_a, EINA_FALSE)
|
||||
|
||||
// Basic syntax errors
|
||||
fail_if(evas_filter_program_parse(NULL, "blend();"));
|
||||
CHKBAAD(NULL);
|
||||
CHKBAAD("");
|
||||
CHKBAAD(" \t \n ");
|
||||
CHKBAAD("blend");
|
||||
CHKBAAD("blend()");
|
||||
CHKBAAD("blend;");
|
||||
|
||||
// Known & unknown instructions + some syntax errors
|
||||
CHKGOOD("blend();");
|
||||
CHKBAAD("blend()\nblend();");
|
||||
CHKBAAD("blend(blend());");
|
||||
CHKGOOD("blend(); blend();");
|
||||
CHKGOOD("buffer:a;blend();");
|
||||
CHKGOOD("buffer:a(alpha);blend();");
|
||||
CHKGOOD("buffer:a(rgba);blend();");
|
||||
CHKBAAD("buffer:a(BAAD);blend();");
|
||||
CHKBAAD("buffer a(alpha);blend();");
|
||||
CHKGOOD("blend();blur();fill();");
|
||||
CHKGOOD("grow(10);");
|
||||
CHKGOOD("curve(0:0 - 255:255);");
|
||||
CHKGOOD("buffer:a(alpha);mask(a);");
|
||||
CHKGOOD("buffer:a(rgba);mask(a);");
|
||||
CHKGOOD("buffer:a(rgba);bump(a);");
|
||||
CHKGOOD("buffer:a(rgba);displace(a);");
|
||||
CHKGOOD("transform(output);");
|
||||
CHKBAAD("unknown_command();");
|
||||
CHKBAAD("blend(unknown_buffer);");
|
||||
|
||||
// Case sensitivity
|
||||
CHKGOOD("BLEND();");
|
||||
CHKGOOD("Blend();");
|
||||
CHKGOOD("bLeNd();");
|
||||
CHKGOOD("buffer : lowercase; blend (lowercase);");
|
||||
CHKGOOD("buffer : UPPERCASE; blend (UPPERCASE);");
|
||||
CHKBAAD("buffer : CamelCase; blend (cAMELcASE);");
|
||||
|
||||
// Full sequential arguments (default values)
|
||||
CHKGOOD("blend(input, output, 0, 0, color = white, fillmode = none);");
|
||||
CHKGOOD("blur(3, -1, default, 0, 0, color = white, src = input, dst = output);");
|
||||
CHKGOOD("buffer : m (alpha); "
|
||||
"bump(m, 135.0, 45.0, 8.0, 0.0, color = white, compensate = true, "
|
||||
"src = input, dst = output, black = black, white = white, fillmode = repeat);");
|
||||
CHKGOOD("curve(0:0 - 255:255, linear, rgb, src = input, dst = output);");
|
||||
CHKGOOD("buffer : m (rgba); "
|
||||
"displace(m, 10, default, src = input, dst = output, fillmode = repeat);");
|
||||
CHKGOOD("fill(output, transparent, 0, 0, 0, 0);");
|
||||
CHKGOOD("grow(0, smooth = yes, src = input, dst = output);");
|
||||
CHKGOOD("buffer : m (alpha); "
|
||||
"mask(m, src = input, dst = output, color = white, fillmode = none);");
|
||||
CHKGOOD("buffer : m (alpha); "
|
||||
"transform(m, op = vflip, src = input, oy = 0);");
|
||||
|
||||
// All colors
|
||||
static const char *colors [] = {
|
||||
"white",
|
||||
"black",
|
||||
"red",
|
||||
"green",
|
||||
"blue",
|
||||
"darkblue",
|
||||
"yellow",
|
||||
"magenta",
|
||||
"cyan",
|
||||
"orange",
|
||||
"purple",
|
||||
"brown",
|
||||
"maroon",
|
||||
"lime",
|
||||
"gray",
|
||||
"grey",
|
||||
"silver",
|
||||
"olive",
|
||||
"invisible",
|
||||
"transparent",
|
||||
"#ABC",
|
||||
"#ABCF",
|
||||
"#AABBCC",
|
||||
"#AABBCCFF",
|
||||
"WHITE",
|
||||
"White"
|
||||
};
|
||||
|
||||
static const char *colors_bad[] = {
|
||||
"newcolor",
|
||||
"ABC",
|
||||
"#ZZZ",
|
||||
"#-10"
|
||||
};
|
||||
|
||||
for (size_t c = 0; c < sizeof(colors) / sizeof(colors[0]); c++)
|
||||
{
|
||||
char buf[64];
|
||||
sprintf(buf, "blend(color = %s);", colors[c]);
|
||||
CHKGOOD(buf);
|
||||
}
|
||||
|
||||
for (size_t c = 0; c < sizeof(colors_bad) / sizeof(colors_bad[0]); c++)
|
||||
{
|
||||
char buf[64];
|
||||
sprintf(buf, "blend(color = %s);", colors_bad[c]);
|
||||
CHKBAAD(buf);
|
||||
}
|
||||
|
||||
// All booleans
|
||||
static const char *booleans[] = {
|
||||
"1", "0",
|
||||
"yes", "no",
|
||||
"on", "off",
|
||||
"enable", "disable",
|
||||
"enabled", "disabled",
|
||||
"true", "false",
|
||||
"YES", "Yes"
|
||||
};
|
||||
|
||||
static const char *booleans_bad[] = {
|
||||
"o", "oui", "10"
|
||||
};
|
||||
|
||||
for (size_t c = 0; c < sizeof(booleans) / sizeof(booleans[0]); c++)
|
||||
{
|
||||
char buf[64];
|
||||
sprintf(buf, "grow(10, smooth = %s);", booleans[c]);
|
||||
CHKGOOD(buf);
|
||||
}
|
||||
|
||||
for (size_t c = 0; c < sizeof(booleans_bad) / sizeof(booleans_bad[0]); c++)
|
||||
{
|
||||
char buf[64];
|
||||
sprintf(buf, "grow(10, smooth = %s);", booleans_bad[c]);
|
||||
CHKBAAD(buf);
|
||||
}
|
||||
|
||||
// fillmodes are parsed when converting from instructions to commands
|
||||
}
|
||||
END_TEST
|
||||
|
||||
#endif // BUILD_FILTER_TESTS
|
||||
|
||||
void evas_test_filters(TCase *tc)
|
||||
{
|
||||
#if BUILD_FILTER_TESTS
|
||||
tcase_add_test(tc, evas_filter_parser);
|
||||
#else
|
||||
(void) tc;
|
||||
#endif
|
||||
}
|
Loading…
Reference in New Issue