// Copyright (c) 2019 Pantor. All rights reserved.

#define DOCTEST_CONFIG_IMPLEMENT_WITH_MAIN
#include "doctest/doctest.h"
#include "inja/inja.hpp"


using json = nlohmann::json;


TEST_CASE("copy-environment") {
    inja::Environment env;
    env.add_callback("double", 1, [](inja::Arguments& args) {
        int number = args.at(0)->get<int>();
        return 2 * number;
    });

    inja::Template t1 = env.parse("{{ double(2) }}");
    env.include_template("tpl", t1);
    std::string test_tpl = "{% include \"tpl\" %}";

    REQUIRE(env.render(test_tpl, json()) == "4");

    inja::Environment copy(env);
    CHECK(copy.render(test_tpl, json()) == "4");

    // overwrite template in source env
    inja::Template t2 = env.parse("{{ double(4) }}");
    env.include_template("tpl", t2);
    REQUIRE(env.render(test_tpl, json()) == "8");

    // template is unchanged in copy
    CHECK(copy.render(test_tpl, json()) == "4");
}
