summaryrefslogtreecommitdiff
path: root/www/wiki/extensions/SemanticMediaWiki/tests/phpunit/Unit/Query/Parser/TermParserTest.php
diff options
context:
space:
mode:
Diffstat (limited to 'www/wiki/extensions/SemanticMediaWiki/tests/phpunit/Unit/Query/Parser/TermParserTest.php')
-rw-r--r--www/wiki/extensions/SemanticMediaWiki/tests/phpunit/Unit/Query/Parser/TermParserTest.php219
1 files changed, 219 insertions, 0 deletions
diff --git a/www/wiki/extensions/SemanticMediaWiki/tests/phpunit/Unit/Query/Parser/TermParserTest.php b/www/wiki/extensions/SemanticMediaWiki/tests/phpunit/Unit/Query/Parser/TermParserTest.php
new file mode 100644
index 00000000..e7e705c1
--- /dev/null
+++ b/www/wiki/extensions/SemanticMediaWiki/tests/phpunit/Unit/Query/Parser/TermParserTest.php
@@ -0,0 +1,219 @@
+<?php
+
+namespace SMW\Tests\Query\Parser;
+
+use SMW\Query\Parser\TermParser;
+
+/**
+ * @covers \SMW\Query\Parser\TermParser
+ * @group semantic-mediawiki
+ *
+ * @license GNU GPL v2+
+ * @since 3.0
+ *
+ * @author mwjames
+ */
+class TermParserTest extends \PHPUnit_Framework_TestCase {
+
+ public function testCanConstruct() {
+
+ $this->assertInstanceOf(
+ TermParser::class,
+ new TermParser()
+ );
+ }
+
+ /**
+ * @dataProvider termProvider
+ */
+ public function testTerm_parser( $term, $expected ) {
+
+ $instance = new TermParser();
+
+ $this->assertEquals(
+ $expected,
+ $instance->parse( $term )
+ );
+ }
+
+ /**
+ * @dataProvider term_prefixProvider
+ */
+ public function testTerm_prefix_parser( $term, $prefixes, $expected ) {
+
+ $instance = new TermParser( $prefixes );
+
+ $this->assertEquals(
+ $expected,
+ $instance->parse( $term )
+ );
+ }
+
+ public function termProvider() {
+
+ yield [
+ 'in:foo',
+ '[[in:foo]]'
+ ];
+
+ yield [
+ '[[in:foo]]',
+ '[[in:foo]]'
+ ];
+
+ yield [
+ 'in:foo || bar',
+ '[[in:foo]] || bar'
+ ];
+
+ yield [
+ 'in:foo && bar',
+ '[[in:foo]] && bar'
+ ];
+
+ yield [
+ 'in:foo || in:bar',
+ '[[in:foo]] || [[in:bar]]'
+ ];
+
+ yield [
+ 'in:foo && in:bar',
+ '[[in:foo]] && [[in:bar]]'
+ ];
+
+ yield [
+ 'in:foo bar in:bar ',
+ '[[in:foo bar]] [[in:bar]]'
+ ];
+
+ yield [
+ 'in:foo bar && in:bar',
+ '[[in:foo bar]] && [[in:bar]]'
+ ];
+
+ yield [
+ 'in:foo bar || in:bar ',
+ '[[in:foo bar]] || [[in:bar]]'
+ ];
+
+ yield [
+ '(in:foo bar && in:foo) || in:bar ',
+ '<q>[[in:foo bar]] && [[in:foo]]</q> || [[in:bar]]'
+ ];
+
+ yield [
+ 'in:foo bar in:bar phrase:foobar 123 && in:oooo',
+ '[[in:foo bar]] [[in:bar]] [[phrase:foobar 123]] && [[in:oooo]]'
+ ];
+
+ yield [
+ '<q>in:foo bar && in:bar</q> OR phrase:foo bar foobar',
+ '<q>[[in:foo bar]] && [[in:bar]]</q> OR [[phrase:foo bar foobar]]'
+ ];
+
+ yield [
+ '(in:foo && in:bar)||in:foobar',
+ '<q>[[in:foo]] && [[in:bar]]</q> || [[in:foobar]]'
+ ];
+
+ yield [
+ '(in:foo && (in:bar AND not:ooo)) || in:foobar',
+ '<q>[[in:foo]] && <q>[[in:bar]] AND [[not:ooo]]</q></q> || [[in:foobar]]'
+ ];
+
+ yield [
+ '<q>in:foo bar && in:bar</q> OR [[Has number::123]]',
+ '<q>[[in:foo bar]] && [[in:bar]]</q> OR [[Has number::123]]'
+ ];
+
+ yield [
+ 'in:foo [[Has foo::bar]]',
+ '[[in:foo]] [[Has foo::bar]]'
+ ];
+
+ yield [
+ 'in:foo [[Has foo::bar]] (in:foo bar)',
+ '[[in:foo]] [[Has foo::bar]] <q>[[in:foo bar]]</q>'
+ ];
+
+ yield [
+ 'category:foo',
+ '[[category:foo]]'
+ ];
+
+ yield [
+ 'foo',
+ 'foo'
+ ];
+
+ yield [
+ '<q>[[Bar property::Foobar]]</q> Foo',
+ '<q>[[Bar property::Foobar]]</q> Foo'
+ ];
+
+ yield [
+ 'in:foo [[Has foo::bar]] (in:(foo bar && fin))',
+ '[[in:foo]] [[Has foo::bar]] <q>[[in:foo bar]] && [[in:fin]]</q>'
+ ];
+
+ yield [
+ 'has:foo has:bar',
+ '[[foo::+]] [[bar::+]]'
+ ];
+
+ yield [
+ 'has:(foo && bar)',
+ '[[foo::+]] && [[bar::+]]'
+ ];
+
+ yield [
+ 'in:(foo && bar) in:(ham && cheese)',
+ '[[in:foo]] && [[in:bar]] [[in:ham]] && [[in:cheese]]'
+ ];
+
+ yield [
+ 'has:(foo && bar) in:(ham && cheese)',
+ '[[foo::+]] && [[bar::+]] [[in:ham]] && [[in:cheese]]'
+ ];
+ }
+
+ public function term_prefixProvider() {
+
+ yield [
+ 'in:foo || not:bar',
+ [ 'keyw' => [ 'Has keyword', 'Keyw' ] ],
+ '[[in:foo]] || [[not:bar]]'
+ ];
+
+ yield [
+ 'in:foo || keyword:foo bar || keyw:foo bar',
+ [ 'keyw' => [ 'Has keyword', 'Keyw' ] ],
+ '[[in:foo]] || keyword:foo bar]] || <q>[[Has keyword::foo bar]] || [[Keyw::foo bar]]</q>'
+ ];
+
+ yield [
+ 'in:foo keyw:foo bar',
+ [ 'keyw' => [ 'Has keyword', 'Keyw' ] ],
+ '[[in:foo]] <q>[[Has keyword::foo bar]] || [[Keyw::foo bar]]</q>'
+ ];
+
+ yield [
+ 'in:foo keyw:foo bar [[Foo::bar]]',
+ [ 'keyw' => [ 'Has keyword', 'Keyw' ] ],
+ '[[in:foo]] <q>[[Has keyword::foo bar]] || [[Keyw::foo bar]]</q> [[Foo::bar]]'
+ ];
+
+ yield [
+ 'in:foo (a:foo bar || not:bar)',
+ [ 'a' => [ 'Has keyword', 'Keyw' ] ],
+ '[[in:foo]] <q><q>[[Has keyword::foo bar]] || [[Keyw::foo bar]]</q> || [[not:bar]]</q>'
+ ];
+
+ yield [
+ 'in:foo',
+ [ 'in' => [ 'a', 'b' ] ],
+ '[[in:foo]]'
+ ];
+ }
+
+}