assertNotEmpty($result); } public function testListEntriesHaveRequiredKeys(): void { $result = HotkeyService::list(); foreach ($result as $index => $entry) { $this->assertArrayHasKey('action_key', $entry, "Entry #{$index} is missing 'action_key'"); $this->assertArrayHasKey('mac', $entry, "Entry #{$index} is missing 'mac'"); $this->assertArrayHasKey('win', $entry, "Entry #{$index} is missing 'win'"); $this->assertNotEmpty($entry['action_key'], "Entry #{$index} has empty 'action_key'"); $this->assertNotEmpty($entry['mac'], "Entry #{$index} has empty 'mac'"); $this->assertNotEmpty($entry['win'], "Entry #{$index} has empty 'win'"); } } public function testListEntriesHaveExactlyThreeKeys(): void { $result = HotkeyService::list(); foreach ($result as $index => $entry) { $this->assertCount(3, $entry, "Entry #{$index} should have exactly 3 keys"); } } public function testSearchKeywordsReturnsNonEmptyArray(): void { $result = HotkeyService::searchKeywords(); $this->assertNotEmpty($result); } public function testSearchKeywordsContainsExpectedTerms(): void { $result = HotkeyService::searchKeywords(); $this->assertContains('hotkey', $result); $this->assertContains('shortcut', $result); $this->assertContains('keyboard', $result); } public function testSearchKeywordsAreAllStrings(): void { $result = HotkeyService::searchKeywords(); foreach ($result as $keyword) { $this->assertNotEmpty($keyword); } } public function testListReturnsDeterministicResult(): void { $first = HotkeyService::list(); $second = HotkeyService::list(); $this->assertSame($first, $second); } public function testSearchKeywordsReturnsDeterministicResult(): void { $first = HotkeyService::searchKeywords(); $second = HotkeyService::searchKeywords(); $this->assertSame($first, $second); } }