diff options
| author | 2023-03-06 16:18:45 -0500 | |
|---|---|---|
| committer | 2023-03-06 22:18:45 +0100 | |
| commit | dc864486ec8c258388b4e006d9517e6e30c34a4d (patch) | |
| tree | 4419a02845917440f2846880ddf872a649b50373 | |
| parent | 417cb924ae1f94d54e2eb13ebc7e9fab91b84588 (diff) | |
| download | askama-dc864486ec8c258388b4e006d9517e6e30c34a4d.tar.gz askama-dc864486ec8c258388b4e006d9517e6e30c34a4d.tar.bz2 askama-dc864486ec8c258388b4e006d9517e6e30c34a4d.zip | |
Propogate size_hint from sub-blocks (#788)
Closes #786
Diffstat (limited to '')
| -rw-r--r-- | askama_derive/src/generator.rs | 8 | ||||
| -rw-r--r-- | testing/templates/size-child-super.txt | 2 | ||||
| -rw-r--r-- | testing/templates/size-child.txt | 2 | ||||
| -rw-r--r-- | testing/templates/size-parent.txt | 1 | ||||
| -rw-r--r-- | testing/tests/size_hint.rs | 47 | 
5 files changed, 56 insertions, 4 deletions
| diff --git a/askama_derive/src/generator.rs b/askama_derive/src/generator.rs index fc74f34..d8093c3 100644 --- a/askama_derive/src/generator.rs +++ b/askama_derive/src/generator.rs @@ -630,16 +630,16 @@ impl<'a> Generator<'a> {                      self.write_let(buf, ws, var, val)?;                  }                  Node::Cond(ref conds, ws) => { -                    self.write_cond(ctx, buf, conds, ws)?; +                    size_hint += self.write_cond(ctx, buf, conds, ws)?;                  }                  Node::Match(ws1, ref expr, ref arms, ws2) => { -                    self.write_match(ctx, buf, ws1, expr, arms, ws2)?; +                    size_hint += self.write_match(ctx, buf, ws1, expr, arms, ws2)?;                  }                  Node::Loop(ref loop_block) => { -                    self.write_loop(ctx, buf, loop_block)?; +                    size_hint += self.write_loop(ctx, buf, loop_block)?;                  }                  Node::BlockDef(ws1, name, _, ws2) => { -                    self.write_block(buf, Some(name), Ws(ws1.0, ws2.1))?; +                    size_hint += self.write_block(buf, Some(name), Ws(ws1.0, ws2.1))?;                  }                  Node::Include(ws, path) => {                      size_hint += self.handle_include(ctx, buf, ws, path)?; diff --git a/testing/templates/size-child-super.txt b/testing/templates/size-child-super.txt new file mode 100644 index 0000000..77c2916 --- /dev/null +++ b/testing/templates/size-child-super.txt @@ -0,0 +1,2 @@ +{% extends "size-parent.txt" %} +{% block main %}{% call super() %}{% endblock %} diff --git a/testing/templates/size-child.txt b/testing/templates/size-child.txt new file mode 100644 index 0000000..86adbf8 --- /dev/null +++ b/testing/templates/size-child.txt @@ -0,0 +1,2 @@ +{% extends "size-parent.txt" %} +{% block main %}{% if true %}123{% endif %}{% endblock %} diff --git a/testing/templates/size-parent.txt b/testing/templates/size-parent.txt new file mode 100644 index 0000000..e277a24 --- /dev/null +++ b/testing/templates/size-parent.txt @@ -0,0 +1 @@ +{% block main %}{% if true %}12345{% endif %}{% endblock %} diff --git a/testing/tests/size_hint.rs b/testing/tests/size_hint.rs new file mode 100644 index 0000000..a9f8428 --- /dev/null +++ b/testing/tests/size_hint.rs @@ -0,0 +1,47 @@ +use askama::Template; + +macro_rules! test_size { +    ($source:literal, $expected:expr) => {{ +        #[derive(Template)] +        #[template(source = $source, ext = "txt")] +        struct T(bool); + +        assert_eq!(T::SIZE_HINT, $expected); +    }}; +} + +#[test] +fn test_cond_size_hint() { +    test_size!("{% if self.0 %}12345{% else %}12345{% endif %}", 10); +} + +#[test] +fn test_match_size_hint() { +    test_size!( +        "{% match self.0 %}{% when true %}12345{% else %}12345{% endmatch %}", +        5 +    ); +} + +#[test] +fn test_loop_size_hint() { +    test_size!("{% for i in 0..1 %}12345{% endfor %}", 7); +} + +#[test] +fn test_block_size_hint() { +    #[derive(Template)] +    #[template(path = "size-child.txt")] +    struct T; + +    assert_eq!(T::SIZE_HINT, 3); +} + +#[test] +fn test_super_size_hint() { +    #[derive(Template)] +    #[template(path = "size-child-super.txt")] +    struct T; + +    assert_eq!(T::SIZE_HINT, 5); +} | 
