From 34f28f9ab8e6a099467eb7291c3c5fa12afe017f Mon Sep 17 00:00:00 2001 From: Leonid Pershin Date: Thu, 20 Aug 2026 17:37:55 +0300 Subject: [PATCH] Lock PersonCardReader to a single public Read. Phase 58 promised no second public card API; reflection now fails if another method appears. Co-authored-by: Cursor --- .../PersonCardReaderShapeTests.cs | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 tests/HSchool.Server.Tests/PersonCardReaderShapeTests.cs diff --git a/tests/HSchool.Server.Tests/PersonCardReaderShapeTests.cs b/tests/HSchool.Server.Tests/PersonCardReaderShapeTests.cs new file mode 100644 index 0000000..91f167b --- /dev/null +++ b/tests/HSchool.Server.Tests/PersonCardReaderShapeTests.cs @@ -0,0 +1,29 @@ +using System.Reflection; +using HSchool.Server.Game; +using HSchool.Simulation; + +namespace HSchool.Server.Tests; + +public class PersonCardReaderShapeTests +{ + [Fact] + public void PersonCardReader_HasOnePublicRead() + { + var reader = typeof(PersonCardReader); + Assert.True(reader.IsAbstract && reader.IsSealed); + Assert.False(reader.IsPublic); + + var publicMethods = reader.GetMethods( + BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static | BindingFlags.DeclaredOnly) + .Where(method => !method.IsSpecialName) + .ToArray(); + var read = Assert.Single(publicMethods); + Assert.Equal("Read", read.Name); + + var parameters = read.GetParameters(); + Assert.Equal(3, parameters.Length); + Assert.Equal(typeof(School), parameters[0].ParameterType); + Assert.Equal(typeof(string), parameters[1].ParameterType); + Assert.Equal(typeof(string), parameters[2].ParameterType); + } +}