]> andersk Git - libyaml.git/blobdiff - tests/run-parser-test-suite.c
New upstream version 0.2.1
[libyaml.git] / tests / run-parser-test-suite.c
diff --git a/tests/run-parser-test-suite.c b/tests/run-parser-test-suite.c
new file mode 100644 (file)
index 0000000..b2c7f84
--- /dev/null
@@ -0,0 +1,144 @@
+#include <yaml.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <assert.h>
+
+void print_escaped(yaml_char_t * str, size_t length);
+
+int main(int argc, char *argv[])
+{
+    FILE *input;
+    yaml_parser_t parser;
+    yaml_event_t event;
+
+    if (argc == 1)
+        input = stdin;
+    else if (argc == 2)
+        input = fopen(argv[1], "rb");
+    else {
+        fprintf(stderr, "Usage: libyaml-parser [<input-file>]\n");
+        return 1;
+    }
+    assert(input);
+
+    if (!yaml_parser_initialize(&parser)) {
+        fprintf(stderr, "Could not initialize the parser object\n");
+        return 1;
+    }
+    yaml_parser_set_input_file(&parser, input);
+
+    while (1) {
+        yaml_event_type_t type;
+        if (!yaml_parser_parse(&parser, &event)) {
+            fprintf(stderr, "Parse error: %s\n", parser.problem);
+            return 1;
+        }
+        type = event.type;
+
+        if (type == YAML_NO_EVENT)
+            printf("???\n");
+        else if (type == YAML_STREAM_START_EVENT)
+            printf("+STR\n");
+        else if (type == YAML_STREAM_END_EVENT)
+            printf("-STR\n");
+        else if (type == YAML_DOCUMENT_START_EVENT) {
+            printf("+DOC");
+            if (!event.data.document_start.implicit)
+                printf(" ---");
+            printf("\n");
+        }
+        else if (type == YAML_DOCUMENT_END_EVENT) {
+            printf("-DOC");
+            if (!event.data.document_end.implicit)
+                printf(" ...");
+            printf("\n");
+        }
+        else if (type == YAML_MAPPING_START_EVENT) {
+            printf("+MAP");
+            if (event.data.mapping_start.anchor)
+                printf(" &%s", event.data.mapping_start.anchor);
+            if (event.data.mapping_start.tag)
+                printf(" <%s>", event.data.mapping_start.tag);
+            printf("\n");
+        }
+        else if (type == YAML_MAPPING_END_EVENT)
+            printf("-MAP\n");
+        else if (type == YAML_SEQUENCE_START_EVENT) {
+            printf("+SEQ");
+            if (event.data.sequence_start.anchor)
+                printf(" &%s", event.data.sequence_start.anchor);
+            if (event.data.sequence_start.tag)
+                printf(" <%s>", event.data.sequence_start.tag);
+            printf("\n");
+        }
+        else if (type == YAML_SEQUENCE_END_EVENT)
+            printf("-SEQ\n");
+        else if (type == YAML_SCALAR_EVENT) {
+            printf("=VAL");
+            if (event.data.scalar.anchor)
+                printf(" &%s", event.data.scalar.anchor);
+            if (event.data.scalar.tag)
+                printf(" <%s>", event.data.scalar.tag);
+            switch (event.data.scalar.style) {
+            case YAML_PLAIN_SCALAR_STYLE:
+                printf(" :");
+                break;
+            case YAML_SINGLE_QUOTED_SCALAR_STYLE:
+                printf(" '");
+                break;
+            case YAML_DOUBLE_QUOTED_SCALAR_STYLE:
+                printf(" \"");
+                break;
+            case YAML_LITERAL_SCALAR_STYLE:
+                printf(" |");
+                break;
+            case YAML_FOLDED_SCALAR_STYLE:
+                printf(" >");
+                break;
+            case YAML_ANY_SCALAR_STYLE:
+                abort();
+            }
+            print_escaped(event.data.scalar.value, event.data.scalar.length);
+            printf("\n");
+        }
+        else if (type == YAML_ALIAS_EVENT)
+            printf("=ALI *%s\n", event.data.alias.anchor);
+        else
+            abort();
+
+        yaml_event_delete(&event);
+
+        if (type == YAML_STREAM_END_EVENT)
+            break;
+    }
+
+    assert(!fclose(input));
+    yaml_parser_delete(&parser);
+    fflush(stdout);
+
+    return 0;
+}
+
+void print_escaped(yaml_char_t * str, size_t length)
+{
+    int i;
+    char c;
+
+    for (i = 0; i < length; i++) {
+        c = *(str + i);
+        if (c == '\\')
+            printf("\\\\");
+        else if (c == '\0')
+            printf("\\0");
+        else if (c == '\b')
+            printf("\\b");
+        else if (c == '\n')
+            printf("\\n");
+        else if (c == '\r')
+            printf("\\r");
+        else if (c == '\t')
+            printf("\\t");
+        else
+            printf("%c", c);
+    }
+}
This page took 0.052701 seconds and 4 git commands to generate.