module tests.ut.tup;


import unit_threaded;
import reggae;
import reggae.backend.tup;
import reggae.path: buildPath;


@("Empty") unittest {
    auto tup = Tup();
    tup.output.shouldEqual(banner ~ "\n");
    tup.fileName.shouldEqual("Tupfile");
}


@("Simple D build") unittest {
    auto mainObj  = Target(`main.o`,  `dmd -I$project/src -c $in -of$out`, Target(`src/main.d`));
    auto mathsObj = Target(`maths.o`, `dmd -c $in -of$out`, Target(`src/maths.d`));
    auto app = Target(`myapp`,
                       `dmd -of$out $in`,
                       [mainObj, mathsObj]
        );
    auto build = Build(app);
    auto tup = Tup(build, "/path/to/project");

    tup.lines.shouldEqual(
        [": " ~ buildPath("/path/to/project/src/main.d") ~ " |> dmd -I" ~ buildPath("/path/to/project") ~ "/src -c " ~ buildPath("/path/to/project/src/main.d -of.reggae/objs/myapp.objs/main.o |> .reggae/objs/myapp.objs/main.o"),
         buildPath(": /path/to/project/src/maths.d |> dmd -c /path/to/project/src/maths.d -of.reggae/objs/myapp.objs/maths.o |> .reggae/objs/myapp.objs/maths.o"),
         buildPath(": .reggae/objs/myapp.objs/main.o .reggae/objs/myapp.objs/maths.o |> dmd -ofmyapp .reggae/objs/myapp.objs/main.o .reggae/objs/myapp.objs/maths.o |> myapp")
                              ]);
}