Festgeschriebene Werte und Test für überlange Namen

Die neuen Tests in golden.rs vergleichen gegen einmal aufgezeichnete
Werte statt gegen eine zweite Berechnung im selben Build. So fällt
über Builds hinweg auf, wenn sich Regeln oder Formate unbeabsichtigt
ändern: der Startzustand der Welt, das Ende einer festen Befehlsfolge
und die Prüfsumme der Aufzeichnung. Die Fehlermeldung nennt die
Versionskonstante, die dann erhöht werden muss.

Der neue Test in world.rs deckt ab, dass überlange Namen auf beiden
Beitrittswegen gekürzt gespeichert werden: beim ersten Beitritt und
bei der Rückkehr.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
Steven Wroblewski
2026-09-30 22:18:35 +02:00
parent d84c338291
commit 3857fe99a6
2 changed files with 172 additions and 1 deletions
+25 -1
View File
@@ -2,7 +2,9 @@ use grovewright_core::command::Command;
use grovewright_core::inventory::ITEM_STONE;
use grovewright_core::map::{Pos, Terrain};
use grovewright_core::mapgen::{outcrop_origin, spawn_pos};
use grovewright_core::player::{PlayerId, PlayerKey, MAX_KNOWN_PLAYERS, MAX_ONLINE_PLAYERS};
use grovewright_core::player::{
PlayerId, PlayerKey, MAX_KNOWN_PLAYERS, MAX_NAME_BYTES, MAX_ONLINE_PLAYERS,
};
use grovewright_core::world::{Event, World, DIG_COOLDOWN_TICKS, TICKS_PER_SECOND};
fn key(n: u8) -> PlayerKey {
@@ -112,6 +114,28 @@ fn a_returning_player_can_change_their_name() {
assert_eq!(world.player(id).unwrap().name, "Neuer Name");
}
#[test]
fn overlong_names_are_stored_shortened_on_both_join_paths() {
let mut world = World::new(1);
world.step(&[Command::Join {
key: key(1),
name: "ä".repeat(20),
}]);
assert_eq!(world.player(PlayerId(0)).unwrap().name, "ä".repeat(16));
world.step(&[Command::Leave {
player: PlayerId(0),
}]);
world.step(&[Command::Join {
key: key(1),
name: "x".repeat(MAX_NAME_BYTES + 10),
}]);
assert_eq!(
world.player(PlayerId(0)).unwrap().name,
"x".repeat(MAX_NAME_BYTES)
);
}
#[test]
fn a_fifth_online_player_is_refused() {
let mut world = World::new(1);