/* * Copyright (c) Cody Logan * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "parse-file.h" static int test_parse_file(const char *testname, const char *input, const char *output) { FILE *instream = tmpfile(); FILE *outstream = tmpfile(); if (instream == NULL || outstream == NULL) { printf("Error opening temporary file(s)"); return 1; } fprintf(instream, "%s", input); rewind(instream); const int length = strlen(output) + 1; char buffer[length]; _parse_file(instream, outstream); const int tmp_length = ftell(outstream) + 1; rewind(outstream); char* result; size_t len = 0; do { result = fgets(buffer + len, length - len + 1, outstream); len = strlen(buffer); } while (result); fclose(instream); fclose(outstream); if (strcmp(buffer, output) == 0 && tmp_length == length) { printf("%s test succeeded\n", testname); return 0; } else { printf("%s test failed\n", testname); printf("%s\n !=\n%s\n", buffer, output); return 1; } } int main(void) { printf("\n=============\nRunning Tests\n=============\n"); int errors = 0; errors += test_parse_file("1. Header", "# header", "

header

\n"); errors += test_parse_file("2. Bold", "**bold**", "

bold

\n"); errors += test_parse_file("3. Multiline", "# header\n`code`", "

header

\n\n

code

\n"); printf("\n============\nTest Summary\n============\n"); switch (errors) { case 0: printf("All tests succeeded\n"); break; case 1: printf("One test failed\n"); break; default: printf("%i tests failed\n", errors); } }