Chris@0: testHelperPlugin = new TestHelperPlugin([], 'default', []); Chris@0: } Chris@0: Chris@0: /** Chris@0: * Tests the unpackOptions method. Chris@0: * Chris@0: * @param array $storage Chris@0: * The storage array to unpack option into. Chris@0: * @param array $options Chris@0: * The array of options to unpack. Chris@0: * @param array $definition Chris@0: * The definition array, defining default options. Chris@0: * @param array $expected Chris@0: * The expected array after unpacking Chris@0: * @param bool $all Chris@0: * Whether to unpack all options. Chris@0: * Chris@0: * @dataProvider providerTestUnpackOptions Chris@0: * @covers ::unpackOptions Chris@0: */ Chris@0: public function testUnpackOptions($storage, $options, $definition, $expected, $all = FALSE) { Chris@0: $this->testHelperPlugin->unpackOptions($storage, $options, $definition, $all); Chris@0: $this->assertEquals($storage, $expected); Chris@0: } Chris@0: Chris@0: /** Chris@0: * Tests the setOptionDefault method. Chris@0: * Chris@0: * @param array $storage Chris@0: * The storage array to unpack option into. Chris@0: * @param array $definition Chris@0: * The definition array, defining default options. Chris@0: * @param array $expected Chris@0: * The expected array after unpacking Chris@0: * Chris@0: * @dataProvider providerTestSetOptionDefault Chris@0: * @covers ::setOptionDefaults Chris@0: */ Chris@0: public function testSetOptionDefault($storage, $definition, $expected) { Chris@0: $this->testHelperPlugin->testSetOptionDefaults($storage, $definition); Chris@0: $this->assertEquals($storage, $expected); Chris@0: } Chris@0: Chris@0: /** Chris@0: * Data provider for testUnpackOptions(). Chris@0: * Chris@0: * @return array Chris@0: */ Chris@0: public function providerTestUnpackOptions() { Chris@0: $test_parameters = []; Chris@0: // Set a storage but no value, so the storage value should be kept. Chris@0: $test_parameters[] = [ Chris@0: 'storage' => [ Chris@0: 'key' => 'value', Chris@0: ], Chris@0: 'options' => [], Chris@0: 'definition' => [ Chris@0: 'key' => ['default' => 'value2'], Chris@0: ], Chris@0: 'expected' => [ Chris@0: 'key' => 'value', Chris@0: ], Chris@0: ]; Chris@0: // Set a storage and a option value, so the option value should be kept. Chris@0: $test_parameters[] = [ Chris@0: 'storage' => [ Chris@0: 'key' => 'value', Chris@0: ], Chris@0: 'options' => [ Chris@0: 'key' => 'value2', Chris@0: ], Chris@0: 'definition' => [ Chris@0: 'key' => ['default' => 'value3'], Chris@0: ], Chris@0: 'expected' => [ Chris@0: 'key' => 'value2', Chris@0: ], Chris@17: '', Chris@0: ]; Chris@0: // Set no storage but an options value, so the options value should be kept. Chris@0: $test_parameters[] = [ Chris@0: 'storage' => [], Chris@0: 'options' => [ Chris@0: 'key' => 'value', Chris@0: ], Chris@0: 'definition' => [ Chris@0: 'key' => ['default' => 'value2'], Chris@0: ], Chris@0: 'expected' => [ Chris@0: 'key' => 'value', Chris@0: ], Chris@0: ]; Chris@0: // Set additional options, which aren't part of the definition, so they Chris@0: // should be ignored if all is set. Chris@0: $test_parameters[] = [ Chris@0: 'storage' => [], Chris@0: 'options' => [ Chris@0: 'key' => 'value', Chris@0: 'key2' => 'value2', Chris@0: ], Chris@0: 'definition' => [ Chris@0: 'key' => ['default' => 'value2'], Chris@0: ], Chris@0: 'expected' => [ Chris@0: 'key' => 'value', Chris@0: ], Chris@0: ]; Chris@0: $test_parameters[] = [ Chris@0: 'storage' => [], Chris@0: 'options' => [ Chris@0: 'key' => 'value', Chris@0: 'key2' => 'value2', Chris@0: ], Chris@0: 'definition' => [ Chris@0: 'key' => ['default' => 'value2'], Chris@0: ], Chris@0: 'expected' => [ Chris@0: 'key' => 'value', Chris@0: 'key2' => 'value2', Chris@0: ], Chris@0: 'all' => TRUE, Chris@0: ]; Chris@0: // Provide multiple options with their corresponding definition. Chris@0: $test_parameters[] = [ Chris@0: 'storage' => [], Chris@0: 'options' => [ Chris@0: 'key' => 'value', Chris@0: 'key2' => 'value2', Chris@0: ], Chris@0: 'definition' => [ Chris@0: 'key' => ['default' => 'value2'], Chris@0: 'key2' => ['default' => 'value3'], Chris@0: ], Chris@0: 'expected' => [ Chris@0: 'key' => 'value', Chris@0: 'key2' => 'value2', Chris@0: ], Chris@0: ]; Chris@0: // Set a complex definition structure with a zero and a one level structure. Chris@0: $test_parameters[] = [ Chris@0: 'storage' => [], Chris@0: 'options' => [ Chris@0: 'key0' => 'value', Chris@0: 'key1' => ['key1:1' => 'value1', 'key1:2' => 'value2'], Chris@0: ], Chris@0: 'definition' => [ Chris@0: 'key0' => ['default' => 'value0'], Chris@0: 'key1' => ['contains' => ['key1:1' => ['default' => 'value1:1']]], Chris@0: ], Chris@0: 'expected' => [ Chris@0: 'key0' => 'value', Chris@0: 'key1' => ['key1:1' => 'value1'], Chris@0: ], Chris@0: ]; Chris@0: // Setup a two level structure. Chris@0: $test_parameters[] = [ Chris@0: 'storage' => [], Chris@0: 'options' => [ Chris@0: 'key2' => [ Chris@0: 'key2:1' => [ Chris@0: 'key2:1:1' => 'value0', Chris@0: 'key2:1:2' => ['key2:1:2:1' => 'value1'], Chris@0: ], Chris@0: ], Chris@0: ], Chris@0: 'definition' => [ Chris@0: 'key2' => [ Chris@0: 'contains' => [ Chris@0: 'key2:1' => [ Chris@0: 'contains' => [ Chris@0: 'key2:1:1' => ['default' => 'value2:1:2:1'], Chris@0: 'key2:1:2' => [ Chris@0: 'contains' => ['key2:1:2:1' => ['default' => 'value2:1:2:1']], Chris@0: ], Chris@0: ], Chris@0: ], Chris@0: ], Chris@0: ], Chris@0: ], Chris@0: 'expected' => [ Chris@0: 'key2' => [ Chris@0: 'key2:1' => [ Chris@0: 'key2:1:1' => 'value0', Chris@0: 'key2:1:2' => ['key2:1:2:1' => 'value1'], Chris@0: ], Chris@0: ], Chris@0: ], Chris@0: ]; Chris@0: Chris@0: return $test_parameters; Chris@0: } Chris@0: Chris@0: /** Chris@0: * Data provider for testSetOptionDefault(). Chris@0: * Chris@0: * @return array Chris@0: */ Chris@0: public function providerTestSetOptionDefault() { Chris@0: $test_parameters = []; Chris@0: // No definition should change anything on the storage. Chris@0: $test_parameters[] = [ Chris@0: 'storage' => [], Chris@0: 'definition' => [], Chris@0: 'expected' => [], Chris@0: ]; Chris@0: // Set a single definition, which should be picked up. Chris@0: $test_parameters[] = [ Chris@0: 'storage' => [], Chris@0: 'definition' => [ Chris@0: 'key' => ['default' => 'value'], Chris@0: ], Chris@0: 'expected' => [ Chris@0: 'key' => 'value', Chris@0: ], Chris@0: ]; Chris@0: // Set multiple keys, all should be picked up. Chris@0: $test_parameters[] = [ Chris@0: 'storage' => [], Chris@0: 'definition' => [ Chris@0: 'key' => ['default' => 'value'], Chris@0: 'key2' => ['default' => 'value2'], Chris@0: 'key3' => ['default' => 'value3'], Chris@0: ], Chris@0: 'expected' => [ Chris@0: 'key' => 'value', Chris@0: 'key2' => 'value2', Chris@0: 'key3' => 'value3', Chris@0: ], Chris@0: ]; Chris@0: // Setup a definition with multiple levels. Chris@0: $test_parameters[] = [ Chris@0: 'storage' => [], Chris@0: 'definition' => [ Chris@0: 'key' => ['default' => 'value'], Chris@0: 'key2' => [ Chris@0: 'contains' => [ Chris@0: 'key2:1' => ['default' => 'value2:1'], Chris@0: 'key2:2' => ['default' => 'value2:2'], Chris@0: ], Chris@0: ], Chris@0: ], Chris@0: 'expected' => [ Chris@0: 'key' => 'value', Chris@0: 'key2' => [ Chris@0: 'key2:1' => 'value2:1', Chris@0: 'key2:2' => 'value2:2', Chris@0: ], Chris@0: ], Chris@0: ]; Chris@0: Chris@0: return $test_parameters; Chris@0: } Chris@0: Chris@0: /** Chris@0: * @dataProvider providerTestFilterByDefinedOptions Chris@0: * @covers ::filterByDefinedOptions Chris@0: */ Chris@0: public function testFilterByDefinedOptions($storage, $options, $expected_storage) { Chris@0: $this->testHelperPlugin->setDefinedOptions($options); Chris@0: $this->testHelperPlugin->filterByDefinedOptions($storage); Chris@0: $this->assertEquals($expected_storage, $storage); Chris@0: } Chris@0: Chris@0: public function providerTestFilterByDefinedOptions() { Chris@0: $data = []; Chris@0: Chris@0: // A simple defined option. Chris@0: $values_1 = ['key1' => 'value1']; Chris@0: $options_1 = ['key1' => ['default' => '']]; Chris@0: $data[] = [$values_1, $options_1, $values_1]; Chris@0: // Multiple defined options . Chris@0: $values_2 = ['key1' => 'value1', 'key2' => 'value2']; Chris@0: $options_2 = ['key1' => ['default' => ''], 'key2' => ['default' => '']]; Chris@0: $data[] = [$values_2, $options_2, $values_2]; Chris@0: Chris@0: // Multiple options, just one defined. Chris@0: $data[] = [$values_2, $options_1, $values_1]; Chris@0: Chris@0: // Nested options, all properly defined. Chris@0: $data[] = [['sub1' => $values_2, 'sub2' => $values_2], ['sub1' => ['contains' => $options_2], 'sub2' => ['contains' => $options_2]], ['sub1' => $values_2, 'sub2' => $values_2]]; Chris@0: Chris@0: // Nested options, not all properly defined. Chris@0: $data[] = [['sub1' => $values_2, 'sub2' => $values_2], ['sub1' => ['contains' => $options_2], 'sub2' => ['contains' => $options_1]], ['sub1' => $values_2, 'sub2' => $values_1]]; Chris@0: Chris@0: return $data; Chris@0: } Chris@0: Chris@0: }