#include #include #include #include #include "gemtext-parser.h" gemtextNodeQueue lq; gemtextParser parser; int main() { int ret = 0; FILE *stream = NULL; gemtextNode *node = NULL; stream = fopen("test0.gmi", "r"); assert(stream != NULL); ret = gemtextNodeQueueInit(&lq); assert(ret == 0); ret = gemtextParserInit(&parser, stream); assert(ret == 0); ret = parseGemtext(&parser, &lq); node = gemtextNodeQueueTryPop(&lq); assert(node->nodeType == h1Node); assert(memcmp(node->str, "A Test Gemtext file", 19) == 0); gemtextNodeDeinit(node); node = gemtextNodeQueueTryPop(&lq); assert(node->nodeType == h2Node); assert(memcmp(node->str, "Used for testing the parser in normal operation", 47) == 0); gemtextNodeDeinit(node); node = gemtextNodeQueueTryPop(&lq); assert(node->nodeType == normalNode); assert(*node->str == '\n'); gemtextNodeDeinit(node); node = gemtextNodeQueueTryPop(&lq); assert(node->nodeType == normalNode); assert(memcmp(node->str, "This is", 7) == 0); gemtextNodeDeinit(node); node = gemtextNodeQueueTryPop(&lq); assert(node->nodeType == normalNode); assert(*node->str == '\n'); gemtextNodeDeinit(node); node = gemtextNodeQueueTryPop(&lq); assert(node->nodeType == quoteNode); assert(memcmp(node->str, "Walk before you run.\n- Anonymous", 32) == 0); gemtextNodeDeinit(node); node = gemtextNodeQueueTryPop(&lq); assert(node->nodeType == normalNode); assert(*node->str == '\n'); gemtextNodeDeinit(node); node = gemtextNodeQueueTryPop(&lq); assert(node->nodeType == h3Node); assert(memcmp(node->str, "Let's check a list", 18) == 0); gemtextNodeDeinit(node); node = gemtextNodeQueueTryPop(&lq); assert(node->nodeType == listNode); assert(memcmp(node->str, "First item", 9) == 0); gemtextNodeDeinit(node); node = gemtextNodeQueueTryPop(&lq); assert(node->nodeType == listNode); assert(memcmp(node->str, "second item", 11) == 0); gemtextNodeDeinit(node); node = gemtextNodeQueueTryPop(&lq); assert(node->nodeType == normalNode); assert(*node->str == '\n'); gemtextNodeDeinit(node); node = gemtextNodeQueueTryPop(&lq); assert(node->nodeType == linkNode); assert(memcmp(node->link->url, "gemini://example.org/test.gmi", 29) == 0); assert(memcmp(node->link->display, "This is a link", 14) == 0); gemtextNodeDeinit(node); node = gemtextNodeQueueTryPop(&lq); assert(node->nodeType == normalNode); assert(*node->str == '\n'); gemtextNodeDeinit(node); node = gemtextNodeQueueTryPop(&lq); assert(node->nodeType == preformattedNode); assert(memcmp(node->block->altText, "Test preformatted block", 23) == 0); assert(memcmp(node->block->body, "This is a preformatted block", 28) == 0); gemtextNodeDeinit(node); node = gemtextNodeQueueTryPop(&lq); assert(node != NULL); assert(node->nodeType == endOfStream); gemtextNodeDeinit(node); gemtextParserDeinit(&parser); return ret; }