Mercurial > hg > svcore
diff test/TestHelper.h @ 1430:b5283878cca2 streaming-csv-writer
Introduce a TestHelper which contains boiler plate for running a suite of QtTest style objects. Stub CSVStreamWriter and test to integrate into build.
author | Lucas Thompson <dev@lucas.im> |
---|---|
date | Tue, 17 Apr 2018 10:03:49 +0100 |
parents | |
children | 7decc74b0fd0 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/TestHelper.h Tue Apr 17 10:03:49 2018 +0100 @@ -0,0 +1,73 @@ +/* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */ + +/* + Sonic Visualiser + An audio file viewer and annotation editor. + Centre for Digital Music, Queen Mary, University of London. + This file copyright 2017 Lucas Thompson. + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. See the file + COPYING included with this distribution for more information. +*/ + +#ifndef _TEST_HELPER_H_ +#define _TEST_HELPER_H_ + +#include <initializer_list> +#include <memory> +#include <iostream> +#include <functional> + +#include <QtTest> + +namespace Test +{ + +template <class T> +using Factory = std::function<std::unique_ptr<T>()>; + +template <class T, typename... Args> +auto createFactory(Args... FArgs) -> Factory<T> +{ + return [&]() { return std::unique_ptr<T> { new T {FArgs...} }; }; +} + +using TestStatus = int; + +auto startTestRunner( + std::initializer_list<Factory<QObject>> tests, + int argc, + char *argv[], + QString testName, + QString orgName = "sonic-visualiser" +) -> TestStatus +{ + int good = 0, bad = 0; + + QCoreApplication app(argc, argv); + app.setOrganizationName(orgName); + app.setApplicationName(testName); + auto executeTest = [&](std::unique_ptr<QObject> t) { + if (QTest::qExec(t.get(), argc, argv) == 0) ++good; + else ++bad; + }; + + for (const auto& test : tests) { + executeTest(test()); + } + + if (bad > 0) { + cerr << "\n********* " << bad << " test suite(s) failed!\n" << endl; + return 1; + } else { + cerr << "All tests passed" << endl; + return 0; + } +} + +} // namespace + +#endif \ No newline at end of file