OXYGENHUB
# f902d5b8bfeb oxygenhub-vscode / test / refs.test.mjs
1.7 KiB · last changed #N and @user completion, and hovers on #N (0.4.0) 1 month ago source blame history raw
1
// Parsing #N and @user as they are typed and hovered.
2
import { test } from "node:test";
3
import assert from "node:assert/strict";
4
import { typingAt, numberAt, rootFromScmQuery } from "../out/refs.mjs";
5
6
test("what is being typed", () => {
7
  assert.deepEqual(typingAt("Fixes #"), { kind: "number", prefix: "", start: 6 });
8
  assert.deepEqual(typingAt("Fixes #1"), { kind: "number", prefix: "1", start: 6 });
9
  assert.deepEqual(typingAt("#12"), { kind: "number", prefix: "12", start: 0 });
10
  assert.deepEqual(typingAt("(see #4"), { kind: "number", prefix: "4", start: 5 });
11
  assert.deepEqual(typingAt("cc @an"), { kind: "user", prefix: "an", start: 3 });
12
  assert.deepEqual(typingAt("@"), { kind: "user", prefix: "", start: 0 });
13
  assert.equal(typingAt("a#1"), undefined, "not at a word start");
14
  assert.equal(typingAt("mail@host"), undefined, "an address is not a mention");
15
  assert.equal(typingAt("#1 done"), undefined, "the cursor has moved on");
16
});
17
18
test("which reference a position sits on", () => {
19
  const line = "Fixes #12 and (#7), not a#3";
20
  assert.deepEqual(numberAt(line, 7), { number: 12, start: 6, end: 9 });
21
  assert.deepEqual(numberAt(line, 9), { number: 12, start: 6, end: 9 });
22
  assert.deepEqual(numberAt(line, 16), { number: 7, start: 15, end: 17 });
23
  assert.equal(numberAt(line, 2), undefined);
24
  assert.equal(numberAt(line, 26), undefined, "a#3 is not a reference");
25
});
26
27
test("the SCM box names its repository", () => {
28
  assert.equal(rootFromScmQuery("rootUri=" + encodeURIComponent("file:///home/andy/development/oxygen")), "/home/andy/development/oxygen");
29
  assert.equal(rootFromScmQuery("rootUri=" + encodeURIComponent("file:///home/a%20b/x")), "/home/a b/x");
30
  assert.equal(rootFromScmQuery(""), undefined);
31
});