142 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			142 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
namespace nulib\app {
 | 
						|
 | 
						|
  use nulib\app\impl\config;
 | 
						|
  use nulib\app\impl\myapp;
 | 
						|
  use nulib\app\impl\MyApplication1;
 | 
						|
  use nulib\app\impl\MyApplication2;
 | 
						|
  use nulib\tests\TestCase;
 | 
						|
 | 
						|
  class appTest extends TestCase {
 | 
						|
    function testWith() {
 | 
						|
      $projdir = config::get_projdir();
 | 
						|
      $cwd = getcwd();
 | 
						|
 | 
						|
      myapp::reset();
 | 
						|
      $app1 = myapp::with(MyApplication1::class);
 | 
						|
      self::assertSame([
 | 
						|
        "projdir" => $projdir,
 | 
						|
        "vendor" => [
 | 
						|
          "bindir" => "$projdir/vendor/bin",
 | 
						|
          "autoload" => "$projdir/vendor/autoload.php",
 | 
						|
        ],
 | 
						|
        "projcode" => "nulib-base",
 | 
						|
        "cwd" => $cwd,
 | 
						|
        "datadir" => "$projdir/devel",
 | 
						|
        "etcdir" => "$projdir/devel/etc",
 | 
						|
        "vardir" => "$projdir/devel/var",
 | 
						|
        "logdir" => "$projdir/devel/log",
 | 
						|
        "profile" => "devel",
 | 
						|
        "facts" => null,
 | 
						|
        "debug" => null,
 | 
						|
        "appgroup" => null,
 | 
						|
        "name" => "my-application1",
 | 
						|
        "title" => null,
 | 
						|
      ], $app1->getParams());
 | 
						|
 | 
						|
      $app2 = myapp::with(MyApplication2::class, $app1);
 | 
						|
      self::assertSame([
 | 
						|
        "projdir" => $projdir,
 | 
						|
        "vendor" => [
 | 
						|
          "bindir" => "$projdir/vendor/bin",
 | 
						|
          "autoload" => "$projdir/vendor/autoload.php",
 | 
						|
        ],
 | 
						|
        "projcode" => "nulib-base",
 | 
						|
        "cwd" => $cwd,
 | 
						|
        "datadir" => "$projdir/devel",
 | 
						|
        "etcdir" => "$projdir/devel/etc",
 | 
						|
        "vardir" => "$projdir/devel/var",
 | 
						|
        "logdir" => "$projdir/devel/log",
 | 
						|
        "profile" => "devel",
 | 
						|
        "facts" => null,
 | 
						|
        "debug" => null,
 | 
						|
        "appgroup" => null,
 | 
						|
        "name" => "my-application2",
 | 
						|
        "title" => null,
 | 
						|
      ], $app2->getParams());
 | 
						|
    }
 | 
						|
 | 
						|
    function testInit() {
 | 
						|
      $projdir = config::get_projdir();
 | 
						|
      $cwd = getcwd();
 | 
						|
 | 
						|
      myapp::reset();
 | 
						|
      myapp::init(MyApplication1::class);
 | 
						|
      self::assertSame([
 | 
						|
        "projdir" => $projdir,
 | 
						|
        "vendor" => [
 | 
						|
          "bindir" => "$projdir/vendor/bin",
 | 
						|
          "autoload" => "$projdir/vendor/autoload.php",
 | 
						|
        ],
 | 
						|
        "projcode" => "nulib-base",
 | 
						|
        "cwd" => $cwd,
 | 
						|
        "datadir" => "$projdir/devel",
 | 
						|
        "etcdir" => "$projdir/devel/etc",
 | 
						|
        "vardir" => "$projdir/devel/var",
 | 
						|
        "logdir" => "$projdir/devel/log",
 | 
						|
        "profile" => "devel",
 | 
						|
        "facts" => null,
 | 
						|
        "debug" => null,
 | 
						|
        "appgroup" => null,
 | 
						|
        "name" => "my-application1",
 | 
						|
        "title" => null,
 | 
						|
      ], myapp::get()->getParams());
 | 
						|
 | 
						|
      myapp::init(MyApplication2::class);
 | 
						|
      self::assertSame([
 | 
						|
        "projdir" => $projdir,
 | 
						|
        "vendor" => [
 | 
						|
          "bindir" => "$projdir/vendor/bin",
 | 
						|
          "autoload" => "$projdir/vendor/autoload.php",
 | 
						|
        ],
 | 
						|
        "projcode" => "nulib-base",
 | 
						|
        "cwd" => $cwd,
 | 
						|
        "datadir" => "$projdir/devel",
 | 
						|
        "etcdir" => "$projdir/devel/etc",
 | 
						|
        "vardir" => "$projdir/devel/var",
 | 
						|
        "logdir" => "$projdir/devel/log",
 | 
						|
        "profile" => "devel",
 | 
						|
        "facts" => null,
 | 
						|
        "debug" => null,
 | 
						|
        "appgroup" => null,
 | 
						|
        "name" => "my-application2",
 | 
						|
        "title" => null,
 | 
						|
      ], myapp::get()->getParams());
 | 
						|
    }
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
namespace nulib\app\impl {
 | 
						|
 | 
						|
  use nulib\app\app;
 | 
						|
  use nulib\app\cli\Application;
 | 
						|
  use nulib\os\path;
 | 
						|
 | 
						|
  class config {
 | 
						|
    const PROJDIR = __DIR__.'/../../..';
 | 
						|
 | 
						|
    static function get_projdir(): string {
 | 
						|
      return path::abspath(self::PROJDIR);
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  class myapp extends app {
 | 
						|
    static function reset(): void {
 | 
						|
      self::$app = null;
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  class MyApplication1 extends Application {
 | 
						|
    const PROJDIR = config::PROJDIR;
 | 
						|
 | 
						|
    function main() {
 | 
						|
    }
 | 
						|
  }
 | 
						|
  class MyApplication2 extends Application {
 | 
						|
    const PROJDIR = null;
 | 
						|
 | 
						|
    function main() {
 | 
						|
    }
 | 
						|
  }
 | 
						|
}
 |