| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400 |
- <?php
- /**
- * CakePHP(tm) : Rapid Development Framework (https://cakephp.org)
- * Copyright (c) Cake Software Foundation, Inc. (https://cakefoundation.org)
- *
- * Licensed under The MIT License
- * For full copyright and license information, please see the LICENSE.txt
- * Redistributions of files must retain the above copyright notice
- *
- * @copyright Copyright (c) Cake Software Foundation, Inc. (https://cakefoundation.org)
- * @link https://cakephp.org CakePHP(tm) Project
- * @since 3.1.0
- * @license https://opensource.org/licenses/mit-license.php MIT License
- */
- namespace Cake\Test\TestCase\View;
- use Cake\Http\Response;
- use Cake\Http\ServerRequest;
- use Cake\TestSuite\TestCase;
- use Cake\View\ViewBuilder;
- /**
- * View builder test case.
- */
- class ViewBuilderTest extends TestCase
- {
- public function testSetVar()
- {
- $builder = new ViewBuilder();
- $builder->setVar('testing', 'value');
- $this->assertSame('value', $builder->getVar('testing'));
- }
- public function testSetVars()
- {
- $builder = new ViewBuilder();
- $data = ['test' => 'val', 'foo' => 'bar'];
- $builder->setVars($data);
- $this->assertEquals($data, $builder->getVars());
- $update = ['test' => 'updated'];
- $builder->setVars($update);
- $this->assertEquals(
- ['test' => 'val', 'foo' => 'bar', 'test' => 'updated'],
- $builder->getVars()
- );
- $update = ['overwrite' => 'yes'];
- $builder->setVars($update, false);
- $this->assertEquals(
- ['overwrite' => 'yes'],
- $builder->getVars()
- );
- }
- public function testHasVar()
- {
- $builder = new ViewBuilder();
- $this->assertFalse($builder->hasVar('foo'));
- $builder->setVar('foo', 'value');
- $this->assertTrue($builder->hasVar('foo'));
- $builder->setVar('bar', null);
- $this->assertTrue($builder->hasVar('bar'));
- }
- /**
- * data provider for string properties.
- *
- * @return array
- */
- public function stringPropertyProvider()
- {
- return [
- ['layoutPath', 'Admin/'],
- ['templatePath', 'Admin/'],
- ['plugin', 'TestPlugin'],
- ['layout', 'admin'],
- ['theme', 'TestPlugin'],
- ['template', 'edit'],
- ['name', 'Articles'],
- ['className', 'Cake\View\JsonView'],
- ];
- }
- /**
- * data provider for string properties.
- *
- * @return array
- */
- public function boolPropertyProvider()
- {
- return [
- ['autoLayout', true],
- ];
- }
- /**
- * data provider for array properties.
- *
- * @return array
- */
- public function arrayPropertyProvider()
- {
- return [
- ['helpers', ['Html', 'Form']],
- ['options', ['key' => 'value']],
- ];
- }
- /**
- * Test string property accessor/mutator methods.
- *
- * @dataProvider stringPropertyProvider
- * @return void
- */
- public function testStringProperties($property, $value)
- {
- $get = 'get' . ucfirst($property);
- $set = 'set' . ucfirst($property);
- $builder = new ViewBuilder();
- $this->assertNull($builder->{$get}(), 'Default value should be null');
- $this->assertSame($builder, $builder->{$set}($value), 'Setter returns this');
- $this->assertSame($value, $builder->{$get}(), 'Getter gets value.');
- }
- /**
- * Test string property accessor/mutator methods.
- *
- * @deprecated
- * @dataProvider boolPropertyProvider
- * @return void
- */
- public function testBoolProperties($property, $value)
- {
- $set = 'enable' . ucfirst($property);
- $get = 'is' . ucfirst($property) . 'Enabled';
- $builder = new ViewBuilder();
- $this->assertNull($builder->{$get}(), 'Default value should be null');
- $this->assertSame($builder, $builder->{$set}($value), 'Setter returns this');
- $this->assertSame($value, $builder->{$get}(), 'Getter gets value.');
- }
- /**
- * Test array property accessor/mutator methods.
- *
- * @dataProvider arrayPropertyProvider
- * @return void
- */
- public function testArrayProperties($property, $value)
- {
- $get = 'get' . ucfirst($property);
- $set = 'set' . ucfirst($property);
- $builder = new ViewBuilder();
- $this->assertSame([], $builder->{$get}(), 'Default value should be empty list');
- $this->assertSame($builder, $builder->{$set}($value), 'Setter returns this');
- $this->assertSame($value, $builder->{$get}(), 'Getter gets value.');
- }
- /**
- * Test array property accessor/mutator methods.
- *
- * @dataProvider arrayPropertyProvider
- * @return void
- */
- public function testArrayPropertyMerge($property, $value)
- {
- $get = 'get' . ucfirst($property);
- $set = 'set' . ucfirst($property);
- $builder = new ViewBuilder();
- $builder->{$set}($value);
- $builder->{$set}(['Merged'], true);
- $this->assertSame(array_merge($value, ['Merged']), $builder->{$get}(), 'Should merge');
- $builder->{$set}($value, false);
- $this->assertSame($value, $builder->{$get}(), 'Should replace');
- }
- /**
- * Test string property accessor/mutator methods.
- *
- * @deprecated
- * @dataProvider stringPropertyProvider
- * @return void
- */
- public function testStringPropertiesDeprecated($property, $value)
- {
- $this->deprecated(function () use ($value, $property) {
- $builder = new ViewBuilder();
- $this->assertNull($builder->{$property}(), 'Default value should be null');
- $this->assertSame($builder, $builder->{$property}($value), 'Setter returns this');
- $this->assertSame($value, $builder->{$property}(), 'Getter gets value.');
- });
- }
- /**
- * Test string property accessor/mutator methods.
- *
- * @deprecated
- * @dataProvider boolPropertyProvider
- * @return void
- */
- public function testBoolPropertiesDeprecated($property, $value)
- {
- $this->deprecated(function () use ($value, $property) {
- $builder = new ViewBuilder();
- $this->assertNull($builder->{$property}(), 'Default value should be null');
- $this->assertSame($builder, $builder->{$property}($value), 'Setter returns this');
- $this->assertSame($value, $builder->{$property}(), 'Getter gets value.');
- });
- }
- /**
- * Test array property accessor/mutator methods.
- *
- * @deprecated
- * @dataProvider arrayPropertyProvider
- * @return void
- */
- public function testArrayPropertiesDeprecated($property, $value)
- {
- $this->deprecated(function () use ($value, $property) {
- $builder = new ViewBuilder();
- $this->assertSame([], $builder->{$property}(), 'Default value should be empty list');
- $this->assertSame($builder, $builder->{$property}($value), 'Setter returns this');
- $this->assertSame($value, $builder->{$property}(), 'Getter gets value.');
- });
- }
- /**
- * Test array property accessor/mutator methods.
- *
- * @deprecated
- * @dataProvider arrayPropertyProvider
- * @return void
- */
- public function testArrayPropertyMergeDeprecated($property, $value)
- {
- $this->deprecated(function () use ($value, $property) {
- $builder = new ViewBuilder();
- $builder->{$property}($value);
- $builder->{$property}(['Merged'], true);
- $this->assertSame(array_merge($value, ['Merged']), $builder->{$property}(), 'Should merge');
- $builder->{$property}($value, false);
- $this->assertSame($value, $builder->{$property}(), 'Should replace');
- });
- }
- /**
- * test building with all the options.
- *
- * @return void
- */
- public function testBuildComplete()
- {
- $request = new ServerRequest();
- $response = new Response();
- $events = $this->getMockBuilder('Cake\Event\EventManager')->getMock();
- $builder = new ViewBuilder();
- $builder->setName('Articles')
- ->setClassName('Ajax')
- ->setTemplate('edit')
- ->setLayout('default')
- ->setTemplatePath('Articles/')
- ->setHelpers(['Form', 'Html'])
- ->setLayoutPath('Admin/')
- ->setTheme('TestTheme')
- ->setPlugin('TestPlugin')
- ->setVars(['foo' => 'bar', 'x' => 'old']);
- $view = $builder->build(
- ['one' => 'value', 'x' => 'new'],
- $request,
- $response,
- $events
- );
- $this->assertInstanceOf('Cake\View\AjaxView', $view);
- $this->assertEquals('edit', $view->getTemplate());
- $this->assertEquals('default', $view->getLayout());
- $this->assertEquals('Articles/', $view->getTemplatePath());
- $this->assertEquals('Admin/', $view->getLayoutPath());
- $this->assertEquals('TestPlugin', $view->getPlugin());
- $this->assertEquals('TestTheme', $view->getTheme());
- $this->assertSame($request, $view->getRequest());
- $this->assertInstanceOf(Response::class, $view->getResponse());
- $this->assertSame($events, $view->getEventManager());
- $this->assertEquals(
- ['one' => 'value', 'foo' => 'bar', 'x' => 'new'],
- $view->viewVars
- );
- $this->assertInstanceOf('Cake\View\Helper\HtmlHelper', $view->Html);
- $this->assertInstanceOf('Cake\View\Helper\FormHelper', $view->Form);
- }
- /**
- * Test that the default is AppView.
- *
- * @return void
- */
- public function testBuildAppViewMissing()
- {
- static::setAppNamespace('Nope');
- $builder = new ViewBuilder();
- $view = $builder->build();
- $this->assertInstanceOf('Cake\View\View', $view);
- }
- /**
- * Test that the default is AppView.
- *
- * @return void
- */
- public function testBuildAppViewPresent()
- {
- static::setAppNamespace();
- $builder = new ViewBuilder();
- $view = $builder->build();
- $this->assertInstanceOf('TestApp\View\AppView', $view);
- }
- /**
- * test missing view class
- *
- * @return void
- */
- public function testBuildMissingViewClass()
- {
- $this->expectException(\Cake\View\Exception\MissingViewException::class);
- $this->expectExceptionMessage('View class "Foo" is missing.');
- $builder = new ViewBuilder();
- $builder->setClassName('Foo');
- $builder->build();
- }
- /**
- * testJsonSerialize()
- *
- * @return void
- */
- public function testJsonSerialize()
- {
- $builder = new ViewBuilder();
- $builder
- ->setTemplate('default')
- ->setLayout('test')
- ->setHelpers(['Html'])
- ->setClassName('JsonView');
- $result = json_decode(json_encode($builder), true);
- $expected = [
- '_template' => 'default',
- '_layout' => 'test',
- '_helpers' => ['Html'],
- '_className' => 'JsonView',
- ];
- $this->assertEquals($expected, $result);
- $result = json_decode(json_encode(unserialize(serialize($builder))), true);
- $this->assertEquals($expected, $result);
- }
- /**
- * testCreateFromArray()
- *
- * @return void
- */
- public function testCreateFromArray()
- {
- $builder = new ViewBuilder();
- $builder
- ->setTemplate('default')
- ->setLayout('test')
- ->setHelpers(['Html'])
- ->setClassName('JsonView');
- $result = json_encode($builder);
- $builder = new ViewBuilder();
- $builder->createFromArray(json_decode($result, true));
- $this->assertEquals('default', $builder->getTemplate());
- $this->assertEquals('test', $builder->getLayout());
- $this->assertEquals(['Html'], $builder->getHelpers());
- $this->assertEquals('JsonView', $builder->getClassName());
- }
- }
|