mirror of
https://github.com/yaml/libyaml.git
synced 2026-01-26 11:14:28 +00:00
Include libyaml-test and libyaml-parser-emitter
Before the `make test-suite` command would clone yaml/libyaml-test which would in tuen clone yaml/libyaml-parser-emitter. Now they are part of the repository since they are not really useful outside the repository. They still clone the data branch of yaml/yaml-test-suite. That is where all the actual test data resides. That belongs outside the repo because it is intended for all yaml frameworks.
This commit is contained in:
parent
52b6634fb3
commit
a672b07109
98
.gitignore
vendored
98
.gitignore
vendored
@ -1,44 +1,62 @@
|
||||
CMakeCache.txt
|
||||
CMakeFiles/
|
||||
CTestTestfile.cmake
|
||||
Makefile
|
||||
Makefile.in
|
||||
Testing/
|
||||
aclocal.m4
|
||||
autom4te.cache
|
||||
cmake_install.cmake
|
||||
configure
|
||||
config
|
||||
config.h
|
||||
config.h.in
|
||||
config.h.in~
|
||||
config.log
|
||||
config.status
|
||||
example-deconstructor
|
||||
example-deconstructor-alt
|
||||
example-reformatter
|
||||
example-reformatter-alt
|
||||
libtool
|
||||
libyaml.a
|
||||
libyaml-test/
|
||||
run-dumper
|
||||
run-emitter
|
||||
run-loader
|
||||
run-parser
|
||||
run-scanner
|
||||
stamp-h1
|
||||
test-reader
|
||||
test-version
|
||||
tests/test-reader
|
||||
tests/test-reader.log
|
||||
tests/test-reader.trs
|
||||
tests/test-suite.log
|
||||
tests/test-version
|
||||
tests/test-version.log
|
||||
tests/test-version.trs
|
||||
.deps
|
||||
.libs
|
||||
.deps/
|
||||
.libs/
|
||||
*~
|
||||
*.BAK
|
||||
*.la
|
||||
*.lo
|
||||
*.o
|
||||
*.pc
|
||||
/CMakeCache.txt
|
||||
/CMakeFiles/
|
||||
/CTestTestfile.cmake
|
||||
/Makefile
|
||||
Makefile.in
|
||||
/Testing/
|
||||
/aclocal.m4
|
||||
/autom4te.cache
|
||||
/cmake_install.cmake
|
||||
/config
|
||||
/config.h
|
||||
/config.h.in
|
||||
/config.h.in~
|
||||
/config.log
|
||||
/config.status
|
||||
/configure
|
||||
/example-deconstructor
|
||||
/example-deconstructor-alt
|
||||
/example-reformatter
|
||||
/example-reformatter-alt
|
||||
/include/Makefile
|
||||
/libtool
|
||||
/libyaml.a
|
||||
/run-dumper
|
||||
/run-emitter
|
||||
/run-loader
|
||||
/run-parser
|
||||
/run-scanner
|
||||
/src/Makefile
|
||||
/stamp-h1
|
||||
/test-reader
|
||||
/test-version
|
||||
/tests/Makefile
|
||||
/tests/example-deconstructor
|
||||
/tests/example-deconstructor-alt
|
||||
/tests/example-reformatter
|
||||
/tests/example-reformatter-alt
|
||||
/tests/run-dumper
|
||||
/tests/run-emitter
|
||||
/tests/run-loader
|
||||
/tests/run-parser
|
||||
/tests/run-scanner
|
||||
/tests/run-test-suite/data
|
||||
tests/run-test-suite/src/libyaml/
|
||||
tests/run-test-suite/src/libyaml-emitter
|
||||
tests/run-test-suite/src/libyaml-parser
|
||||
/tests/test-reader
|
||||
/tests/test-reader.log
|
||||
/tests/test-reader.trs
|
||||
/tests/test-suite.log
|
||||
/tests/test-version
|
||||
/tests/test-version.log
|
||||
/tests/test-version.trs
|
||||
/win32/Makefile
|
||||
|
||||
1
.indent.pro
vendored
Normal file
1
.indent.pro
vendored
Normal file
@ -0,0 +1 @@
|
||||
-kr -nut -nce -l250
|
||||
11
Makefile.am
11
Makefile.am
@ -13,19 +13,18 @@ maintainer-clean-local:
|
||||
-find ${builddir} -name Makefile.in -exec rm -f '{}' ';'
|
||||
|
||||
distclean-local:
|
||||
-rm -fr libyaml-test
|
||||
-make -C tests/run-test-suite clean
|
||||
|
||||
.PHONY: bootstrap
|
||||
bootstrap: maintainer-clean
|
||||
./bootstrap
|
||||
./configure
|
||||
make
|
||||
|
||||
test: all
|
||||
make -C tests check-TESTS
|
||||
|
||||
test-suite: libyaml-test
|
||||
(export LIBYAML_DIR=$$PWD; make -C $< test)
|
||||
|
||||
libyaml-test:
|
||||
git clone https://github.com/yaml/$@
|
||||
test-suite:
|
||||
(export LIBYAML_DIR=$$PWD; make -C tests/run-test-suite test)
|
||||
|
||||
test-all: test test-suite
|
||||
|
||||
29
tests/run-test-suite/Makefile
Normal file
29
tests/run-test-suite/Makefile
Normal file
@ -0,0 +1,29 @@
|
||||
.PHONY: test
|
||||
GITHUB_ORG_URI := https://github.com/yaml
|
||||
TEST_SUITE_URL := $(GITHUB_ORG_URI)/yaml-test-suite
|
||||
LIBYAML_DIR ?= $(PWD)/libyaml-parser-emitter/libyaml
|
||||
|
||||
default: help
|
||||
|
||||
help:
|
||||
@echo 'test - Run the tests'
|
||||
@echo 'clean - Remove generated files'
|
||||
@echo 'help - Show help'
|
||||
|
||||
# Depends on parser and emitter but, building parser will also build emitter.
|
||||
# Building twice makes things fail. Note: Some environments like on OS X, the
|
||||
# shell resets the {DY,}LD_LIBRARY_PATH vars, so we work around it like so:
|
||||
test: data src/libyaml-parser
|
||||
(export MY_LD_LIBRARY_PATH=$(LIBYAML_DIR)/src/.libs; prove -lv test)
|
||||
|
||||
clean:
|
||||
rm -fr data
|
||||
|
||||
data:
|
||||
git clone $(TEST_SUITE_URL) $@ --branch=$@
|
||||
|
||||
%/libyaml-parser %/libyaml-emitter: %
|
||||
(cd $<; make build)
|
||||
|
||||
libyaml-parser-emitter:
|
||||
git clone $(GITHUB_ORG_URI)/$@ $@
|
||||
17
tests/run-test-suite/ReadMe.md
Normal file
17
tests/run-test-suite/ReadMe.md
Normal file
@ -0,0 +1,17 @@
|
||||
LibYAML Test Runner
|
||||
===================
|
||||
|
||||
Run libyaml-parser and libyaml-emitter against yaml-test-suite
|
||||
|
||||
# Synopsis
|
||||
|
||||
```
|
||||
make test
|
||||
```
|
||||
|
||||
# Overview
|
||||
|
||||
See:
|
||||
|
||||
* https://github.com/yaml/libyaml
|
||||
* https://github.com/yaml/yaml-test-suite
|
||||
54
tests/run-test-suite/src/Makefile
Normal file
54
tests/run-test-suite/src/Makefile
Normal file
@ -0,0 +1,54 @@
|
||||
LIBYAML_DIR ?= libyaml
|
||||
LIBYAML_REPO ?= https://github.com/yaml/libyaml
|
||||
LIBYAML_BRANCH ?= master
|
||||
define HELP
|
||||
This Makefile supports the following targets:
|
||||
|
||||
build - Build ./libyaml-parser and ./libyaml-emitter
|
||||
test - Run tests
|
||||
|
||||
endef
|
||||
export HELP
|
||||
|
||||
help:
|
||||
@echo "$$HELP"
|
||||
|
||||
build: touch libyaml-parser libyaml-emitter
|
||||
|
||||
touch:
|
||||
ifneq ($(LIBYAML_DIR),libyaml)
|
||||
touch *.c
|
||||
endif
|
||||
|
||||
libyaml-%: $(LIBYAML_DIR)/tests/.libs/run-%
|
||||
cp $< $@
|
||||
|
||||
$(LIBYAML_DIR)/tests/.libs/%: $(LIBYAML_DIR)/tests/%.c $(LIBYAML_DIR)/Makefile
|
||||
make -C $(LIBYAML_DIR)
|
||||
ifneq ($(LIBYAML_DIR),libyaml)
|
||||
(cd $(LIBYAML_DIR) && git checkout tests/run-parser.c tests/run-emitter.c)
|
||||
endif
|
||||
|
||||
$(LIBYAML_DIR)/tests/run-%: libyaml-% $(LIBYAML_DIR)
|
||||
cp $< $@
|
||||
.SECONDARY: \
|
||||
$(LIBYAML_DIR)/tests/run-parser.c \
|
||||
$(LIBYAML_DIR)/tests/run-emitter.c \
|
||||
$(LIBYAML_DIR)/tests/.libs/run-parser \
|
||||
$(LIBYAML_DIR)/tests/.libs/run-emitter
|
||||
|
||||
$(LIBYAML_DIR)/Makefile: $(LIBYAML_DIR)
|
||||
( cd $< && ./bootstrap && ./configure )
|
||||
touch $@
|
||||
|
||||
$(LIBYAML_DIR):
|
||||
git clone $(LIBYAML_REPO) $@
|
||||
sleep 1
|
||||
touch *.c
|
||||
|
||||
.PHONY: test
|
||||
test: build
|
||||
prove -lv test/
|
||||
|
||||
clean:
|
||||
rm -fr libyaml libyaml-parser libyaml-emitter
|
||||
34
tests/run-test-suite/src/ReadMe.md
Normal file
34
tests/run-test-suite/src/ReadMe.md
Normal file
@ -0,0 +1,34 @@
|
||||
libyaml-parser-emitter
|
||||
======================
|
||||
|
||||
Parser and Emitter CLI tools for libyaml
|
||||
|
||||
# Synopsis
|
||||
|
||||
```
|
||||
make build
|
||||
make test
|
||||
```
|
||||
|
||||
# Usage
|
||||
|
||||
Print parse events for a YAML file (or stdin):
|
||||
```
|
||||
./libyaml-parser file.yaml
|
||||
./libyaml-parser < file.yaml
|
||||
cat file.yaml | ./libyaml-parser
|
||||
```
|
||||
|
||||
Print the YAML for a libyaml-parser events file (or stdin):
|
||||
```
|
||||
./libyaml-emitter file.events
|
||||
./libyaml-emitter < file.events
|
||||
cat file.events | ./libyaml-emitter
|
||||
```
|
||||
|
||||
# Build
|
||||
|
||||
```
|
||||
export LIBYAML_DIR=/path/to/libyaml # Optional
|
||||
make build
|
||||
```
|
||||
232
tests/run-test-suite/src/libyaml-emitter.c
Normal file
232
tests/run-test-suite/src/libyaml-emitter.c
Normal file
@ -0,0 +1,232 @@
|
||||
#include <yaml.h>
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <stdbool.h>
|
||||
#include <assert.h>
|
||||
|
||||
bool get_line(FILE * input, char *line);
|
||||
char *get_anchor(char sigil, char *line, char *anchor);
|
||||
char *get_tag(char *line, char *tag);
|
||||
void get_value(char *line, char *value, int *style);
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
FILE *input;
|
||||
yaml_emitter_t emitter;
|
||||
yaml_event_t event;
|
||||
|
||||
int canonical = 0;
|
||||
int unicode = 0;
|
||||
char line[1024];
|
||||
|
||||
if (argc == 1)
|
||||
input = stdin;
|
||||
else if (argc == 2)
|
||||
input = fopen(argv[1], "rb");
|
||||
else {
|
||||
fprintf(stderr, "Usage: libyaml-emitter [<input-file>]\n");
|
||||
return 1;
|
||||
}
|
||||
assert(input);
|
||||
|
||||
if (!yaml_emitter_initialize(&emitter)) {
|
||||
fprintf(stderr, "Could not initalize the emitter object\n");
|
||||
return 1;
|
||||
}
|
||||
yaml_emitter_set_output_file(&emitter, stdout);
|
||||
yaml_emitter_set_canonical(&emitter, canonical);
|
||||
yaml_emitter_set_unicode(&emitter, unicode);
|
||||
|
||||
while (get_line(input, line)) {
|
||||
int ok;
|
||||
char anchor[256];
|
||||
char tag[256];
|
||||
int implicit;
|
||||
|
||||
if (strncmp(line, "+STR", 4) == 0) {
|
||||
ok = yaml_stream_start_event_initialize(&event, YAML_UTF8_ENCODING);
|
||||
}
|
||||
else if (strncmp(line, "-STR", 4) == 0) {
|
||||
ok = yaml_stream_end_event_initialize(&event);
|
||||
}
|
||||
else if (strncmp(line, "+DOC", 4) == 0) {
|
||||
implicit = strncmp(line, "+DOC ---", 8) != 0;
|
||||
ok = yaml_document_start_event_initialize(&event, NULL, NULL, NULL, implicit);
|
||||
}
|
||||
else if (strncmp(line, "-DOC", 4) == 0) {
|
||||
implicit = strncmp(line, "-DOC ...", 8) != 0;
|
||||
ok = yaml_document_end_event_initialize(&event, implicit);
|
||||
}
|
||||
else if (strncmp(line, "+MAP", 4) == 0) {
|
||||
ok = yaml_mapping_start_event_initialize(&event, (yaml_char_t *)
|
||||
get_anchor('&', line, anchor), (yaml_char_t *)
|
||||
get_tag(line, tag), 0, YAML_BLOCK_MAPPING_STYLE);
|
||||
}
|
||||
else if (strncmp(line, "-MAP", 4) == 0) {
|
||||
ok = yaml_mapping_end_event_initialize(&event);
|
||||
}
|
||||
else if (strncmp(line, "+SEQ", 4) == 0) {
|
||||
ok = yaml_sequence_start_event_initialize(&event, (yaml_char_t *)
|
||||
get_anchor('&', line, anchor), (yaml_char_t *)
|
||||
get_tag(line, tag), 0, YAML_BLOCK_SEQUENCE_STYLE);
|
||||
}
|
||||
else if (strncmp(line, "-SEQ", 4) == 0) {
|
||||
ok = yaml_sequence_end_event_initialize(&event);
|
||||
}
|
||||
else if (strncmp(line, "=VAL", 4) == 0) {
|
||||
char value[1024];
|
||||
int style;
|
||||
|
||||
get_value(line, value, &style);
|
||||
implicit = (get_tag(line, tag) == NULL);
|
||||
|
||||
ok = yaml_scalar_event_initialize(&event, (yaml_char_t *)
|
||||
get_anchor('&', line, anchor), (yaml_char_t *) get_tag(line, tag), (yaml_char_t *) value, -1, implicit, implicit, style);
|
||||
}
|
||||
else if (strncmp(line, "=ALI", 4) == 0) {
|
||||
ok = yaml_alias_event_initialize(&event, (yaml_char_t *)
|
||||
get_anchor('*', line, anchor)
|
||||
);
|
||||
}
|
||||
else {
|
||||
fprintf(stderr, "Unknown event: '%s'\n", line);
|
||||
fflush(stdout);
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (!ok)
|
||||
goto event_error;
|
||||
if (!yaml_emitter_emit(&emitter, &event))
|
||||
goto emitter_error;
|
||||
}
|
||||
|
||||
assert(!fclose(input));
|
||||
yaml_emitter_delete(&emitter);
|
||||
fflush(stdout);
|
||||
|
||||
return 0;
|
||||
|
||||
emitter_error:
|
||||
switch (emitter.error) {
|
||||
case YAML_MEMORY_ERROR:
|
||||
fprintf(stderr, "Memory error: Not enough memory for emitting\n");
|
||||
break;
|
||||
case YAML_WRITER_ERROR:
|
||||
fprintf(stderr, "Writer error: %s\n", emitter.problem);
|
||||
break;
|
||||
case YAML_EMITTER_ERROR:
|
||||
fprintf(stderr, "Emitter error: %s\n", emitter.problem);
|
||||
break;
|
||||
default:
|
||||
/*
|
||||
* Couldn't happen.
|
||||
*/
|
||||
fprintf(stderr, "Internal error\n");
|
||||
break;
|
||||
}
|
||||
yaml_emitter_delete(&emitter);
|
||||
return 1;
|
||||
|
||||
event_error:
|
||||
fprintf(stderr, "Memory error: Not enough memory for creating an event\n");
|
||||
yaml_emitter_delete(&emitter);
|
||||
return 1;
|
||||
}
|
||||
|
||||
bool get_line(FILE * input, char *line)
|
||||
{
|
||||
char *newline;
|
||||
|
||||
if (!fgets(line, 1024 - 1, input))
|
||||
return false;
|
||||
|
||||
if ((newline = strchr(line, '\n')) == NULL) {
|
||||
fprintf(stderr, "Line too long: '%s'", line);
|
||||
abort();
|
||||
}
|
||||
*newline = '\0';
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
char *get_anchor(char sigil, char *line, char *anchor)
|
||||
{
|
||||
char *start;
|
||||
char *end;
|
||||
if ((start = strchr(line, sigil)) == NULL)
|
||||
return NULL;
|
||||
start++;
|
||||
if ((end = strchr(start, ' ')) == NULL)
|
||||
end = line + strlen(line);
|
||||
memcpy(anchor, start, end - start);
|
||||
anchor[end - start] = '\0';
|
||||
return anchor;
|
||||
}
|
||||
|
||||
char *get_tag(char *line, char *tag)
|
||||
{
|
||||
char *start;
|
||||
char *end;
|
||||
if ((start = strchr(line, '<')) == NULL)
|
||||
return NULL;
|
||||
if ((end = strchr(line, '>')) == NULL)
|
||||
return NULL;
|
||||
memcpy(tag, start + 1, end - start - 1);
|
||||
tag[end - start - 1] = '\0';
|
||||
return tag;
|
||||
}
|
||||
|
||||
void get_value(char *line, char *value, int *style)
|
||||
{
|
||||
int i = 0;
|
||||
char *c;
|
||||
char *start = NULL;
|
||||
char *end = line + strlen(line);
|
||||
|
||||
for (c = line + 4; c < end; c++) {
|
||||
if (*c == ' ') {
|
||||
start = c + 1;
|
||||
if (*start == ':')
|
||||
*style = YAML_PLAIN_SCALAR_STYLE;
|
||||
else if (*start == '\'')
|
||||
*style = YAML_SINGLE_QUOTED_SCALAR_STYLE;
|
||||
else if (*start == '"')
|
||||
*style = YAML_DOUBLE_QUOTED_SCALAR_STYLE;
|
||||
else if (*start == '|')
|
||||
*style = YAML_LITERAL_SCALAR_STYLE;
|
||||
else if (*start == '>')
|
||||
*style = YAML_FOLDED_SCALAR_STYLE;
|
||||
else {
|
||||
start = NULL;
|
||||
continue;
|
||||
}
|
||||
start++;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!start)
|
||||
abort();
|
||||
|
||||
for (c = start; c < end; c++) {
|
||||
if (*c == '\\') {
|
||||
if (*++c == '\\')
|
||||
value[i++] = '\\';
|
||||
else if (*c == '0')
|
||||
value[i++] = '\0';
|
||||
else if (*c == 'b')
|
||||
value[i++] = '\b';
|
||||
else if (*c == 'n')
|
||||
value[i++] = '\n';
|
||||
else if (*c == 'r')
|
||||
value[i++] = '\r';
|
||||
else if (*c == 't')
|
||||
value[i++] = '\t';
|
||||
else
|
||||
abort();
|
||||
}
|
||||
else
|
||||
value[i++] = *c;
|
||||
}
|
||||
value[i] = '\0';
|
||||
}
|
||||
144
tests/run-test-suite/src/libyaml-parser.c
Normal file
144
tests/run-test-suite/src/libyaml-parser.c
Normal file
@ -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);
|
||||
}
|
||||
}
|
||||
59
tests/run-test-suite/src/test/example-2.27-invoice.events
Normal file
59
tests/run-test-suite/src/test/example-2.27-invoice.events
Normal file
@ -0,0 +1,59 @@
|
||||
+STR
|
||||
+DOC ---
|
||||
+MAP <tag:clarkevans.com,2002:invoice>
|
||||
=VAL :invoice
|
||||
=VAL :34843
|
||||
=VAL :date
|
||||
=VAL :2001-01-23
|
||||
=VAL :bill-to
|
||||
+MAP &id001
|
||||
=VAL :given
|
||||
=VAL :Chris
|
||||
=VAL :family
|
||||
=VAL :Dumars
|
||||
=VAL :address
|
||||
+MAP
|
||||
=VAL :lines
|
||||
=VAL |458 Walkman Dr.\nSuite #292\n
|
||||
=VAL :city
|
||||
=VAL :Royal Oak
|
||||
=VAL :state
|
||||
=VAL :MI
|
||||
=VAL :postal
|
||||
=VAL :48046
|
||||
-MAP
|
||||
-MAP
|
||||
=VAL :ship-to
|
||||
=ALI *id001
|
||||
=VAL :product
|
||||
+SEQ
|
||||
+MAP
|
||||
=VAL :sku
|
||||
=VAL :BL394D
|
||||
=VAL :quantity
|
||||
=VAL :4
|
||||
=VAL :description
|
||||
=VAL :Basketball
|
||||
=VAL :price
|
||||
=VAL :450.00
|
||||
-MAP
|
||||
+MAP
|
||||
=VAL :sku
|
||||
=VAL :BL4438H
|
||||
=VAL :quantity
|
||||
=VAL :1
|
||||
=VAL :description
|
||||
=VAL :Super Hoop
|
||||
=VAL :price
|
||||
=VAL :2392.00
|
||||
-MAP
|
||||
-SEQ
|
||||
=VAL :tax
|
||||
=VAL :251.42
|
||||
=VAL :total
|
||||
=VAL :4443.52
|
||||
=VAL :comments
|
||||
=VAL :Late afternoon is best. Backup contact is Nancy Billsmer @ 338-4338.
|
||||
-MAP
|
||||
-DOC
|
||||
-STR
|
||||
26
tests/run-test-suite/src/test/example-2.27-invoice.out
Normal file
26
tests/run-test-suite/src/test/example-2.27-invoice.out
Normal file
@ -0,0 +1,26 @@
|
||||
--- !<tag:clarkevans.com,2002:invoice>
|
||||
invoice: 34843
|
||||
date: 2001-01-23
|
||||
bill-to: &id001
|
||||
given: Chris
|
||||
family: Dumars
|
||||
address:
|
||||
lines: |
|
||||
458 Walkman Dr.
|
||||
Suite #292
|
||||
city: Royal Oak
|
||||
state: MI
|
||||
postal: 48046
|
||||
ship-to: *id001
|
||||
product:
|
||||
- sku: BL394D
|
||||
quantity: 4
|
||||
description: Basketball
|
||||
price: 450.00
|
||||
- sku: BL4438H
|
||||
quantity: 1
|
||||
description: Super Hoop
|
||||
price: 2392.00
|
||||
tax: 251.42
|
||||
total: 4443.52
|
||||
comments: Late afternoon is best. Backup contact is Nancy Billsmer @ 338-4338.
|
||||
29
tests/run-test-suite/src/test/example-2.27-invoice.yaml
Normal file
29
tests/run-test-suite/src/test/example-2.27-invoice.yaml
Normal file
@ -0,0 +1,29 @@
|
||||
--- !<tag:clarkevans.com,2002:invoice>
|
||||
invoice: 34843
|
||||
date : 2001-01-23
|
||||
bill-to: &id001
|
||||
given : Chris
|
||||
family : Dumars
|
||||
address:
|
||||
lines: |
|
||||
458 Walkman Dr.
|
||||
Suite #292
|
||||
city : Royal Oak
|
||||
state : MI
|
||||
postal : 48046
|
||||
ship-to: *id001
|
||||
product:
|
||||
- sku : BL394D
|
||||
quantity : 4
|
||||
description : Basketball
|
||||
price : 450.00
|
||||
- sku : BL4438H
|
||||
quantity : 1
|
||||
description : Super Hoop
|
||||
price : 2392.00
|
||||
tax : 251.42
|
||||
total: 4443.52
|
||||
comments:
|
||||
Late afternoon is best.
|
||||
Backup contact is Nancy
|
||||
Billsmer @ 338-4338.
|
||||
26
tests/run-test-suite/src/test/libyaml-emitter.t
Normal file
26
tests/run-test-suite/src/test/libyaml-emitter.t
Normal file
@ -0,0 +1,26 @@
|
||||
#!/bin/bash
|
||||
|
||||
got=$(mktemp)
|
||||
|
||||
count=0
|
||||
for test in test/*.events; do
|
||||
want=${test//.events/.out}
|
||||
label="Emitting '$test' equals '$want'"
|
||||
rc=0
|
||||
./libyaml-emitter $test > $got || rc=$?
|
||||
if [[ $rc -ne 0 ]]; then
|
||||
echo "not ok $((++count)) - Error code $rc"
|
||||
continue
|
||||
fi
|
||||
rc=0
|
||||
diff=$(diff -u $want $got) || rc=$?
|
||||
if [[ $rc -eq 0 ]]; then
|
||||
echo "ok $((++count)) - $label"
|
||||
else
|
||||
echo "not ok $((++count)) - $label"
|
||||
diff=${diff//$'\n'/$'\n'# }
|
||||
echo "# $diff"
|
||||
fi
|
||||
done
|
||||
|
||||
echo "1..$count"
|
||||
26
tests/run-test-suite/src/test/libyaml-parser.t
Normal file
26
tests/run-test-suite/src/test/libyaml-parser.t
Normal file
@ -0,0 +1,26 @@
|
||||
#!/bin/bash
|
||||
|
||||
got=$(mktemp)
|
||||
|
||||
count=0
|
||||
for test in test/*.yaml; do
|
||||
want=${test//.yaml/.events}
|
||||
label="Parsing '$test' equals '$want'"
|
||||
rc=0
|
||||
./libyaml-parser $test > $got || rc=$?
|
||||
if [[ $rc -ne 0 ]]; then
|
||||
echo "not ok $((++count)) - Error code $rc"
|
||||
continue
|
||||
fi
|
||||
rc=0
|
||||
diff=$(diff -u $want $got) || rc=$?
|
||||
if [[ $rc -eq 0 ]]; then
|
||||
echo "ok $((++count)) - $label"
|
||||
else
|
||||
echo "not ok $((++count)) - $label"
|
||||
diff=${diff//$'\n'/$'\n'# }
|
||||
echo "# $diff"
|
||||
fi
|
||||
done
|
||||
|
||||
echo "1..$count"
|
||||
31
tests/run-test-suite/test/libyaml-emitter.skip
Normal file
31
tests/run-test-suite/test/libyaml-emitter.skip
Normal file
@ -0,0 +1,31 @@
|
||||
27NA # %YAML 1.2
|
||||
2JQS # Null key emission not supported in libyaml
|
||||
2SXE # Colon in anchor
|
||||
2XXW # Emits space after colon for null mapping value
|
||||
35KP # Not adding tags to multiple docs
|
||||
4ABK # Null key
|
||||
5TYM # No libyaml-emitter %TAG support yet
|
||||
5WE3 # Emits space after colon for null mapping value
|
||||
6BCT # Tab after dash in sequence. XXX?
|
||||
6CK3 # No libyaml-emitter %TAG support yet
|
||||
6LVF # Unknown directive
|
||||
6M2F # Null key
|
||||
6ZKB # %YAML 1.2
|
||||
7W2P # Emits space after colon for null mapping value
|
||||
8KHE # Emits space after colon for null mapping value
|
||||
8MK2 # Emits '!<%21> a' for '! a'
|
||||
C2DT # Emits space after colon for null mapping value
|
||||
DFF7 # Null key
|
||||
FH7J # Null key && Emits space after colon for null mapping value
|
||||
FRK4 # Null key
|
||||
JTV5 # Emits space after colon for null mapping value
|
||||
KZN9 # Null key
|
||||
LE5A # Emits space after colon for null mapping value
|
||||
NHX8 # Null key
|
||||
PW8X # Null key && Emits space after colon for null mapping value
|
||||
S3PD # Null key
|
||||
S4JQ # Emits '!<%21> a' for '! a'
|
||||
UT92 # Emits space after --- for null document
|
||||
W42U # Emits space after - for null sequence entry
|
||||
W4TN # Emits space after --- for null document
|
||||
WZ62 # Null key value
|
||||
43
tests/run-test-suite/test/libyaml-emitter.t
Executable file
43
tests/run-test-suite/test/libyaml-emitter.t
Executable file
@ -0,0 +1,43 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -e
|
||||
|
||||
if [[ $# -gt 0 ]]; then
|
||||
ids=("$@")
|
||||
else
|
||||
ids=(`find data | grep '/===$' | cut -d/ -f2 | sort`)
|
||||
fi
|
||||
|
||||
# Some environments like on OS X, the shell resets the following vars, so we
|
||||
# work around it like so:
|
||||
export LD_LIBRARY_PATH="${MY_LD_LIBRARY_PATH:?}"
|
||||
export DYLD_LIBRARY_PATH="${MY_LD_LIBRARY_PATH:?}"
|
||||
|
||||
count=0
|
||||
for id in "${ids[@]}"; do
|
||||
dir="data/$id"
|
||||
label="$id: $(< $dir/===)"
|
||||
[[ -e "$dir/in.yaml" ]] || continue
|
||||
if grep "$id" test/libyaml-emitter.skip >/dev/null; then
|
||||
echo "ok $((++count)) # SKIP $label"
|
||||
continue
|
||||
fi
|
||||
want="$dir/out.yaml"
|
||||
[[ -e $want ]] || want="$dir/in.yaml"
|
||||
./src/libyaml-emitter "$dir/test.event" > /tmp/test.out || {
|
||||
(
|
||||
cat "$dir/test.event"
|
||||
cat "$want"
|
||||
) | sed 's/^/# /'
|
||||
}
|
||||
ok=true
|
||||
output="$(${DIFF:-diff} -u $want /tmp/test.out)" || ok=false
|
||||
if $ok; then
|
||||
echo "ok $((++count)) $label"
|
||||
else
|
||||
echo "not ok $((++count)) $label"
|
||||
echo "$output" | sed 's/^/# /'
|
||||
fi
|
||||
done
|
||||
|
||||
echo "1..$count"
|
||||
22
tests/run-test-suite/test/libyaml-parser.skip
Normal file
22
tests/run-test-suite/test/libyaml-parser.skip
Normal file
@ -0,0 +1,22 @@
|
||||
27NA # %YAML 1.2
|
||||
2JQS # Null keys
|
||||
2SXE # Colon in anchor
|
||||
4ABK # Null key
|
||||
6BCT # Test probably bad. tab after dash in sequence
|
||||
6LVF # Unknown directive
|
||||
6M2F # Null key
|
||||
6ZKB # %YAML 1.2
|
||||
A2M4 # Tab after dash in sequence. XXX?
|
||||
BEC7 # %YAML 1.3
|
||||
DBG4 # Colon in flow scalar
|
||||
FRK4 # XXX Why is explicit key in flow?
|
||||
KZN9 # Null key
|
||||
M7A3 # libyaml wants explicit --- for docs after ...
|
||||
N782 # --- and ... as flow values
|
||||
NHX8 # Null key
|
||||
R4YG # Tab char in possible indentation in folded scalar
|
||||
RTP8 # %YAML 1.2
|
||||
S3PD # Null key
|
||||
UT92 # Multiline plain key in flow does not work
|
||||
W4TN # %YAML 1.2
|
||||
WZ62 # Tagged empty values in flow mapping do not work
|
||||
36
tests/run-test-suite/test/libyaml-parser.t
Executable file
36
tests/run-test-suite/test/libyaml-parser.t
Executable file
@ -0,0 +1,36 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -e
|
||||
|
||||
if [[ $# -gt 0 ]]; then
|
||||
ids=("$@")
|
||||
else
|
||||
ids=(`find data | grep '/===$' | cut -d/ -f2 | sort`)
|
||||
fi
|
||||
|
||||
count=0
|
||||
for id in "${ids[@]}"; do
|
||||
dir="data/$id"
|
||||
label="$id: $(< $dir/===)"
|
||||
[[ -e "$dir/in.yaml" ]] || continue
|
||||
if grep "$id" test/libyaml-parser.skip >/dev/null; then
|
||||
echo "ok $((++count)) # SKIP $label"
|
||||
continue
|
||||
fi
|
||||
./src/libyaml-parser "$dir/in.yaml" > /tmp/test.out || {
|
||||
(
|
||||
cat "$dir/in.yaml"
|
||||
cat "$dir/test.event"
|
||||
) | sed 's/^/# /'
|
||||
}
|
||||
ok=true
|
||||
output="$(${DIFF:-diff} -u $dir/test.event /tmp/test.out)" || ok=false
|
||||
if $ok; then
|
||||
echo "ok $((++count)) $label"
|
||||
else
|
||||
echo "not ok $((++count)) $label"
|
||||
echo "$output" | sed 's/^/# /'
|
||||
fi
|
||||
done
|
||||
|
||||
echo "1..$count"
|
||||
@ -3,28 +3,24 @@
|
||||
set -e
|
||||
|
||||
main() {
|
||||
bootstrap
|
||||
clean
|
||||
|
||||
./bootstrap
|
||||
./configure
|
||||
make test-all
|
||||
|
||||
clean
|
||||
|
||||
cmake .
|
||||
|
||||
make
|
||||
make test
|
||||
}
|
||||
|
||||
bootstrap() {
|
||||
clean
|
||||
|
||||
./bootstrap
|
||||
./configure
|
||||
}
|
||||
|
||||
clean() {
|
||||
git clean -d -x -f
|
||||
rm -fr libyaml-test
|
||||
rm -fr tests/run-test-suite/data
|
||||
}
|
||||
|
||||
main "$@"
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user