$userAgent, 'referer' => $referer, 'remoteAddress' => $remoteAddress] = $expected; self::assertEquals($userAgent, $visitor->getUserAgent()); self::assertEquals($referer, $visitor->getReferer()); self::assertEquals($remoteAddress, $visitor->getRemoteAddress()); } public function provideParams(): iterable { yield 'all values are bigger' => [ [str_repeat('a', 1000), str_repeat('b', 2000), str_repeat('c', 500)], [ 'userAgent' => str_repeat('a', Visitor::USER_AGENT_MAX_LENGTH), 'referer' => str_repeat('b', Visitor::REFERER_MAX_LENGTH), 'remoteAddress' => str_repeat('c', Visitor::REMOTE_ADDRESS_MAX_LENGTH), ], ]; yield 'some values are smaller' => [ [str_repeat('a', 10), str_repeat('b', 2000), null], [ 'userAgent' => str_repeat('a', 10), 'referer' => str_repeat('b', Visitor::REFERER_MAX_LENGTH), 'remoteAddress' => null, ], ]; yield 'random strings' => [ [ $userAgent = $this->generateRandomString(2000), $referer = $this->generateRandomString(50), null, ], [ 'userAgent' => substr($userAgent, 0, Visitor::USER_AGENT_MAX_LENGTH), 'referer' => $referer, 'remoteAddress' => null, ], ]; } private function generateRandomString(int $length): string { $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; $charactersLength = strlen($characters); $randomString = ''; for ($i = 0; $i < $length; $i++) { $randomString .= $characters[random_int(0, $charactersLength - 1)]; } return $randomString; } }