From e9550a6116d26ed66b0b19cc7328c7dac6f57eb7 Mon Sep 17 00:00:00 2001 From: Christopher Chedeau Date: Mon, 28 Apr 2014 12:36:36 -0700 Subject: [PATCH] split test utils for c --- Makefile | 2 +- src/Layout-test-utils.c | 74 +++++++++++++++++++++++++++++++++++ src/Layout-test-utils.h | 8 ++++ src/__tests__/Layout-test.c | 78 +------------------------------------ 4 files changed, 84 insertions(+), 78 deletions(-) create mode 100644 src/Layout-test-utils.c create mode 100644 src/Layout-test-utils.h diff --git a/Makefile b/Makefile index bb31ae5b..00d64153 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ test: - @gcc src/__tests__/Layout-test.c src/Layout.c && ./a.out + @gcc src/__tests__/Layout-test.c src/Layout.c src/Layout-test-utils.c && ./a.out @rm a.out diff --git a/src/Layout-test-utils.c b/src/Layout-test-utils.c new file mode 100644 index 00000000..ff9d9ab5 --- /dev/null +++ b/src/Layout-test-utils.c @@ -0,0 +1,74 @@ + +#include "Layout-test-utils.h" + +bool are_layout_equal(css_node_t *a, css_node_t *b) { + if (a->layout.dimensions[CSS_WIDTH] != b->layout.dimensions[CSS_WIDTH] || + a->layout.dimensions[CSS_HEIGHT] != b->layout.dimensions[CSS_HEIGHT] || + a->layout.position[CSS_TOP] != b->layout.position[CSS_TOP] || + a->layout.position[CSS_LEFT] != b->layout.position[CSS_LEFT] || + a->children_count != b->children_count) { + return false; + } + for (int i = 0; i < a->children_count; ++i) { + if (!are_layout_equal(&a->children[i], &b->children[i])) { + return false; + } + } + return true; +} + +css_dim_t measure(void *context, css_measure_type_t type, float width) { + const char *text = context; + css_dim_t dim; + if (strcmp(text, "small") == 0) { + if (type == CSS_MEASURE_GROW || type == CSS_MEASURE_SHRINK) { + dim.dimensions[CSS_WIDTH] = 33; + dim.dimensions[CSS_HEIGHT] = 18; + return dim; + } + dim.dimensions[CSS_WIDTH] = width; + dim.dimensions[CSS_HEIGHT] = 18; + return dim; + } + if (strcmp(text, "loooooooooong with space") == 0) { + if (type == CSS_MEASURE_GROW) { + dim.dimensions[CSS_WIDTH] = 171; + dim.dimensions[CSS_HEIGHT] = 18; + return dim; + } + if (type == CSS_MEASURE_SHRINK) { + dim.dimensions[CSS_WIDTH] = 100; + dim.dimensions[CSS_HEIGHT] = 36; + return dim; + } + dim.dimensions[CSS_WIDTH] = width; + dim.dimensions[CSS_HEIGHT] = width >= 171 ? 18 : 36; + return dim; + } + + // Should not go here + dim.dimensions[CSS_WIDTH] = CSS_UNDEFINED; + dim.dimensions[CSS_HEIGHT] = CSS_UNDEFINED; + return dim; +} + +void test(const char *name, css_node_t *style, css_node_t *expected_layout) { + layoutNode(style); + + if (!are_layout_equal(style, expected_layout)) { + printf("%sFAIL%s %s\n", "\x1B[31m", "\x1B[0m", name); + + printf("Input: "); + print_style(style, 0); + printf("Output: "); + print_layout(style, 0); + + printf("Expected: "); + print_layout(expected_layout, 0); + } else { + printf("%sPASS%s %s\n", "\x1B[32m", "\x1B[0m", name); + } + + free_css_node(style); + free_css_node(expected_layout); +} diff --git a/src/Layout-test-utils.h b/src/Layout-test-utils.h new file mode 100644 index 00000000..e4aed351 --- /dev/null +++ b/src/Layout-test-utils.h @@ -0,0 +1,8 @@ + +#include "Layout.h" +#include +#include +#include + +void test(const char *name, css_node_t *style, css_node_t *expected_layout); +css_dim_t measure(void *context, css_measure_type_t type, float width); diff --git a/src/__tests__/Layout-test.c b/src/__tests__/Layout-test.c index c0c9c351..8fd01d2a 100644 --- a/src/__tests__/Layout-test.c +++ b/src/__tests__/Layout-test.c @@ -1,82 +1,6 @@ #include "../Layout.h" - -#include -#include -#include - -bool are_layout_equal(css_node_t *a, css_node_t *b) { - if (a->layout.dimensions[CSS_WIDTH] != b->layout.dimensions[CSS_WIDTH] || - a->layout.dimensions[CSS_HEIGHT] != b->layout.dimensions[CSS_HEIGHT] || - a->layout.position[CSS_TOP] != b->layout.position[CSS_TOP] || - a->layout.position[CSS_LEFT] != b->layout.position[CSS_LEFT] || - a->children_count != b->children_count) { - return false; - } - for (int i = 0; i < a->children_count; ++i) { - if (!are_layout_equal(&a->children[i], &b->children[i])) { - return false; - } - } - return true; -} - -css_dim_t measure(void *context, css_measure_type_t type, float width) { - const char *text = context; - css_dim_t dim; - if (strcmp(text, "small") == 0) { - if (type == CSS_MEASURE_GROW || type == CSS_MEASURE_SHRINK) { - dim.dimensions[CSS_WIDTH] = 33; - dim.dimensions[CSS_HEIGHT] = 18; - return dim; - } - dim.dimensions[CSS_WIDTH] = width; - dim.dimensions[CSS_HEIGHT] = 18; - return dim; - } - if (strcmp(text, "loooooooooong with space") == 0) { - if (type == CSS_MEASURE_GROW) { - dim.dimensions[CSS_WIDTH] = 171; - dim.dimensions[CSS_HEIGHT] = 18; - return dim; - } - if (type == CSS_MEASURE_SHRINK) { - dim.dimensions[CSS_WIDTH] = 100; - dim.dimensions[CSS_HEIGHT] = 36; - return dim; - } - dim.dimensions[CSS_WIDTH] = width; - dim.dimensions[CSS_HEIGHT] = width >= 171 ? 18 : 36; - return dim; - } - - // Should not go here - dim.dimensions[CSS_WIDTH] = CSS_UNDEFINED; - dim.dimensions[CSS_HEIGHT] = CSS_UNDEFINED; - return dim; -} - - -void test(const char *name, css_node_t *style, css_node_t *expected_layout) { - layoutNode(style); - - if (!are_layout_equal(style, expected_layout)) { - printf("%sFAIL%s %s\n", "\x1B[31m", "\x1B[0m", name); - - printf("Input: "); - print_style(style, 0); - printf("Output: "); - print_layout(style, 0); - - printf("Expected: "); - print_layout(expected_layout, 0); - } else { - printf("%sPASS%s %s\n", "\x1B[32m", "\x1B[0m", name); - } - - free_css_node(style); - free_css_node(expected_layout); -} +#include "../Layout-test-utils.h" int main() {