diff options
author | Quentin Glidic <sardemff7+git@sardemff7.net> | 2013-07-09 00:06:24 +0200 |
---|---|---|
committer | Kristian Høgsberg <krh@bitplanet.net> | 2013-07-08 18:14:04 -0400 |
commit | d2d70f2aeb370b0827e8c66fa9e7e2a26b1d6648 (patch) | |
tree | d4a5cee086b3841ca878dadda9f0c2f4250aaa76 /tests | |
parent | f291f2055367cbb1e4f00f269c2c298c642d3ba6 (diff) |
tests: Move config-parser.test to tests/
Signed-off-by: Quentin Glidic <sardemff7+git@sardemff7.net>
Diffstat (limited to 'tests')
-rw-r--r-- | tests/.gitignore | 1 | ||||
-rw-r--r-- | tests/Makefile.am | 12 | ||||
-rw-r--r-- | tests/config-parser-test.c | 202 |
3 files changed, 214 insertions, 1 deletions
diff --git a/tests/.gitignore b/tests/.gitignore index ad112408..28d65763 100644 --- a/tests/.gitignore +++ b/tests/.gitignore @@ -1,3 +1,4 @@ +*.test *.weston logs matrix-test diff --git a/tests/Makefile.am b/tests/Makefile.am index a4e5a287..d4aa9098 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -1,4 +1,7 @@ -TESTS = $(module_tests) $(weston_tests) +TESTS = $(shared_tests) $(module_tests) $(weston_tests) + +shared_tests = \ + config-parser.test module_tests = \ surface-test.la \ @@ -36,6 +39,7 @@ check_LTLIBRARIES = \ $(module_tests) check_PROGRAMS = \ + $(shared_tests) \ $(weston_tests) AM_CFLAGS = $(GCC_CFLAGS) @@ -47,6 +51,12 @@ AM_CPPFLAGS = \ $(COMPOSITOR_CFLAGS) AM_LDFLAGS = -module -avoid-version -rpath $(libdir) +config_parser_test_LDADD = \ + ../shared/libshared.la \ + $(COMPOSITOR_LIBS) +config_parser_test_SOURCES = \ + config-parser-test.c + surface_global_test_la_SOURCES = surface-global-test.c surface_test_la_SOURCES = surface-test.c diff --git a/tests/config-parser-test.c b/tests/config-parser-test.c new file mode 100644 index 00000000..12a8fbd8 --- /dev/null +++ b/tests/config-parser-test.c @@ -0,0 +1,202 @@ +/* + * Copyright © 2013 Intel Corporation + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting documentation, and + * that the name of the copyright holders not be used in advertising or + * publicity pertaining to distribution of the software without specific, + * written prior permission. The copyright holders make no representations + * about the suitability of this software for any purpose. It is provided "as + * is" without express or implied warranty. + * + * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THIS SOFTWARE. + */ + +#include <stdlib.h> +#include <stdint.h> +#include <string.h> +#include <assert.h> +#include <errno.h> + +#include "config-parser.h" + +static struct weston_config * +run_test(const char *text) +{ + struct weston_config *config; + char file[] = "/tmp/weston-config-parser-test-XXXXXX"; + int fd, len; + + fd = mkstemp(file); + len = write(fd, text, strlen(text)); + assert(len == strlen(text)); + + config = weston_config_parse(fd); + close(fd); + unlink(file); + + return config; +} + +static const char t0[] = + "# nothing in this file...\n"; + +static const char t1[] = + "# comment line here...\n" + "\n" + "[foo]\n" + "a=b\n" + "name= Roy Batty \n" + "\n" + "\n" + "[bar]\n" + "# more comments\n" + "number=5252\n" + "flag=false\n" + "\n" + "[stuff]\n" + "flag= true \n" + "\n" + "[bucket]\n" + "color=blue \n" + "contents=live crabs\n" + "pinchy=true\n" + "\n" + "[bucket]\n" + "material=plastic \n" + "color=red\n" + "contents=sand\n"; + +static const char *section_names[] = { + "foo", "bar", "stuff", "bucket", "bucket" +}; + +static const char t2[] = + "# invalid section...\n" + "[this bracket isn't closed\n"; + +static const char t3[] = + "# line without = ...\n" + "[bambam]\n" + "this line isn't any kind of valid\n"; + +static const char t4[] = + "# starting with = ...\n" + "[bambam]\n" + "=not valid at all\n"; + +int main(int argc, char *argv[]) +{ + struct weston_config *config; + struct weston_config_section *section; + const char *name; + char *s; + int r, b, i; + int32_t n; + uint32_t u; + + config = run_test(t0); + assert(config); + weston_config_destroy(config); + + config = run_test(t1); + assert(config); + section = weston_config_get_section(config, "mollusc", NULL, NULL); + assert(section == NULL); + + section = weston_config_get_section(config, "foo", NULL, NULL); + r = weston_config_section_get_string(section, "a", &s, NULL); + assert(r == 0 && strcmp(s, "b") == 0); + free(s); + + section = weston_config_get_section(config, "foo", NULL, NULL); + r = weston_config_section_get_string(section, "b", &s, NULL); + assert(r == -1 && errno == ENOENT && s == NULL); + + section = weston_config_get_section(config, "foo", NULL, NULL); + r = weston_config_section_get_string(section, "name", &s, NULL); + assert(r == 0 && strcmp(s, "Roy Batty") == 0); + free(s); + + section = weston_config_get_section(config, "bar", NULL, NULL); + r = weston_config_section_get_string(section, "a", &s, "boo"); + assert(r == -1 && errno == ENOENT && strcmp(s, "boo") == 0); + free(s); + + section = weston_config_get_section(config, "bar", NULL, NULL); + r = weston_config_section_get_int(section, "number", &n, 600); + assert(r == 0 && n == 5252); + + section = weston_config_get_section(config, "bar", NULL, NULL); + r = weston_config_section_get_int(section, "+++", &n, 700); + assert(r == -1 && errno == ENOENT && n == 700); + + section = weston_config_get_section(config, "bar", NULL, NULL); + r = weston_config_section_get_uint(section, "number", &u, 600); + assert(r == 0 && u == 5252); + + section = weston_config_get_section(config, "bar", NULL, NULL); + r = weston_config_section_get_uint(section, "+++", &u, 600); + assert(r == -1 && errno == ENOENT && u == 600); + + section = weston_config_get_section(config, "bar", NULL, NULL); + r = weston_config_section_get_bool(section, "flag", &b, 600); + assert(r == 0 && b == 0); + + section = weston_config_get_section(config, "stuff", NULL, NULL); + r = weston_config_section_get_bool(section, "flag", &b, -1); + assert(r == 0 && b == 1); + + section = weston_config_get_section(config, "stuff", NULL, NULL); + r = weston_config_section_get_bool(section, "bonk", &b, -1); + assert(r == -1 && errno == ENOENT && b == -1); + + section = weston_config_get_section(config, "bucket", "color", "blue"); + r = weston_config_section_get_string(section, "contents", &s, NULL); + assert(r == 0 && strcmp(s, "live crabs") == 0); + free(s); + + section = weston_config_get_section(config, "bucket", "color", "red"); + r = weston_config_section_get_string(section, "contents", &s, NULL); + assert(r == 0 && strcmp(s, "sand") == 0); + free(s); + + section = weston_config_get_section(config, "bucket", "color", "pink"); + assert(section == NULL); + r = weston_config_section_get_string(section, "contents", &s, "eels"); + assert(r == -1 && errno == ENOENT && strcmp(s, "eels") == 0); + free(s); + + section = NULL; + i = 0; + while (weston_config_next_section(config, §ion, &name)) + assert(strcmp(section_names[i++], name) == 0); + assert(i == 5); + + weston_config_destroy(config); + + config = run_test(t2); + assert(config == NULL); + + config = run_test(t3); + assert(config == NULL); + + config = run_test(t4); + assert(config == NULL); + + weston_config_destroy(NULL); + assert(weston_config_next_section(NULL, NULL, NULL) == 0); + + section = weston_config_get_section(NULL, "bucket", NULL, NULL); + assert(section == NULL); + + return 0; +} |