Files
bun.sh/test/js/node/zlib/zlib.test.js
argosphil 0714b3a06b fix: throw on gunzipSync/inflateSync error (#8901)
* fix: zlib functions should throw an error if appropriate

Fixes #8887.

* Tests for #8887

* fix: drive-by fix to avoid unreachable code being reached on error
2024-02-14 18:01:05 -08:00

67 lines
2.1 KiB
JavaScript

import { describe, it, expect } from "bun:test";
import { gzipSync, deflateSync, inflateSync, gunzipSync } from "bun";
describe("zlib", () => {
it("should be able to deflate and inflate", () => {
const data = new TextEncoder().encode("Hello World!".repeat(1));
const compressed = deflateSync(data);
const decompressed = inflateSync(compressed);
expect(decompressed.join("")).toBe(data.join(""));
});
it("should be able to gzip and gunzip", () => {
const data = new TextEncoder().encode("Hello World!".repeat(1));
const compressed = gzipSync(data);
const decompressed = gunzipSync(compressed);
expect(decompressed.join("")).toBe(data.join(""));
});
it("should throw on invalid raw deflate data", () => {
const data = new TextEncoder().encode("Hello World!".repeat(1));
expect(() => inflateSync(data)).toThrow(new Error("invalid stored block lengths"));
});
it("should throw on invalid gzip data", () => {
const data = new TextEncoder().encode("Hello World!".repeat(1));
expect(() => gunzipSync(data)).toThrow(new Error("incorrect header check"));
});
});
import * as zlib from "node:zlib";
import * as fs from "node:fs";
import * as buffer from "node:buffer";
describe("zlib.gunzip", () => {
it("should be able to unzip a Buffer and return an unzipped Buffer", async () => {
const content = fs.readFileSync(import.meta.dir + "/fixture.html.gz");
return new Promise((resolve, reject) => {
zlib.gunzip(content, (error, data) => {
if (error) {
reject(error);
return;
}
expect(data !== null).toBe(true);
expect(buffer.Buffer.isBuffer(data)).toBe(true);
resolve(true);
});
});
});
});
describe("zlib.brotli*", () => {
it("returns stub", () => {
for (const method of [
"BrotliCompress",
"BrotliDecompress",
"brotliCompress",
"brotliCompressSync",
"brotliDecompress",
"brotliDecompressSync",
"createBrotliCompress",
"createBrotliDecompress",
]) {
expect(() => zlib[method]()).toThrow(new Error(`zlib.${method} is not implemented`));
}
});
});