""" Integration tests for the main program """ import pytest import sys import io from unittest.mock import patch from poker.hand_evaluator import HandEvaluator class TestMainProgram: """Integration tests for main program functionality""" def test_example_input(self): """Test the example input from the requirements""" cards_str = "AsKs AhAdAc6s7s" ranking = HandEvaluator.evaluate_from_input(cards_str) assert str(ranking) == "Quad(A)" def test_various_hand_types(self): """Test various hand types work correctly end-to-end""" test_cases = [ ("AhKhQhJhTh2c3c", "Royal Flush"), ("2h3h4h5h6h7s8s", "Straight Flush(6 high)"), ("AsKs AhAdAc6s7s", "Quad(A)"), ("AsAhAd KsKh6s7s", "Full House(A over K)"), ("AhKh6h4h2h7s8s", "Flush(A high)"), ("AsTsJhQdKh7s8s", "Straight(A high)"), ("AsAhAd6s7h8s9s", "Three of a Kind(A)"), ("AsAh6d6s7h8s9s", "Two Pair(A and 6)"), ("AsAh6d4s2h3cJd", "Pair(A)"), ("As6h4d8s9hJdKc", "High Card(A)"), ] for cards_str, expected_result in test_cases: ranking = HandEvaluator.evaluate_from_input(cards_str) assert str(ranking) == expected_result, f"Failed for {cards_str}" def test_wheel_straight(self): """Test A-2-3-4-5 straight (wheel)""" cards_str = "As2h3d4c5h7s8s" ranking = HandEvaluator.evaluate_from_input(cards_str) assert str(ranking) == "Straight(5 high)" def test_different_card_formats(self): """Test different ways of writing the same cards""" # These should all represent the same hand formats = [ "AsKsAhAdAc6s7s", "As Ks Ah Ad Ac 6s 7s", "As Ks Ah Ad Ac 6s 7s", ] expected_result = "Quad(A)" for cards_str in formats: ranking = HandEvaluator.evaluate_from_input(cards_str) assert str(ranking) == expected_result def test_case_insensitive_suits(self): """Test that suits are case insensitive""" cards_str = "AsKsAhAdAc6s7s" ranking = HandEvaluator.evaluate_from_input(cards_str) assert str(ranking) == "Quad(A)" def test_edge_cases(self): """Test edge cases and boundary conditions""" # All same rank except one cards_str = "2s2h2d2c3s4h5d" ranking = HandEvaluator.evaluate_from_input(cards_str) assert str(ranking) == "Quad(2)" # Minimum straight cards_str = "As2h3d4c5h6s7s" ranking = HandEvaluator.evaluate_from_input(cards_str) # Should pick 3-4-5-6-7 over A-2-3-4-5 assert "Straight(7 high)" in str(ranking) # Maximum straight cards_str = "9sTsJhQdKhAsAd" ranking = HandEvaluator.evaluate_from_input(cards_str) assert str(ranking) == "Straight(A high)"