summaryrefslogtreecommitdiff
path: root/test/generated_sources_test.cc
blob: 53bde6282e84e28ca8ff1b124825f277b4c08ac4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
// -*- c++ -*-
// Distributed under the BSD 2-Clause License.
// See accompanying file LICENSE for details.
#include <uunit.h>

#include <ctor.h>
#include <tasks.h>
#include <rebuild.h>

class GeneratedSourcesTest
	: public uUnit
{
public:
	GeneratedSourcesTest()
	{
		uTEST(GeneratedSourcesTest::test_custom_output);
	}

	void setup()
	{
		// Make sure we start from a clean slate
		getConfigFileList().clear();
	}

	void test_custom_output()
	{
		using namespace std::string_literals;

		ctor::reg(
			[](const ctor::settings&)
			{
				return ctor::build_configurations{
					{
						.target = "test1",
						.sources = {
							{"foo.cc", ctor::source_type::generated}
						}
					},
					{
						.target = "this_is_unused",
						.sources = {
							{"bar.x", ctor::output_file{"foo.cc"}},
							{"bar.y", ctor::output_file{"bar.cc"}},
						},
						.function = [](const std::string& input,
						               const std::string& output,
						               const ctor::build_configuration& config,
						               const ctor::settings& settings)
						{
							return 0;
						}
					},
				};
			});
		ctor::settings settings{};
		auto tasks = getTasks(settings);
		for(auto task : tasks)
		{
			uASSERT(task->registerDepTasks(tasks) == 0);
		}
		uASSERT_EQUAL(4u, tasks.size());
		bool found{false};
		for(const auto& task : tasks)
		{
			if(task->target() == "test1")
			{
				auto deps_test1 = task->getDependsTasks();
				uASSERT_EQUAL(1u, deps_test1.size());
				auto deps_foo_o = deps_test1[0]->getDependsTasks();
				uASSERT_EQUAL(1u, deps_foo_o.size());
				uASSERT_EQUAL("test/bar.x"s, deps_foo_o[0]->source());
				found = true;
			}
		}
		uASSERT(found);
	}
};

// Registers the fixture into the 'registry'
static GeneratedSourcesTest test;