END_TEST /** * check get asserts on NULL parameter */ START_TEST(nsurl_api_assert_get_test) { nserror err; char *url_s = NULL; size_t url_l = 0; err = nsurl_get(NULL, NSURL_PATH, &url_s, &url_l); ck_assert(err != NSERROR_OK); ck_assert(url_s == NULL); ck_assert(url_l == 0); }
/** * Test nsurl */ int main(void) { nsurl *base; nsurl *joined; char *string; size_t len; const char *url; const struct test_pairs *test; int passed = 0; int count = 0; /* Create base URL */ if (nsurl_create("http://a/b/c/d;p?q", &base) != NSERROR_OK) { assert(0 && "Failed to create base URL."); } if (nsurl_get(base, NSURL_WITH_FRAGMENT, &string, &len) != NSERROR_OK) { LOG(("Failed to get string")); } else { LOG(("Testing nsurl_join with base %s", string)); free(string); } for (test = join_tests; test->test != NULL; test++) { if (nsurl_join(base, test->test, &joined) != NSERROR_OK) { LOG(("Failed to join test URL.")); } else { if (nsurl_get(joined, NSURL_WITH_FRAGMENT, &string, &len) != NSERROR_OK) { LOG(("Failed to get string")); } else { if (strcmp(test->res, string) == 0) { LOG(("\tPASS: \"%s\"\t--> %s", test->test, string)); passed++; } else { LOG(("\tFAIL: \"%s\"\t--> %s", test->test, string)); LOG(("\t\tExpecting: %s", test->res)); } free(string); } nsurl_unref(joined); } count++; } nsurl_unref(base); /* Create tests */ LOG(("Testing nsurl_create")); for (test = create_tests; test->test != NULL; test++) { if (nsurl_create(test->test, &base) != NSERROR_OK) { LOG(("Failed to create URL:\n\t\t%s.", test->test)); } else { if (strcmp(nsurl_access(base), test->res) == 0) { LOG(("\tPASS: \"%s\"\t--> %s", test->test, nsurl_access(base))); passed++; } else { LOG(("\tFAIL: \"%s\"\t--> %s", test->test, nsurl_access(base))); LOG(("\t\tExpecting %s", test->res)); } nsurl_unref(base); } count++; } if (passed == count) { LOG(("Testing complete: SUCCESS")); } else { LOG(("Testing complete: FAILURE")); LOG(("Failed %d out of %d", count - passed, count)); } return 0; }
node_callback_resp tree_url_node_callback(void *user_data, struct node_msg_data *msg_data) { struct tree *tree; struct node_element *element; nsurl *nsurl; nserror error; const char *text; char *norm_text; const struct url_data *data; /** @todo memory leaks on non-shared folder deletion. */ switch (msg_data->msg) { case NODE_DELETE_ELEMENT_TXT: switch (msg_data->flag) { /* only history is using non-editable url * elements so only history deletion will run * this code */ case TREE_ELEMENT_URL: /* reset URL characteristics */ urldb_reset_url_visit_data( msg_data->data.text); return NODE_CALLBACK_HANDLED; case TREE_ELEMENT_TITLE: return NODE_CALLBACK_HANDLED; } break; case NODE_DELETE_ELEMENT_IMG: if (msg_data->flag == TREE_ELEMENT_THUMBNAIL || msg_data->flag == TREE_ELEMENT_TITLE) return NODE_CALLBACK_HANDLED; break; case NODE_LAUNCH: element = tree_node_find_element(msg_data->node, TREE_ELEMENT_URL, NULL); if (element != NULL) { text = tree_node_element_get_text(element); if (msg_data->flag == TREE_ELEMENT_LAUNCH_IN_TABS) { msg_data->data.bw = browser_window_create(text, msg_data->data.bw, 0, true, true); } else { browser_window_create(text, NULL, 0, true, false); } return NODE_CALLBACK_HANDLED; } break; case NODE_ELEMENT_EDIT_FINISHING: text = msg_data->data.text; if (msg_data->flag == TREE_ELEMENT_URL) { size_t len; error = nsurl_create(text, &nsurl); if (error != NSERROR_OK) { warn_user("NoMemory", 0); return NODE_CALLBACK_REJECT; } error = nsurl_get(nsurl, NSURL_WITH_FRAGMENT, &norm_text, &len); nsurl_unref(nsurl); if (error != NSERROR_OK) { warn_user("NoMemory", 0); return NODE_CALLBACK_REJECT; } msg_data->data.text = norm_text; data = urldb_get_url_data(norm_text); if (data == NULL) { urldb_add_url(norm_text); urldb_set_url_persistence(norm_text, true); data = urldb_get_url_data(norm_text); if (data == NULL) return NODE_CALLBACK_REJECT; } tree = user_data; tree_update_URL_node(tree, msg_data->node, norm_text, NULL); } else if (msg_data->flag == TREE_ELEMENT_TITLE) { while (isspace(*text)) text++; norm_text = strdup(text); if (norm_text == NULL) { LOG(("malloc failed")); warn_user("NoMemory", 0); return NODE_CALLBACK_REJECT; } /* don't allow zero length entry text, return false */ if (norm_text[0] == '\0') { warn_user("NoNameError", 0); msg_data->data.text = NULL; return NODE_CALLBACK_CONTINUE; } msg_data->data.text = norm_text; } return NODE_CALLBACK_HANDLED; default: break; } return NODE_CALLBACK_NOT_HANDLED; }