gplx/mediawiki/extensions/SemanticMediaWiki/tests/phpunit/ParserParameterProcessorTes...

400 lines
6.8 KiB
PHP

<?php
namespace SMW\Tests;
use SMW\ParserParameterProcessor;
/**
* @covers \SMW\ParserParameterProcessor
* @group semantic-mediawiki
*
* @license GPL-2.0-or-later
* @since 1.9
*
* @author mwjames
*/
class ParserParameterProcessorTest extends \PHPUnit\Framework\TestCase {
/**
* @dataProvider parametersDataProvider
*/
public function testCanConstruct( array $parameters ) {
$this->assertInstanceOf(
'SMW\ParserParameterProcessor',
new ParserParameterProcessor( $parameters )
);
}
/**
* @dataProvider parametersDataProvider
*/
public function testGetRaw( array $parameters ) {
$instance = new ParserParameterProcessor( $parameters );
$this->assertEquals(
$parameters,
$instance->getRaw()
);
}
public function testSetParameters() {
$instance = new ParserParameterProcessor();
$parameters = [
'Foo' => 'Bar'
];
$instance->setParameters( $parameters );
$this->assertEquals(
$parameters,
$instance->toArray()
);
}
public function testAddAndRemoveParameter() {
$instance = new ParserParameterProcessor();
$instance->addParameter(
'Foo', 'Bar'
);
$this->assertEquals(
[ 'Foo' => [ 'Bar' ] ],
$instance->toArray()
);
$instance->removeParameterByKey( 'Foo' );
$this->assertFalse(
$instance->hasParameter( 'Foo' )
);
}
public function testSetParameter() {
$instance = new ParserParameterProcessor();
$instance->setParameter(
'Foo', []
);
$this->assertEmpty(
$instance->toArray()
);
$instance->setParameter(
'Foo', [ 'Bar' ]
);
$this->assertEquals(
[ 'Foo' => [ 'Bar' ] ],
$instance->toArray()
);
}
public function testSort() {
$a = [
'Has test 3=One,Two,Three',
'+sep',
'Has test 4=Four'
];
$instance = new ParserParameterProcessor(
$a
);
$paramsA = $instance->toArray();
$instance->sort( $paramsA );
$b = [
'Has test 4=Four',
'Has test 3=Two,Three,One',
'+sep',
];
$instance = new ParserParameterProcessor(
$b
);
$paramsB = $instance->toArray();
$instance->sort( $paramsB );
$this->assertEquals(
$paramsA,
$paramsB
);
}
/**
* @dataProvider parametersDataProvider
*/
public function testToArray( array $parameters, array $expected ) {
$instance = new ParserParameterProcessor( $parameters );
$this->assertEquals(
$expected,
$instance->toArray()
);
}
/**
* @dataProvider firstParameterDataProvider
*/
public function testGetFirst( array $parameters, array $expected ) {
$instance = new ParserParameterProcessor( $parameters );
$this->assertEquals(
$expected['identifier'],
$instance->getFirst()
);
}
public function parametersDataProvider() {
// {{#...:
// |Has test 1=One
// }}
$provider[] = [
[
'Has test 1=One'
],
[
'Has test 1' => [ 'One' ]
]
];
// {{#...:
// |Has test 1=One
// }}
$provider[] = [
[
[ 'Foo' ],
'Has test 1=One',
],
[
'Has test 1' => [ 'One' ]
],
[
'msg' => 'Failed to recognize that only strings can be processed'
]
];
// {{#...:
// |Has test 2=Two
// |Has test 2=Three;Four|+sep=;
// }}
$provider[] = [
[
'Has test 2=Two',
'Has test 2=Three;Four',
'+sep=;'
],
[
'Has test 2' => [ 'Two', 'Three', 'Four' ]
]
];
// {{#...:
// |Has test 3=One,Two,Three|+sep
// |Has test 4=Four
// }}
$provider[] = [
[
'Has test 3=One,Two,Three',
'+sep',
'Has test 4=Four'
],
[
'Has test 3' => [ 'One', 'Two', 'Three' ],
'Has test 4' => [ 'Four' ]
]
];
// {{#...:
// |Has test 5=Test 5-1|Test 5-2|Test 5-3|Test 5-4
// |Has test 5=Test 5-5
// }}
$provider[] = [
[
'Has test 5=Test 5-1',
'Test 5-2',
'Test 5-3',
'Test 5-4',
'Has test 5=Test 5-5'
],
[
'Has test 5' => [ 'Test 5-1', 'Test 5-2', 'Test 5-3', 'Test 5-4', 'Test 5-5' ]
]
];
// {{#...:
// |Has test 6=1+2+3|+sep=+
// |Has test 7=7
// |Has test 8=9,10,11,|+sep=
// }}
$provider[] = [
[
'Has test 6=1+2+3',
'+sep=+',
'Has test 7=7',
'Has test 8=9,10,11,',
'+sep='
],
[
'Has test 6' => [ '1', '2', '3' ],
'Has test 7' => [ '7' ],
'Has test 8' => [ '9', '10', '11' ]
]
];
// {{#...:
// |Has test 9=One,Two,Three|+sep=;
// |Has test 10=Four
// }}
$provider[] = [
[
'Has test 9=One,Two,Three',
'+sep=;',
'Has test 10=Four'
],
[
'Has test 9' => [ 'One,Two,Three' ],
'Has test 10' => [ 'Four' ]
]
];
// {{#...:
// |Has test 11=Test 5-1|Test 5-2|Test 5-3|Test 5-4
// |Has test 12=Test 5-5
// |Has test 11=9,10,11,|+sep=
// }}
$provider[] = [
[
'Has test 11=Test 5-1',
'Test 5-2',
'Test 5-3',
'Test 5-4',
'Has test 12=Test 5-5',
'Has test 11=9,10,11,',
'+sep='
],
[
'Has test 11' => [ 'Test 5-1', 'Test 5-2', 'Test 5-3', 'Test 5-4', '9', '10', '11' ],
'Has test 12' => [ 'Test 5-5' ]
]
];
// {{#...:
// |Has test url=http://www.semantic-mediawiki.org/w/index.php?title=Subobject;http://www.semantic-mediawiki.org/w/index.php?title=Set|+sep=;
// }}
$provider[] = [
[
'Has test url=http://www.semantic-mediawiki.org/w/index.php?title=Subobject;http://www.semantic-mediawiki.org/w/index.php?title=Set',
'+sep=;'
],
[
'Has test url' => [ 'http://www.semantic-mediawiki.org/w/index.php?title=Subobject', 'http://www.semantic-mediawiki.org/w/index.php?title=Set' ]
]
];
// {{#...:
// |Foo=123|345|456|+pipe
// }}
$provider[] = [
[
'Foo=123',
'345',
'456',
'+pipe'
],
[
'Foo' => [ '123|345|456' ]
]
];
// {{#...:
// |@json={ "Foo": 123}
// }}
$provider[] = [
[
'@json={ "Foo": 123}'
],
[
'Foo' => [ '123' ]
]
];
// {{#...:
// |@json={ "Foo": [123, 456] }
// }}
$provider[] = [
[
'@json={ "Foo": [123, 456] }'
],
[
'Foo' => [ '123', '456' ]
]
];
// Error
// {{#...:
// |@json={ "Foo": [123, 456] }
// }}
$provider[] = [
[
'@json={ Foo: [123, 456] }'
],
[
'@json' => [ '{ Foo: [123, 456] }' ]
]
];
// Avoid spaces on individual values
// {{#...:
// |Has test=One; Two|+sep=;
// }}
$provider[] = [
[
'Has test=One; Two',
'+sep=;'
],
[
'Has test' => [ 'One', 'Two' ]
]
];
return $provider;
}
public function firstParameterDataProvider() {
// {{#subobject:
// |Has test 1=One
// }}
$provider[] = [
[ '', 'Has test 1=One' ],
[ 'identifier' => null ]
];
// {{#set_recurring_event:Foo
// |Has test 2=Two
// |Has test 2=Three;Four|+sep=;
// }}
$provider[] = [
[ 'Foo', 'Has test 2=Two', 'Has test 2=Three;Four', '+sep=;' ],
[ 'identifier' => 'Foo' ]
];
// {{#subobject:-
// |Has test 2=Two
// |Has test 2=Three;Four|+sep=;
// }}
$provider[] = [
[ '-', 'Has test 2=Two', 'Has test 2=Three;Four', '+sep=;' ],
[ 'identifier' => '-' ]
];
return $provider;
}
}