dev@1430: /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */ dev@1430: dev@1430: /* dev@1430: Sonic Visualiser dev@1430: An audio file viewer and annotation editor. dev@1430: Centre for Digital Music, Queen Mary, University of London. dev@1430: This file copyright 2017 Lucas Thompson. dev@1430: dev@1430: This program is free software; you can redistribute it and/or dev@1430: modify it under the terms of the GNU General Public License as dev@1430: published by the Free Software Foundation; either version 2 of the dev@1430: License, or (at your option) any later version. See the file dev@1430: COPYING included with this distribution for more information. dev@1430: */ dev@1430: dev@1430: #ifndef _TEST_HELPER_H_ dev@1430: #define _TEST_HELPER_H_ dev@1430: dev@1430: #include dev@1430: #include dev@1430: #include dev@1430: #include dev@1430: dev@1430: #include dev@1430: dev@1430: namespace Test dev@1430: { dev@1430: dev@1430: template dev@1430: using Factory = std::function()>; dev@1430: dev@1430: template dev@1430: auto createFactory(Args... FArgs) -> Factory dev@1430: { dev@1431: return [&]() { return std::unique_ptr { new T {FArgs...} }; }; dev@1430: } dev@1430: dev@1430: using TestStatus = int; dev@1430: dev@1430: auto startTestRunner( dev@1431: std::initializer_list> tests, dev@1431: int argc, dev@1431: char *argv[], dev@1431: QString testName, dev@1431: QString orgName = "sonic-visualiser" dev@1430: ) -> TestStatus dev@1430: { dev@1430: int good = 0, bad = 0; dev@1430: dev@1430: QCoreApplication app(argc, argv); dev@1430: app.setOrganizationName(orgName); dev@1430: app.setApplicationName(testName); dev@1430: auto executeTest = [&](std::unique_ptr t) { dev@1430: if (QTest::qExec(t.get(), argc, argv) == 0) ++good; dev@1430: else ++bad; dev@1430: }; dev@1430: dev@1430: for (const auto& test : tests) { dev@1430: executeTest(test()); dev@1430: } dev@1430: dev@1430: if (bad > 0) { dev@1432: std::cerr << "\n********* " << bad << " test suite(s) failed!\n" << std::endl; dev@1431: return 1; dev@1430: } else { dev@1432: std::cerr << "All tests passed" << std::endl; dev@1431: return 0; dev@1430: } dev@1430: } dev@1430: dev@1430: } // namespace dev@1430: dev@1430: #endif