RuleMaxTimeRestartTest.cs 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. using Content.Server.GameTicking;
  2. using Content.Server.GameTicking.Rules;
  3. using Content.Server.GameTicking.Rules.Components;
  4. using Content.Shared.GameTicking.Components;
  5. using Robust.Shared.GameObjects;
  6. using Robust.Shared.Timing;
  7. namespace Content.IntegrationTests.Tests.GameRules
  8. {
  9. [TestFixture]
  10. [TestOf(typeof(MaxTimeRestartRuleSystem))]
  11. public sealed class RuleMaxTimeRestartTest
  12. {
  13. [Test]
  14. public async Task RestartTest()
  15. {
  16. await using var pair = await PoolManager.GetServerClient(new PoolSettings { InLobby = true });
  17. var server = pair.Server;
  18. Assert.That(server.EntMan.Count<GameRuleComponent>(), Is.Zero);
  19. Assert.That(server.EntMan.Count<ActiveGameRuleComponent>(), Is.Zero);
  20. var entityManager = server.ResolveDependency<IEntityManager>();
  21. var sGameTicker = server.ResolveDependency<IEntitySystemManager>().GetEntitySystem<GameTicker>();
  22. var sGameTiming = server.ResolveDependency<IGameTiming>();
  23. MaxTimeRestartRuleComponent maxTime = null;
  24. await server.WaitPost(() =>
  25. {
  26. sGameTicker.StartGameRule("MaxTimeRestart", out var ruleEntity);
  27. Assert.That(entityManager.TryGetComponent<MaxTimeRestartRuleComponent>(ruleEntity, out maxTime));
  28. });
  29. Assert.That(server.EntMan.Count<GameRuleComponent>(), Is.EqualTo(1));
  30. Assert.That(server.EntMan.Count<ActiveGameRuleComponent>(), Is.EqualTo(1));
  31. await server.WaitAssertion(() =>
  32. {
  33. Assert.That(sGameTicker.RunLevel, Is.EqualTo(GameRunLevel.PreRoundLobby));
  34. maxTime.RoundMaxTime = TimeSpan.FromSeconds(3);
  35. sGameTicker.StartRound();
  36. });
  37. Assert.That(server.EntMan.Count<GameRuleComponent>(), Is.EqualTo(1));
  38. Assert.That(server.EntMan.Count<ActiveGameRuleComponent>(), Is.EqualTo(1));
  39. await server.WaitAssertion(() =>
  40. {
  41. Assert.That(sGameTicker.RunLevel, Is.EqualTo(GameRunLevel.InRound));
  42. });
  43. var ticks = sGameTiming.TickRate * (int) Math.Ceiling(maxTime.RoundMaxTime.TotalSeconds * 1.1f);
  44. await pair.RunTicksSync(ticks);
  45. await server.WaitAssertion(() =>
  46. {
  47. Assert.That(sGameTicker.RunLevel, Is.EqualTo(GameRunLevel.PostRound));
  48. });
  49. ticks = sGameTiming.TickRate * (int) Math.Ceiling(maxTime.RoundEndDelay.TotalSeconds * 1.1f);
  50. await pair.RunTicksSync(ticks);
  51. await server.WaitAssertion(() =>
  52. {
  53. Assert.That(sGameTicker.RunLevel, Is.EqualTo(GameRunLevel.PreRoundLobby));
  54. });
  55. await pair.CleanReturnAsync();
  56. }
  57. }
  58. }