Skip to content

extra whitespaces after \n in partial when rendered from a partial #613

@ryanolson

Description

@ryanolson

version: 4.4

    #[test]
    fn test_partial_using_partial() {
        let mut handlebars = Handlebars::new();
        handlebars
            .register_partial("system", "{{#if system_prompt}}{{{system_prompt}}} {{/if}}")
            .unwrap();

        handlebars
            .register_partial("user", "User: {{>system}}{{{prompt}}}")
            .unwrap();

        let output = handlebars
            .render_template("{{>user system_prompt=\"hello\" prompt=\"world\"}}", &())
            .unwrap();

        assert_eq!(output, "User: hello world");

        let output = handlebars
            .render_template("{{>user prompt=\"world\"}}", &())
            .unwrap();

        assert_eq!(output, "User: world");

        let output = handlebars
            .render_template("{{>user}}", &json!({"system_prompt": "<<SYS>>\nhello\n<</SYS>>\n\n", "prompt": "world"}))
            .unwrap();

        assert_eq!(output, "User: <<SYS>>\nhello\n<</SYS>>\n\n world");
    }

The last assert fails. The rendered string vs the expected:

  left: `"User: <<SYS>>\n hello\n <</SYS>>\n \n world"`,
 right: `"User: <<SYS>>\nhello\n<</SYS>>\n\n world"`',

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions