gplx/mediawiki/extensions/SemanticMediaWiki/tests/phpunit/Utils/DotArrayTest.php

148 lines
2.8 KiB
PHP

<?php
namespace SMW\Tests\Utils;
use SMW\Utils\DotArray;
/**
* @covers \SMW\Utils\DotArray
* @group semantic-mediawiki
*
* @license GPL-2.0-or-later
* @since 3.2
*
* @author mwjames
*/
class DotArrayTest extends \PHPUnit\Framework\TestCase {
/**
* @dataProvider dotProvider
*/
public function testDotGet( $options, $key, $expected ) {
$this->assertEquals(
$expected,
DotArray::get( $options, $key )
);
}
public function dotProvider() {
$options = [
'Foo' => [
'Bar' => [ 'Foobar' => 42 ],
'Foobar' => 1001,
'some.other.options' => 9999
],
'dot_1' => [ 'foo.bar' => [ 'n' => 1, 'size' => 250, 't' => false ] ],
'dot_2' => [ 'foo.bar.foo' => [ 'n' => 1, 'size' => 9999, 't' => false ] ],
'dot_3' => [ 'foo.bar' => [ 'foo' => [ 'n' => 1, 'size' => 1111, 't' => false ] ] ],
'dot_4' => [ 'foo' => [ 'bar' => [ 'foo' => [ 'n' => 1, 'size' => 2222, 't' => false ] ] ] ],
'dot_5' => [ 'foo' => [ 'bar' => [ 'foo' => [ 'n' => [ 1, 'size' => 4444, 't' => false ] ] ] ] ],
'dot_6' => [
'foo' => [
// A dot path stored key takes precedence over real array definition
'bar' => [ 'foobar' => [ 'foo' => [ 'n' => 123 ], 'foo.n' => 666, 'foo.size' => 777 ] ],
'bar.foobar' => [ 'foo' => [ 'n' => 999, 'size' => 444 ] ],
]
],
];
yield 'dot_1.foo.bar' => [
$options,
'dot_1.foo.bar',
[ 'n' => 1, 'size' => 250, 't' => false ]
];
yield 'dot_1.foo.bar.size' => [
$options,
'dot_1.foo.bar.size',
250
];
yield 'dot_2.foo.bar.foo.size' => [
$options,
'dot_2.foo.bar.foo.size',
9999
];
yield 'dot_3.foo.bar.foo.size' => [
$options,
'dot_3.foo.bar.foo.size',
1111
];
yield 'dot_4.foo.bar.foo.size' => [
$options,
'dot_4.foo.bar.foo.size',
2222
];
yield 'dot_5.foo.bar.foo.n.size' => [
$options,
'dot_5.foo.bar.foo.n.size',
4444
];
yield 'dot_5.foo.bar.foo.size' => [
$options,
'dot_5.foo.bar.foo.size',
false
];
yield 'Foo.Bar' => [
$options,
'Foo.Bar',
[ 'Foobar' => 42 ]
];
yield 'Foo.Foobar' => [
$options,
'Foo.Foobar',
1001
];
yield 'Foo.Bar.Foobar' => [
$options,
'Foo.Bar.Foobar',
42
];
yield 'Foo.some.other.options' => [
$options,
'Foo.some.other.options',
9999
];
yield 'Foo.Bar.Foobar.unkown' => [
$options,
'Foo.Bar.Foobar.unkown',
false
];
yield 'dot_6.foo.bar.foobar.foo.n' => [
$options,
'dot_6.foo.bar.foobar.foo.n',
666
];
yield 'dot_6.foo.bar.foobar.foo.size' => [
$options,
'dot_6.foo.bar.foobar.foo.size',
777
];
yield 'compound_key_takes_precedence_over_array_match' => [
[
'query' => [
'highlight.fragment' => [ 'number' => 1, 'size' => 100, 'type' => false ],
'highlight.fragment.type' => 'foo'
]
],
'query.highlight.fragment.type',
'foo'
];
}
}