events.js 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. const anchor = require("@project-serum/anchor");
  2. const assert = require("assert");
  3. describe("events", () => {
  4. // Configure the client to use the local cluster.
  5. anchor.setProvider(anchor.Provider.env());
  6. const program = anchor.workspace.Events;
  7. it("Is initialized!", async () => {
  8. let listener = null;
  9. let [event, slot] = await new Promise((resolve, _reject) => {
  10. listener = program.addEventListener("MyEvent", (event, slot) => {
  11. resolve([event, slot]);
  12. });
  13. program.rpc.initialize();
  14. });
  15. await program.removeEventListener(listener);
  16. assert.ok(slot > 0);
  17. assert.ok(event.data.toNumber() === 5);
  18. assert.ok(event.label === "hello");
  19. });
  20. it("Multiple events", async () => {
  21. // Sleep so we don't get this transaction has already been processed.
  22. await sleep(2000);
  23. let listenerOne = null;
  24. let listenerTwo = null;
  25. let [eventOne, slotOne] = await new Promise((resolve, _reject) => {
  26. listenerOne = program.addEventListener("MyEvent", (event, slot) => {
  27. resolve([event, slot]);
  28. });
  29. program.rpc.initialize();
  30. });
  31. let [eventTwo, slotTwo] = await new Promise((resolve, _reject) => {
  32. listenerTwo = program.addEventListener("MyOtherEvent", (event, slot) => {
  33. resolve([event, slot]);
  34. });
  35. program.rpc.testEvent();
  36. });
  37. await program.removeEventListener(listenerOne);
  38. await program.removeEventListener(listenerTwo);
  39. assert.ok(slotOne > 0);
  40. assert.ok(eventOne.data.toNumber() === 5);
  41. assert.ok(eventOne.label === "hello");
  42. assert.ok(slotTwo > 0);
  43. assert.ok(eventTwo.data.toNumber() === 6);
  44. assert.ok(eventTwo.label === "bye");
  45. });
  46. });
  47. function sleep(ms) {
  48. return new Promise((resolve) => setTimeout(resolve, ms));
  49. }