217 lines
4.1 KiB
PHP
217 lines
4.1 KiB
PHP
<?php
|
|
|
|
namespace SMW\Tests\DataValues;
|
|
|
|
use SMW\DataValues\ExternalFormatterUriValue;
|
|
|
|
/**
|
|
* @covers \SMW\DataValues\ExternalFormatterUriValue
|
|
* @group semantic-mediawiki
|
|
*
|
|
* @license GPL-2.0-or-later
|
|
* @since 2.5
|
|
*
|
|
* @author mwjames
|
|
*/
|
|
class ExternalFormatterUriValueTest extends \PHPUnit\Framework\TestCase {
|
|
|
|
public function testCanConstruct() {
|
|
$this->assertInstanceOf(
|
|
ExternalFormatterUriValue::class,
|
|
new ExternalFormatterUriValue()
|
|
);
|
|
}
|
|
|
|
public function testTryToParseUserValueOnInvalidUrlFormat() {
|
|
$instance = new ExternalFormatterUriValue();
|
|
$instance->setUserValue( 'foo' );
|
|
|
|
$this->assertNotEmpty(
|
|
$instance->getErrors()
|
|
);
|
|
}
|
|
|
|
public function testTryToParseUserValueOnMissingPlaceholder() {
|
|
$instance = new ExternalFormatterUriValue();
|
|
$instance->setUserValue( 'http://example.org' );
|
|
|
|
$this->assertNotEmpty(
|
|
$instance->getErrors()
|
|
);
|
|
}
|
|
|
|
public function testHasMultiSubstitute() {
|
|
$instance = new ExternalFormatterUriValue();
|
|
$instance->setUserValue( 'http://example.org/Foo?a=$1,$2' );
|
|
|
|
$this->assertTrue(
|
|
$instance->hasMultiSubstitute()
|
|
);
|
|
}
|
|
|
|
/**
|
|
* @dataProvider uriProvider
|
|
*/
|
|
public function testGetFormattedUri( $uri, $replacement, $expected ) {
|
|
$instance = new ExternalFormatterUriValue();
|
|
$instance->setUserValue( $uri );
|
|
|
|
$this->assertEquals(
|
|
$expected,
|
|
$instance->substituteAndFormatUri( $replacement )
|
|
);
|
|
}
|
|
|
|
/**
|
|
* @dataProvider uriWithParametersProvider
|
|
*/
|
|
public function testFormattedUriWithParameters( $uri, $replacement, $parameters, $expected ) {
|
|
$instance = new ExternalFormatterUriValue();
|
|
$instance->setUserValue( $uri );
|
|
|
|
$this->assertEquals(
|
|
$expected,
|
|
$instance->substituteAndFormatUri( $replacement, $parameters )
|
|
);
|
|
}
|
|
|
|
public function uriProvider() {
|
|
$provider[] = [
|
|
'http://example.org/$1',
|
|
'foo',
|
|
'http://example.org/foo'
|
|
];
|
|
|
|
$provider[] = [
|
|
'http://example.org/$1#Bar<>',
|
|
'foo',
|
|
'http://example.org/foo#Bar%3C%3E'
|
|
];
|
|
|
|
$provider[] = [
|
|
'urn:abc:names:def:foo:dtd:xml:$1',
|
|
'foo',
|
|
'urn:abc:names:def:foo:dtd:xml:foo'
|
|
];
|
|
|
|
// $provider[] = array(
|
|
// 'abc:$1',
|
|
// 'foo',
|
|
// 'http://example.org/foo'
|
|
// );
|
|
|
|
$provider[] = [
|
|
'ftp://ftp.is.co.za.example.org/rfc/$1.txt',
|
|
'foo',
|
|
'ftp://ftp.is.co.za.example.org/rfc/foo.txt'
|
|
];
|
|
|
|
$provider[] = [
|
|
'gopher://spinaltap.micro.umn.example.edu/00/Weather/California/$1',
|
|
'foo',
|
|
'gopher:spinaltap.micro.umn.example.edu/00/Weather/California/foo'
|
|
];
|
|
|
|
$provider[] = [
|
|
'http://www.math.uio.no.example.net/faq/compression-faq/$1',
|
|
'foo',
|
|
'http://www.math.uio.no.example.net/faq/compression-faq/foo'
|
|
];
|
|
|
|
$provider[] = [
|
|
'mailto:$1@ifi.unizh.example.gov',
|
|
'foo',
|
|
'mailto:foo@ifi.unizh.example.gov'
|
|
];
|
|
|
|
$provider[] = [
|
|
'news:comp.$1.www.servers.unix',
|
|
'foo',
|
|
'news:comp.foo.www.servers.unix'
|
|
];
|
|
|
|
$provider[] = [
|
|
'telnet://melvyl.ucop.example.edu/$1',
|
|
'foo',
|
|
'telnet:melvyl.ucop.example.edu/foo'
|
|
];
|
|
|
|
$provider[] = [
|
|
'ldap://[2001:db8::7]/c=$1?objectClass?one',
|
|
'foo',
|
|
'ldap:%5B2001:db8::7%5D/c=foo?objectClass?one'
|
|
];
|
|
|
|
$provider[] = [
|
|
'mailto:$1.Doe@example.com',
|
|
'foo',
|
|
'mailto:foo.Doe@example.com'
|
|
];
|
|
|
|
$provider[] = [
|
|
'tel:+1-816-555-1212',
|
|
'foo',
|
|
''
|
|
];
|
|
|
|
$provider[] = [
|
|
'telnet://192.0.2.16:80/$1',
|
|
'foo',
|
|
'telnet:192.0.2.16:80/foo'
|
|
];
|
|
|
|
$provider[] = [
|
|
'urn:oasis:names:specification:docbook:dtd:xml:$1',
|
|
'foo',
|
|
'urn:oasis:names:specification:docbook:dtd:xml:foo'
|
|
];
|
|
|
|
// https://phabricator.wikimedia.org/T160281
|
|
$provider[] = [
|
|
'http://foo/bar/$1',
|
|
'W%D6LLEKLA01',
|
|
'http://foo/bar/W%D6LLEKLA01'
|
|
];
|
|
|
|
// #3386
|
|
$provider[] = [
|
|
'http://foo/bar/$1',
|
|
'A/B/C',
|
|
'http://foo/bar/A/B/C'
|
|
];
|
|
|
|
// #...
|
|
$provider[] = [
|
|
'http://foo/bar/$1',
|
|
'A b C',
|
|
'http://foo/bar/A_b_C'
|
|
];
|
|
|
|
return $provider;
|
|
}
|
|
|
|
public function uriWithParametersProvider() {
|
|
yield [
|
|
'http://example.org/$1',
|
|
'foo',
|
|
[],
|
|
'http://example.org/foo'
|
|
];
|
|
|
|
yield [
|
|
'http://example.org/$1&id=$2',
|
|
'foo',
|
|
[ 1001 ],
|
|
'http://example.org/foo&id=1001'
|
|
];
|
|
|
|
yield [
|
|
'http://example.org/$1&id=$2',
|
|
'foo',
|
|
[ "a%2Cb" ],
|
|
'http://example.org/foo&id=a,b'
|
|
];
|
|
}
|
|
|
|
}
|