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]]' ]; } }