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 ',
'[[in:foo bar]] && [[in:foo]]
|| [[in:bar]]'
];
yield [
'in:foo bar in:bar phrase:foobar 123 && in:oooo',
'[[in:foo bar]] [[in:bar]] [[phrase:foobar 123]] && [[in:oooo]]'
];
yield [
'in:foo bar && in:bar
OR phrase:foo bar foobar',
'[[in:foo bar]] && [[in:bar]]
OR [[phrase:foo bar foobar]]'
];
yield [
'(in:foo && in:bar)||in:foobar',
'[[in:foo]] && [[in:bar]]
|| [[in:foobar]]'
];
yield [
'(in:foo && (in:bar AND not:ooo)) || in:foobar',
'[[in:foo]] && [[in:bar]] AND [[not:ooo]]
|| [[in:foobar]]'
];
yield [
'in:foo bar && in:bar
OR [[Has number::123]]',
'[[in:foo bar]] && [[in:bar]]
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]] [[in:foo bar]]
'
];
yield [
'category:foo',
'[[category:foo]]'
];
yield [
'foo',
'foo'
];
yield [
'[[Bar property::Foobar]]
Foo',
'[[Bar property::Foobar]]
Foo'
];
yield [
'in:foo [[Has foo::bar]] (in:(foo bar && fin))',
'[[in:foo]] [[Has foo::bar]] [[in:foo bar]] && [[in:fin]]
'
];
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]] || [[Has keyword::foo bar]] || [[Keyw::foo bar]]
'
];
yield [
'in:foo keyw:foo bar',
[ 'keyw' => [ 'Has keyword', 'Keyw' ] ],
'[[in:foo]] [[Has keyword::foo bar]] || [[Keyw::foo bar]]
'
];
yield [
'in:foo keyw:foo bar [[Foo::bar]]',
[ 'keyw' => [ 'Has keyword', 'Keyw' ] ],
'[[in:foo]] [[Has keyword::foo bar]] || [[Keyw::foo bar]]
[[Foo::bar]]'
];
yield [
'in:foo (a:foo bar || not:bar)',
[ 'a' => [ 'Has keyword', 'Keyw' ] ],
'[[in:foo]] [[Has keyword::foo bar]] || [[Keyw::foo bar]]
|| [[not:bar]]
'
];
yield [
'in:foo',
[ 'in' => [ 'a', 'b' ] ],
'[[in:foo]]'
];
}
}