84 lines
2.9 KiB
Python
84 lines
2.9 KiB
Python
"""
|
|
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.evaluateFromInput(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.evaluateFromInput(cards_str)
|
|
assert str(ranking) == expected_result, f"Failed for {cards_str}"
|
|
|
|
def test_wheel_straight(self):
|
|
"""Test A-2-3-4-5 straight"""
|
|
cards_str = "As2h3d4c5h7s8s"
|
|
ranking = HandEvaluator.evaluateFromInput(cards_str)
|
|
|
|
assert str(ranking) == "Straight(5 high)"
|
|
|
|
def test_different_card_formats(self):
|
|
"""Test different ways of writing the same cards"""
|
|
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.evaluateFromInput(cards_str)
|
|
assert str(ranking) == expected_result
|
|
|
|
def test_case_insensitive_suits(self):
|
|
"""Test that suits are case insensitive"""
|
|
cards_str = "AsKsAhAdAc6s7s"
|
|
ranking = HandEvaluator.evaluateFromInput(cards_str)
|
|
|
|
assert str(ranking) == "Quad(A)"
|
|
|
|
def test_edge_cases(self):
|
|
"""Test edge cases and boundary conditions"""
|
|
cards_str = "2s2h2d2c3s4h5d"
|
|
ranking = HandEvaluator.evaluateFromInput(cards_str)
|
|
assert str(ranking) == "Quad(2)"
|
|
|
|
# Minimum straight
|
|
cards_str = "As2h3d4c5h6s7s"
|
|
ranking = HandEvaluator.evaluateFromInput(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.evaluateFromInput(cards_str)
|
|
assert str(ranking) == "Straight(A high)" |