ECSTest.cs 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. using Microsoft.VisualStudio.TestTools.UnitTesting;
  2. using Solana.Unity.Bolt.Test;
  3. using Solana.Unity.Rpc.Models;
  4. using Solana.Unity.Wallet;
  5. using Solana.Unity.Bolt;
  6. using Solana.Unity.Rpc;
  7. using System;
  8. using System.Threading.Tasks;
  9. using Solana.Unity.Wallet.Bip39;
  10. using World.Program;
  11. namespace ECSTest {
  12. public class Test {
  13. public static async Task Run(Framework framework) {
  14. await AddEntity1(framework);
  15. await AddEntity2(framework);
  16. await AddEntity3(framework);
  17. await AddEntity4WithSeed(framework);
  18. await InitializeVelocityComponentOnEntity1WithSeed(framework);
  19. await InitializePositionComponentOnEntity1(framework);
  20. await InitializePositionComponentOnEntity2(framework);
  21. await InitializePositionComponentOnEntity4(framework);
  22. await CheckPositionOnEntity1IsDefault(framework);
  23. await ApplySimpleMovementSystemUpOnEntity1(framework);
  24. await ApplySimpleMovementSystemRightOnEntity1(framework);
  25. await DestroyVelocityComponentOnEntity1(framework);
  26. }
  27. public static async Task AddEntity1(Framework framework) {
  28. var addEntity = await Bolt.World.AddEntity(framework.Client, framework.WorldPda, framework.Wallet.Account.PublicKey);
  29. framework.Entity1Pda = addEntity.Pda;
  30. await framework.SendAndConfirmInstruction(addEntity.Instruction);
  31. }
  32. public static async Task AddEntity2(Framework framework) {
  33. var addEntity = await Bolt.World.AddEntity(framework.Client, framework.WorldPda, framework.Wallet.Account.PublicKey);
  34. framework.Entity2Pda = addEntity.Pda;
  35. await framework.SendAndConfirmInstruction(addEntity.Instruction);
  36. }
  37. public static async Task AddEntity3(Framework framework) {
  38. var addEntity = await Bolt.World.AddEntity(framework.Client, framework.WorldPda, framework.Wallet.Account.PublicKey);
  39. await framework.SendAndConfirmInstruction(addEntity.Instruction);
  40. }
  41. public static async Task AddEntity4WithSeed(Framework framework) {
  42. var addEntity = await Bolt.World.AddEntity(framework.Client, framework.WorldPda, framework.Wallet.Account.PublicKey, "custom-seed");
  43. framework.Entity4Pda = addEntity.Pda;
  44. await framework.SendAndConfirmInstruction(addEntity.Instruction);
  45. }
  46. public static async Task InitializeVelocityComponentOnEntity1WithSeed(Framework framework) {
  47. var initializeComponent = await Bolt.World.InitializeComponent(framework.Wallet.Account.PublicKey, framework.Entity1Pda, framework.ExampleComponentVelocity, "component-velocity", framework.Wallet.Account.PublicKey);
  48. framework.ComponentVelocityEntity1Pda = initializeComponent.Pda;
  49. await framework.SendAndConfirmInstruction(initializeComponent.Instruction);
  50. }
  51. public static async Task InitializePositionComponentOnEntity1(Framework framework) {
  52. var initializeComponent = await Bolt.World.InitializeComponent(framework.Wallet.Account.PublicKey, framework.Entity1Pda, framework.ExampleComponentPosition);
  53. framework.ComponentPositionEntity1Pda = initializeComponent.Pda;
  54. await framework.SendAndConfirmInstruction(initializeComponent.Instruction);
  55. }
  56. public static async Task InitializePositionComponentOnEntity2(Framework framework) {
  57. var initializeComponent = await Bolt.World.InitializeComponent(framework.Wallet.Account.PublicKey, framework.Entity2Pda, framework.ExampleComponentPosition);
  58. framework.ComponentPositionEntity2Pda = initializeComponent.Pda;
  59. await framework.SendAndConfirmInstruction(initializeComponent.Instruction);
  60. }
  61. public static async Task InitializePositionComponentOnEntity4(Framework framework) {
  62. var initializeComponent = await Bolt.World.InitializeComponent(framework.Wallet.Account.PublicKey, framework.Entity4Pda, framework.ExampleComponentPosition);
  63. framework.ComponentPositionEntity4Pda = initializeComponent.Pda;
  64. await framework.SendAndConfirmInstruction(initializeComponent.Instruction);
  65. }
  66. public static async Task CheckPositionOnEntity1IsDefault(Framework framework) {
  67. var accountInfo = await framework.GetAccountInfo(framework.ComponentPositionEntity1Pda);
  68. var data = Convert.FromBase64String(accountInfo.Data[0]);
  69. var position = Position.Accounts.Position.Deserialize(data);
  70. Assert.AreEqual(0, position.X);
  71. Assert.AreEqual(0, position.Y);
  72. Assert.AreEqual(0, position.Z);
  73. }
  74. public static async Task ApplySimpleMovementSystemUpOnEntity1(Framework framework) {
  75. var apply = new ApplyAccounts() {
  76. Authority = framework.Wallet.Account.PublicKey,
  77. BoltSystem = framework.SystemSimpleMovement,
  78. World = framework.WorldPda,
  79. };
  80. var instruction = WorldProgram.Apply(apply, Bolt.World.SerializeArgs(new { direction = "Up" }));
  81. instruction.Keys.Add(AccountMeta.ReadOnly(framework.ExampleComponentPosition, false));
  82. instruction.Keys.Add(AccountMeta.Writable(framework.ComponentPositionEntity1Pda, false));
  83. await framework.SendAndConfirmInstruction(instruction);
  84. var accountInfo = await framework.GetAccountInfo(framework.ComponentPositionEntity1Pda);
  85. var data = Convert.FromBase64String(accountInfo.Data[0]);
  86. var position = Position.Accounts.Position.Deserialize(data);
  87. Assert.AreEqual(0, position.X);
  88. Assert.AreEqual(1, position.Y);
  89. Assert.AreEqual(0, position.Z);
  90. }
  91. public static async Task ApplySimpleMovementSystemRightOnEntity1(Framework framework) {
  92. var instruction = Bolt.World.ApplySystem(
  93. framework.WorldPda,
  94. framework.SystemSimpleMovement,
  95. new Bolt.World.EntityType[] {
  96. new Bolt.World.EntityType(framework.Entity1Pda, new PublicKey[] { framework.ExampleComponentPosition })
  97. },
  98. new { direction = "Right" },
  99. framework.Wallet.Account.PublicKey
  100. );
  101. await framework.SendAndConfirmInstruction(instruction);
  102. var accountInfo = await framework.GetAccountInfo(framework.ComponentPositionEntity1Pda);
  103. var data = Convert.FromBase64String(accountInfo.Data[0]);
  104. var position = Position.Accounts.Position.Deserialize(data);
  105. Assert.AreEqual(1, position.X);
  106. Assert.AreEqual(1, position.Y);
  107. Assert.AreEqual(0, position.Z);
  108. }
  109. public static async Task DestroyVelocityComponentOnEntity1(Framework framework) {
  110. var receiver = new Wallet(new Mnemonic(WordList.English, WordCount.Twelve));
  111. var componentBalance = await framework.Client.GetBalanceAsync(framework.ComponentVelocityEntity1Pda);
  112. var destroyComponent = await Bolt.World.DestroyComponent(framework.Wallet.Account.PublicKey, receiver.Account.PublicKey, framework.Entity1Pda, framework.ExampleComponentVelocity, "component-velocity");
  113. await framework.SendAndConfirmInstruction(destroyComponent.Instruction);
  114. var receiverBalance = await framework.Client.GetBalanceAsync(receiver.Account.PublicKey);
  115. Assert.AreEqual(componentBalance.Result.Value, receiverBalance.Result.Value);
  116. }
  117. }
  118. }