/** * @depends testConstant */ public function testService() { /** * @var Test $service */ $config = $this->configSkeleton; $config[Manager::CFG_TITLE] = 'Dummy configuration for service test.'; $config[Manager::CFG_SERVICE][Manager::COMMON][self::TEST_SERVICE] = []; $serviceCommonConfig =& $config[Manager::CFG_SERVICE][Manager::COMMON][self::TEST_SERVICE]; // Test 1: Common, failed to provide enough params try { $manager = Manager::factory($config, $this->logger); $manager->getService(Manager::COMMON, self::TEST_SERVICE); $this->fail('There should be an exception on service initialization with missing required configuration item.'); } catch (\RuntimeException $e) { $this->logger->debug('Service required key check OK.'); } // Test 2: Common, default values $valueRequired = 'some-value'; $serviceCommonConfig[Test::CFG_TEST_REQUIRED_KEY] = $valueRequired; $manager = Manager::factory($config, $this->logger); $service = $manager->getService(Manager::COMMON, self::TEST_SERVICE); $fullServiceClass = $manager->nsService . self::TEST_SERVICE; $this->assertInstanceOf($fullServiceClass, $service); $this->assertSame($valueRequired, $service->testRequired); $this->assertSame(Test::DEFAULT_TEST_VALUE, $service->test); $this->assertSame(Test::STUB_METHOD_CLOSURE, $service->testProvider()); // Test 3: Special with overriding Common, static callback provider $valueAppRequired = 'app-value-required'; $valueApp = 'app-value'; $config[Manager::CFG_SERVICE][self::NS_APP][self::TEST_SERVICE] = []; $serviceAppConfig =& $config[Manager::CFG_SERVICE][self::NS_APP][self::TEST_SERVICE]; $serviceAppConfig[Test::CFG_TEST_REQUIRED_KEY] = $valueAppRequired; $serviceAppConfig[Test::CFG_TEST_KEY] = $valueApp; $serviceAppConfig[Test::CFG_TEST_PROVIDER] = [$fullServiceClass, 'methodStatic']; $manager = Manager::factory($config, $this->logger); $service = $manager->getService(self::NS_APP, self::TEST_SERVICE); $this->assertSame($valueAppRequired, $service->testRequired); $this->assertSame($valueApp, $service->test); $this->assertSame(Test::STUB_METHOD_STATIC, $service->testProvider()); // Test 4: Object invoke callback $valueInvokeRequired = 'invoke-value-required'; $serviceAppConfig[Test::CFG_TEST_PROVIDER] = [Manager::RES_CONFIG_CLASS => $fullServiceClass, Test::CFG_TEST_REQUIRED_KEY => $valueInvokeRequired]; $manager = Manager::factory($config, $this->logger); $service = $manager->getService(self::NS_APP, self::TEST_SERVICE); $this->assertSame(Test::STUB_METHOD_INVOKE . $valueInvokeRequired, $service->testProvider()); // Test 5: Object method callback $valueCallbackRequired = 'callback-value-required'; $serviceAppConfig[Test::CFG_TEST_PROVIDER][Manager::RES_CONFIG_METHOD] = 'method'; $serviceAppConfig[Test::CFG_TEST_PROVIDER][Test::CFG_TEST_REQUIRED_KEY] = $valueCallbackRequired; $manager = Manager::factory($config, $this->logger); $service = $manager->getService(self::NS_APP, self::TEST_SERVICE); $this->assertSame(Test::STUB_METHOD . $valueCallbackRequired, $service->testProvider()); }
public function execFormat($cmd, ...$params) { $this->logger->debug("Building command %s with %s", [$cmd, join(',', $params)]); $cmd = vsprintf($cmd, array_map('escapeshellarg', $params)); $this->exec($cmd); }