%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /www/varak.net/wiki.varak.net/extensions/CirrusSearch/tests/unit/Search/
Upload File :
Create Path :
Current File : /www/varak.net/wiki.varak.net/extensions/CirrusSearch/tests/unit/Search/EscaperTest.php

<?php

namespace CirrusSearch\Search;

use PHPUnit_Framework_TestCase;

/**
 * Test escaping search strings.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License along
 * with this program; if not, write to the Free Software Foundation, Inc.,
 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 * http://www.gnu.org/copyleft/gpl.html
 */
class EscaperTest extends PHPUnit_Framework_TestCase {

	/**
	 * @dataProvider fuzzyEscapeTestCases
	 */
	public function testFuzzyEscape( $input, $expected, $isFuzzy ) {
		$escaper = new Escaper( 'unittest' );
		$actual = $escaper->fixupWholeQueryString( $input );
		$this->assertEquals( [ $expected, $isFuzzy], $actual );
	}

	public static function fuzzyEscapeTestCases() {
		return [
			'Default fuzziness is allowed' => [ 'fuzzy~', 'fuzzy~', true ],
			'No fuzziness is allowed' => [ 'fuzzy~0', 'fuzzy~0', true ],
			'One char edit distance is allowed' => [ 'fuzzy~1', 'fuzzy~1', true ],
			'Two char edit distance is allowed' => [ 'fuzzy~2', 'fuzzy~2', true ],
			'Three char edit distance is disallowed' => [ 'fuzzy~3', 'fuzzy\\~3', false ],
			'non-integer edit distance is disallowed' => [ 'fuzzy~1.0', 'fuzzy\\~1.0', false ],
			'Larger edit distances are disallowed' => [ 'fuzzy~10', 'fuzzy\\~10', false ],
			'Proximity searches are allowed' => [ '"fuzzy wuzzy"~10', '"fuzzy wuzzy"~10', false ],
			'Float fuzziness with leading 0 is disallowed' => [ 'fuzzy~0.8', 'fuzzy\\~0.8', false ],
			'Float fuzziness is disallowed' => [ 'fuzzy~.8', 'fuzzy\\~.8', false ],
		];
	}

	/**
	 * @dataProvider quoteEscapeTestCases
	 */
	public function testQuoteEscape( $language, $input, $expected ) {
		$escaper = new Escaper( $language );
		$actual = $escaper->escapeQuotes( $input );
		$this->assertEquals( $expected, $actual );
	}

	public static function quoteEscapeTestCases() {
		return [
			[ 'en', 'foo', 'foo' ],
			[ 'en', 'fo"o', 'fo"o' ],
			[ 'el', 'fo"o', 'fo"o' ],
			[ 'de', 'fo"o', 'fo"o' ],
			[ 'he', 'מלבי"ם', 'מלבי\"ם' ],
			[ 'he', '"מלבי"', '"מלבי"' ],
			[ 'he', '"מלבי"ם"', '"מלבי\"ם"' ],
			[ 'he', 'מַ"כִּית', 'מַ\"כִּית' ],
			[ 'he', 'הוּא שִׂרְטֵט עַיִ"ן', 'הוּא שִׂרְטֵט עַיִ\"ן' ],
			[ 'he', '"הוּא שִׂרְטֵט עַיִ"ן"', '"הוּא שִׂרְטֵט עַיִ\"ן"' ],
		];
	}

	/**
	 * @dataProvider balanceQuotesTestCases
	 */
	public function testBalanceQuotes( $input, $expected ) {
		$escaper = new Escaper( 'en' ); // Language doesn't matter here
		$actual = $escaper->balanceQuotes( $input);
		$this->assertEquals( $expected, $actual );
	}

	public static function balanceQuotesTestCases() {
		return [
			[ 'foo', 'foo' ],
			[ '"foo', '"foo"' ],
			[ '"foo" bar', '"foo" bar' ],
			[ '"foo" ba"r', '"foo" ba"r"' ],
			[ '"foo" ba\\"r', '"foo" ba\\"r' ],
			[ '"foo\\" ba\\"r', '"foo\\" ba\\"r"' ],
			[ '\\"foo\\" ba\\"r', '\\"foo\\" ba\\"r' ],
			[ '"fo\\o bar', '"fo\\o bar"' ],
		];
	}
}

Zerion Mini Shell 1.0