Getting the next word ends at a comment (;)

This commit is contained in:
David Neto 2015-08-25 13:53:19 -04:00
Родитель e3f70b9a85
Коммит 574884cd7e
3 изменённых файлов: 18 добавлений и 1 удалений

Просмотреть файл

@ -155,6 +155,7 @@ spv_result_t spvTextWordGet(const spv_text text,
while (true) {
switch (text->str[endPosition->index]) {
case ' ':
case ';':
case '\t':
case '\n':
case '\0': { // NOTE: End of word found!

Просмотреть файл

@ -85,7 +85,9 @@ spv_result_t spvTextAdvanceLine(const spv_text text, spv_position_t *pPosition);
/// @return result code
spv_result_t spvTextAdvance(const spv_text text, spv_position_t *pPosition);
/// @brief Fetch the next word from the text stream
/// @brief Fetch the next word from the text stream.
///
/// A word ends at the next comment or whitespace.
///
/// @param[in] text stream to read from
/// @param[in] startPosition current position in text stream

Просмотреть файл

@ -68,6 +68,20 @@ TEST(TextWordGet, SpaceTerminator) {
ASSERT_STREQ("Word", word.c_str());
}
TEST(TextWordGet, SemicolonTerminator) {
char textStr[] = "Wo;rd ";
spv_text_t text = {textStr, strlen(textStr)};
spv_position_t startPosition = {};
std::string word;
spv_position_t endPosition = {};
ASSERT_EQ(SPV_SUCCESS,
spvTextWordGet(&text, &startPosition, word, &endPosition));
ASSERT_EQ(2, endPosition.column);
ASSERT_EQ(0, endPosition.line);
ASSERT_EQ(2, endPosition.index);
ASSERT_STREQ("Wo", word.c_str());
}
TEST(TextWordGet, MultipleWords) {
char textStr[] = "Words in a sentence";
spv_text_t text = {textStr, strlen(textStr)};