Spaces:
Running
Running
File size: 4,046 Bytes
88d4171 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 |
use crate::core::logic::*;
use crate::core::enums::*;
const TEST_CARDS: &str = r#"{
"member_db": {
"0": {
"card_id": 0,
"card_no": "TEST-001",
"name": "Test Member",
"cost": 2,
"hearts": [1, 0, 0, 0, 0, 0, 0],
"blade_hearts": [0, 0, 0, 0, 0, 0, 0],
"blades": 1,
"groups": [],
"units": [],
"abilities": [],
"rare": "R",
"volume_icons": 0,
"draw_icons": 0
}
},
"live_db": {
"11000": {
"card_id": 11000,
"card_no": "LIVE-001",
"name": "Test Live",
"score": 1,
"required_hearts": [1, 0, 0, 0, 0, 0, 0],
"abilities": [],
"groups": [],
"units": [],
"volume_icons": 0,
"blade_hearts": [0, 0, 0, 0, 0, 0, 0]
}
}
}"#;
#[test]
fn test_database_load() {
let db = CardDatabase::from_json(TEST_CARDS).unwrap();
assert_eq!(db.members.len(), 1);
assert_eq!(db.lives.len(), 1);
assert_eq!(db.members[&0].name, "Test Member");
}
#[test]
fn test_game_initialization() {
let db = CardDatabase::from_json(TEST_CARDS).unwrap();
let mut state = GameState {
players: [
PlayerState {
player_id: 0,
..PlayerState::default()
},
PlayerState {
player_id: 1,
..PlayerState::default()
},
],
..GameState::default()
};
state.initialize_game(
vec![0; 10], // P0 Deck
vec![0; 10], // P1 Deck
vec![0; 5], // P0 Energy
vec![0; 5], // P1 Energy
vec![11000], // P0 Lives
vec![11000], // P1 Lives
);
assert_eq!(state.players[0].hand.len(), 6);
assert_eq!(state.players[0].energy_zone.len(), 3); // Based on logic.rs (3 energy)
// Lives are mixed into deck in current implementation, not placed in live_zone
// assert_eq!(state.players[0].live_zone[0], 11000);
assert!(state.players[0].deck.contains(&11000) || state.players[0].hand.contains(&11000));
}
#[test]
fn test_play_member() {
let db = CardDatabase::from_json(TEST_CARDS).unwrap();
let mut state = GameState {
players: [
PlayerState {
player_id: 0,
hand: vec![0],
energy_zone: vec![0, 0],
tapped_energy: vec![false, false],
..PlayerState::default()
},
PlayerState {
player_id: 1,
..PlayerState::default()
},
],
phase: Phase::Main,
..GameState::default()
};
// Play card 0 (cost 2) to slot 0
state.play_member(&db, 0, 0).unwrap();
assert_eq!(state.players[0].stage[0], 0);
assert_eq!(state.players[0].hand.len(), 0);
assert_eq!(state.players[0].tapped_energy.iter().filter(|&&t| t).count(), 2);
}
#[test]
fn test_performance_phase() {
let db = CardDatabase::from_json(TEST_CARDS).unwrap();
let mut state = GameState {
players: [
PlayerState {
player_id: 0,
deck: vec![0], // Deck for yelling
live_zone: [11000, -1, -1],
stage: [0, -1, -1],
..PlayerState::default()
},
PlayerState {
player_id: 1,
..PlayerState::default()
},
],
phase: Phase::PerformanceP1,
..GameState::default()
};
state.do_performance_phase(&db);
// After performance, if successful, the live should remain in live_zone
// It is moved to success_lives only in LiveResult phase
assert_eq!(state.players[0].live_zone[0], 11000);
assert_eq!(state.players[0].current_turn_volume, 0); // Icons: 0
}
|