1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
// Copyright (C) 2026 Danilo M. <danix@danix.xyz>
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License version 2 as
// published by the Free Software Foundation.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// Run: node desktop/modules/clipboard/test_clip.js
// Clip.js is a QML library, so its .pragma line is stripped before node
// evaluates it, as test_perf.js does for Perf.js.
const fs = require("fs");
const assert = require("assert");
const src = fs.readFileSync(__dirname + "/Clip.js", "utf8")
.replace(/^\.pragma library$/m, "");
const C = new Function(src + "\nreturn { parse, filter };")();
const list = [
"812\tgit push --force-with-lease",
"811\t[[ binary data 2 MiB png 2560x1080 ]]",
"810\tA line\twith a tab",
"",
"garbage without a tab",
].join("\n");
const e = C.parse(list);
assert.strictEqual(e.length, 3);
assert.deepStrictEqual(e[0], { line: "812\tgit push --force-with-lease", id: "812",
text: "git push --force-with-lease", image: false });
assert.strictEqual(e[1].image, true);
// Only the first tab separates the id; the rest is the text, and the line is
// kept whole for decode.
assert.strictEqual(e[2].text, "A line\twith a tab");
assert.strictEqual(e[2].line, "810\tA line\twith a tab");
// Text that merely mentions binary data is not an image.
assert.strictEqual(C.parse("9\tthe [[ binary data ]] marker")[0].image, false);
assert.strictEqual(C.filter(e, "").length, 3);
assert.deepStrictEqual(C.filter(e, " PUSH ").map(x => x.id), ["812"]);
assert.deepStrictEqual(C.filter(e, "nothing"), []);
console.log("test_clip: ok");
|