/* * Carla Tests * Copyright (C) 2013-2014 Filipe Coelho * * 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 any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * For a full copy of the GNU General Public License see the doc/GPL.txt file. */ #include "../backend/engine/CarlaEngineInternal.hpp" #include "CarlaPlugin.hpp" #include "CarlaHost.h" #include "CarlaUtils.hpp" // ----------------------------------------------------------------------- CARLA_BACKEND_START_NAMESPACE class CarlaEngineDummy : public CarlaEngine { public: CarlaEngineDummy() : CarlaEngine(), fIsRunning(false) { } bool init(const char* const clientName) override { fIsRunning = true; pData->bufferSize = 512; pData->sampleRate = 44100.0; return CarlaEngine::init(clientName); } bool close() override { fIsRunning = false; return CarlaEngine::close(); } bool isRunning() const noexcept override { return fIsRunning; } bool isOffline() const noexcept override { return false; } EngineType getType() const noexcept override { return kEngineTypePlugin; } const char* getCurrentDriverName() const noexcept override { return "Dummy"; } private: bool fIsRunning; }; CARLA_BACKEND_END_NAMESPACE // ----------------------------------------------------------------------- CARLA_BACKEND_USE_NAMESPACE #define TEST_NAME "TestName" void testEngine(CarlaEngine* const eng) { assert(eng->getMaxClientNameSize() != 0); assert(eng->getMaxPortNameSize() != 0); assert(eng->getCurrentPluginCount() == 0); assert(eng->getMaxPluginNumber() == 0); assert(! eng->isRunning()); assert(eng->getPlugin(0) == nullptr); const char* name1 = eng->getUniquePluginName(TEST_NAME); const char* name2 = eng->getUniquePluginName(TEST_NAME); const char* name3 = eng->getUniquePluginName(TEST_NAME); assert(name1 != nullptr); assert(name2 != nullptr); assert(name3 != nullptr); assert(std::strcmp(name1, TEST_NAME) == 0); assert(std::strcmp(name2, TEST_NAME) == 0); assert(std::strcmp(name3, TEST_NAME) == 0); delete[] name1; delete[] name2; delete[] name3; eng->init("test"); assert(eng->getCurrentPluginCount() == 0); assert(eng->getMaxPluginNumber() != 0); assert(eng->isRunning()); assert(eng->getPlugin(0) == nullptr); name1 = eng->getUniquePluginName(TEST_NAME); name2 = eng->getUniquePluginName(TEST_NAME); name3 = eng->getUniquePluginName(TEST_NAME); assert(name1 != nullptr); assert(name2 != nullptr); assert(name3 != nullptr); assert(std::strcmp(name1, TEST_NAME) == 0); assert(std::strcmp(name2, TEST_NAME) == 0); assert(std::strcmp(name3, TEST_NAME) == 0); delete[] name1; delete[] name2; delete[] name3; eng->close(); // test quick init & close 3 times eng->init("test1"); eng->close(); eng->init("test2"); eng->close(); eng->init("test3"); eng->close(); // leave it open eng->init("test"); // add as much plugins as possible for (;;) { if (! eng->addPlugin(PLUGIN_INTERNAL, nullptr, TEST_NAME, "bypass")) break; } assert(eng->getCurrentPluginCount() != 0); assert(eng->getCurrentPluginCount() == eng->getMaxPluginNumber()); assert(eng->getCurrentPluginCount() == MAX_DEFAULT_PLUGINS); eng->close(); } int main() { assert(CarlaEngine::getDriverCount() != 0); #if 0 for (uint i=0, count=CarlaEngine::getDriverCount(); i < count && i < 4; ++i) { if (i == 1 || i == 2) continue; carla_stdout("driver %i/%i: %s", i+1, count, CarlaEngine::getDriverName(i)); if (const char* const* const devNames = CarlaEngine::getDriverDeviceNames(i)) { for (uint j=0; devNames[j] != nullptr; ++j) { CarlaEngine::getDriverDeviceInfo(i, devNames[j]); } } } #endif assert(CarlaPlugin::getNativePluginCount() != 0); for (size_t i=0, count=CarlaPlugin::getNativePluginCount(); i < count; ++i) { assert(CarlaPlugin::getNativePluginDescriptor(i) != nullptr); } CarlaEngineDummy e; testEngine(&e); // if (CarlaEngine* const eng = CarlaEngine::newDriverByName("PulseAudio")) // { // testEngine(eng); // delete eng; // } return 0; }