void wi_test_set_runtime_functions(void) { wi_set_t *set1; wi_mutable_set_t *set2; set1 = wi_set_with_data(WI_STR("foo"), WI_STR("bar"), NULL); set2 = wi_autorelease(wi_mutable_copy(set1)); WI_TEST_ASSERT_EQUAL_INSTANCES(set1, set2, ""); WI_TEST_ASSERT_EQUALS(wi_hash(set1), wi_hash(set2), ""); WI_TEST_ASSERT_EQUALS(wi_runtime_id(set1), wi_set_runtime_id(), ""); WI_TEST_ASSERT_EQUALS(wi_runtime_id(set2), wi_set_runtime_id(), ""); WI_TEST_ASSERT_TRUE(wi_runtime_options(set1) & WI_RUNTIME_OPTION_IMMUTABLE, ""); WI_TEST_ASSERT_TRUE(wi_runtime_options(set2) & WI_RUNTIME_OPTION_MUTABLE, ""); wi_mutable_set_remove_data(set2, WI_STR("bar")); wi_mutable_set_add_data(set2, WI_STR("baz")); WI_TEST_ASSERT_NOT_EQUAL_INSTANCES(set1, set2, ""); wi_mutable_set_remove_data(set2, WI_STR("baz")); WI_TEST_ASSERT_NOT_EQUAL_INSTANCES(set1, set2, ""); set2 = wi_autorelease(wi_set_init_with_capacity_and_callbacks(wi_mutable_set_alloc(), 0, false, wi_set_null_callbacks)); wi_mutable_set_add_data(set2, (void *) 1); wi_mutable_set_add_data(set2, (void *) 2); WI_TEST_ASSERT_NOT_EQUALS(wi_string_index_of_string(wi_description(set1), WI_STR("foo"), 0), WI_NOT_FOUND, ""); WI_TEST_ASSERT_NOT_EQUALS(wi_string_index_of_string(wi_description(set2), WI_STR("0x1"), 0), WI_NOT_FOUND, ""); }
char * wr_readline_nickname_generator(const char *text, int state) { static wi_uinteger_t index; wi_array_t *users; wi_string_t *name; char *cname; wr_user_t *user; wi_uinteger_t count; if(!wr_window_is_chat(wr_current_window)) return NULL; users = wr_chat_users(wr_window_chat(wr_console_window)); if(state == 0) index = 0; cname = ((*rl_filename_dequoting_function) ((char *) text, 0)); name = wi_string_with_cstring(cname); free(cname); count = wi_array_count(users); while(index < count) { user = WI_ARRAY(users, index++); if(wi_string_index_of_string(user->nick, name, WI_STRING_SMART_CASE_INSENSITIVE) == 0) return strdup(wi_string_cstring(user->nick)); } return NULL; }
wi_string_t * wi_file_read_to_string(wi_file_t *file, wi_string_t *separator) { wi_string_t *string, *totalstring = NULL; wi_uinteger_t index, length; _WI_FILE_ASSERT_OPEN(file); while((string = wi_file_read(file, WI_FILE_BUFFER_SIZE))) { if(!totalstring) totalstring = wi_string_init(wi_string_alloc()); index = wi_string_index_of_string(string, separator, 0); if(index == WI_NOT_FOUND) { wi_string_append_string(totalstring, string); } else { length = wi_string_length(string); wi_string_delete_characters_from_index(string, index); wi_string_append_string(totalstring, string); wi_file_seek(file, wi_file_offset(file) - length + index + 1); break; } } return wi_autorelease(totalstring); }
void wi_test_string_encoding_runtime_functions(void) { #ifdef WI_STRING_ENCODING wi_string_encoding_t *encoding; encoding = wi_string_encoding_with_charset(WI_STR("ASCII"), 0); WI_TEST_ASSERT_EQUALS(wi_runtime_id(encoding), wi_string_encoding_runtime_id(), ""); WI_TEST_ASSERT_NOT_EQUALS(wi_string_index_of_string(wi_description(encoding), WI_STR("ASCII"), 0), WI_NOT_FOUND, ""); #endif }
void wi_test_readwrite_lock_runtime_functions(void) { #ifdef WI_PTHREADS wi_readwrite_lock_t *lock; lock = wi_autorelease(wi_readwrite_lock_init(wi_readwrite_lock_alloc())); WI_TEST_ASSERT_EQUALS(wi_runtime_id(lock), wi_readwrite_lock_runtime_id(), ""); WI_TEST_ASSERT_NOT_EQUALS(wi_string_index_of_string(wi_description(lock), WI_STR("wi_readwrite_lock_t"), 0), WI_NOT_FOUND, ""); #endif }
wi_string_t * wi_socket_read_to_string(wi_socket_t *socket, wi_time_interval_t timeout, wi_string_t *separator) { wi_string_t *string, *substring; wi_uinteger_t index; index = wi_string_index_of_string(socket->buffer, separator, 0); if(index != WI_NOT_FOUND) { substring = wi_string_substring_to_index(socket->buffer, index + wi_string_length(separator)); wi_mutable_string_delete_characters_in_range(socket->buffer, wi_make_range(0, wi_string_length(substring))); return substring; } while((string = wi_socket_read_string(socket, timeout))) { if(wi_string_length(string) == 0) return string; wi_mutable_string_append_string(socket->buffer, string); index = wi_string_index_of_string(socket->buffer, separator, 0); if(index == WI_NOT_FOUND) { if(wi_string_length(socket->buffer) > _WI_SOCKET_BUFFER_MAX_SIZE) { wi_error_set_libwired_error_with_format(WI_ERROR_SOCKET_OVERFLOW, WI_STR("Buffer is %u bytes"), wi_string_length(socket->buffer)); wi_mutable_string_set_string(socket->buffer, WI_STR("")); return NULL; } } else { substring = wi_string_substring_to_index(socket->buffer, index + wi_string_length(separator)); wi_mutable_string_delete_characters_in_range(socket->buffer, wi_make_range(0, wi_string_length(substring))); return substring; } } return NULL; }
wi_string_t * wi_socket_read_to_string(wi_socket_t *socket, wi_time_interval_t timeout, wi_string_t *separator) { wi_string_t *string, *substring; wi_uinteger_t index; index = wi_string_index_of_string(socket->buffer, separator, 0); if(index != WI_NOT_FOUND) { substring = wi_string_substring_to_index(socket->buffer, index + wi_string_length(separator)); wi_string_delete_characters_in_range(socket->buffer, wi_make_range(0, wi_string_length(substring))); return substring; } while((string = wi_socket_read(socket, timeout, WI_SOCKET_BUFFER_SIZE))) { if(wi_string_length(string) == 0) return string; wi_string_append_string(socket->buffer, string); index = wi_string_index_of_string(socket->buffer, separator, 0); if(index == WI_NOT_FOUND) { if(wi_string_length(socket->buffer) > _WI_SOCKET_BUFFER_MAX_SIZE) { substring = wi_string_substring_to_index(socket->buffer, _WI_SOCKET_BUFFER_MAX_SIZE); wi_string_delete_characters_in_range(socket->buffer, wi_make_range(0, wi_string_length(substring))); return substring; } } else { substring = wi_string_substring_to_index(socket->buffer, index + wi_string_length(separator)); wi_string_delete_characters_in_range(socket->buffer, wi_make_range(0, wi_string_length(substring))); return substring; } } return NULL; }
void wi_test_host_runtime_functions(void) { wi_host_t *host1, *host2, *host3, *host4, *host5, *host6; host1 = wi_host(); host2 = wi_autorelease(wi_copy(host1)); host3 = wi_host_with_string(WI_STR("localhost")); host4 = wi_autorelease(wi_copy(host3)); host5 = wi_host_with_string(WI_STR("aab119a592b9e23779b66649677b436d24b35aaa5ad5beadf4c2a945b70577e5.com")); host6 = wi_autorelease(wi_copy(host5)); WI_TEST_ASSERT_EQUAL_INSTANCES(host1, host2, ""); WI_TEST_ASSERT_EQUAL_INSTANCES(host3, host4, ""); WI_TEST_ASSERT_EQUAL_INSTANCES(host5, host6, ""); WI_TEST_ASSERT_NOT_EQUAL_INSTANCES(host1, host3, ""); WI_TEST_ASSERT_NOT_EQUAL_INSTANCES(host2, host3, ""); WI_TEST_ASSERT_NOT_EQUAL_INSTANCES(host1, host4, ""); WI_TEST_ASSERT_NOT_EQUAL_INSTANCES(host2, host4, ""); WI_TEST_ASSERT_NOT_EQUAL_INSTANCES(host1, host5, ""); WI_TEST_ASSERT_NOT_EQUAL_INSTANCES(host2, host5, ""); WI_TEST_ASSERT_NOT_EQUAL_INSTANCES(host1, host6, ""); WI_TEST_ASSERT_NOT_EQUAL_INSTANCES(host2, host6, ""); WI_TEST_ASSERT_EQUALS(wi_hash(host1), wi_hash(host2), ""); WI_TEST_ASSERT_EQUALS(wi_hash(host3), wi_hash(host4), ""); WI_TEST_ASSERT_EQUALS(wi_hash(host5), wi_hash(host6), ""); WI_TEST_ASSERT_EQUALS(wi_runtime_id(host1), wi_host_runtime_id(), ""); WI_TEST_ASSERT_EQUALS(wi_runtime_id(host2), wi_host_runtime_id(), ""); WI_TEST_ASSERT_EQUALS(wi_runtime_id(host3), wi_host_runtime_id(), ""); WI_TEST_ASSERT_EQUALS(wi_runtime_id(host4), wi_host_runtime_id(), ""); WI_TEST_ASSERT_EQUALS(wi_runtime_id(host5), wi_host_runtime_id(), ""); WI_TEST_ASSERT_EQUALS(wi_runtime_id(host6), wi_host_runtime_id(), ""); #ifdef HAVE_GETIFADDRS WI_TEST_ASSERT_NOT_EQUALS(wi_string_index_of_string(wi_description(host1), WI_STR("127.0.0.1"), 0), WI_NOT_FOUND, ""); #else WI_TEST_ASSERT_NOT_EQUALS(wi_string_index_of_string(wi_description(host1), WI_STR("0.0.0.0"), 0), WI_NOT_FOUND, ""); #endif WI_TEST_ASSERT_NOT_EQUALS(wi_string_index_of_string(wi_description(host3), WI_STR("127.0.0.1"), 0), WI_NOT_FOUND, ""); }
void wi_parse_wired_command(wi_string_t *buffer, wi_string_t **out_command, wi_array_t **out_arguments) { wi_string_t *string, *substring; wi_uinteger_t index; index = wi_string_index_of_string(buffer, WI_STR(_WI_WIRED_MESSAGE_SEPARATOR), WI_STRING_BACKWARDS); if(index != WI_NOT_FOUND) string = wi_string_by_deleting_characters_from_index(buffer, index); else string = wi_autorelease(wi_copy(buffer)); index = wi_string_index_of_string(string, WI_STR(" "), 0); if(index != WI_NOT_FOUND) { *out_command = wi_string_substring_to_index(string, index); substring = wi_string_substring_from_index(string, index + 1); *out_arguments = wi_string_components_separated_by_string(substring, WI_STR(_WI_WIRED_FIELD_SEPARATOR)); } else { *out_command = string; *out_arguments = wi_array(); } }
void wi_test_regexp_runtime_functions(void) { wi_regexp_t *regexp1, *regexp2; regexp1 = wi_regexp_with_pattern(WI_STR("foobar"), 0); regexp2 = wi_autorelease(wi_copy(regexp1)); WI_TEST_ASSERT_EQUAL_INSTANCES(regexp1, regexp2, ""); WI_TEST_ASSERT_EQUALS(wi_hash(regexp1), wi_hash(regexp2), ""); WI_TEST_ASSERT_EQUALS(wi_runtime_id(regexp1), wi_regexp_runtime_id(), ""); WI_TEST_ASSERT_EQUALS(wi_runtime_id(regexp2), wi_regexp_runtime_id(), ""); WI_TEST_ASSERT_NOT_EQUALS(wi_string_index_of_string(wi_description(regexp1), wi_regexp_pattern(regexp1), 0), WI_NOT_FOUND, ""); }
void wi_test_dsa_runtime_functions(void) { #ifdef WI_DSA wi_dsa_t *dsa1, *dsa2; dsa1 = wi_autorelease(wi_dsa_init_with_bits(wi_dsa_alloc(), 512)); dsa2 = wi_autorelease(wi_copy(dsa1)); WI_TEST_ASSERT_EQUAL_INSTANCES(wi_dsa_private_key(dsa1), wi_dsa_private_key(dsa2), ""); WI_TEST_ASSERT_EQUALS(wi_runtime_id(dsa1), wi_dsa_runtime_id(), ""); WI_TEST_ASSERT_EQUALS(wi_runtime_id(dsa2), wi_dsa_runtime_id(), ""); WI_TEST_ASSERT_NOT_EQUALS(wi_string_index_of_string(wi_description(dsa1), WI_STR("384"), 0), WI_NOT_FOUND, ""); #endif }
void wi_parse_wire_command(wi_string_t *buffer, wi_string_t **out_command, wi_string_t **out_arguments) { wi_uinteger_t index; index = wi_string_index_of_string(buffer, WI_STR(" "), 0); if(index != WI_NOT_FOUND) { *out_command = wi_string_substring_to_index(buffer, index); *out_arguments = wi_string_substring_from_index(buffer, index + 1); } else { *out_command = wi_autorelease(wi_copy(buffer)); *out_arguments = wi_string(); } if(wi_string_has_prefix(*out_command, WI_STR("/"))) *out_command = wi_string_by_deleting_characters_to_index(*out_command, 1); }
void wi_tests_run_test(const char *name, wi_run_test_func_t *function) { wi_pool_t *pool; wi_assert_handler_func_t *handler; wi_time_interval_t interval; if(_wi_tests_name) { if(wi_string_index_of_string(wi_string_with_utf8_string(name), _wi_tests_name, 0) == WI_NOT_FOUND) return; } if(wi_string_has_suffix(wi_string_with_utf8_string(name), WI_STR("initialize"))) { (*function)(); } else { _wi_tests_current_test = _wi_test_init_with_function(_wi_test_alloc(), wi_string_with_utf8_string(name), function); handler = wi_assert_handler; wi_assert_handler = _wi_tests_assert_handler; interval = wi_time_interval(); pool = wi_pool_init(wi_pool_alloc()); if(setjmp(_wi_tests_jmp_buf) == 0) (*_wi_tests_current_test->function)(); wi_release(pool); _wi_tests_current_test->interval = wi_time_interval() - interval; wi_assert_handler = handler; if(_wi_tests_current_test->passed) { wi_log_info(WI_STR("Test \"%@\" passed (%.3f seconds)"), _wi_tests_current_test->name, _wi_tests_current_test->interval); wi_tests_passed++; } else { wi_log_info(WI_STR("Test \"%@\" failed (%.3f seconds)"), _wi_tests_current_test->name, _wi_tests_current_test->interval); wi_tests_failed++; } wi_release(_wi_tests_current_test); } }
void wi_test_indexset_runtime_functions(void) { wi_indexset_t *indexset1; wi_mutable_indexset_t *indexset2; indexset1 = wi_indexset_with_indexes_in_range(wi_make_range(1, 3)); indexset2 = wi_autorelease(wi_mutable_copy(indexset1)); WI_TEST_ASSERT_EQUAL_INSTANCES(indexset1, indexset2, ""); WI_TEST_ASSERT_EQUALS(wi_hash(indexset1), wi_hash(indexset2), ""); WI_TEST_ASSERT_EQUALS(wi_runtime_id(indexset1), wi_indexset_runtime_id(), ""); WI_TEST_ASSERT_EQUALS(wi_runtime_id(indexset2), wi_indexset_runtime_id(), ""); WI_TEST_ASSERT_TRUE(wi_runtime_options(indexset1) & WI_RUNTIME_OPTION_IMMUTABLE, ""); WI_TEST_ASSERT_TRUE(wi_runtime_options(indexset2) & WI_RUNTIME_OPTION_MUTABLE, ""); wi_mutable_indexset_remove_index(indexset2, 1); wi_mutable_indexset_add_index(indexset2, 4); WI_TEST_ASSERT_NOT_EQUAL_INSTANCES(indexset1, indexset2, ""); WI_TEST_ASSERT_NOT_EQUALS(wi_string_index_of_string(wi_description(indexset2), WI_STR("4"), 0), WI_NOT_FOUND, ""); }
wr_completer_t wr_commands_completer_for_command(wi_string_t *buffer) { wi_string_t *command, *arguments; wr_completer_t completer; wi_uinteger_t index; if(wi_string_length(buffer) == 0 || !wi_string_has_prefix(buffer, WI_STR("/"))) return WR_COMPLETER_NICKNAME; if(wi_string_index_of_string(buffer, WI_STR(" "), 0) == WI_NOT_FOUND) return WR_COMPLETER_COMMAND; wi_parse_wire_command(buffer, &command, &arguments); index = wr_commands_index_for_command(command); if(index == WI_NOT_FOUND) completer = WR_COMPLETER_NONE; else completer = wr_commands[index].completer; return completer; }
void wi_test_system(void) { wi_array_t *backtrace; WI_TEST_ASSERT_TRUE(wi_user_id() >= 0, ""); WI_TEST_ASSERT_TRUE(wi_string_length(wi_user_name()) > 0, ""); WI_TEST_ASSERT_TRUE(wi_string_length(wi_user_home()) > 0, ""); WI_TEST_ASSERT_TRUE(wi_group_id() >= 0, ""); WI_TEST_ASSERT_TRUE(wi_string_length(wi_group_name()) > 0, ""); WI_TEST_ASSERT_TRUE(wi_page_size() > 0, ""); backtrace = wi_backtrace(); if(backtrace) { WI_TEST_ASSERT_TRUE(wi_array_count(backtrace) > 0, ""); WI_TEST_ASSERT_NOT_EQUALS(wi_string_index_of_string(wi_array_components_joined_by_string(backtrace, WI_STR("\n")), WI_STR("test"), 0), WI_NOT_FOUND, ""); } WI_TEST_ASSERT_TRUE(wi_string_length(wi_getenv(WI_STR("HOME"))) > 0, ""); }
wi_string_t * wi_file_read_to_string(wi_file_t *file, wi_string_t *separator) { wi_string_t *string; uint32_t index, length; _WI_FILE_ASSERT_OPEN(file); while((string = wi_file_read(file, WI_FILE_BUFFER_SIZE))) { length = wi_string_length(string); index = wi_string_index_of_string(string, separator, 0); if(index == WI_NOT_FOUND) { if(length < WI_FILE_BUFFER_SIZE) return string; } else { wi_string_delete_characters_from_index(string, index); wi_file_seek(file, wi_file_offset(file) - length + index + 1); return string; } } return NULL; }