From bb0b5a1bccac0987bb3daf76416cd6559469b7de Mon Sep 17 00:00:00 2001 From: Nathan Fisher Date: Mon, 30 Oct 2023 01:20:43 -0400 Subject: [PATCH] Test for endOfStream line type in tests --- gemtext-parser.c | 54 +++++++++++++++++++++------------------- include/gemtext-parser.h | 20 +++++++-------- test/parse-gemtext0.c | 7 +++++- test/parse-gemtext1.c | 5 ++++ 4 files changed, 49 insertions(+), 37 deletions(-) diff --git a/gemtext-parser.c b/gemtext-parser.c index 60c8953..0287559 100644 --- a/gemtext-parser.c +++ b/gemtext-parser.c @@ -612,33 +612,35 @@ int parseGemtext(gemtextParser *parser, gemtextLineQueue *lq) { return ret; } } else { - switch (parser->mode) { - case normalMode: - ret = gemtextParserSend(parser, normalLine, lq); - break; - case preformattedMode: - ret = gemtextParserSendPreformatted(parser, lq); - break; - case quoteMode: - ret = gemtextParserSend(parser, quoteLine, lq); - break; - case linkMode: - ret = gemtextParserSendLink(parser, lq); - break; - case h1Mode: - ret = gemtextParserSend(parser, h1Line, lq); - break; - case h2Mode: - ret = gemtextParserSend(parser, h2Line, lq); - break; - case h3Mode: - ret = gemtextParserSend(parser, h3Line, lq); - break; - case listMode: - ret = gemtextParserSend(parser, listLine, lq); - break; + if (parser->state != lineStart && parser->state != trimStart) { + switch (parser->mode) { + case normalMode: + ret = gemtextParserSend(parser, normalLine, lq); + break; + case preformattedMode: + ret = gemtextParserSendPreformatted(parser, lq); + break; + case quoteMode: + ret = gemtextParserSend(parser, quoteLine, lq); + break; + case linkMode: + ret = gemtextParserSendLink(parser, lq); + break; + case h1Mode: + ret = gemtextParserSend(parser, h1Line, lq); + break; + case h2Mode: + ret = gemtextParserSend(parser, h2Line, lq); + break; + case h3Mode: + ret = gemtextParserSend(parser, h3Line, lq); + break; + case listMode: + ret = gemtextParserSend(parser, listLine, lq); + break; + } + if (ret) return ret; } - if (ret) return ret; line = calloc(1, sizeof(gemtextLine)); if (line == NULL) return errno; line->lineType = endOfStream; diff --git a/include/gemtext-parser.h b/include/gemtext-parser.h index ed3597b..5f74183 100644 --- a/include/gemtext-parser.h +++ b/include/gemtext-parser.h @@ -47,16 +47,16 @@ typedef enum { * An enum type representing the various line types in gemtext markup */ typedef enum { - normalLine, ///< A normal text line - linkLine, ///< A link line - listLine, ///< A list member - h1Line, ///< An H1 heading - h2Line, ///< An H2 heading - h3Line, ///< An H3 heading - preformattedLine, ///< A preformatted text block - quoteLine, ///< A Quote block - endOfStream, /**< Notifies the receiver that the stream is over and no - more lines are to be expected */ + normalLine = 0, ///< A normal text line + linkLine = 1, ///< A link line + listLine = 2, ///< A list member + h1Line = 3, ///< An H1 heading + h2Line = 4, ///< An H2 heading + h3Line = 5, ///< An H3 heading + preformattedLine = 6, ///< A preformatted text block + quoteLine = 7, ///< A Quote block + endOfStream = 8, /**< Notifies the receiver that the stream is over and no + more lines are to be expected */ } gemtextLineType; /** diff --git a/test/parse-gemtext0.c b/test/parse-gemtext0.c index a3949ef..7b221c7 100644 --- a/test/parse-gemtext0.c +++ b/test/parse-gemtext0.c @@ -92,6 +92,11 @@ int main() { assert(memcmp(line->node->body, "This is a preformatted block", 28) == 0); gemtextLineDeinit(line); + line = gemtextLineQueueTryPop(&lq); + assert(line != NULL); + assert(line->lineType == endOfStream); + gemtextLineDeinit(line); + gemtextParserDeinit(&parser); return ret; -} \ No newline at end of file +} diff --git a/test/parse-gemtext1.c b/test/parse-gemtext1.c index 6159563..958aa13 100644 --- a/test/parse-gemtext1.c +++ b/test/parse-gemtext1.c @@ -95,6 +95,11 @@ int main() { assert(line->lineType == linkLine); assert(line->link->display == NULL); assert(memcmp(line->link->url, "finger://example.org/joe", 24) == 0); + gemtextLineDeinit(line); + + line = gemtextLineQueueTryPop(&lq); + assert(line != NULL); + assert(line->lineType == endOfStream); gemtextLineDeinit(line); return ret;