/* end of data, output lingering tokens. first the parents data, then
possibly our token, if complete enough */
if (size == 0) {
+ if (tok->state == EMAIL_ADDRESS_PARSER_STATE_DOMAIN &&
+ domain_is_empty(tok)) {
+ /* user@ without domain - reset state */
+ str_truncate(tok->last_word, 0);
+ tok->state = EMAIL_ADDRESS_PARSER_STATE_NONE;
+ }
+
if (fts_tokenizer_address_parent_data(tok, token_r))
return 1;
- if (tok->state == EMAIL_ADDRESS_PARSER_STATE_DOMAIN &&
- !domain_is_empty(tok))
+ if (tok->state == EMAIL_ADDRESS_PARSER_STATE_DOMAIN)
return fts_tokenizer_address_current_token(tok, token_r);
+ tok->state = EMAIL_ADDRESS_PARSER_STATE_NONE;
}
/* 1) regular input data OR
eopp++;
}
test_assert(*eopp == NULL);
+
+ test_assert(fts_tokenizer_next(tok, (const void *)"foo", 3, &token) == 0);
+ test_assert(fts_tokenizer_next(tok, NULL, 0, &token) > 0);
+ test_assert(fts_tokenizer_next(tok, NULL, 0, &token) == 0);
+
+ test_assert(fts_tokenizer_next(tok, (const void *)"bar@baz", 7, &token) == 0);
+ test_assert(fts_tokenizer_next(tok, NULL, 0, &token) > 0);
+ test_assert(fts_tokenizer_next(tok, NULL, 0, &token) == 0);
+
+ test_assert(fts_tokenizer_next(tok, (const void *)"foo@", 4, &token) == 0);
+ test_assert(fts_tokenizer_next(tok, NULL, 0, &token) > 0);
+ test_assert(fts_tokenizer_next(tok, NULL, 0, &token) == 0);
+
fts_tokenizer_unref(&tok);
fts_tokenizer_unref(&gen_tok);
fts_tokenizers_deinit();