Commit 2b1d1d61 authored by catch's avatar catch
Browse files

Issue #1849814 by damiankloip, dawehner: Unit-Test for...

Issue #1849814 by damiankloip, dawehner: Unit-Test for PluginBase::unpackOptions and PluginBase::setOptionDefaults.
parent 19651370
<?php
/**
* @file
* Contains \Drupal\views\Tests\PluginBaseUnitTest.
*/
namespace Drupal\views\Tests;
use Drupal\simpletest\DrupalUnitTestBase;
use Drupal\Component\Plugin\Discovery\StaticDiscovery;
/**
* Tests code of the views plugin base class.
*
* @see \Drupal\views\Plugin\views\PluginBase.
*/
class PluginBaseUnitTest extends DrupalUnitTestBase {
public static function getInfo() {
return array(
'name' => 'Plugin base unit tests',
'description' => 'Tests code of the views plugin base class.',
'group' => 'Views Plugins',
);
}
/**
* Tests the unpackOptions method.
*
* @see \Drupal\views\Plugin\views\PluginBase::unpackOptions.
*/
public function testUnpackOptions() {
$plugin = $this->getTestPlugin();
$test_parameters = array();
// Set a storage but no value, so the storage value should be kept.
$test_parameters[] = array(
'storage' => array(
'key' => 'value',
),
'options' => array(
),
'definition' => array(
'key' => array('default' => 'value2'),
),
'expected' => array(
'key' => 'value',
),
);
// Set a storage and a option value, so the option value should be kept.
$test_parameters[] = array(
'storage' => array(
'key' => 'value',
),
'options' => array(
'key' => 'value2',
),
'definition' => array(
'key' => array('default' => 'value3'),
),
'expected' => array(
'key' => 'value2',
),
''
);
// Set no storage but an options value, so the options value should be kept.
$test_parameters[] = array(
'options' => array(
'key' => 'value',
),
'definition' => array(
'key' => array('default' => 'value2'),
),
'expected' => array(
'key' => 'value',
),
);
// Set additional options, which aren't part of the definition, so they
// should be ignored if all is set.
$test_parameters[] = array(
'options' => array(
'key' => 'value',
'key2' => 'value2',
),
'definition' => array(
'key' => array('default' => 'value2'),
),
'expected' => array(
'key' => 'value',
),
);
$test_parameters[] = array(
'options' => array(
'key' => 'value',
'key2' => 'value2',
),
'definition' => array(
'key' => array('default' => 'value2'),
),
'expected' => array(
'key' => 'value',
'key2' => 'value2',
),
'all' => TRUE,
);
// Provide multiple options with their corresponding definition.
$test_parameters[] = array(
'options' => array(
'key' => 'value',
'key2' => 'value2',
),
'definition' => array(
'key' => array('default' => 'value2'),
'key2' => array('default' => 'value3'),
),
'expected' => array(
'key' => 'value',
'key2' => 'value2',
),
);
// Set a complex definition structure with a zero and a one level structure.
$test_parameters[] = array(
'options' => array(
'key0' => 'value',
'key1' => array('key1:1' => 'value1', 'key1:2' => 'value2'),
),
'definition' => array(
'key0' => array('default' => 'value0'),
'key1' => array('contains' => array(
'key1:1' => array('default' => 'value1:1'),
)),
),
'expected' => array(
'key0' => 'value',
'key1' => array('key1:1' => 'value1'),
),
);
// Setup a two level structure.
$test_parameters[] = array(
'options' => array(
'key2' => array(
'key2:1' => array(
'key2:1:1' => 'value0',
'key2:1:2' => array(
'key2:1:2:1' => 'value1',
),
),
),
),
'definition' => array(
'key2' => array('contains' => array(
'key2:1' => array('contains' => array(
'key2:1:1' => array('default' => 'value2:1:2:1'),
'key2:1:2' => array('contains' => array(
'key2:1:2:1' => array('default' => 'value2:1:2:1'),
)),
)),
)),
),
'expected' => array(
'key2' => array(
'key2:1' => array(
'key2:1:1' => 'value0',
'key2:1:2' => array(
'key2:1:2:1' => 'value1',
),
),
),
),
);
foreach ($test_parameters as $parameter) {
$parameter += array(
'storage' => array(),
);
$plugin->unpackOptions($parameter['storage'], $parameter['options'], $parameter['definition'], !empty($parameter['all']));
$this->assertEqual($parameter['storage'], $parameter['expected']);
}
}
/**
* Tests the setOptionDefault method.
*
* @see \Drupal\views\Plugin\views\PluginBase::setOptionDefaults.
*/
public function testSetOptionDefault() {
$plugin = $this->getTestPlugin();
$test_parameters = array();
// No definition mustn't change anything on the storage.
$test_parameters[] = array(
'definition' => array(),
'expected' => array(),
);
// Set a single definition, which should be picked up.
$test_parameters[] = array(
'definition' => array(
'key' => array('default' => 'value'),
),
'expected' => array(
'key' => 'value',
),
);
// Set multiple keys, all should be picked up.
$test_parameters[] = array(
'definition' => array(
'key' => array('default' => 'value'),
'key2' => array('default' => 'value2'),
'key3' => array('default' => 'value3'),
),
'expected' => array(
'key' => 'value',
'key2' => 'value2',
'key3' => 'value3',
),
);
// Setup a definition with multiple levels.
$test_parameters[] = array(
'definition' => array(
'key' => array('default' => 'value'),
'key2' => array('contains' => array(
'key2:1' => array('default' => 'value2:1'),
'key2:2' => array('default' => 'value2:2'),
)),
),
'expected' => array(
'key' => 'value',
'key2' => array(
'key2:1' => 'value2:1',
'key2:2' => 'value2:2',
),
),
);
foreach ($test_parameters as $parameter) {
$parameter += array(
'storage' => array(),
);
$plugin->testSetOptionDefaults($parameter['storage'], $parameter['definition']);
$this->assertEqual($parameter['storage'], $parameter['expected']);
}
}
/**
* Sets up and returns a basic instance of a plugin.
*
* @return \Drupal\views\Tests\TestHelperPlugin
* A test plugin instance.
*/
protected function getTestPlugin() {
$discovery = new StaticDiscovery();
$discovery->setDefinition('default', array());
return new TestHelperPlugin(array(), 'default', $discovery);
}
}
<?php
/**
* @file
* Contains \Drupal\views\Tests\TestHelperPlugin.
*/
namespace Drupal\views\Tests;
use Drupal\views\Plugin\views\PluginBase;
/**
* Wraps the plugin base class to be able to instantiate it.
*
* @see \Drupal\views\Plugin\views\PluginBase.
*/
class TestHelperPlugin extends PluginBase {
/**
* Calls the protected method setOptionDefaults().
*
* @see \Drupal\views\Plugin\views\PluginBase::setOptionDefaults().
*/
public function testSetOptionDefaults(&$storage, $options, $level = 0) {
$this->setOptionDefaults($storage, $options, $level);
}
}
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment