125 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			125 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
namespace nulib\app\config {
 | 
						|
 | 
						|
  use nulib\app\config\impl\config1;
 | 
						|
  use nulib\app\config\impl\config2;
 | 
						|
  use nulib\app\config\impl\result;
 | 
						|
  use nulib\tests\TestCase;
 | 
						|
 | 
						|
  class ConfigManagerTest extends TestCase {
 | 
						|
    function testConfigurators() {
 | 
						|
      $config = new ConfigManager();
 | 
						|
 | 
						|
      result::reset();
 | 
						|
      $config->addConfigurator(config1::class);
 | 
						|
      $config->configure();
 | 
						|
      self::assertSame([
 | 
						|
        "config1::static configure1",
 | 
						|
      ], impl\result::$configured);
 | 
						|
 | 
						|
      result::reset();
 | 
						|
      $config->addConfigurator(config1::class);
 | 
						|
      $config->configure();
 | 
						|
      $config->configure();
 | 
						|
      $config->configure();
 | 
						|
      self::assertSame([
 | 
						|
        "config1::static configure1",
 | 
						|
      ], impl\result::$configured);
 | 
						|
 | 
						|
      result::reset();
 | 
						|
      $config->addConfigurator(new config1());
 | 
						|
      $config->configure();
 | 
						|
      self::assertSame([
 | 
						|
        "config1::static configure1",
 | 
						|
        "config1::configure2",
 | 
						|
      ], impl\result::$configured);
 | 
						|
 | 
						|
      result::reset();
 | 
						|
      $config->addConfigurator(new config1());
 | 
						|
      $config->configure(["include" => "2"]);
 | 
						|
      self::assertSame([
 | 
						|
        "config1::configure2",
 | 
						|
      ], impl\result::$configured);
 | 
						|
      $config->configure(["include" => "1"]);
 | 
						|
      self::assertSame([
 | 
						|
        "config1::configure2",
 | 
						|
        "config1::static configure1",
 | 
						|
      ], impl\result::$configured);
 | 
						|
 | 
						|
      result::reset();
 | 
						|
      $config->addConfigurator([
 | 
						|
        config1::class,
 | 
						|
        new config2(),
 | 
						|
      ]);
 | 
						|
      $config->configure();
 | 
						|
      self::assertSame([
 | 
						|
        "config1::static configure1",
 | 
						|
        "config2::static configure1",
 | 
						|
        "config2::configure2",
 | 
						|
      ], impl\result::$configured);
 | 
						|
    }
 | 
						|
 | 
						|
    function testConfig() {
 | 
						|
      $config = new ConfigManager();
 | 
						|
 | 
						|
      $config->addConfig([
 | 
						|
        "app" => [
 | 
						|
          "var" => "array",
 | 
						|
        ]
 | 
						|
      ]);
 | 
						|
      self::assertSame("array", $config->getValue("app.var"));
 | 
						|
 | 
						|
      $config->addConfig(new ArrayConfig([
 | 
						|
        "app" => [
 | 
						|
          "var" => "instance",
 | 
						|
        ]
 | 
						|
      ]));
 | 
						|
      self::assertSame("instance", $config->getValue("app.var"));
 | 
						|
 | 
						|
      $config->addConfig(config1::class);
 | 
						|
      self::assertSame("class1", $config->getValue("app.var"));
 | 
						|
 | 
						|
      $config->addConfig(config2::class);
 | 
						|
      self::assertSame("class2", $config->getValue("app.var"));
 | 
						|
    }
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
namespace nulib\app\config\impl {
 | 
						|
  class result {
 | 
						|
    static array $configured = [];
 | 
						|
 | 
						|
    static function reset() {
 | 
						|
      self::$configured = [];
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  class config1 {
 | 
						|
    const APP = [
 | 
						|
      "var" => "class1",
 | 
						|
    ];
 | 
						|
 | 
						|
    static function configure1() {
 | 
						|
      result::$configured[] = "config1::static configure1";
 | 
						|
    }
 | 
						|
 | 
						|
    function configure2() {
 | 
						|
      result::$configured[] = "config1::configure2";
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  class config2 {
 | 
						|
    const APP = [
 | 
						|
      "var" => "class2",
 | 
						|
    ];
 | 
						|
 | 
						|
    static function configure1() {
 | 
						|
      result::$configured[] = "config2::static configure1";
 | 
						|
    }
 | 
						|
 | 
						|
    function configure2() {
 | 
						|
      result::$configured[] = "config2::configure2";
 | 
						|
    }
 | 
						|
  }
 | 
						|
}
 |