#include #include std::ostream& operator<<(std::ostream& stream, const ctor::language& lang); #include std::ostream& operator<<(std::ostream& stream, const ctor::language& lang) { switch(lang) { case ctor::language::automatic: stream << "ctor::language::automatic"; break; case ctor::language::c: stream << "ctor::language::c"; break; case ctor::language::cpp: stream << "ctor::language::cpp"; break; case ctor::language::assembler: stream << "ctor::language::assembler"; break; } return stream; } class TestableTaskCC : public TaskCC { public: TestableTaskCC(const ctor::source& source) : TaskCC({}, {}, "build", source) {} ctor::language language() const { return source_language; } }; class SourceTypeTest : public uUnit { public: SourceTypeTest() { uTEST(SourceTypeTest::test); } void test() { { // c++ TestableTaskCC task("hello.cc"); uASSERT_EQUAL(ctor::language::cpp, task.language()); } { // c TestableTaskCC task("hello.c"); uASSERT_EQUAL(ctor::language::c, task.language()); } { // asm TestableTaskCC task("hello.s"); uASSERT_EQUAL(ctor::language::assembler, task.language()); } { // custom/explicit language TestableTaskCC task( {"hello.foo", ctor::language::assembler} ); uASSERT_EQUAL(ctor::language::assembler, task.language()); } // Note: Failure state will result in exit(1) so cannot be tested } }; // Registers the fixture into the 'registry' static SourceTypeTest test;