gplx/mediawiki/extensions/SemanticMediaWiki/tests/phpunit/ParserFunctions/RecurringEventsParserFuncti...

428 lines
9.0 KiB
PHP

<?php
namespace SMW\Tests\ParserFunctions;
use MediaWiki\MediaWikiServices;
use MediaWiki\Parser\ParserOutput;
use SMW\MessageFormatter;
use SMW\ParserData;
use SMW\ParserFunctions\RecurringEventsParserFunction;
use SMW\ParserParameterProcessor;
use SMW\RecurringEvents;
use SMW\Subobject;
/**
* @covers \SMW\ParserFunctions\RecurringEventsParserFunction
* @group semantic-mediawiki
*
* @license GPL-2.0-or-later
* @since 1.9
*
* @author mwjames
*/
class RecurringEventsParserFunctionTest extends \PHPUnit\Framework\TestCase {
public function testCanConstruct() {
$subobject = new Subobject( MediaWikiServices::getInstance()->getTitleFactory()->newFromText( __METHOD__ ) );
$parserData = $this->getMockBuilder( '\SMW\ParserData' )
->disableOriginalConstructor()
->getMock();
$messageFormatter = $this->getMockBuilder( '\SMW\MessageFormatter' )
->disableOriginalConstructor()
->getMock();
$this->assertInstanceOf(
RecurringEventsParserFunction::class,
new RecurringEventsParserFunction(
$parserData,
$subobject,
$messageFormatter,
new RecurringEvents()
)
);
}
/**
* @dataProvider recurringEventsDataProvider
*/
public function testParse( array $params, array $expected ) {
$recurringEvents = new RecurringEvents();
$recurringEvents->setDefaultNumRecurringEvents( 100 );
$recurringEvents->setMaxNumRecurringEvents( 100 );
$services = MediaWikiServices::getInstance();
$title = $services->getTitleFactory()->newFromText( __METHOD__ );
$languageFactory = $services->getLanguageFactory();
$instance = new RecurringEventsParserFunction(
new ParserData( $title, new ParserOutput() ),
new Subobject( $title ),
new MessageFormatter( $languageFactory->getLanguage( 'en' ) ),
$recurringEvents
);
$result = $instance->parse(
new ParserParameterProcessor( $params )
);
$this->assertTrue( $result !== '' ? $expected['errors'] : !$expected['errors'] );
$this->assertEquals(
$expected['parameters'],
$recurringEvents->getParameters()
);
}
public function recurringEventsDataProvider() {
$provider = [];
// #0
// {{#set_recurring_event:property=Has birthday
// |start=01 Feb 1970
// |has title= Birthday
// |unit=year
// |period=12
// |limit=3
// }}
$provider[] = [
[
'property=Has birthday',
'start=01 Feb 1970',
'has title=Birthday',
'unit=month',
'period=12',
'limit=3'
],
[
'errors' => false,
'dates' => [
'1 February 1970',
'1 February 1971',
'1 February 1972',
'1 February 1973'
],
'property' => [
'Has birthday',
'Has title'
],
'parameters' => [
'has title' => [ 'Birthday' ]
]
]
];
// #1
// {{#set_recurring_event:property=Has birthday
// |start=01 Feb 1972 02:00
// |has title=Test 12
// |unit=week
// |period=4
// |limit=3
// }}
$provider[] = [
[
'property=Has birthday',
'start=01 Feb 1972 02:00',
'has title=Test 2',
'unit=week',
'period=4',
'limit=3'
],
[
'errors' => false,
'dates' => [
'1 February 1972 02:00:00',
'29 February 1972 02:00:00',
'28 March 1972 02:00:00',
'25 April 1972 02:00:00'
],
'property' => [
'Has birthday',
'Has title'
],
'parameters' => [
'has title' => [ 'Test 2' ]
]
]
];
// #2
// {{#set_recurring_event:property=Has date
// |start=January 4, 2010
// |unit=week
// |period=1
// |limit=4
// |include=March 16, 2010;March 23, 2010
// |exclude=January 18, 2010;January 25, 2010
// }}
$provider[] = [
[
'property=Has date',
'start=January 4, 2010',
'unit=week',
'period=1',
'limit=4',
'include=March 16, 2010;March 23, 2010',
'exclude=January 18, 2010;January 25, 2010'
],
[
'errors' => false,
'dates' => [
'4 January 2010',
'11 January 2010',
'1 February 2010',
'March 16, 2010',
'March 23, 2010'
],
'property' => 'Has date',
'parameters' => []
]
];
// #3
// {{#set_recurring_event:property=Has date
// |start=January 4, 2010
// |unit=week
// |period=1
// |limit=4
// |include=March 16, 2010;March 23, 2010|+sep=;
// |exclude=January 18, 2010;January 25, 2010|+sep=;
// }}
$provider[] = [
[
'property=Has date',
'start=January 4, 2010',
'unit=week',
'period=1',
'limit=4',
'include=March 16, 2010;March 23, 2010',
'+sep=;', 'exclude=January 18, 2010;January 25, 2010',
'+sep=;'
],
[
'errors' => false,
'dates' => [
'4 January 2010',
'11 January 2010',
'1 February 2010',
'March 16, 2010',
'March 23, 2010'
],
'property' => 'Has date',
'parameters' => []
]
];
// #4 Named page reference pointer
// {{#set_recurring_event:FooBar
// |property=Has birthday
// |start=January 4, 2010
// |unit=week
// |period=1
// |limit=4
// |include=March 16, 2010;March 23, 2010|+sep=;
// |exclude=January 18, 2010;January 25, 2010|+sep=;
// }}
$provider[] = [
[
'FooBar',
'property=Has birthday',
'start=January 4, 2010',
'unit=week',
'period=1',
'limit=4',
'include=March 16, 2010;March 23, 2010',
'+sep=;', 'exclude=January 18, 2010;January 25, 2010',
'+sep=;'
],
[
'errors' => false,
'dates' => [
'4 January 2010',
'11 January 2010',
'1 February 2010',
'March 16, 2010',
'March 23, 2010'
],
'property' => 'Has birthday',
'parameters' => []
]
];
// #5 Simulate first parameter starting being - raising an error
// {{#set_recurring_event:-
// property=Has date
// |start=January 4, 2010
// |unit=week
// |period=1
// |limit=4
// |include=March 16, 2010;March 23, 2010
// |exclude=January 18, 2010;January 25, 2010
// }}
$provider[] = [
[
'-',
'property=Has date',
'start=January 4, 2010',
'unit=week',
'period=1',
'limit=4',
'include=March 16, 2010;March 23, 2010',
'exclude=January 18, 2010;January 25, 2010'
],
[
'errors' => false,
'dates' => [],
'property' => '',
'parameters' => []
]
];
// #6 Simulate first parameter starting with - raising an error
// {{#set_recurring_event:-Foo
// property=Has date
// |start=January 4, 2010
// |unit=week
// |period=1
// |limit=4
// |include=March 16, 2010;March 23, 2010
// |exclude=January 18, 2010;January 25, 2010
// }}
$provider[] = [
[
'-Foo',
'property=Has date',
'start=January 4, 2010',
'unit=week',
'period=1',
'limit=4',
'include=March 16, 2010;March 23, 2010',
'exclude=January 18, 2010;January 25, 2010'
],
[
'errors' => true,
'dates' => [],
'property' => '',
'parameters' => []
]
];
// #7 Simulate first parameter starting with a underscore raising an error
// {{#set_recurring_event:_FooBar
// property=Has date
// |start=January 4, 2010
// |unit=week
// |period=1
// |limit=4
// |include=March 16, 2010;March 23, 2010
// |exclude=January 18, 2010;January 25, 2010
// }}
$provider[] = [
[
'_FooBar',
'property=Has date',
'start=January 4, 2010',
'unit=week',
'period=1',
'limit=4',
'include=March 16, 2010;March 23, 2010',
'exclude=January 18, 2010;January 25, 2010'
],
[
'errors' => true,
'dates' => [],
'property' => '',
'parameters' => []
]
];
// #8 Simulate start date has wrong type
// {{#set_recurring_event:property=Has date
// |start=???
// |unit=week
// |period=1
// |limit=4
// |include=March 16, 2010;March 23, 2010
// |exclude=January 18, 2010;January 25, 2010
// }}
$provider[] = [
[
'property=Has date',
'start=???',
'unit=week',
'period=1',
'limit=4',
'include=March 16, 2010;March 23, 2010',
'exclude=January 18, 2010;January 25, 2010'
],
[
'errors' => true,
'dates' => [],
'property' => '',
'parameters' => []
]
];
// #9 Simulate missing start date
// {{#set_recurring_event:property=Has date
// |start=
// |unit=week
// |period=1
// |limit=4
// |include=March 16, 2010;March 23, 2010
// |exclude=January 18, 2010;January 25, 2010
// }}
$provider[] = [
[
'property=Has date',
'start=',
'unit=week',
'period=1',
'limit=4',
'include=March 16, 2010;March 23, 2010',
'exclude=January 18, 2010;January 25, 2010'
],
[
'errors' => true,
'dates' => [],
'property' => '',
'parameters' => []
]
];
// #10 Simulate missing property
// {{#set_recurring_event:property=
// |start=January 4, 2010
// |unit=week
// |period=1
// |limit=4
// |include=March 16, 2010;March 23, 2010|+sep=;
// |exclude=January 18, 2010;January 25, 2010|+sep=;
// }}
$provider[] = [
[
'property=',
'start=January 4, 2010',
'unit=week', 'period=1',
'limit=4',
'include=March 16, 2010;March 23, 2010',
'+sep=;',
'exclude=January 18, 2010;January 25, 2010',
'+sep=;'
],
[
'errors' => true,
'dates' => [],
'property' => '',
'parameters' => []
]
];
return $provider;
}
}