ECSTest.cs 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  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 InitializeComponentVelocityOnEntity1WithSeed(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. }
  26. public static async Task AddEntity1(Framework framework) {
  27. var addEntity = await Bolt.World.AddEntity(framework.Client, framework.WorldPda, framework.Wallet.Account.PublicKey);
  28. framework.Entity1Pda = addEntity.Pda;
  29. await framework.SendAndConfirmInstruction(addEntity.Instruction);
  30. }
  31. public static async Task AddEntity2(Framework framework) {
  32. var addEntity = await Bolt.World.AddEntity(framework.Client, framework.WorldPda, framework.Wallet.Account.PublicKey);
  33. framework.Entity2Pda = addEntity.Pda;
  34. await framework.SendAndConfirmInstruction(addEntity.Instruction);
  35. }
  36. public static async Task AddEntity3(Framework framework) {
  37. var addEntity = await Bolt.World.AddEntity(framework.Client, framework.WorldPda, framework.Wallet.Account.PublicKey);
  38. await framework.SendAndConfirmInstruction(addEntity.Instruction);
  39. }
  40. public static async Task AddEntity4WithSeed(Framework framework) {
  41. var addEntity = await Bolt.World.AddEntity(framework.Client, framework.WorldPda, framework.Wallet.Account.PublicKey, "custom-seed");
  42. framework.Entity4Pda = addEntity.Pda;
  43. await framework.SendAndConfirmInstruction(addEntity.Instruction);
  44. }
  45. public static async Task InitializeComponentVelocityOnEntity1WithSeed(Framework framework) {
  46. var initializeComponent = await Bolt.World.InitializeComponent(framework.Wallet.Account.PublicKey, framework.Entity1Pda, framework.ExampleComponentVelocity, "component-velocity");
  47. framework.ComponentVelocityEntity1Pda = initializeComponent.Pda;
  48. await framework.SendAndConfirmInstruction(initializeComponent.Instruction);
  49. }
  50. public static async Task InitializePositionComponentOnEntity1(Framework framework) {
  51. var initializeComponent = await Bolt.World.InitializeComponent(framework.Wallet.Account.PublicKey, framework.Entity1Pda, framework.ExampleComponentPosition);
  52. framework.ComponentPositionEntity1Pda = initializeComponent.Pda;
  53. await framework.SendAndConfirmInstruction(initializeComponent.Instruction);
  54. }
  55. public static async Task InitializePositionComponentOnEntity2(Framework framework) {
  56. var initializeComponent = await Bolt.World.InitializeComponent(framework.Wallet.Account.PublicKey, framework.Entity2Pda, framework.ExampleComponentPosition);
  57. framework.ComponentPositionEntity2Pda = initializeComponent.Pda;
  58. await framework.SendAndConfirmInstruction(initializeComponent.Instruction);
  59. }
  60. public static async Task InitializePositionComponentOnEntity4(Framework framework) {
  61. var initializeComponent = await Bolt.World.InitializeComponent(framework.Wallet.Account.PublicKey, framework.Entity4Pda, framework.ExampleComponentPosition);
  62. framework.ComponentPositionEntity4Pda = initializeComponent.Pda;
  63. await framework.SendAndConfirmInstruction(initializeComponent.Instruction);
  64. }
  65. public static async Task CheckPositionOnEntity1IsDefault(Framework framework) {
  66. var accountInfo = await framework.GetAccountInfo(framework.ComponentPositionEntity1Pda);
  67. var data = Convert.FromBase64String(accountInfo.Data[0]);
  68. var position = Position.Accounts.Position.Deserialize(data);
  69. Assert.AreEqual(0, position.X);
  70. Assert.AreEqual(0, position.Y);
  71. Assert.AreEqual(0, position.Z);
  72. }
  73. public static async Task ApplySimpleMovementSystemUpOnEntity1(Framework framework) {
  74. var apply = new ApplyAccounts() {
  75. Authority = framework.Wallet.Account.PublicKey,
  76. BoltSystem = framework.SystemSimpleMovement,
  77. World = framework.WorldPda,
  78. };
  79. var instruction = WorldProgram.Apply(apply, Bolt.World.SerializeArgs(new { direction = "Up" }));
  80. instruction.Keys.Add(AccountMeta.ReadOnly(framework.ExampleComponentPosition, false));
  81. instruction.Keys.Add(AccountMeta.Writable(framework.ComponentPositionEntity1Pda, false));
  82. await framework.SendAndConfirmInstruction(instruction);
  83. var accountInfo = await framework.GetAccountInfo(framework.ComponentPositionEntity1Pda);
  84. var data = Convert.FromBase64String(accountInfo.Data[0]);
  85. var position = Position.Accounts.Position.Deserialize(data);
  86. Assert.AreEqual(0, position.X);
  87. Assert.AreEqual(1, position.Y);
  88. Assert.AreEqual(0, position.Z);
  89. }
  90. public static async Task ApplySimpleMovementSystemRightOnEntity1(Framework framework) {
  91. var instruction = Bolt.World.ApplySystem(
  92. framework.WorldPda,
  93. framework.SystemSimpleMovement,
  94. new Bolt.World.EntityType[] {
  95. new Bolt.World.EntityType(framework.Entity1Pda, new PublicKey[] { framework.ExampleComponentPosition })
  96. },
  97. new { direction = "Right" },
  98. framework.Wallet.Account.PublicKey
  99. );
  100. await framework.SendAndConfirmInstruction(instruction);
  101. var accountInfo = await framework.GetAccountInfo(framework.ComponentPositionEntity1Pda);
  102. var data = Convert.FromBase64String(accountInfo.Data[0]);
  103. var position = Position.Accounts.Position.Deserialize(data);
  104. Assert.AreEqual(1, position.X);
  105. Assert.AreEqual(1, position.Y);
  106. Assert.AreEqual(0, position.Z);
  107. }
  108. public static async Task DestroyVelocityComponentOnEntity1(Framework framework) {
  109. var receiver = new Wallet(new Mnemonic(WordList.English, WordCount.Twelve));
  110. var componentBalance = await framework.Client.GetBalanceAsync(framework.ComponentVelocityEntity1Pda);
  111. var destroyComponent = await Bolt.World.DestroyComponent(framework.Wallet.Account.PublicKey, receiver.Account.PublicKey, framework.Entity1Pda, framework.ExampleComponentVelocity);
  112. await framework.SendAndConfirmInstruction(destroyComponent.Instruction);
  113. var receiverBalance = await framework.Client.GetBalanceAsync(receiver.Account.PublicKey);
  114. Assert.AreEqual(componentBalance, receiverBalance);
  115. }
  116. }
  117. }