diff --git a/Makefile.am b/Makefile.am index 467b6ebb..ae1feb52 100644 --- a/Makefile.am +++ b/Makefile.am @@ -224,6 +224,7 @@ check_PROGRAMS=\ helper_config_cmdline_parser\ widget_test\ box_test\ + theme_parser_test\ scrollbar_test @@ -356,6 +357,24 @@ textbox_test_SOURCES=\ include/helper-theme.h\ test/textbox-test.c +theme_parser_test_SOURCES=\ + config/config.c\ + include/rofi.h\ + include/mode.h\ + include/mode-private.h\ + source/helper.c\ + include/helper.h\ + include/helper-theme.h\ + include/theme.h\ + include/xrmoptions.h\ + source/xrmoptions.c\ + source/x11-helper.c\ + lexer/theme-lexer.c\ + lexer/theme-parser.c\ + lexer/theme-parser.h\ + source/theme.c\ + test/theme-parser-test.c + helper_test_SOURCES=\ config/config.c\ include/rofi.h\ @@ -369,6 +388,7 @@ helper_test_SOURCES=\ source/x11-helper.c\ test/helper-test.c + helper_test_CFLAGS=\ $(AM_CFLAGS)\ $(glib_CFLAGS)\ @@ -387,6 +407,9 @@ helper_test_LDADD=\ $(libsn_LIBS)\ $(cairo_LIBS) +theme_parser_test_CFLAGS=${helper_test_CFLAGS} +theme_parser_test_LDADD=${helper_test_LDADD} + helper_expand_SOURCES=\ config/config.c\ include/rofi.h\ @@ -430,6 +453,7 @@ TESTS=\ textbox_test\ widget_test\ box_test\ + theme_parser_test\ scrollbar_test .PHONY: test-x diff --git a/source/theme.c b/source/theme.c index dd96d471..9914f5c0 100644 --- a/source/theme.c +++ b/source/theme.c @@ -279,8 +279,8 @@ void yyerror ( YYLTYPE *yylloc, const char *what, const char* s ) else { g_string_append_printf ( str, "\tLocation: line %d column %d to line %d column %d\n", yylloc->first_line, yylloc->first_column, yylloc->last_line, yylloc->last_column ); } - rofi_add_error_message ( str ); g_log ( "Parser", G_LOG_LEVEL_DEBUG, "Failed to parse theme:\n%s", str->str ); + rofi_add_error_message ( str ); } static gboolean rofi_theme_steal_property_int ( gpointer key, gpointer value, gpointer user_data ) diff --git a/test/theme-parser-test.c b/test/theme-parser-test.c new file mode 100644 index 00000000..c24be8b2 --- /dev/null +++ b/test/theme-parser-test.c @@ -0,0 +1,94 @@ +#include +#include +#include +#include +#include +#include +#include +#include "xcb-internal.h" +#include "rofi.h" +#include "settings.h" +#include "theme.h" + +static int test = 0; +struct xcb_stuff *xcb; + +#define TASSERT( a ) { \ + assert ( a ); \ + printf ( "Test %i passed (%s)\n", ++test, # a ); \ +} +#define TASSERTE( a, b ) { \ + if ( ( a ) == ( b ) ) { \ + printf ( "Test %i passed (%s == %s) (%u == %u)\n", ++test, # a, # b, a, b ); \ + }else { \ + printf ( "Test %i failed (%s == %s) (%u != %u)\n", ++test, # a, # b, a, b ); \ + abort ( ); \ + } \ +} +gboolean error = FALSE; +void rofi_add_error_message ( GString *msg ) +{ + + error = TRUE; + g_string_free ( msg, TRUE ); +} + +int rofi_view_error_dialog ( const char *msg, G_GNUC_UNUSED int markup ) +{ + fputs ( msg, stderr ); + return TRUE; +} + +int show_error_message ( const char *msg, int markup ) +{ + rofi_view_error_dialog ( msg, markup ); + return 0; +} +void rofi_view_get_current_monitor ( int *width, int *height ) +{ + if ( width ) { + *width = 1920; + } + if ( height ) { + *height = 1080; + } +} +double textbox_get_estimated_char_height ( void ) +{ + return 16.0; +} +xcb_screen_t *xcb_screen; +xcb_ewmh_connection_t xcb_ewmh; +int xcb_screen_nbr; +#include + +int main ( int argc, char ** argv ) +{ + cmd_set_arguments ( argc, argv ); + + if ( setlocale ( LC_ALL, "" ) == NULL ) { + fprintf ( stderr, "Failed to set locale.\n" ); + return EXIT_FAILURE; + } + // EMPTY string. + rofi_theme_parse_string ( ""); + TASSERT ( rofi_theme != NULL ); + rofi_theme_free ( rofi_theme ); + rofi_theme = NULL; + // EMPTY global. + rofi_theme_parse_string ( " *{} "); + TASSERT ( rofi_theme != NULL ); + rofi_theme_free ( rofi_theme ); + rofi_theme = NULL; + // EMPTY section. + rofi_theme_parse_string ( " #{} "); + TASSERT ( rofi_theme != NULL ); + rofi_theme_free ( rofi_theme ); + rofi_theme = NULL; + rofi_theme_parse_string ( " Blaat "); + TASSERT ( rofi_theme != NULL ); + TASSERT ( error == TRUE ); + rofi_theme_free ( rofi_theme ); + rofi_theme = NULL; + error = FALSE; +}