Quelltext des aktuellen Standes
<?php
declare(strict_types=1);
use OpenNIT\Core\DeviceInfo;
/**
* Deckt die leichtgewichtige User-Agent-Auswertung für Sitzungsanzeige und
* Neues-Gerät-Erkennung ab.
*/
return static function (): void {
$chromeWin = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36';
$safariIph = 'Mozilla/5.0 (iPhone; CPU iPhone OS 17_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.0 Mobile/15E148 Safari/604.1';
$edgeWin = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 Edg/120.0.0.0';
$ffMac = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:121.0) Gecko/20100101 Firefox/121.0';
test('browser: erkennt Chrome/Safari/Edge/Firefox in richtiger Reihenfolge', function () use ($chromeWin, $safariIph, $edgeWin, $ffMac) {
assertSame('Chrome', DeviceInfo::browser($chromeWin));
assertSame('Safari', DeviceInfo::browser($safariIph));
assertSame('Edge', DeviceInfo::browser($edgeWin)); // Edge trägt Chrome mit
assertSame('Firefox', DeviceInfo::browser($ffMac));
});
test('platform: erkennt Windows/iPhone/macOS', function () use ($chromeWin, $safariIph, $ffMac) {
assertSame('Windows', DeviceInfo::platform($chromeWin));
assertSame('iPhone', DeviceInfo::platform($safariIph));
assertSame('macOS', DeviceInfo::platform($ffMac));
});
test('describe: kombiniert Browser und Plattform', function () use ($chromeWin, $safariIph, $edgeWin) {
assertSame('Chrome auf Windows', DeviceInfo::describe($chromeWin));
assertSame('Safari auf iPhone', DeviceInfo::describe($safariIph));
assertSame('Edge auf Windows', DeviceInfo::describe($edgeWin));
});
test('describe: Fallback bei leerem/unbekanntem User-Agent', function () {
assertSame('Unbekanntes Gerät', DeviceInfo::describe(null));
assertSame('Unbekanntes Gerät', DeviceInfo::describe(''));
assertSame('Unbekanntes Gerät', DeviceInfo::describe('irgendwas-ohne-marker'));
});
test('fingerprint: stabil und user-agent-abhängig', function () use ($chromeWin, $ffMac) {
assertSame(DeviceInfo::fingerprint($chromeWin), DeviceInfo::fingerprint($chromeWin));
assertTrue(DeviceInfo::fingerprint($chromeWin) !== DeviceInfo::fingerprint($ffMac));
assertSame(64, strlen(DeviceInfo::fingerprint($chromeWin))); // sha256 hex
});
};