/* * 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, tmp_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"); /* * Lowdown 1.0.2 removed superfluous newlines between HTML elements (see * GitHub commit f42602c); as a result, this test will fail for versions * older than that. * * Package or port availability as of 2023-11-29 (amd64-only; not an * exhaustive list): * FreeBSD: 1.1.0 (latest), 1.0.2 (quarterly) * OpenBSD: 1.0.0 * Ubuntu: 1.0.0 (23.10 and 23.04), 0.10.0 (22.04) */ errors += test_parse_file("3. Multiline", "# header\n`code`", "

header

\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); } }