1.1 --- a/test/harness/testcaseio.c Fri Jan 27 23:59:51 2012 +0000
1.2 +++ b/test/harness/testcaseio.c Mon Jan 30 00:36:31 2012 +0000
1.3 @@ -4,6 +4,7 @@
1.4 #include <glib.h>
1.5 #include <bl/bl.h>
1.6 #include "testcaseparser.h"
1.7 +#include "testcaseinput.h"
1.8 #include "testcaseio.h"
1.9
1.10 /*
1.11 @@ -15,7 +16,8 @@
1.12 {
1.13 Testcase *testcase;
1.14 TestcaseParser *parser;
1.15 - char *s;
1.16 + TestcaseInput *input=NULL;
1.17 + char *s,*arg;
1.18 const char *tag,*text;
1.19 gboolean found_tag=FALSE;
1.20 parser=testcase_parser_new_from_file(filename);
1.21 @@ -34,12 +36,44 @@
1.22 *s='\0';
1.23 while(testcase_parser_get_next_tag(parser,&tag,&text))
1.24 {
1.25 - if (!testcase->input && !strcmp(tag,"INPUT"))
1.26 - testcase->input=g_strdup(text);
1.27 + if (!input && !strcmp(tag,"INPUT"))
1.28 + input=testcase_input_new("TEST-XXXXXX",text);
1.29 + else if (g_str_has_prefix(tag,"INPUT(") && tag[strlen(tag)-1]==')')
1.30 + {
1.31 + arg=g_strndup(tag+6,strlen(tag)-7);
1.32 + s=g_path_get_dirname(arg);
1.33 + if (strcmp(s,"."))
1.34 + {
1.35 + /*
1.36 + * Otherwise it would be possible to overwrite an arbitary
1.37 + * file on somebody's computer by getting them to run a
1.38 + * testcase!
1.39 + */
1.40 + fprintf(stderr,
1.41 + "%s: Input files may not have a directory component\n",arg);
1.42 + g_free(s);
1.43 + g_free(arg);
1.44 + testcase_free(testcase);
1.45 + testcase_parser_free(parser);
1.46 + return NULL;
1.47 + }
1.48 + g_free(s);
1.49 + testcase->inputs=g_slist_prepend(testcase->inputs,
1.50 + testcase_input_new(arg,text));
1.51 + if (!strstr(arg,"XXXXXX"))
1.52 + testcase->flags|=TESTCASE_TMP_DIR;
1.53 + g_free(arg);
1.54 + }
1.55 else if (!testcase->expected && !strcmp(tag,"EXPECTED"))
1.56 testcase->expected=g_strdup(text);
1.57 else if (!testcase->encoding && !strcmp(tag,"ENCODING"))
1.58 testcase->encoding=g_strchomp(g_strdup(text));
1.59 + else if (!testcase->encoding && !strcmp(tag,"OPTIONS"))
1.60 + {
1.61 + testcase->options=g_strsplit(text,"\n",0);
1.62 + g_free(testcase->options[g_strv_length(testcase->options)-1]);
1.63 + testcase->options[g_strv_length(testcase->options)-1]=NULL;
1.64 + }
1.65 else
1.66 {
1.67 fprintf(stderr,"%s: Not a valid testcase (%s)\n",filename,tag);
1.68 @@ -61,6 +95,9 @@
1.69 testcase_parser_free(parser);
1.70 return NULL;
1.71 }
1.72 + if (!input)
1.73 + input=testcase_input_new("TEST-XXXXXX",NULL);
1.74 + testcase->inputs=g_slist_prepend(testcase->inputs,input);
1.75 testcase_parser_free(parser);
1.76 return testcase;
1.77 }