tui-slash-autocomplete.test.ts 1.3 KB

123456789101112131415161718192021222324252627282930313233
  1. import { describe, expect, it } from "vitest";
  2. import {
  3. applySlashSuggestion,
  4. getSlashSuggestions,
  5. getNextSlashSelection,
  6. SLASH_COMMANDS,
  7. } from "../tui/slash-autocomplete.js";
  8. describe("tui slash autocomplete", () => {
  9. it("filters slash commands by prefix", () => {
  10. expect(getSlashSuggestions("/st", SLASH_COMMANDS)).toEqual(["/status"]);
  11. expect(getSlashSuggestions("/w", SLASH_COMMANDS)).toEqual(["/write"]);
  12. expect(getSlashSuggestions("/o", SLASH_COMMANDS)).toEqual(["/open <book>"]);
  13. expect(getSlashSuggestions("/d", SLASH_COMMANDS)).toEqual(["/depth <light|normal|deep>"]);
  14. });
  15. it("does not suggest anything for non-slash input", () => {
  16. expect(getSlashSuggestions("status", SLASH_COMMANDS)).toEqual([]);
  17. expect(getSlashSuggestions("", SLASH_COMMANDS)).toEqual([]);
  18. });
  19. it("cycles the active suggestion index", () => {
  20. expect(getNextSlashSelection(0, 3, "down")).toBe(1);
  21. expect(getNextSlashSelection(2, 3, "down")).toBe(0);
  22. expect(getNextSlashSelection(0, 3, "up")).toBe(2);
  23. });
  24. it("applies the selected suggestion to the composer input", () => {
  25. expect(applySlashSuggestion("/st", ["/status"], 0)).toBe("/status");
  26. expect(applySlashSuggestion("/o", ["/open <book>"], 0)).toBe("/open ");
  27. expect(applySlashSuggestion("/d", ["/depth <light|normal|deep>"], 0)).toBe("/depth ");
  28. });
  29. });