Commit 091592f7 authored by Karl's avatar Karl

Neue Tests für Methoden der MetaGer.php

parent 4a64dee8
...@@ -69,7 +69,7 @@ class MetaGer ...@@ -69,7 +69,7 @@ class MetaGer
foreach (scandir($dir) as $filename) { foreach (scandir($dir) as $filename) {
$path = $dir . $filename; $path = $dir . $filename;
if (is_file($path)) { if (is_file($path)) {
require $path; require_once $path;
} }
} }
...@@ -608,7 +608,7 @@ class MetaGer ...@@ -608,7 +608,7 @@ class MetaGer
# Findet für alle Foki die enthaltenen Sumas # Findet für alle Foki die enthaltenen Sumas
$foki = []; # [fokus][suma] => [suma] $foki = []; # [fokus][suma] => [suma]
foreach ($sumas as $suma) { foreach ($sumas as $suma) {
if ((!isset($suma['disabled']) || $suma['disabled'] === "") && (!isset($suma['userSelectable']) || $suma['userSelectable']->__toString() === "1")) { if ((!$this->sumaIsDisabled($suma)) && (!isset($suma['userSelectable']) || $suma['userSelectable']->__toString() === "1")) {
if (isset($suma['type'])) { if (isset($suma['type'])) {
# Wenn foki für diese Suchmaschine angegeben sind # Wenn foki für diese Suchmaschine angegeben sind
$focuses = explode(",", $suma['type']->__toString()); $focuses = explode(",", $suma['type']->__toString());
...@@ -683,6 +683,7 @@ class MetaGer ...@@ -683,6 +683,7 @@ class MetaGer
return false; return false;
} }
} }
return false;
} }
public function waitForResults($enginesToLoad, $overtureEnabled, $canBreak) public function waitForResults($enginesToLoad, $overtureEnabled, $canBreak)
...@@ -869,22 +870,21 @@ class MetaGer ...@@ -869,22 +870,21 @@ class MetaGer
public function checkSpecialSearches(Request $request) public function checkSpecialSearches(Request $request)
{ {
$query = $this->q;
if ($request->has('site')) { if ($request->has('site')) {
$site = $request->input('site'); $site = $request->input('site');
} else { } else {
$site = ""; $site = "";
} }
$this->searchCheckSitesearch($query, $site); $this->searchCheckSitesearch($site);
$this->searchCheckHostBlacklist($query); $this->searchCheckHostBlacklist();
$this->searchCheckDomainBlacklist($query); $this->searchCheckDomainBlacklist();
$this->searchCheckStopwords($query); $this->searchCheckStopwords();
$this->searchCheckPhrase($query); $this->searchCheckPhrase();
} }
public function searchCheckSitesearch($query, $site) public function searchCheckSitesearch($site)
{ {
if (preg_match("/(.*)\bsite:(\S+)(.*)/si", $query, $match)) { if (preg_match("/(.*)\bsite:(\S+)(.*)/si", $this->q, $match)) {
$this->site = $match[2]; $this->site = $match[2];
$this->q = $match[1] . $match[3]; $this->q = $match[1] . $match[3];
} }
...@@ -893,12 +893,11 @@ class MetaGer ...@@ -893,12 +893,11 @@ class MetaGer
} }
} }
public function searchCheckHostBlacklist($query) public function searchCheckHostBlacklist()
{ {
while (preg_match("/(.*)(^|\s)-host:(\S+)(.*)/si", $query, $match)) { while (preg_match("/(.*)(^|\s)-host:(\S+)(.*)/si", $this->q, $match)) {
$this->hostBlacklist[] = $match[3]; $this->hostBlacklist[] = $match[3];
$query = $match[1] . $match[4]; $this->q = $match[1] . $match[4];
$this->q = $query;
} }
if (sizeof($this->hostBlacklist) > 0) { if (sizeof($this->hostBlacklist) > 0) {
$hostString = ""; $hostString = "";
...@@ -910,12 +909,11 @@ class MetaGer ...@@ -910,12 +909,11 @@ class MetaGer
} }
} }
public function searchCheckDomainBlacklist($query) public function searchCheckDomainBlacklist()
{ {
while (preg_match("/(.*)(^|\s)-domain:(\S+)(.*)/si", $query, $match)) { while (preg_match("/(.*)(^|\s)-domain:(\S+)(.*)/si", $this->q, $match)) {
$this->domainBlacklist[] = $match[3]; $this->domainBlacklist[] = $match[3];
$query = $match[1] . $match[4]; $this->q = $match[1] . $match[4];
$this->q = $query;
} }
if (sizeof($this->domainBlacklist) > 0) { if (sizeof($this->domainBlacklist) > 0) {
$domainString = ""; $domainString = "";
...@@ -927,12 +925,11 @@ class MetaGer ...@@ -927,12 +925,11 @@ class MetaGer
} }
} }
public function searchCheckStopwords($query) public function searchCheckStopwords()
{ {
while (preg_match("/(.*)(^|\s)-(\S+)(.*)/si", $query, $match)) { while (preg_match("/(.*)(^|\s)-(\S+)(.*)/si", $this->q, $match)) {
$this->stopWords[] = $match[3]; $this->stopWords[] = $match[3];
$query = $match[1] . $match[4]; $this->q = $match[1] . $match[4];
$this->q = $query;
} }
if (sizeof($this->stopWords) > 0) { if (sizeof($this->stopWords) > 0) {
$stopwordsString = ""; $stopwordsString = "";
...@@ -944,10 +941,10 @@ class MetaGer ...@@ -944,10 +941,10 @@ class MetaGer
} }
} }
public function searchCheckPhrase($query) public function searchCheckPhrase()
{ {
$p = ""; $p = "";
$tmp = $query; $tmp = $this->q;
while (preg_match("/(.*)\"(.+)\"(.*)/si", $tmp, $match)) { while (preg_match("/(.*)\"(.+)\"(.*)/si", $tmp, $match)) {
$tmp = $match[1] . $match[3]; $tmp = $match[1] . $match[3];
$this->phrases[] = strtolower($match[2]); $this->phrases[] = strtolower($match[2]);
...@@ -1083,7 +1080,6 @@ class MetaGer ...@@ -1083,7 +1080,6 @@ class MetaGer
return false; return false;
} else { } else {
$this->addedLinks[$hash] = 1; $this->addedLinks[$hash] = 1;
return true; return true;
} }
} }
......
<?php <?php
return [ return [
'results.failed' => 'Leider konnten wir zu Ihrer Sucheingabe keine passenden Ergebnisse finden.', 'results.failed' => 'Leider konnten wir zu Ihrer Sucheingabe keine passenden Ergebnisse finden.',
'settings.noneSelected' => 'Achtung: Sie haben in ihren Einstellungen keine Suchmaschine ausgewählt.', 'settings.noneSelected' => 'Achtung: Sie haben in ihren Einstellungen keine Suchmaschine ausgewählt.',
'engines.noParser' => 'Beim Abfragen von :engine ist ein Fehler aufgetreten. Bitte benachrichtigen Sie uns unter: <a href="mailto:office@suma-ev.de?subject=Fehlender Parser: :engine">office@suma-ev.de</a>', 'engines.noParser' => 'Beim Abfragen von :engine ist ein Fehler aufgetreten. Bitte benachrichtigen Sie uns unter: <a href="mailto:office@suma-ev.de?subject=Fehlender Parser: :engine">office@suma-ev.de</a>',
'formdata.cantLoad' => 'Suma-File konnte nicht gefunden werden', 'formdata.cantLoad' => 'Suma-File konnte nicht gefunden werden',
'formdata.noSearch' => 'Achtung: Sie haben keinen Suchbegriff eingegeben. Sie können ihre Suchbegriffe oben eingeben und es erneut versuchen.', 'formdata.noSearch' => 'Achtung: Sie haben keinen Suchbegriff eingegeben. Sie können ihre Suchbegriffe oben eingeben und es erneut versuchen.',
'formdata.dartEurope' => 'Hinweis: Sie haben Dart-Europe aktiviert. Die Suche kann deshalb länger dauern und die maximale Suchzeit wurde auf 10 Sekunden hochgesetzt.', 'formdata.dartEurope' => 'Hinweis: Sie haben Dart-Europe aktiviert. Die Suche kann deshalb länger dauern und die maximale Suchzeit wurde auf 10 Sekunden hochgesetzt.',
'formdata.hostBlacklist' => 'Ergebnisse von folgenden Hosts werden nicht angezeigt: ":hostString"', 'formdata.hostBlacklist' => 'Ergebnisse von folgenden Hosts werden nicht angezeigt: ":host"',
'formdata.hostBlacklist' => 'Ergebnisse von folgenden Domains werden nicht angezeigt: ":domain"', 'formdata.domainBlacklist' => 'Ergebnisse von folgenden Domains werden nicht angezeigt: ":domain"',
'formdata.stopwords' => 'Sie machen eine Ausschlusssuche. Ergebnisse mit folgenden Wörtern werden nicht angezeigt: ":stopwords"', 'formdata.stopwords' => 'Sie machen eine Ausschlusssuche. Ergebnisse mit folgenden Wörtern werden nicht angezeigt: ":stopwords"',
'formdata.phrase' => 'Sie führen eine Phrasensuche durch: :phrase', 'formdata.phrase' => 'Sie führen eine Phrasensuche durch: :phrase',
'sitesearch.failed' => 'Sie wollten eine Sitesearch auf :site durchführen. Leider unterstützen die eingestellten Suchmaschinen diese nicht. Sie können <a href=":searchLink">hier</a> die Sitesearch im Web-Fokus durchführen. Es werden ihnen Ergebnisse ohne Sitesearch angezeigt.', 'sitesearch.failed' => 'Sie wollten eine Sitesearch auf :site durchführen. Leider unterstützen die eingestellten Suchmaschinen diese nicht. Sie können <a href=":searchLink">hier</a> die Sitesearch im Web-Fokus durchführen. Es werden ihnen Ergebnisse ohne Sitesearch angezeigt.',
'sitesearch.success' => 'Sie führen eine Sitesearch durch. Es werden nur Ergebnisse von der Seite: <a href="http://:site" target="_blank">":site"</a> angezeigt.', 'sitesearch.success' => 'Sie führen eine Sitesearch durch. Es werden nur Ergebnisse von der Seite: <a href="http://:site" target="_blank">":site"</a> angezeigt.',
]; ];
...@@ -12,16 +12,20 @@ class MetaGerPhpTest extends TestCase ...@@ -12,16 +12,20 @@ class MetaGerPhpTest extends TestCase
*/ */
public function test() public function test()
{ {
$metager = new MetaGer(); $this->fullRunTest();
$request = $this->createDummyRequest(); $this->specialSearchTest();
$this->fullRunTest($metager, $request); $this->createSearchEnginesTest();
$this->specialSearchTest($metager); $this->linkGeneratorTest();
$this->createSearchEnginesTest($metager); #$this->getHostCountTest();
$this->linkGeneratorTest($metager); $this->addLinkTest();
$this->adjustFocusTest();
$this->checkCanNotSitesearchTest();
} }
public function fullRunTest($metager, $request) public function fullRunTest()
{ {
$metager = new MetaGer();
$request = $this->createDummyRequest();
$metager->parseFormData($request); $metager->parseFormData($request);
$metager->checkSpecialSearches($request); $metager->checkSpecialSearches($request);
$metager->createSearchEngines($request); $metager->createSearchEngines($request);
...@@ -47,7 +51,7 @@ class MetaGerPhpTest extends TestCase ...@@ -47,7 +51,7 @@ class MetaGerPhpTest extends TestCase
#new Request(array $query = array(), array $request = array(), array $attributes = array(), array $cookies = array(), array $files = array(), array $server = array(), $content = null) #new Request(array $query = array(), array $request = array(), array $attributes = array(), array $cookies = array(), array $files = array(), array $server = array(), $content = null)
$query = []; $query = [];
$query["eingabe"] = "garten"; $query["eingabe"] = 'suchwort -blackword -host:blackhost -domain:blackdomain site:wantsite "i want phrase"';
$query["focus"] = "angepasst"; $query["focus"] = "angepasst";
$query["encoding"] = "utf8"; $query["encoding"] = "utf8";
$query["lang"] = "all"; $query["lang"] = "all";
...@@ -60,27 +64,35 @@ class MetaGerPhpTest extends TestCase ...@@ -60,27 +64,35 @@ class MetaGerPhpTest extends TestCase
return new Request($query); return new Request($query);
} }
public function specialSearchTest($metager) public function specialSearchTest()
{
$metager = new MetaGer();
$request = new Request(['eingabe' => 'suchwort -blackword -host:blackhost -domain:blackdomain site:wantsite "i want phrase"']);
$metager->parseFormData($request);
$metager->checkSpecialSearches($request);
$this->assertEquals("wantsite", $metager->getSite());
$this->assertEquals("blackhost", $metager->getUserHostBlacklist()[0]);
$this->assertEquals("blackdomain", $metager->getUserDomainBlacklist()[0]);
$this->assertEquals("blackword", $metager->getStopWords()[0]);
$this->assertEquals("i want phrase", $metager->getPhrases()[0]);
}
public function createSearchEnginesTest()
{ {
$metager->searchCheckSitesearch("hund katze site:wolf.de", ""); $this->specialSumaTest();
$this->assertEquals("wolf.de", $metager->getSite());
$metager->searchCheckHostBlacklist("hund katze -host:wolf.de");
$this->assertEquals("wolf.de", $metager->getUserHostBlacklist()[0]);
$metager->searchCheckDomainBlacklist("hund katze -domain:wolf.de");
$this->assertEquals("wolf.de", $metager->getUserDomainBlacklist()[0]);
$metager->searchCheckStopwords("hund katze -wolf");
$this->assertEquals("wolf", $metager->getStopWords()[0]);
$metager->searchCheckPhrase('hund katze "wolf"');
$this->assertEquals("wolf", $metager->getPhrases()[0]);
} }
public function createSearchEnginesTest($metager) public function addLinkTest()
{ {
$this->specialSumaTest($metager); $metager = new MetaGer();
$link = "metager.de";
$this->assertTrue($metager->addLink($link));
$this->assertFalse($metager->addLink($link));
} }
public function specialSumaTest($metager) public function specialSumaTest()
{ {
$metager = new MetaGer();
$suma = new SimpleXMLElement("<suma></suma>"); $suma = new SimpleXMLElement("<suma></suma>");
$suma["name"] = "qualigo"; $suma["name"] = "qualigo";
$this->assertTrue($metager->sumaIsAdsuche($suma, false)); $this->assertTrue($metager->sumaIsAdsuche($suma, false));
...@@ -92,18 +104,58 @@ class MetaGerPhpTest extends TestCase ...@@ -92,18 +104,58 @@ class MetaGerPhpTest extends TestCase
$this->assertTrue($metager->sumaIsNotAdsuche($suma)); $this->assertTrue($metager->sumaIsNotAdsuche($suma));
} }
public function linkGeneratorTest($metager) public function linkGeneratorTest()
{ {
$this->callbackTester($metager, "generateSearchLink", ["bilder"], "http://localhost/meta/meta.ger3?eingabe=garten&focus=bilder&encoding=utf8&lang=all&time=1000&sprueche=on&resultCount=20&tab=on&onenewspage=on&out=results"); $metager = new Metager();
$this->callbackTester($metager, "generateQuicktipLink", [], "http://localhost/qt"); $request = new Request(['eingabe' => 'test']);
$this->callbackTester($metager, "generateSiteSearchLink", ["wolf.de"], "http://localhost/meta/meta.ger3?eingabe=garten+site%3Awolf.de&focus=web&encoding=utf8&lang=all&time=1000&sprueche=on&resultCount=20&tab=on&onenewspage=on"); $metager->parseFormData($request);
$this->callbackTester($metager, "generateRemovedHostLink", ["wolf.de"], "http://localhost/meta/meta.ger3?eingabe=garten+-host%3Awolf.de&focus=angepasst&encoding=utf8&lang=all&time=1000&sprueche=on&resultCount=20&tab=on&onenewspage=on"); $this->linkCallbackTester($metager, "generateSearchLink", ["news"],
$this->callbackTester($metager, "generateRemovedDomainLink", ["wolf.de"], "http://localhost/meta/meta.ger3?eingabe=garten+-domain%3Awolf.de&focus=angepasst&encoding=utf8&lang=all&time=1000&sprueche=on&resultCount=20&tab=on&onenewspage=on"); '/^.*?eingabe=test&focus=news&out=results$/');
$this->linkCallbackTester($metager, "generateQuicktipLink", [],
'/\/qt/');
$this->linkCallbackTester($metager, "generateSiteSearchLink", ["wolf.de"],
'/^.*?eingabe=test\+site%3Awolf.de&focus=web$/');
$this->linkCallbackTester($metager, "generateRemovedHostLink", ["wolf.de"],
'/^.*?eingabe=test\+-host%3Awolf.de$/');
$this->linkCallbackTester($metager, "generateRemovedDomainLink", ["wolf.de"],
'/^.*?eingabe=test\+-domain%3Awolf.de$/');
} }
public function callbackTester($metager, $funcName, $input, $expectedOutput) public function linkCallbackTester($metager, $funcName, $input, $expectedOutput)
{ {
$output = call_user_func_array(array($metager, $funcName), $input); $output = call_user_func_array(array($metager, $funcName), $input);
$this->assertEquals($expectedOutput, $output); $this->assertRegExp($expectedOutput, $output);
}
public function getHostCountTest()
{
$metager = new MetaGer();
$before = $metager->getHostCount("host.de");
$metager->addHostCount("host.de");
$after = $metager->getHostCount("host.de");
$this->assertEquals($before + 1, $after);
$before = $after;
$metager->addHostCount("host.de");
$after = $metager->getHostCount("host.de");
$this->assertEquals($before + 1, $after);
}
public function adjustFocusTest()
{
$metager = new MetaGer();
$request = new Request(["focus" => "web"]);
$metager->parseFormData($request);
$this->assertEquals("web", $metager->getFokus());
$sumas = simplexml_load_file("tests/testSumas.xml")->xpath("suma"); # Eine spezielle test sumas.xml
$enabledSearchengines = $sumas;
$metager->adjustFocus($sumas, $enabledSearchengines);
$this->assertEquals("bilder", $metager->getFokus());
}
public function checkCanNotSitesearchTest()
{
$metager = new MetaGer();
$enabledSearchengines = simplexml_load_file("tests/testSumas.xml")->xpath("suma"); # Eine spezielle test sumas.xml
$this->assertFalse($metager->checkCanNotSitesearch($enabledSearchengines));
} }
} }
<?xml version="1.0" encoding="UTF-8"?>
<sumas>
<suma
name="suchmaschine"
host="www.suchmaschine.de"
skript="/suche/"
formData="sprache=de&amp;sortieren=true&amp;&amp;queue=&lt;&lt;QUERY&gt;&gt;"
package="suchmaschine"
displayName="Meine Suchmaschine"
homepage="www.suchmaschine.de/welcome"
port="443"
inputEncoding="Latin1"
userSelectable="1"
type="bilder"
engineBoost="1.2"
additionalHeaders="$#!#$"
disabled="0"
hasSiteSearch="1"
cacheDuration="60"
></suma>
</sumas>
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment