Files
w4rpservices/vendor/ua-parser/uap-php/tests/ParserTest.php
2019-12-26 05:03:41 +00:00

187 lines
6.2 KiB
PHP

<?php
/**
* ua-parser
*
* Copyright (c) 2011-2012 Dave Olsen, http://dmolsen.com
*
* Released under the MIT license
*/
namespace UAParser\Test;
use Symfony\Component\Finder\Finder;
use Symfony\Component\Finder\SplFileInfo;
use Symfony\Component\Yaml\Yaml;
use UAParser\Parser;
class ParserTest extends AbstractParserTest
{
/** @var Parser */
private $parser;
/** @var Parser */
private static $staticParser;
public static function setUpBeforeClass()
{
static::$staticParser = Parser::create();
}
public function setUp()
{
$this->parser = static::$staticParser;
}
public static function getOsTestData()
{
$resources = Finder::create()
->files()
->path('tests')
->name('test_os.yaml')
->path('test_resources')
->name('additional_os_tests.yaml');
return static::createTestData($resources);
}
public static function getUserAgentTestData()
{
$resources = Finder::create()
->files()
->path('tests')
->name('test_ua.yaml')
->path('test_resources')
->name('firefox_user_agent_strings.yaml')
->name('pgts_browser_list.yaml');
return static::createTestData($resources);
}
public static function getDeviceTestData()
{
$resources = Finder::create()
->files()
->path('tests')
->name('test_device.yaml');
return static::createTestData($resources);
}
public function testNoMatch()
{
$result = $this->parser->parse('unknown user agent');
$this->assertSame('Other', $result->device->family);
$this->assertSame('Other', $result->ua->family);
$this->assertSame('Other', $result->os->family);
}
/** @dataProvider getDeviceTestData */
public function testDeviceParsing($userAgent, array $jsUserAgent, $family, $major, $minor, $patch, $patchMinor, $brand, $model)
{
$result = $this->parser->parse($userAgent, $jsUserAgent);
$this->assertSame($family, $result->device->family);
$this->assertSame($brand, $result->device->brand);
$this->assertSame($model, $result->device->model);
}
/** @dataProvider getOsTestData */
public function testOperatingSystemParsing($userAgent, array $jsUserAgent, $family, $major, $minor, $patch, $patchMinor)
{
$result = $this->parser->parse($userAgent, $jsUserAgent);
$this->assertSame($family, $result->os->family);
$this->assertSame($major, $result->os->major);
$this->assertSame($minor, $result->os->minor);
$this->assertSame($patch, $result->os->patch);
$this->assertSame($patchMinor, $result->os->patchMinor);
}
/** @dataProvider getUserAgentTestData */
public function testUserAgentParsing($userAgent, array $jsUserAgent, $family, $major, $minor, $patch)
{
$result = $this->parser->parse($userAgent, $jsUserAgent);
$this->assertSame($family, $result->ua->family);
$this->assertSame($major, $result->ua->major);
$this->assertSame($minor, $result->ua->minor);
$this->assertSame($patch, $result->ua->patch);
}
public function testToString()
{
$userAgentString = 'HbbTV/1.1.1 (;;;;;) firetv-firefox-plugin 1.1.20';
$result = $this->parser->parse($userAgentString);
$this->assertSame('HbbTV 1.1.1/FireHbbTV 1.1.20', $result->toString());
$this->assertSame('HbbTV 1.1.1/FireHbbTV 1.1.20', (string) $result);
$this->assertSame('HbbTV 1.1.1', $result->ua->toString());
$this->assertSame('HbbTV 1.1.1', (string) $result->ua);
$this->assertSame('1.1.1', $result->ua->toVersion());
$this->assertSame('FireHbbTV 1.1.20', $result->os->toString());
$this->assertSame('FireHbbTV 1.1.20', (string) $result->os);
$this->assertSame('1.1.20', $result->os->toVersion());
$this->assertSame($userAgentString, $result->originalUserAgent);
}
public function testToString_2()
{
$userAgentString = 'PingdomBot 1.4/Other Pingdom.com_bot_version_1.4_(http://www.pingdom.com/)';
$result = $this->parser->parse($userAgentString);
$this->assertSame('PingdomBot 1.4/Other', $result->toString());
$this->assertSame('PingdomBot 1.4/Other', (string) $result);
$this->assertSame('PingdomBot 1.4', $result->ua->toString());
$this->assertSame('PingdomBot 1.4', (string) $result->ua);
$this->assertSame('1.4', $result->ua->toVersion());
$this->assertSame('Other', $result->os->toString());
$this->assertSame('Other', (string) $result->os);
$this->assertSame('', $result->os->toVersion());
$this->assertSame($userAgentString, $result->originalUserAgent);
}
private static function createTestData(Finder $resources)
{
$resourcesDirectory = realpath(__DIR__ . '/../uap-core');
$testData = array();
/** @var $resource SplFileInfo */
foreach ($resources->in($resourcesDirectory) as $resource) {
$data = Yaml::parse(str_replace("\t", "", $resource->getContents()));
foreach ($data['test_cases'] as $testCase) {
$testData[] = static::createArguments($testCase, $resource);
}
}
return $testData;
}
private static function createArguments(array $testCase, SplFileInfo $resource)
{
return array(
$testCase['user_agent_string'],
isset($testCase['js_ua']) ? json_decode(str_replace("'", '"', $testCase['js_ua']), true) : array(),
$testCase['family'],
isset($testCase['major']) ? $testCase['major'] : null,
isset($testCase['minor']) ? $testCase['minor'] : null,
isset($testCase['patch']) ? $testCase['patch'] : null,
isset($testCase['patch_minor']) ? $testCase['patch_minor'] : null,
isset($testCase['brand']) ? $testCase['brand'] : null,
isset($testCase['model']) ? $testCase['model'] : null,
$resource->getFilename()
);
}
protected function getParserClassName()
{
return 'UAParser\Parser';
}
}