#include #include #include #include typedef struct test_definition_t { char *script; char *expectation; } test_definition_t; typedef struct test_t { test_definition_t definition; bool valid; } test_t; test_t *parse_test(char **content_str) { char *content = *content_str; // define start char *script_start = strstr(content, "```"); if (!script_start) { return NULL; } script_start += 3; // define end of script char *script_end = strstr(script_start, "```"); if (!script_end) { printf("Error, missing end of script.\n"); return NULL; } unsigned int script_length = script_end - script_start; char script[script_length + 1]; script[script_length] = 0; strncpy(script, script_start, script_length); script_end += 3; // define start or expectation char *expectation_start = strstr(script_end, "```"); if (!expectation_start) { printf("Error, missing expectation start.\n"); return NULL; } expectation_start += 3; // define end of expectation char *expectation_end = strstr(expectation_start, "```"); if (!expectation_end) { printf("Error: missing expectation end.\n"); return NULL; } unsigned int expectation_length = expectation_end - expectation_start; char expectation[expectation_length + 1]; expectation[expectation_length] = 0; strncpy(expectation, expectation_start, expectation_length); expectation_end += 3; // prepare return value test_t *test = (test_t *)malloc(sizeof(test_t)); test->definition.script = (char *)malloc(script_length + 1); test->definition.expectation = (char *)malloc(expectation_length + 1); strcpy(test->definition.script, script); strcpy(test->definition.expectation, expectation); test->valid = false; // update pointer *content_str = expectation_end; return test; } int main(int argc, char *argv[]) { if (argc < 2) { printf("Usage: <*files>"); exit(1); } char *execute = argv[1]; stderr = stdout; FILE *f = popen(execute, "r"); if (!f) { printf("Couldn't execute %s.\n", execute); return 1; } char data[2048]; fread(data, 1, sizeof(data), f); printf("%s\n", data); fclose(f); char *file_ptr = "```a``````b``````c``````d```"; test_t *test; while ((test = parse_test(&file_ptr)) != NULL) { printf("source: <%s> expectation: <%s>\n", test->definition.script, test->definition.expectation); } return 0; }