module tests.it.rules.unity_build;

import tests.it;
import std.path;
import std.algorithm;

@("template") unittest {
    import reggae.buildgen;
    import std.file;
    import std.string;

    auto options = _testProjectOptions("binary", "unity");
    string[] noFlags;

    getBuildObject!"unity.reggaefile"(options).shouldEqual(
        Build(Target("unity",
                     compileCommand("$builddir/objs/unity.objs/unity.cpp",
                                    "-g", [], [], options.projectPath, No.justCompile),
                     [Target.phony("unity.cpp",
                                   "",
                                   [],
                                   [Target("src/main.cpp"), Target("src/maths.cpp")])]
                  )));

    // should be
    // #include "1st.cpp"
    // #include "2nd.cpp"
    // ...
    readText(buildPath(options.workingDir, "objs", "unity.objs", "unity.cpp")).chomp.split("\n").
        shouldBeSameSetAs(
            ["main.cpp", "maths.cpp"].
            map!(a => `#include "` ~ buildPath(options.projectPath, "src", a) ~ `"`));

}