Commit d1564bfd authored by Dominik Hebeler's avatar Dominik Hebeler

Implemented some first basic tests to configure the testing stage

parent 603e62d6
......@@ -9,6 +9,7 @@
"license": "MIT",
"require": {
"php": "^7.1.3",
"facebook/webdriver": "^1.6",
"fideloper/proxy": "^4.0",
"globalcitizen/php-iban": "^2.6",
"jenssegers/agent": "^2.6",
......@@ -65,4 +66,4 @@
"@php artisan key:generate --ansi"
]
}
}
\ No newline at end of file
}
<?php
namespace Tests;
use Illuminate\Contracts\Console\Kernel;
trait CreatesApplication
{
/**
* Creates the application.
*
* @return \Illuminate\Foundation\Application
*/
public function createApplication()
{
$app = require __DIR__ . '/../bootstrap/app.php';
$app->make(Kernel::class)->bootstrap();
return $app;
}
}
<?php
namespace Tests\Feature;
use Facebook\WebDriver\Remote\RemoteWebDriver;
use Facebook\WebDriver\WebDriverBy;
use Facebook\WebDriver\WebDriverExpectedCondition;
use Tests\TestCase;
class StaticPagesTest extends TestCase
{
private $caps = array(
"browser" => "Firefox",
"browser_version" => "67.0 beta",
"browserstack.local" => "true",
"os" => "Windows",
"os_version" => "10",
"resolution" => "1920x1080",
);
private $webdriver;
private $mgServer = "http://localhost";
/**
* A basic feature test example.
*
* @return void
*/
public function testExample()
{
try {
$this->webdriver = RemoteWebDriver::create(
getenv("WEBDRIVER_URL"),
$this->caps
);
$this->startPageTest();
$this->navigationMenuTest();
} finally {
$this->webdriver->quit();
}
}
private function startPageTest()
{
$this->webdriver->get("http://localhost");
# Test for Page Title
$this->assertEquals($this->webdriver->getTitle(), "MetaGer - Mehr als eine Suchmaschine");
# Test for Partner Links
$elements = $this->webdriver->findElements(WebDriverBy::cssSelector("#s .sr > a"));
$this->assertCount(2, $elements);
}
/**
* Tests if the Navigation menu expands on click
* Checks the status code of every link in it
*/
private function navigationMenuTest()
{
$this->webdriver->get("http://localhost");
// Check if the Navigation menu expands on click
$sidebarToggle = $this->webdriver->findElement(WebDriverBy::cssSelector("label[for=sidebarToggle]"));
$sidebarToggle->click();
$this->webdriver->wait(5, 500)->until(
WebDriverExpectedCondition::visibilityOfElementLocated(WebDriverBy::cssSelector(".sidebar > a.sidebar-logo"))
);
// Navigationbar is working
// Let's test if the Links are reachable
$elements = $this->webdriver->findElements(WebdriverBy::cssSelector(".sidebar > .sidebar-list a"));
$this->assertIsArray($elements);
$this->assertGreaterThan(0, sizeof($elements));
foreach ($elements as $element) {
$link = $element->getAttribute("href");
$ch = curl_init($link);
$httpcode = 0;
try {
curl_setopt($ch, CURLOPT_HEADER, true); // we want headers
//curl_setopt($ch, CURLOPT_NOBODY, true); // we don't need body
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
curl_setopt($ch, CURLOPT_MAXREDIRS, 10);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_exec($ch);
$httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
} finally {
curl_close($ch);
}
$this->assertTrue($httpcode >= 200 && $httpcode < 400, "Status Code (" . $httpcode . ") of " . $link . " doesn't match!");
}
// Check if the Navigation menu hides on click
$sidebarToggle->click();
$this->webdriver->wait(5, 500)->until(
WebDriverExpectedCondition::invisibilityOfElementLocated(WebDriverBy::cssSelector(".sidebar > a.sidebar-logo"))
);
}
}
<?php
use App\MetaGer;
use App\models\parserSkripte\RlvProduct;
use Illuminate\Http\Request;
class MetaGerPhpTest extends TestCase
{
// Die Testfunktion die PHP Unit aufruft
// Ruft alle anderen Untertests auf
public function test()
{
$this->fullRunTest();
$this->specialSearchTest();
$this->specialSumaTest();
$this->linkGeneratorTest();
$this->getHostCountTest();
$this->addLinkTest();
$this->adjustFocusTest();
$this->checkCanNotSitesearchTest();
$this->isBildersucheTest();
$this->loadMiniSucherTest();
$this->getImageProxyLinkTest();
$this->showQuicktipsTest();
$this->popAdTest();
$this->productsTest();
}
// Führt alle Schritte einer normalen MetaGer Suche durch
// Es werden keine bestimmten Werte erwartet, nur dass das Programm nicht abstürzt
public function fullRunTest()
{
$metager = new MetaGer();
$request = $this->createDummyRequest();
$metager->parseFormData($request);
$metager->checkSpecialSearches($request);
$metager->createSearchEngines($request);
$metager->rankAll();
$metager->prepareResults();
$metager->createView();
}
// Testet das erkennen von Spezialsuchen in verschiedenen Sucheingaben
public function specialSearchTest()
{
$metager = $this->createSpecialSearchMetager('suchwort -blackword -site:blackhost -site:*.blackdomain site:wantsite "i want phrase"');
$this->assertEquals("wantsite", $metager->getSite());
$this->assertContains("blackhost", $metager->getUserHostBlacklist());
$this->assertContains("blackdomain", $metager->getUserDomainBlacklist());
$this->assertContains("blackword", $metager->getStopWords());
$this->assertContains("i want phrase", $metager->getPhrases());
$metager = $this->createSpecialSearchMetager('site:peter:test -blackword-test -site:blackhost-test.de.nz/test ich suche nach -site:blackhost:blackhost2.cote/t?p=5 "peter ist obst-garten und -bauern"');
$this->assertEquals("peter:test", $metager->getSite());
$this->assertContains("blackhost:blackhost2.cote/t?p=5", $metager->getUserHostBlacklist());
$this->assertContains("blackhost-test.de.nz/test", $metager->getUserHostBlacklist());
$this->assertContains("blackword-test", $metager->getStopWords());
$this->assertNotContains("bauern", $metager->getStopWords());
$this->assertContains("peter ist obst-garten und -bauern", $metager->getPhrases());
$metager = $this->createSpecialSearchMetager('-site:-site:*.test');
$this->assertContains("-site:*.test", $metager->getUserHostBlacklist());
$metager = $this->createSpecialSearchMetager('"-site:-site:*.test"');
$this->assertContains("-site:-site:*.test", $metager->getPhrases());
$metager = $this->createSpecialSearchMetager('site:wikipedia.de apfel site:test.de tomate');
$this->assertEquals("apfel tomate", $metager->getQ());
$this->assertEquals("test.de", $metager->getSite());
$metager = $this->createSpecialSearchMetager('site:wikipedia.de');
$this->assertEquals("", $metager->getQ());
$this->assertEquals("wikipedia.de", $metager->getSite());
}
public function createSpecialSearchMetager($eingabe)
{
$metager = new MetaGer();
$request = new Request(['eingabe' => $eingabe]);
$metager->parseFormData($request);
$metager->checkSpecialSearches($request);
return $metager;
}
// Testet, ob ein Link wirklich nur einmal hinzugefügt werden kann
public function addLinkTest()
{
$metager = new MetaGer();
$link = "metager.de";
$this->assertTrue($metager->addLink($link));
$this->assertFalse($metager->addLink($link));
}
// Testet die Funktionen die spezielle Sumas filtern
public function specialSumaTest()
{
$metager = new MetaGer();
$suma = new SimpleXMLElement("<suma></suma>");
$suma["name"] = "qualigo";
$this->assertTrue($metager->sumaIsAdsuche($suma, false));
$suma["name"] = "similar_product_ads";
$this->assertTrue($metager->sumaIsAdsuche($suma, false));
$suma["name"] = "rlvproduct";
$this->assertTrue($metager->sumaIsAdsuche($suma, false));
$suma["name"] = "overtureAds";
$this->assertTrue($metager->sumaIsAdsuche($suma, false));
$suma["name"] = "overtureAds";
$this->assertFalse($metager->sumaIsAdsuche($suma, true));
$suma["name"] = "bing";
$this->assertFalse($metager->sumaIsAdsuche($suma, false));
$this->assertFalse($metager->sumaIsDisabled($suma));
$suma["disabled"] = "0";
$this->assertFalse($metager->sumaIsDisabled($suma));
$suma["disabled"] = "1";
$this->assertTrue($metager->sumaIsDisabled($suma));
$suma["name"] = 'overture';
$this->assertTrue($metager->sumaIsOverture($suma));
$suma["name"] = 'overtureAds';
$this->assertTrue($metager->sumaIsOverture($suma));
$suma["name"] = 'bing';
$this->assertFalse($metager->sumaIsOverture($suma));
$suma["name"] = 'qualigo';
$this->assertFalse($metager->sumaIsNotAdsuche($suma));
$suma["name"] = 'similar_product_ads';
$this->assertFalse($metager->sumaIsNotAdsuche($suma));
$suma["name"] = 'overtureAds';
$this->assertFalse($metager->sumaIsNotAdsuche($suma));
$suma["name"] = 'bing';
$this->assertTrue($metager->sumaIsNotAdsuche($suma));
}
// Testet die Generatoren für spezielle Links
public function linkGeneratorTest()
{
$metager = new Metager();
$request = new Request(['eingabe' => 'test']);
$metager->parseFormData($request);
$this->containCallbackTester($metager, "generateSearchLink", ["news"],
'focus=news');
$this->containCallbackTester($metager, "generateQuicktipLink", [],
'/qt');
$this->containCallbackTester($metager, "generateSiteSearchLink", ["wolf.de"],
'site%3Awolf.de');
$this->containCallbackTester($metager, "generateRemovedHostLink", ["wolf.de"],
'-site%3Awolf.de');
$this->containCallbackTester($metager, "generateRemovedDomainLink", ["wolf.de"],
'-site%3A%2A.wolf.de');
}
// Prüft ob der Host Count funktioniert
public function getHostCountTest()
{
$metager = new MetaGer();
$host = "host.de";
$before = $metager->getHostCount($host);
$metager->addHostCount($host);
$after = $metager->getHostCount($host);
$this->assertEquals($before + 1, $after);
$before = $after;
$metager->addHostCount($host);
$after = $metager->getHostCount($host);
$this->assertEquals($before + 1, $after);
}
// Prüft ob bei passender Einstellung der Sumas der Fokus automatisch umgestellt wird
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());
$metager = new MetaGer();
$request = new Request(["focus" => "web"]);
$metager->parseFormData($request);
$this->assertEquals("web", $metager->getFokus());
$sumas = simplexml_load_file("tests/testSumas2.xml")->xpath("suma"); # Eine spezielle test sumas.xml
$enabledSearchengines = array_slice($sumas, 0, 1);
$metager->adjustFocus($sumas, $enabledSearchengines);
$this->assertEquals("bilder", $metager->getFokus());
}
// Prüft ob das fehlen einer Suchmaschine mit Seitensuche erkannt wird
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));
$metager = new MetaGer();
$request = $this->createDummyRequest();
$metager->parseFormData($request);
$metager->checkSpecialSearches($request);
$this->assertEquals("wantsite", $metager->getSite());
$enabledSearchengines = simplexml_load_file("tests/testSumas2.xml")->xpath("suma"); # Eine spezielle test sumas.xml
$this->assertTrue($metager->checkCanNotSitesearch($enabledSearchengines));
}
// Prüft ob Bildersuchen erkannt werden
public function isBildersucheTest()
{
$metager = new MetaGer();
$request = new Request(["focus" => "bilder"]);
$metager->parseFormData($request);
$this->assertTrue($metager->isBildersuche());
$metager = new MetaGer();
$request = new Request(["focus" => "web"]);
$metager->parseFormData($request);
$this->assertFalse($metager->isBildersuche());
}
// Prüft ob der Link für Minisucher richtig erstellt wird
public function loadMiniSucherTest()
{
$metager = new MetaGer();
$sumas = simplexml_load_file("tests/testSumas.xml");
$subcollections = ["minism1", "minism2"];
$minisucher = $metager->loadMiniSucher($sumas, $subcollections);
$this->assertContains("rows=10", $minisucher["formData"]->__toString());
$this->assertContains("fq=subcollection:%28minism1+OR+minism2%29", $minisucher["formData"]->__toString());
}
// Prüft ob der Link für den Image Proxy richtig erstellt wird
public function getImageProxyLinkTest()
{
$metager = new MetaGer();
$this->containCallbackTester($metager, "getImageProxyLink", ["www.bilder.de/bild1.png"], "url=www.bilder.de%2Fbild1.png");
}
// Prüft ob sich Quicktips korrekt ein und ausschalten lassen
public function showQuicktipsTest()
{
$metager = new MetaGer();
$request = new Request(["quicktips" => "yo"]);
$metager->parseFormData($request);
$this->assertFalse($metager->showQuicktips());
$metager = new MetaGer();
$request = new Request([]);
$metager->parseFormData($request);
$this->assertTrue($metager->showQuicktips());
}
// Prüft ob Werbung der Werbeliste hinzugefügt wird und ob die pop-funktion für die Werbeergebnisse funktioniert
public function popAdTest()
{
$metager = new MetaGer();
$this->assertNull($metager->popAd());
$engineList = [];
$engineXml = simplexml_load_file("tests/testSumas.xml")->xpath("suma");
$metager = new MetaGer();
$request = new Request(["focus" => "web"]);
$metager->parseFormData($request);
$searchengine = new RlvProduct($engineXml[0], $metager);
$product = new \App\Models\Result(
$engineXml[0],
"Werbetitel",
"Link",
"Anzeigelink",
"Beschreibung",
"Gefunden Von",
42,
false,
"image.png",
4.2,
"Additional Info"
);
$searchengine->ads[] = $product;
$enginesList[] = $searchengine;
$metager->combineResults($enginesList, $metager);
$this->assertEquals("Werbetitel", $metager->popAd()['titel']);
}
// Prüft ob Produktergebnisse der Produktliste hinzugefügt werden
public function productsTest()
{
$metager = new MetaGer();
$this->assertFalse($metager->hasProducts());
$this->assertEmpty($metager->getProducts());
$engineList = [];
$engineXml = simplexml_load_file("tests/testSumas.xml")->xpath("suma");
$metager = new MetaGer();
$request = new Request(["focus" => "web"]);
$metager->parseFormData($request);
$searchengine = new RlvProduct($engineXml[0], $metager);
$product = new \App\Models\Result(
$engineXml[0],
"Produkttitel",
"Link",
"Anzeigelink",
"Beschreibung",
"Gefunden Von",
42,
false,
"image.png",
4.2,
"Additional Info"
);
$searchengine->products[] = $product;
$enginesList[] = $searchengine;
$metager->combineResults($enginesList, $metager);
$this->assertTrue($metager->hasProducts());
$this->assertEquals("Produkttitel", $metager->getProducts()[0]['titel']);
}
// Erstellt eine Suchanfrage zu Testzwecken
public function createDummyRequest()
{
/**
* Constructor.
*
* @param array $query The GET parameters
* @param array $request The POST parameters
* @param array $attributes The request attributes (parameters parsed from the PATH_INFO, ...)
* @param array $cookies The COOKIE parameters
* @param array $files The FILES parameters
* @param array $server The SERVER parameters
* @param string|resource $content The raw body data
*/
#new Request(array $query = array(), array $request = array(), array $attributes = array(), array $cookies = array(), array $files = array(), array $server = array(), $content = null)
$query = [];
$query["eingabe"] = 'suchwort -blackword -site:blackhost -site:*.blackdomain site:wantsite "i want phrase"';
$query["focus"] = "angepasst";
$query["encoding"] = "utf8";
$query["lang"] = "all";
$query["time"] = "1000";
$query["sprueche"] = "on";
$query["resultCount"] = "20";
$query["tab"] = "on";
$query["onenewspage"] = "on";
return new Request($query);
}
/**
* Funktion zum vereinfachen von Tests, bei denen die Ausgabe einer Funktion ein bestimmtes Objekt enthalten soll
*
* @param Object $object Das Object von dem aus die Funktion aufgerufen werden soll
* @param String $funcName Der Name der Funktion
* @param array $input Die Eingaben für die Funktion
* @param mixed $expectedInOutput Etwas das im Funktionsergebnis erwartet wird (meist ein String)
*/
public function containCallbackTester($object, $funcName, $input, $expectedInOutput)
{
$output = call_user_func_array(array($object, $funcName), $input);
$this->assertContains($expectedInOutput, $output);
}
}
<?php
use App\MetaGer;
use App\Models\Result;
use Illuminate\Http\Request;
class ResultPhpTest extends TestCase
{
// Die Testfunktion die PHP Unit aufruft
// Ruft alle anderen Untertests auf
public function test()
{
$this->rankingTest();
$this->isValidTest();
$this->linkGeneratorsTest();
}
// Liefert ein standard Suchergebnis
public function getDummyResult()
{
$provider = file_get_contents("tests/testSumas.xml");
$titel = "Titel";
$link = "link.de";
$anzeigeLink = "link.de/anzeige";
$descr = "Beschreibung: i want phrase
Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.";
$gefVon = "";
$sourceRank = 1;
return new Result($provider, $titel, $link, $anzeigeLink, $descr, $gefVon, $sourceRank);
}
// Liefert eine standard MetaGer
public function getDummyMetaGer()
{
$metager = new MetaGer();
$request = $this->createDummyRequest();
$metager->parseFormData($request);
$metager->checkSpecialSearches($request);
return $metager;
}
// Liefert eine standard Suchanfrage
public function createDummyRequest()
{
$query = [];
$query["eingabe"] = 'suchwort -blackword -host:blackhost -domain:blackdomain site:wantsite "i want phrase"';
$query["focus"] = "angepasst";
$query["encoding"] = "utf8";
$query["lang"] = "all";
$query["time"] = "1000";
$query["sprueche"] = "on";
$query["resultCount"] = "20";
$query["tab"] = "on";
$query["onenewspage"] = "on";
return new Request($query);
}
// Testet ob das Ranking nicht übermäßig vom gewünschten Wert abweicht
public function rankingTest()
{
$result = $this->getDummyResult();
$result->rank("link"); # 0.38, 0.38512820512820511 mit url-boost auch bei description länge > 0 statt > 80
$this->assertEquals(0.4, $result->getRank(), "Not within Range of Actual Value", 0.1);
$result->rank("titel"); # 0.38419999999999999
$this->assertEquals(0.4, $result->getRank(), "Not within Range of Actual Value", 0.1);
$result->rank("beschreibung"); # 0.38280000000000003
$this->assertEquals(0.4, $result->getRank(), "Not within Range of Actual Value", 0.1);
$result->rank("baum"); # 0.38
$this->assertEquals(0.4, $result->getRank(), "Not within Range of Actual Value", 0.1);
}
// Prüft die Valid funktion, die für Ergebnisse auf der Host- oder Domain-Blacklist false zurückgeben soll
public function isValidTest()
{
$result = $this->getDummyResult();
$metager = $this->getDummyMetaGer();
$this->assertTrue($result->isValid($metager));
$metager = new MetaGer();
$request = new Request(['eingabe' => 'test -site:host.domain.de -site:*.domain.de']);
$metager->parseFormData($request);
$metager->checkSpecialSearches($request);
$provider = file_get_contents("tests/testSumas.xml");
$titel = "Titel";
$link = "host.domain.de";
$anzeigeLink = "host.domain.de/ergebnis/1?p=2";
$descr = "Beschreibung: i want phrase";
$gefVon = "";
$sourceRank = 1;
$result = new Result($provider, $titel, $link, $anzeigeLink, $descr, $gefVon, $sourceRank);
$this->assertFalse($result->isValid($metager));
$link = "domain.de/ergebnis/1?p=2";
$result = new Result($provider, $titel, $link, $anzeigeLink, $descr, $gefVon, $sourceRank);
$this->assertFalse($result->isValid($metager));
}
// Prüft die Funktionen, die Links umformen oder erzeugen
public function linkGeneratorsTest()
{
$result = $this->getDummyResult();
$this->equalCallbackTester($result, "getStrippedHost", ["http://www.foo.bar.de/test?ja=1"],
'foo.bar.de');
$this->equalCallbackTester($result, "getStrippedLink", ["http://www.foo.bar.de/test?ja=1"],
'foo.bar.de/test');
$this->equalCallbackTester($result, "getStrippedDomain", ["http://www.foo.bar.de/test?ja=1"],
'bar.de');
$this->equalCallbackTester($result, "generateProxyLink", ["http://www.foo.bar.de/test?ja=1"],
'https://proxy.suma-ev.de/cgi-bin/nph-proxy.cgi/en/I0/http/www.foo.bar.de/test?ja=1');
$url = "https://leya:organa@www.han.solo.de/unterseite/document.htm?param1=2&param2=1#siebzehn";
$this->equalCallbackTester($result, "getStrippedHost", [$url],
'han.solo.de');
$this->equalCallbackTester($result, "getStrippedDomain", [$url],
'solo.de');
$this->equalCallbackTester($result, "getStrippedLink", [$url],
'han.solo.de/unterseite/document.htm');
$url = "http://www.foo.bar.han.solo.de/test?ja=1";
$this->equalCallbackTester($result, "getStrippedHost", [$url],
'foo.bar.han.solo.de');
$this->equalCallbackTester($result, "getStrippedDomain", [$url],
'solo.de');
}
/**
* Funktion zum vereinfachen von Tests, bei denen die Ausgabe einer Funktion einem Object entsprechen soll
*
* @param Object $object Das Object von dem aus die Funktion aufgerufen werden soll
* @param String $funcName Der Name der Funktion
* @param array $input Die Eingaben für die Funktion
* @param mixed $expectedInOutput Etwas das als Funktionsergebnis erwartet wird (meist ein String)
*/
public function equalCallbackTester($object, $funcName, $input, $expectedInOutput)
{
$output = call_user_func_array(array($object, $funcName), $input);
$this->assertEquals($expectedInOutput, $output);
}
}
<?php
use App\MetaGer;
use App\models\parserSkripte\Bing;
use Illuminate\Http\Request;
class SearchenginePhpTest extends TestCase
{
// Die Testfunktion die PHP Unit aufruft
// Ruft alle anderen Untertests auf
public function test()
{
$this->constructionTest();
$this->enablingTest();
}
// Prüft ob aus einer XML korrekt das Suchmaschinen-Objekt erstellt wird
public function constructionTest()
{
$engines = simplexml_load_file("tests/testSumas.xml")->xpath("suma");
$metager = new MetaGer();
$request = new Request(["focus" => "web"]);
$metager->parseFormData($request);
$searchengine = new Bing($engines[0], $metager);
$this->assertEquals('<suma name="minism" host="www.suchmaschine.de" skript="/suche/" formData="sprache=de&amp;sortieren=true&amp;queue=&lt;&lt;QUERY&gt;&gt;&amp;rows=&lt;&lt;COUNT&gt;&gt;&amp;fq=subcollection:&lt;&lt;SUBCOLLECTIONS&gt;&gt;" package="suchmaschine" displayName="Meine Suchmaschine" homepage="www.suchmaschine.de/welcome" port="443" inputEncoding="Latin1" userSelectable="1" type="bilder" engineBoost="1.2" additionalHeaders="$#!#$" hasSiteSearch="1" cacheDuration="60"/>',
$searchengine->engine);
$this->assertEquals(true,
$searchengine->enabled);
$this->assertEquals('Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.1',
$searchengine->useragent);
$this->assertEquals(null,
$searchengine->ip);
$this->assertEquals('<a href="www.suchmaschine.de/welcome" target="_blank" rel="noopener">Meine Suchmaschine</a>',
$searchengine->gefVon);
#$this->assertEquals('0.68813000 1476867147', $searchengine->startTime);
$this->assertEquals('/suche/?sprache=de&sortieren=true&queue=&rows=<<COUNT>>&fq=subcollection:<<SUBCOLLECTIONS>>',
$searchengine->getString); # Enthält auch Testen von generateGetString(), urlEncode() und getOvertureAffilData() (nicht in der aktuellen Version)
$this->assertEquals('b1ac991618a8ffc0dab6b9bbb913841e',
$searchengine->hash);
$this->assertEquals('86a9106ae65537651a8e456835b316ab',
$searchengine->resultHash);
$this->assertEquals(true,
$searchengine->canCache);
$this->assertEquals('minism',
$searchengine->name);
$this->assertEquals('www.suchmaschine.de',
$searchengine->host);
$this->assertEquals('/suche/',
$searchengine->skript);
$this->assertEquals('sprache=de&sortieren=true&queue=<<QUERY>>&rows=<<COUNT>>&fq=subcollection:<<SUBCOLLECTIONS>>',
$searchengine->formData);
$this->assertEquals('suchmaschine',
$searchengine->package);
$this->assertEquals('Meine Suchmaschine',
$searchengine->displayName);
$this->assertEquals('443',
$searchengine->port);
$this->assertEquals('Latin1',
$searchengine->inputEncoding);
$this->assertEquals('1',
$searchengine->userSelectable);
$this->assertEquals('bilder',
$searchengine->type);
$this->assertEquals('1.2',
$searchengine->engineBoost);
$this->assertEquals('$#!#$',
$searchengine->additionalHeaders);
$this->assertEquals(null,
$searchengine->disabled);
$this->assertEquals('1',
$searchengine->hasSiteSearch);
$this->assertEquals('60',
$searchengine->cacheDuration);
}