diff options
| author | Rafael G. Martins <rafael@rafaelmartins.eng.br> | 2015-10-07 19:57:25 -0300 | 
|---|---|---|
| committer | Rafael G. Martins <rafael@rafaelmartins.eng.br> | 2015-10-07 19:57:25 -0300 | 
| commit | b54d7c65021d7d65c6a2b0088a6c3591e10ccfb3 (patch) | |
| tree | d7e0a90501df18458c999cdeace1b963125e9a60 | |
| parent | 1769387fb663d215871a901356dcd484c9587e58 (diff) | |
| download | blogc-b54d7c65021d7d65c6a2b0088a6c3591e10ccfb3.tar.gz blogc-b54d7c65021d7d65c6a2b0088a6c3591e10ccfb3.tar.bz2 blogc-b54d7c65021d7d65c6a2b0088a6c3591e10ccfb3.zip | |
renderer: accept empty list of files with -l
| -rw-r--r-- | src/main.c | 7 | ||||
| -rw-r--r-- | src/renderer.c | 12 | ||||
| -rw-r--r-- | tests/check_renderer.c | 30 | 
3 files changed, 43 insertions, 6 deletions
| @@ -195,12 +195,9 @@ main(int argc, char **argv)              sources = b_slist_append(sources, b_strdup(argv[i]));      } -    if (b_slist_length(sources) == 0) { +    if (!listing && b_slist_length(sources) == 0) {          blogc_print_usage(); -        if (listing) -            fprintf(stderr, "blogc: error: at least one source file is required\n"); -        else -            fprintf(stderr, "blogc: error: one source file is required\n"); +        fprintf(stderr, "blogc: error: one source file is required\n");          rv = 2;          goto cleanup;      } diff --git a/src/renderer.c b/src/renderer.c index bf8b8cc..47a5f87 100644 --- a/src/renderer.c +++ b/src/renderer.c @@ -71,7 +71,7 @@ blogc_format_date(const char *date, b_trie_t *global, b_trie_t *local)  char*  blogc_render(b_slist_t *tmpl, b_slist_t *sources, b_trie_t *config, bool listing)  { -    if (tmpl == NULL || sources == NULL) +    if (tmpl == NULL)          return NULL;      b_slist_t *current_source = NULL; @@ -136,6 +136,16 @@ blogc_render(b_slist_t *tmpl, b_slist_t *sources, b_trie_t *config, bool listing                      }                  }                  if (0 == strcmp("listing", stmt->value)) { +                    if (sources == NULL) { + +                        // we can just skip anything and walk until the next +                        // 'endblock' +                        while (stmt->type != BLOGC_TEMPLATE_ENDBLOCK_STMT) { +                            tmp = tmp->next; +                            stmt = tmp->data; +                        } +                        break; +                    }                      if (current_source == NULL) {                          listing_start = tmp;                          current_source = sources; diff --git a/tests/check_renderer.c b/tests/check_renderer.c index 154a8f0..fbe38de 100644 --- a/tests/check_renderer.c +++ b/tests/check_renderer.c @@ -143,6 +143,35 @@ test_render_listing(void **state)  static void +test_render_listing_empty(void **state) +{ +    const char *str = +        "foo\n" +        "{% block listing_once %}fuuu{% endblock %}\n" +        "{% block entry %}\n" +        "{% ifdef GUDA %}{{ GUDA }}{% endif %}\n" +        "{% ifdef CHUNDA %}{{ CHUNDA }}{% endif %}\n" +        "{% endblock %}\n" +        "{% block listing %}\n" +        "{% ifdef DATE_FORMATTED %}{{ DATE_FORMATTED }}{% endif %}\n" +        "bola: {% ifdef BOLA %}{{ BOLA }}{% endif %}\n" +        "{% endblock %}\n"; +    blogc_error_t *err = NULL; +    b_slist_t *l = blogc_template_parse(str, strlen(str), &err); +    assert_non_null(l); +    assert_null(err); +    char *out = blogc_render(l, NULL, NULL, true); +    assert_string_equal(out, +        "foo\n" +        "fuuu\n" +        "\n" +        "\n"); +    blogc_template_free_stmts(l); +    free(out); +} + + +static void  test_render_ifdef(void **state)  {      const char *str = @@ -685,6 +714,7 @@ main(void)      const UnitTest tests[] = {          unit_test(test_render_entry),          unit_test(test_render_listing), +        unit_test(test_render_listing_empty),          unit_test(test_render_ifdef),          unit_test(test_render_ifdef2),          unit_test(test_render_ifdef3), | 
