/* * 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* infile, const char* outfile) { FILE* outstream = tmpfile(); FILE* outptr = fopen(outfile, "r"); if (outptr == NULL) { printf("ERROR: could not read test data file\n"); return 1; } // find length of expected output fseek(outptr, 0L, SEEK_END); const int length = ftell(outptr) + 1; rewind(outptr); char buffer[length]; char output[length]; // read expected output from outfile fgets(output, length, outptr); fclose(outptr); // read expected input from infile and redirect to stdin if (freopen(infile, "r", stdin) != NULL) { _parse_file(stdin, outstream); } else { printf("ERROR: could not read test data file\n"); return 1; } const int tmp_length = ftell(outstream) + 1; rewind(outstream); // grab program output fgets(buffer, length, outstream); fclose(outstream); // compare actual output to expected output 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("1. Header", "test-1-input.txt", "test-1-output.txt"); errors += test_parse_file("2. Emphasis", "test-2-input.txt", "test-2-output.txt"); 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); } }