综合平台编程器项目的远程存储
Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.
 
 
 
 

70 строки
2.1 KiB

  1. #include "services/runtime_mode_service.h"
  2. #include <iostream>
  3. #include <stdexcept>
  4. #include <string>
  5. namespace {
  6. void require(bool condition, const std::string &message)
  7. {
  8. if (!condition)
  9. {
  10. throw std::runtime_error(message);
  11. }
  12. }
  13. void testModeTransitions()
  14. {
  15. // 验证服务将 PLC 首读状态与领域模式切换规则正确组合
  16. RuntimeModeService service;
  17. require(service.mode() == ApplicationMode::Editing,
  18. "service must start in editing mode");
  19. require(service.policy().allowsProjectEditing,
  20. "editing mode must allow project editing");
  21. require(service.enterOfflineRunning().succeeded,
  22. "editing mode must enter offline running");
  23. require(service.policy().usesVirtualRegisters,
  24. "offline running must use virtual registers");
  25. require(service.enterOnlineRunning().error
  26. == ModeTransitionError::MustReturnToEditing,
  27. "running modes must not switch directly");
  28. require(service.enterEditing().succeeded,
  29. "offline running must return to editing");
  30. require(service.enterOnlineRunning().error
  31. == ModeTransitionError::InitialPlcReadRequired,
  32. "online running must require an initial PLC read");
  33. service.setInitialPlcReadCompleted(true);
  34. require(service.initialPlcReadCompleted(),
  35. "service must retain the initial PLC read state");
  36. require(service.enterOnlineRunning().succeeded,
  37. "online running must start after an initial PLC read");
  38. require(service.policy().usesPlcRegisters,
  39. "online running must use PLC registers");
  40. require(!service.policy().runsLogicExecutor,
  41. "online running must keep the software executor stopped");
  42. }
  43. } // namespace
  44. int main()
  45. {
  46. try
  47. {
  48. // 运行模式只有这一组状态机边界测试
  49. testModeTransitions();
  50. }
  51. catch (const std::exception &error)
  52. {
  53. std::cerr << "runtime mode service tests failed: " << error.what() << '\n';
  54. return 1;
  55. }
  56. std::cout << "runtime mode service tests passed\n";
  57. return 0;
  58. }