From f83d6cef6639c858bde5f28644bbcc8effb598b6 Mon Sep 17 00:00:00 2001 From: Reuben Thomas Date: Thu, 28 Feb 2008 19:48:49 +0000 Subject: [PATCH] Fix typo in gedcom.magic. Fix gedcom.result to correspond to reality. Make test read and check result file against actual result. --- tests/Makefile.am | 10 +++---- tests/gedcom.magic | 2 +- tests/gedcom.result | 2 +- tests/test.c | 65 ++++++++++++++++++++++++++++++++++++++++----- 4 files changed, 64 insertions(+), 15 deletions(-) diff --git a/tests/Makefile.am b/tests/Makefile.am index b953a108..465a554e 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -1,11 +1,9 @@ check_PROGRAMS = test test_LDADD = $(top_builddir)/src/libmagic.la -check-local: - MAGIC=$(top_builddir)/magic/magic ./test - for i in $(TEST_BASES); do MAGIC=./$$i.magic ./test ./$$i.testfile ./$$i.result; done - -TEST_BASES = gedcom - EXTRA_DIST = \ *.magic *.testfile *.result + +check-local: + MAGIC=$(top_builddir)/magic/magic ./test + for i in *.testfile; do MAGIC=./$${i%%.testfile}.magic ./test ./$$i ./$${i%%.testfile}.result; done diff --git a/tests/gedcom.magic b/tests/gedcom.magic index 4cfcde9d..616fd56b 100644 --- a/tests/gedcom.magic +++ b/tests/gedcom.magic @@ -1,4 +1,4 @@ -# GEDCOM Geneaolgy file +# GEDCOM Genealogy file 0 string/c 0\ HEAD GEDCOM genealogy data >&0 search 1\ GEDC diff --git a/tests/gedcom.result b/tests/gedcom.result index e121a4ea..bbb0eb86 100644 --- a/tests/gedcom.result +++ b/tests/gedcom.result @@ -1 +1 @@ -GEDCOM genealogy data version 5.5 \ No newline at end of file +GEDCOM genealogy data version 5.5 \ No newline at end of file diff --git a/tests/test.c b/tests/test.c index 1786bbc0..ce3419e6 100644 --- a/tests/test.c +++ b/tests/test.c @@ -24,36 +24,87 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ + #include +#include +#include #include "magic.h" +static void * +xrealloc(void *p, size_t n) +{ + p = realloc(p, n); + if (p == NULL) { + fprintf(stderr, "ERROR slurping file: out of memory\n"); + exit(10); + } + return p; +} + +static char * +slurp(FILE *fp, size_t *final_len) +{ + size_t len = 256; + int c; + char *l = (char *)xrealloc(NULL, len), *s = l; + + for (c = getc(fp); c != EOF; c = getc(fp)) { + if (s == l + len) { + l = (char *)xrealloc(l, len * 2); + len *= 2; + } + *s++ = c; + } + if (s == l + len) + l = (char *)xrealloc(l, len + 1); + *s++ = '\0'; + + *final_len = s - l; + l = (char *)xrealloc(l, s - l); + return l; +} + int main(int argc, char **argv) { struct magic_set *ms; - const char *m; + const char *result; + char *desired; + size_t desired_len; int i; + FILE *fp; ms = magic_open(MAGIC_NONE); if (ms == NULL) { fprintf(stderr, "ERROR opening MAGIC_NONE: out of memory\n"); - return 1; + return 10; } if (magic_load(ms, NULL) == -1) { fprintf(stderr, "ERROR loading with NULL file: %s\n", magic_error(ms)); - return 2; + return 11; } if (argc > 1) { if (argc != 3) { fprintf(stderr, "Usage: test TEST-FILE RESULT\n"); } else { - if ((m = magic_file(ms, argv[1])) == NULL) { + if ((result = magic_file(ms, argv[1])) == NULL) { fprintf(stderr, "ERROR loading file %s: %s\n", argv[1], magic_error(ms)); - return 3; + return 12; } else { - printf("%s: %s\n", argv[1], m); - /* Compare m with contents of argv[3] */ + fp = fopen(argv[2], "r"); + if (fp == NULL) { + fprintf(stderr, "ERROR opening `%s': ", argv[2]); + perror(NULL); + return 13; + } + desired = slurp(fp, &desired_len); + fclose(fp); + printf("%s: %s\n", argv[1], result); + if (strcmp(result, desired) != 0) { + fprintf(stderr, "Error: result was\n%s\nexpected:\n%s\n", result, desired); + return 1; + } } } } -- 2.40.0