static void config_parser_set ( XrmOption *option, char *xrmValue, enum ConfigSource source ) { if ( option->type == xrm_String ) { if ( ( option )->mem != NULL ) { g_free ( option->mem ); option->mem = NULL; } *( option->value.str ) = g_strchomp ( g_strdup ( xrmValue ) ); // Memory ( option )->mem = *( option->value.str ); } else if ( option->type == xrm_Number ) { *( option->value.num ) = (unsigned int) g_ascii_strtoull ( xrmValue, NULL, 10 ); } else if ( option->type == xrm_SNumber ) { *( option->value.snum ) = (int) g_ascii_strtoll ( xrmValue, NULL, 10 ); } else if ( option->type == xrm_Boolean ) { if ( strlen ( xrmValue ) > 0 && g_ascii_strcasecmp ( xrmValue, "true" ) == 0 ) { *( option->value.num ) = TRUE; } else{ *( option->value.num ) = FALSE; } } else if ( option->type == xrm_Char ) { *( option->value.charc ) = helper_parse_char ( xrmValue ); } option->source = source; }
int find_arg_char ( const char * const key, char *val ) { int i = find_arg ( key ); if ( val != NULL && i > 0 && i < ( stored_argc - 1 ) ) { *val = helper_parse_char ( stored_argv[i + 1] ); return TRUE; } return FALSE; }
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; } char **list = NULL; int llength = 0; char * test_str = "{host} {terminal} -e bash -c \"{ssh-client} {host}; echo '{terminal} {host}'\""; helper_parse_setup ( test_str, &list, &llength, "{host}", "chuck", "{terminal}", "x-terminal-emulator", NULL ); TASSERT ( llength == 6 ); TASSERT ( strcmp ( list[0], "chuck" ) == 0 ); TASSERT ( strcmp ( list[1], "x-terminal-emulator" ) == 0 ); TASSERT ( strcmp ( list[2], "-e" ) == 0 ); TASSERT ( strcmp ( list[3], "bash" ) == 0 ); TASSERT ( strcmp ( list[4], "-c" ) == 0 ); TASSERT ( strcmp ( list[5], "ssh chuck; echo 'x-terminal-emulator chuck'" ) == 0 ); g_strfreev ( list ); /** * Test some path functions. Not easy as not sure what is right output on travis. */ // Test if root is preserved. char *str = rofi_expand_path ( "/" ); TASSERT ( strcmp ( str, "/" ) == 0 ); g_free ( str ); // Test is relative path is preserved. str = rofi_expand_path ( "../AUTHORS" ); TASSERT ( strcmp ( str, "../AUTHORS" ) == 0 ); g_free ( str ); // Test another one. str = rofi_expand_path ( "/bin/false" ); TASSERT ( strcmp ( str, "/bin/false" ) == 0 ); g_free ( str ); // See if user paths get expanded in full path. str = rofi_expand_path ( "~/" ); const char *hd = g_get_home_dir (); TASSERT ( strcmp ( str, hd ) == 0 ); g_free ( str ); str = rofi_expand_path ( "~root/" ); TASSERT ( str[0] == '/' ); g_free ( str ); /** * Collating. */ char *res = token_collate_key ( "€ Sign", FALSE ); TASSERT ( strcmp ( res, "€ sign" ) == 0 ); g_free ( res ); res = token_collate_key ( "éÉêèë Sign", FALSE ); TASSERT ( strcmp ( res, "ééêèë sign" ) == 0 ); g_free ( res ); res = token_collate_key ( "éÉêèë³ Sign", TRUE ); TASSERT ( strcmp ( res, "éÉêèë3 Sign" ) == 0 ); g_free ( res ); /** * Char function */ TASSERT ( helper_parse_char ( "\\n" ) == '\n' ); TASSERT ( helper_parse_char ( "\\a" ) == '\a' ); TASSERT ( helper_parse_char ( "\\b" ) == '\b' ); TASSERT ( helper_parse_char ( "\\t" ) == '\t' ); TASSERT ( helper_parse_char ( "\\v" ) == '\v' ); TASSERT ( helper_parse_char ( "\\f" ) == '\f' ); TASSERT ( helper_parse_char ( "\\r" ) == '\r' ); TASSERT ( helper_parse_char ( "\\\\" ) == '\\' ); TASSERT ( helper_parse_char ( "\\0" ) == 0 ); TASSERT ( helper_parse_char ( "\\x77" ) == 'w' ); TASSERT ( helper_parse_char ( "\\x0A" ) == '\n' ); /** * tokenize */ config.regex = FALSE; config.glob = FALSE; char ** retv = tokenize ( "aAp nOoT MieS 12", FALSE ); TASSERT ( retv[0] && strcmp ( retv[0], "aap" ) == 0 ); TASSERT ( retv[1] && strcmp ( retv[1], "noot" ) == 0 ); TASSERT ( retv[2] && strcmp ( retv[2], "mies" ) == 0 ); TASSERT ( retv[3] && strcmp ( retv[3], "12" ) == 0 ); tokenize_free ( retv ); retv = tokenize ( "blub³ bOb bEp bEE", TRUE ); TASSERT ( retv[0] && strcmp ( retv[0], "blub3" ) == 0 ); TASSERT ( retv[1] && strcmp ( retv[1], "bOb" ) == 0 ); TASSERT ( retv[2] && strcmp ( retv[2], "bEp" ) == 0 ); TASSERT ( retv[3] && strcmp ( retv[3], "bEE" ) == 0 ); tokenize_free ( retv ); TASSERT ( levenshtein ( "aap", "aap" ) == 0 ); TASSERT ( levenshtein ( "aap", "aap " ) == 1 ); TASSERT ( levenshtein ( "aap ", "aap" ) == 1 ); TASSERTE ( levenshtein ( "aap", "aap noot" ), 5 ); TASSERTE ( levenshtein ( "aap", "noot aap" ), 5 ); TASSERTE ( levenshtein ( "aap", "noot aap mies" ), 10 ); TASSERTE ( levenshtein ( "noot aap mies", "aap" ), 10 ); TASSERTE ( levenshtein ( "otp", "noot aap" ), 5 ); }
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; } /** * Collating. */ char *res = token_collate_key ( "€ Sign", FALSE ); TASSERT ( strcmp ( res, "€ sign" ) == 0 ); g_free ( res ); res = token_collate_key ( "éÉêèë Sign", FALSE ); TASSERT ( strcmp ( res, "ééêèë sign" ) == 0 ); g_free ( res ); res = token_collate_key ( "éÉêèë³ Sign", TRUE ); TASSERT ( strcmp ( res, "éÉêèë3 Sign" ) == 0 ); g_free ( res ); /** * Char function */ TASSERT ( helper_parse_char ( "\\n" ) == '\n' ); TASSERT ( helper_parse_char ( "\\a" ) == '\a' ); TASSERT ( helper_parse_char ( "\\b" ) == '\b' ); TASSERT ( helper_parse_char ( "\\t" ) == '\t' ); TASSERT ( helper_parse_char ( "\\v" ) == '\v' ); TASSERT ( helper_parse_char ( "\\f" ) == '\f' ); TASSERT ( helper_parse_char ( "\\r" ) == '\r' ); TASSERT ( helper_parse_char ( "\\\\" ) == '\\' ); TASSERT ( helper_parse_char ( "\\0" ) == 0 ); TASSERT ( helper_parse_char ( "\\x77" ) == 'w' ); TASSERT ( helper_parse_char ( "\\x0A" ) == '\n' ); /** * tokenize */ config.regex = FALSE; config.glob = FALSE; char ** retv = tokenize ( "aAp nOoT MieS 12", FALSE ); TASSERT ( retv[0] && strcmp ( retv[0], "aap" ) == 0 ); TASSERT ( retv[1] && strcmp ( retv[1], "noot" ) == 0 ); TASSERT ( retv[2] && strcmp ( retv[2], "mies" ) == 0 ); TASSERT ( retv[3] && strcmp ( retv[3], "12" ) == 0 ); tokenize_free ( retv ); retv = tokenize ( "blub³ bOb bEp bEE", TRUE ); TASSERT ( retv[0] && strcmp ( retv[0], "blub3" ) == 0 ); TASSERT ( retv[1] && strcmp ( retv[1], "bOb" ) == 0 ); TASSERT ( retv[2] && strcmp ( retv[2], "bEp" ) == 0 ); TASSERT ( retv[3] && strcmp ( retv[3], "bEE" ) == 0 ); tokenize_free ( retv ); TASSERT ( levenshtein ( "aap", "aap" ) == 0 ); TASSERT ( levenshtein ( "aap", "aap " ) == 1 ); TASSERT ( levenshtein ( "aap ", "aap" ) == 1 ); TASSERTE ( levenshtein ( "aap", "aap noot" ), 5 ); TASSERTE ( levenshtein ( "aap", "noot aap" ), 5 ); TASSERTE ( levenshtein ( "aap", "noot aap mies" ), 10 ); TASSERTE ( levenshtein ( "noot aap mies", "aap" ), 10 ); TASSERTE ( levenshtein ( "otp", "noot aap" ), 5 ); }
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; } /** * Char function */ TASSERT ( helper_parse_char ( "\\n" ) == '\n' ); TASSERT ( helper_parse_char ( "\\a" ) == '\a' ); TASSERT ( helper_parse_char ( "\\b" ) == '\b' ); TASSERT ( helper_parse_char ( "\\t" ) == '\t' ); TASSERT ( helper_parse_char ( "\\v" ) == '\v' ); TASSERT ( helper_parse_char ( "\\f" ) == '\f' ); TASSERT ( helper_parse_char ( "\\r" ) == '\r' ); TASSERT ( helper_parse_char ( "\\\\" ) == '\\' ); TASSERT ( helper_parse_char ( "\\0" ) == 0 ); TASSERT ( helper_parse_char ( "\\x77" ) == 'w' ); TASSERT ( helper_parse_char ( "\\x0A" ) == '\n' ); /** * tokenize */ TASSERT ( levenshtein ( "aap", g_utf8_strlen ( "aap", -1), "aap", g_utf8_strlen ( "aap", -1) ) == 0 ); TASSERT ( levenshtein ( "aap", g_utf8_strlen ( "aap", -1), "aap ", g_utf8_strlen ( "aap ", -1) ) == 1 ); TASSERT ( levenshtein ( "aap ", g_utf8_strlen ( "aap ", -1), "aap", g_utf8_strlen ( "aap", -1) ) == 1 ); TASSERTE ( levenshtein ( "aap", g_utf8_strlen ( "aap", -1), "aap noot", g_utf8_strlen ( "aap noot", -1) ), 5 ); TASSERTE ( levenshtein ( "aap", g_utf8_strlen ( "aap", -1), "noot aap", g_utf8_strlen ( "noot aap", -1) ), 5 ); TASSERTE ( levenshtein ( "aap", g_utf8_strlen ( "aap", -1), "noot aap mies", g_utf8_strlen ( "noot aap mies", -1) ), 10 ); TASSERTE ( levenshtein ( "noot aap mies", g_utf8_strlen ( "noot aap mies", -1), "aap", g_utf8_strlen ( "aap", -1) ), 10 ); TASSERTE ( levenshtein ( "otp", g_utf8_strlen ( "otp", -1), "noot aap", g_utf8_strlen ( "noot aap", -1) ), 5 ); /** * Quick converision check. */ { char *str = rofi_latin_to_utf8_strdup ( "\xA1\xB5", 2 ); TASSERT ( g_utf8_collate ( str, "¡µ" ) == 0 ); g_free ( str ); } { char *str = rofi_force_utf8 ( "Valid utf8", 10 ); TASSERT ( g_utf8_collate ( str, "Valid utf8" ) == 0 ); g_free ( str ); char in[] = "Valid utf8 until \xc3\x28 we continue here"; TASSERT ( g_utf8_validate ( in, -1, NULL ) == FALSE ); str = rofi_force_utf8 ( in, strlen ( in ) ); TASSERT ( g_utf8_validate ( str, -1, NULL ) == TRUE ); TASSERT ( g_utf8_collate ( str, "Valid utf8 until �( we continue here" ) == 0 ); g_free ( str ); } // Pid test. // Tests basic functionality of writing it, locking, seeing if I can write same again // And close/reopen it again. { const char *path = "/tmp/rofi-test.pid"; TASSERT ( create_pid_file ( NULL ) == -1 ); int fd = create_pid_file ( path ); TASSERT ( fd >= 0 ); int fd2 = create_pid_file ( path ); TASSERT ( fd2 < 0 ); remove_pid_file ( fd ); fd = create_pid_file ( path ); TASSERT ( fd >= 0 ); remove_pid_file ( fd ); } }