static void test_To_String(TestBatchRunner *runner) { Obj *testobj = S_new_testobj(); String *string = Obj_To_String(testobj); TEST_TRUE(runner, Str_Find_Utf8(string, "TestObj", 7) >= 0, "To_String"); DECREF(string); DECREF(testobj); }
static void S_verify_abstract_error(TestBatchRunner *runner, Err_Attempt_t routine, void *context, const char *name) { char message[100]; sprintf(message, "%s() is abstract", name); Err *error = Err_trap(routine, context); TEST_TRUE(runner, error != NULL && Err_Is_A(error, ERR) && Str_Find_Utf8(Err_Get_Mess(error), "bstract", 7) != -1, message); DECREF(error); }
StringIterator* Str_Find_IMP(String *self, String *substring) { return Str_Find_Utf8(self, substring->ptr, substring->size); }
static void test_Create_Excerpt(TestBatchRunner *runner, Searcher *searcher, Obj *query, Hits *hits) { String *content = (String*)SSTR_WRAP_UTF8("content", 7); Highlighter *highlighter = Highlighter_new(searcher, query, content, 200); HitDoc *hit = Hits_Next(hits); String *excerpt = Highlighter_Create_Excerpt(highlighter, hit); TEST_TRUE(runner, Str_Find_Utf8(excerpt, "<strong>Φ</strong> a b c d <strong>x y z</strong>", 54) >= 0, "highlighter tagged phrase and single term"); DECREF(excerpt); String *pre_tag = (String*)SSTR_WRAP_UTF8("\x1B[1m", 4); Highlighter_Set_Pre_Tag(highlighter, pre_tag); String *post_tag = (String*)SSTR_WRAP_UTF8("\x1B[0m", 4); Highlighter_Set_Post_Tag(highlighter, post_tag); excerpt = Highlighter_Create_Excerpt(highlighter, hit); TEST_TRUE(runner, Str_Find_Utf8(excerpt, "\x1B[1mΦ\x1B[0m a b c d \x1B[1mx y z\x1B[0m", 36) >= 0, "set_pre_tag and set_post_tag"); DECREF(excerpt); DECREF(hit); hit = Hits_Next(hits); excerpt = Highlighter_Create_Excerpt(highlighter, hit); TEST_TRUE(runner, Str_Find_Utf8(excerpt, "x", 1) >= 0, "excerpt field with partial hit doesn't cause highlighter freakout"); DECREF(excerpt); DECREF(hit); DECREF(highlighter); query = (Obj*)SSTR_WRAP_UTF8("x \"x y z\" AND b", 15); hits = Searcher_Hits(searcher, query, 0, 10, NULL); highlighter = Highlighter_new(searcher, query, content, 200); hit = Hits_Next(hits); excerpt = Highlighter_Create_Excerpt(highlighter, hit); TEST_TRUE(runner, Str_Find_Utf8(excerpt, "<strong>b</strong> c d <strong>x y z</strong>", 45) >= 0, "query with same word in both phrase and term doesn't cause freakout"); DECREF(excerpt); DECREF(hit); DECREF(highlighter); DECREF(hits); query = (Obj*)SSTR_WRAP_UTF8("blind", 5); hits = Searcher_Hits(searcher, query, 0, 10, NULL); highlighter = Highlighter_new(searcher, query, content, 200); hit = Hits_Next(hits); excerpt = Highlighter_Create_Excerpt(highlighter, hit); TEST_TRUE(runner, Str_Find_Utf8(excerpt, """, 6) >= 0, "HTML entity encoded properly"); DECREF(excerpt); DECREF(hit); DECREF(highlighter); DECREF(hits); query = (Obj*)SSTR_WRAP_UTF8("why", 3); hits = Searcher_Hits(searcher, query, 0, 10, NULL); highlighter = Highlighter_new(searcher, query, content, 200); hit = Hits_Next(hits); excerpt = Highlighter_Create_Excerpt(highlighter, hit); TEST_TRUE(runner, Str_Find_Utf8(excerpt, "Φ", 6) == -1, "no ellipsis for short excerpt"); DECREF(excerpt); DECREF(hit); DECREF(highlighter); DECREF(hits); Obj *term = (Obj*)SSTR_WRAP_UTF8("x", 1); query = (Obj*)TermQuery_new(content, term); hits = Searcher_Hits(searcher, query, 0, 10, NULL); hit = Hits_Next(hits); highlighter = Highlighter_new(searcher, query, content, 200); excerpt = Highlighter_Create_Excerpt(highlighter, hit); TEST_TRUE(runner, Str_Find_Utf8(excerpt, "strong", 5) >= 0, "specify field highlights correct field..."); DECREF(excerpt); DECREF(highlighter); String *alt = (String*)SSTR_WRAP_UTF8("alt", 3); highlighter = Highlighter_new(searcher, query, alt, 200); excerpt = Highlighter_Create_Excerpt(highlighter, hit); TEST_TRUE(runner, Str_Find_Utf8(excerpt, "strong", 5) == -1, "... but not another field"); DECREF(excerpt); DECREF(highlighter); DECREF(hit); DECREF(hits); DECREF(query); }
static bool S_is_local_entry(String *path) { return Str_Find_Utf8(path, "/", 1) == -1; }