128 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			128 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
 | 
						|
namespace think\tests;
 | 
						|
 | 
						|
use Mockery\MockInterface;
 | 
						|
use PHPUnit\Framework\TestCase;
 | 
						|
use think\App;
 | 
						|
use think\Config;
 | 
						|
use think\Container;
 | 
						|
use think\contract\TemplateHandlerInterface;
 | 
						|
use think\View;
 | 
						|
use Mockery as m;
 | 
						|
 | 
						|
class ViewTest extends TestCase
 | 
						|
{
 | 
						|
    /** @var App|MockInterface */
 | 
						|
    protected $app;
 | 
						|
 | 
						|
    /** @var View|MockInterface */
 | 
						|
    protected $view;
 | 
						|
 | 
						|
    /** @var Config|MockInterface */
 | 
						|
    protected $config;
 | 
						|
 | 
						|
    protected function tearDown(): void
 | 
						|
    {
 | 
						|
        m::close();
 | 
						|
    }
 | 
						|
 | 
						|
    protected function setUp()
 | 
						|
    {
 | 
						|
        $this->app = m::mock(App::class)->makePartial();
 | 
						|
        Container::setInstance($this->app);
 | 
						|
 | 
						|
        $this->app->shouldReceive('make')->with(App::class)->andReturn($this->app);
 | 
						|
        $this->config = m::mock(Config::class)->makePartial();
 | 
						|
        $this->app->shouldReceive('get')->with('config')->andReturn($this->config);
 | 
						|
 | 
						|
        $this->view = new View($this->app);
 | 
						|
    }
 | 
						|
 | 
						|
    public function testAssignData()
 | 
						|
    {
 | 
						|
        $this->view->assign('foo', 'bar');
 | 
						|
        $this->view->assign(['baz' => 'boom']);
 | 
						|
        $this->view->qux = "corge";
 | 
						|
 | 
						|
        $this->assertEquals('bar', $this->view->foo);
 | 
						|
        $this->assertEquals('boom', $this->view->baz);
 | 
						|
        $this->assertEquals('corge', $this->view->qux);
 | 
						|
        $this->assertTrue(isset($this->view->qux));
 | 
						|
    }
 | 
						|
 | 
						|
    public function testRender()
 | 
						|
    {
 | 
						|
        $this->config->shouldReceive("get")->with("view.type", 'php')->andReturn(TestTemplate::class);
 | 
						|
 | 
						|
        $this->view->filter(function ($content) {
 | 
						|
            return $content;
 | 
						|
        });
 | 
						|
 | 
						|
        $this->assertEquals("fetch", $this->view->fetch('foo'));
 | 
						|
        $this->assertEquals("display", $this->view->display('foo'));
 | 
						|
    }
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
class TestTemplate implements TemplateHandlerInterface
 | 
						|
{
 | 
						|
 | 
						|
    /**
 | 
						|
     * 检测是否存在模板文件
 | 
						|
     * @access public
 | 
						|
     * @param string $template 模板文件或者模板规则
 | 
						|
     * @return bool
 | 
						|
     */
 | 
						|
    public function exists(string $template): bool
 | 
						|
    {
 | 
						|
        return true;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * 渲染模板文件
 | 
						|
     * @access public
 | 
						|
     * @param string $template 模板文件
 | 
						|
     * @param array  $data     模板变量
 | 
						|
     * @return void
 | 
						|
     */
 | 
						|
    public function fetch(string $template, array $data = []): void
 | 
						|
    {
 | 
						|
        echo "fetch";
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * 渲染模板内容
 | 
						|
     * @access public
 | 
						|
     * @param string $content 模板内容
 | 
						|
     * @param array  $data    模板变量
 | 
						|
     * @return void
 | 
						|
     */
 | 
						|
    public function display(string $content, array $data = []): void
 | 
						|
    {
 | 
						|
        echo "display";
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * 配置模板引擎
 | 
						|
     * @access private
 | 
						|
     * @param array $config 参数
 | 
						|
     * @return void
 | 
						|
     */
 | 
						|
    public function config(array $config): void
 | 
						|
    {
 | 
						|
        // TODO: Implement config() method.
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * 获取模板引擎配置
 | 
						|
     * @access public
 | 
						|
     * @param string $name 参数名
 | 
						|
     * @return void
 | 
						|
     */
 | 
						|
    public function getConfig(string $name)
 | 
						|
    {
 | 
						|
        // TODO: Implement getConfig() method.
 | 
						|
    }
 | 
						|
}
 |