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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
|
// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license.
import {
assert,
assertEquals,
} from "../../../test_util/std/testing/asserts.ts";
import { deferred } from "../../../test_util/std/async/deferred.ts";
import { fromFileUrl, relative } from "../../../test_util/std/path/mod.ts";
import {
brotliCompressSync,
brotliDecompressSync,
createBrotliCompress,
createBrotliDecompress,
createDeflate,
} from "node:zlib";
import { Buffer } from "node:buffer";
import { createReadStream, createWriteStream } from "node:fs";
Deno.test("brotli compression sync", () => {
const buf = Buffer.from("hello world");
const compressed = brotliCompressSync(buf);
const decompressed = brotliDecompressSync(compressed);
assertEquals(decompressed.toString(), "hello world");
});
Deno.test("brotli compression", async () => {
const promise = deferred();
const compress = createBrotliCompress();
const filePath = relative(
Deno.cwd(),
fromFileUrl(new URL("./testdata/lorem_ipsum.txt", import.meta.url)),
);
const input = createReadStream(filePath);
const output = createWriteStream("lorem_ipsum.txt.br");
const stream = input.pipe(compress).pipe(output);
stream.on("finish", () => {
const decompress = createBrotliDecompress();
const input2 = createReadStream("lorem_ipsum.txt.br");
const output2 = createWriteStream("lorem_ipsum.txt");
const stream2 = input2.pipe(decompress).pipe(output2);
stream2.on("finish", () => {
promise.resolve();
});
});
await promise;
const content = Deno.readTextFileSync("lorem_ipsum.txt");
assert(content.startsWith("Lorem ipsum dolor sit amet"));
try {
Deno.removeSync("lorem_ipsum.txt.br");
} catch {
// pass
}
try {
Deno.removeSync("lorem_ipsum.txt");
} catch {
// pass
}
});
Deno.test("brotli end-to-end with 4097 bytes", () => {
const a = "a".repeat(4097);
const compressed = brotliCompressSync(a);
const decompressed = brotliDecompressSync(compressed);
assertEquals(decompressed.toString(), a);
});
Deno.test(
"zlib create deflate with dictionary",
{ sanitizeResources: false },
async () => {
const promise = deferred();
const handle = createDeflate({
dictionary: Buffer.alloc(0),
});
handle.on("close", () => promise.resolve());
handle.end();
handle.destroy();
await promise;
},
);
|