Mercurial > hg > isophonics-drupal-site
diff core/modules/views/tests/src/Unit/PluginBaseTest.php @ 0:4c8ae668cc8c
Initial import (non-working)
author | Chris Cannam |
---|---|
date | Wed, 29 Nov 2017 16:09:58 +0000 |
parents | |
children | 129ea1e6d783 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/core/modules/views/tests/src/Unit/PluginBaseTest.php Wed Nov 29 16:09:58 2017 +0000 @@ -0,0 +1,314 @@ +<?php + +namespace Drupal\Tests\views\Unit; + +use Drupal\Tests\UnitTestCase; +use Drupal\views\Tests\TestHelperPlugin; + +/** + * @coversDefaultClass \Drupal\views\Plugin\views\PluginBase + * @group views + */ +class PluginBaseTest extends UnitTestCase { + + /** + * The test helper plugin to use for the tests. + * + * @var \Drupal\views\Tests\TestHelperPlugin + */ + protected $testHelperPlugin; + + /** + * {@inheritdoc} + */ + protected function setUp() { + parent::setUp(); + + $this->testHelperPlugin = new TestHelperPlugin([], 'default', []); + } + + /** + * Tests the unpackOptions method. + * + * @param array $storage + * The storage array to unpack option into. + * @param array $options + * The array of options to unpack. + * @param array $definition + * The definition array, defining default options. + * @param array $expected + * The expected array after unpacking + * @param bool $all + * Whether to unpack all options. + * + * @dataProvider providerTestUnpackOptions + * @covers ::unpackOptions + */ + public function testUnpackOptions($storage, $options, $definition, $expected, $all = FALSE) { + $this->testHelperPlugin->unpackOptions($storage, $options, $definition, $all); + $this->assertEquals($storage, $expected); + } + + /** + * Tests the setOptionDefault method. + * + * @param array $storage + * The storage array to unpack option into. + * @param array $definition + * The definition array, defining default options. + * @param array $expected + * The expected array after unpacking + * + * @dataProvider providerTestSetOptionDefault + * @covers ::setOptionDefaults + */ + public function testSetOptionDefault($storage, $definition, $expected) { + $this->testHelperPlugin->testSetOptionDefaults($storage, $definition); + $this->assertEquals($storage, $expected); + } + + /** + * Data provider for testUnpackOptions(). + * + * @return array + */ + public function providerTestUnpackOptions() { + $test_parameters = []; + // Set a storage but no value, so the storage value should be kept. + $test_parameters[] = [ + 'storage' => [ + 'key' => 'value', + ], + 'options' => [], + 'definition' => [ + 'key' => ['default' => 'value2'], + ], + 'expected' => [ + 'key' => 'value', + ], + ]; + // Set a storage and a option value, so the option value should be kept. + $test_parameters[] = [ + 'storage' => [ + 'key' => 'value', + ], + 'options' => [ + 'key' => 'value2', + ], + 'definition' => [ + 'key' => ['default' => 'value3'], + ], + 'expected' => [ + 'key' => 'value2', + ], + '' + ]; + // Set no storage but an options value, so the options value should be kept. + $test_parameters[] = [ + 'storage' => [], + 'options' => [ + 'key' => 'value', + ], + 'definition' => [ + 'key' => ['default' => 'value2'], + ], + 'expected' => [ + 'key' => 'value', + ], + ]; + // Set additional options, which aren't part of the definition, so they + // should be ignored if all is set. + $test_parameters[] = [ + 'storage' => [], + 'options' => [ + 'key' => 'value', + 'key2' => 'value2', + ], + 'definition' => [ + 'key' => ['default' => 'value2'], + ], + 'expected' => [ + 'key' => 'value', + ], + ]; + $test_parameters[] = [ + 'storage' => [], + 'options' => [ + 'key' => 'value', + 'key2' => 'value2', + ], + 'definition' => [ + 'key' => ['default' => 'value2'], + ], + 'expected' => [ + 'key' => 'value', + 'key2' => 'value2', + ], + 'all' => TRUE, + ]; + // Provide multiple options with their corresponding definition. + $test_parameters[] = [ + 'storage' => [], + 'options' => [ + 'key' => 'value', + 'key2' => 'value2', + ], + 'definition' => [ + 'key' => ['default' => 'value2'], + 'key2' => ['default' => 'value3'], + ], + 'expected' => [ + 'key' => 'value', + 'key2' => 'value2', + ], + ]; + // Set a complex definition structure with a zero and a one level structure. + $test_parameters[] = [ + 'storage' => [], + 'options' => [ + 'key0' => 'value', + 'key1' => ['key1:1' => 'value1', 'key1:2' => 'value2'], + ], + 'definition' => [ + 'key0' => ['default' => 'value0'], + 'key1' => ['contains' => ['key1:1' => ['default' => 'value1:1']]], + ], + 'expected' => [ + 'key0' => 'value', + 'key1' => ['key1:1' => 'value1'], + ], + ]; + // Setup a two level structure. + $test_parameters[] = [ + 'storage' => [], + 'options' => [ + 'key2' => [ + 'key2:1' => [ + 'key2:1:1' => 'value0', + 'key2:1:2' => ['key2:1:2:1' => 'value1'], + ], + ], + ], + 'definition' => [ + 'key2' => [ + 'contains' => [ + 'key2:1' => [ + 'contains' => [ + 'key2:1:1' => ['default' => 'value2:1:2:1'], + 'key2:1:2' => [ + 'contains' => ['key2:1:2:1' => ['default' => 'value2:1:2:1']], + ], + ], + ], + ], + ], + ], + 'expected' => [ + 'key2' => [ + 'key2:1' => [ + 'key2:1:1' => 'value0', + 'key2:1:2' => ['key2:1:2:1' => 'value1'], + ], + ], + ], + ]; + + return $test_parameters; + } + + /** + * Data provider for testSetOptionDefault(). + * + * @return array + */ + public function providerTestSetOptionDefault() { + $test_parameters = []; + // No definition should change anything on the storage. + $test_parameters[] = [ + 'storage' => [], + 'definition' => [], + 'expected' => [], + ]; + // Set a single definition, which should be picked up. + $test_parameters[] = [ + 'storage' => [], + 'definition' => [ + 'key' => ['default' => 'value'], + ], + 'expected' => [ + 'key' => 'value', + ], + ]; + // Set multiple keys, all should be picked up. + $test_parameters[] = [ + 'storage' => [], + 'definition' => [ + 'key' => ['default' => 'value'], + 'key2' => ['default' => 'value2'], + 'key3' => ['default' => 'value3'], + ], + 'expected' => [ + 'key' => 'value', + 'key2' => 'value2', + 'key3' => 'value3', + ], + ]; + // Setup a definition with multiple levels. + $test_parameters[] = [ + 'storage' => [], + 'definition' => [ + 'key' => ['default' => 'value'], + 'key2' => [ + 'contains' => [ + 'key2:1' => ['default' => 'value2:1'], + 'key2:2' => ['default' => 'value2:2'], + ], + ], + ], + 'expected' => [ + 'key' => 'value', + 'key2' => [ + 'key2:1' => 'value2:1', + 'key2:2' => 'value2:2', + ], + ], + ]; + + return $test_parameters; + } + + /** + * @dataProvider providerTestFilterByDefinedOptions + * @covers ::filterByDefinedOptions + */ + public function testFilterByDefinedOptions($storage, $options, $expected_storage) { + $this->testHelperPlugin->setDefinedOptions($options); + $this->testHelperPlugin->filterByDefinedOptions($storage); + $this->assertEquals($expected_storage, $storage); + } + + public function providerTestFilterByDefinedOptions() { + $data = []; + + // A simple defined option. + $values_1 = ['key1' => 'value1']; + $options_1 = ['key1' => ['default' => '']]; + $data[] = [$values_1, $options_1, $values_1]; + // Multiple defined options . + $values_2 = ['key1' => 'value1', 'key2' => 'value2']; + $options_2 = ['key1' => ['default' => ''], 'key2' => ['default' => '']]; + $data[] = [$values_2, $options_2, $values_2]; + + // Multiple options, just one defined. + $data[] = [$values_2, $options_1, $values_1]; + + // Nested options, all properly defined. + $data[] = [['sub1' => $values_2, 'sub2' => $values_2], ['sub1' => ['contains' => $options_2], 'sub2' => ['contains' => $options_2]], ['sub1' => $values_2, 'sub2' => $values_2]]; + + // Nested options, not all properly defined. + $data[] = [['sub1' => $values_2, 'sub2' => $values_2], ['sub1' => ['contains' => $options_2], 'sub2' => ['contains' => $options_1]], ['sub1' => $values_2, 'sub2' => $values_1]]; + + return $data; + } + +}