Spaces:
Running
Running
| import sys | |
| import os | |
| # Add project root to sys.path | |
| sys.path.append(os.getcwd()) | |
| from compiler.parser_v2 import AbilityParserV2 | |
| from engine.models.ability import TriggerType, EffectType, TargetType, ConditionType | |
| def test_negation(): | |
| parser = AbilityParserV2() | |
| text = "TRIGGER: ON_PLAY\nCONDITION: !MOVED_THIS_TURN\nEFFECT: DRAW(1)" | |
| abilities = parser.parse(text) | |
| ability = abilities[0] | |
| condition = ability.conditions[0] | |
| print(f"Condition: {condition.type.name}, Negated: {condition.is_negated}") | |
| assert condition.is_negated == True | |
| def test_variable_targeting(): | |
| parser = AbilityParserV2() | |
| # Sequence: Look Deck to Hand -> Draw for Target | |
| text = "TRIGGER: ON_PLAY\nEFFECT: LOOK_DECK(3) -> CARD_HAND; DRAW(1) -> TARGET" | |
| abilities = parser.parse(text) | |
| effects = abilities[0].effects | |
| print(f"Effect 0 Target: {effects[0].target.name}") | |
| print(f"Effect 1 Target: {effects[1].target.name}") | |
| assert effects[1].target == TargetType.CARD_HAND | |
| def test_aliases(): | |
| parser = AbilityParserV2() | |
| text = "TRIGGER: ON_YELL_SUCCESS\nEFFECT: CHARGE_SELF(1)" | |
| abilities = parser.parse(text) | |
| ability = abilities[0] | |
| print(f"Trigger: {ability.trigger.name}") | |
| print(f"Effect: {ability.effects[0].effect_type.name}, Target: {ability.effects[0].target.name}") | |
| assert ability.trigger == TriggerType.ON_REVEAL | |
| assert ability.effects[0].effect_type == EffectType.ENERGY_CHARGE | |
| assert ability.effects[0].target == TargetType.MEMBER_SELF | |
| if __name__ == "__main__": | |
| try: | |
| test_negation() | |
| test_variable_targeting() | |
| test_aliases() | |
| print("All tests passed!") | |
| except Exception as e: | |
| print(f"Test failed: {e}") | |
| import traceback | |
| traceback.print_exc() | |