LovecaSim / engine /tests /cards /test_LL_PR_004_PR.py
trioskosmos's picture
Upload folder using huggingface_hub
bb3fbf9 verified
from engine.game.game_state import initialize_game
def setup_test_state():
# Ensure DB is loaded (initialize_game handles this)
state = initialize_game(use_real_data=True)
return state
def test_LL_PR_004_PR_choco_mint():
# Card 1000: 愛♡スクリ~ム!
state = setup_test_state()
p0 = state.players[0]
p1 = state.players[1]
p0.hand = [1]
p0.hand_added_turn = [0]
p1.hand = [2]
p1.hand_added_turn = [0]
p0.main_deck = [10]
p1.main_deck = [20]
# Simulate Live Start for LL-PR-004-PR
# Assuming card_id 1000 is correctly loaded in live_db
# We manually trigger the ability for test
card_id = 1000
live = state.live_db[card_id]
ability = live.abilities[0]
state.triggered_abilities.append((0, ability, {"card_id": card_id}))
state._process_rule_checks()
# Should have a pending choice: MODAL_CHOICE
assert len(state.pending_choices) > 0
choice_type, params = state.pending_choices[0]
assert choice_type == "MODAL_CHOICE"
# Answers "Choco Mint" (index 0 in our hardcoded options for now)
# MODAL_CHOICE actions start at 800
state._handle_choice(800)
# According to our implementation and the card:
# "If the answer is Choco-Mint ... both players discard 1 card."
# Wait, my implementation of FLAVOR_ACTION hardcoded some options.
# We need to make sure the MODAL_ANSWER condition checks the right value.
# The compiled bytecode uses Opcode.CHECK_MODAL_ANSWER (13) likely.
# Since we are using the Python engine, it uses _resolve_condition_opcode
# which checks state.last_choice_answer.
assert state.last_choice_answer == 0
# Run the remaining resolution
while state.pending_effects or state.triggered_abilities:
state._resolve_pending_effect(0, {"card_id": card_id})
# Both should have discarded AND THEN drawn (due to linearized data issue)
assert len(p0.hand) == 1
assert len(p1.hand) == 1
assert 10 in p0.hand
assert 20 in p1.hand
def test_LL_PR_004_PR_you():
state = setup_test_state()
p0 = state.players[0]
p1 = state.players[1]
p0.hand = []
p1.hand = []
p0.main_deck = [10]
p1.main_deck = [20]
card_id = 1000
live = state.live_db[card_id]
ability = live.abilities[0]
state.triggered_abilities.append((0, ability, {"card_id": card_id}))
# Player answers "You" (Index 3)
state._handle_choice(803) # "You" (index 3)
while state.pending_effects or state.triggered_abilities:
state._resolve_pending_effect(0, {"card_id": card_id})
# Both should have drawn
assert 10 in p0.hand
assert 20 in p1.hand