/* DependencyConfiguration(Test) - verify configuration for injecting dependencies Copyright (C) Lumiera.org 2018, Hermann Vosseler 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. 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. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * *****************************************************/ /** @file dependency-configuration-test.cpp ** unit test \ref DependencyConfiguration_test */ #include "lib/test/run.hpp" #include "lib/format-cout.hpp" #include "lib/test/test-helper.hpp" #include "lib/util.hpp" #include "lib/depend2.hpp" #include "lib/depend-inject.hpp" #define SHOW_TYPE(_TY_) \ cout << "typeof( " << STRINGIFY(_TY_) << " )= " << lib::meta::typeStr<_TY_>() <"<> dep11; Depend> dep5; Depend> dep12; cout << "Siz-DUM : " << lib::test::showSizeof(dep11) << " " << lib::test::showSizeof(dep5) << endl; cout << "check-vor="<{}() ); Depend dumm; DependInject::useSingleton>(); SHOW_EXPR( dumm().probe() ); SHOW_EXPR( checksum ); VERIFY_ERROR (LIFECYCLE, DependInject::useSingleton>() ); SHOW_EXPR( Depend{}().probe() ); SHOW_EXPR( checksum ); struct SubDummy : Dummy<3> { virtual int probe() override { return -checksum + offset; } int offset = 0; }; Depend> dep3; SHOW_EXPR( checksum ); { DependInject>::ServiceInstance service{}; CHECK (service); SHOW_EXPR( checksum ); SHOW_EXPR( dep3().probe() ); SHOW_EXPR( checksum ); service->offset = 5; SHOW_EXPR( dep3().probe() ); SHOW_EXPR( checksum ); } SHOW_EXPR( checksum ); VERIFY_ERROR (LIFECYCLE, dep3().probe() ); VERIFY_ERROR (LIFECYCLE, DependInject::ServiceInstance{} ); SHOW_EXPR( checksum ); { DependInject::Local mockDum; DependInject>::Local mockDummy3; CHECK (!mockDum); CHECK (!mockDummy3); SHOW_EXPR( dumm().probe() ); CHECK ( mockDum); CHECK (!mockDummy3); SHOW_EXPR( checksum ); SHOW_EXPR( mockDum->probe() ); SHOW_EXPR( checksum ); mockDum->offset = -4; SHOW_EXPR( dumm().probe() ); CHECK (!mockDummy3); SHOW_EXPR( checksum ); SHOW_EXPR( dep3().probe() ); SHOW_EXPR( checksum ); CHECK ( mockDummy3); SHOW_EXPR( mockDummy3->probe() ); SHOW_EXPR( checksum ); mockDummy3->offset = 19; SHOW_EXPR( dep3().probe() ); mockDum->offset = -6; SHOW_EXPR( dep3().probe() ); SHOW_EXPR( dumm().probe() ); SHOW_EXPR( checksum ); } SHOW_EXPR( checksum ); SHOW_EXPR( dumm().probe() ); VERIFY_ERROR (LIFECYCLE, dep3().probe() ); SHOW_EXPR( checksum ); { DependInject>::ServiceInstance service{}; SHOW_EXPR( checksum ); SHOW_EXPR( dep3().probe() ); service->offset = 5; SHOW_EXPR( dep3().probe() ); SHOW_EXPR( checksum ); { DependInject>::Local mockDummy31; CHECK (!mockDummy31); SHOW_EXPR( checksum ); SHOW_EXPR( dep3().probe() ); SHOW_EXPR( checksum ); mockDummy31->offset = 10; SHOW_EXPR( dep3().probe() ); SHOW_EXPR( mockDummy31->probe() ); SHOW_EXPR( service->probe() ); CHECK (mockDummy31->offset != service->offset); service->offset = 20; SHOW_EXPR( dep3().probe() ); SHOW_EXPR( mockDummy31->probe() ); SHOW_EXPR( service->probe() ); SHOW_EXPR( checksum ); } SHOW_EXPR( checksum ); SHOW_EXPR( dep3().probe() ); SHOW_EXPR( checksum ); } SHOW_EXPR( checksum ); VERIFY_ERROR (LIFECYCLE, dep3().probe() ); SHOW_EXPR( dumm().probe() ); SHOW_EXPR( checksum ); } void verify_SubclassCreation() { } void verify_customFactory() { } void verify_automaticReplacement() { } }; LAUNCHER (DependencyConfiguration_test, "unit common"); }} // namespace lib::test