mirror of
https://github.com/denoland/deno.git
synced 2024-12-17 21:03:01 -05:00
89 lines
2.5 KiB
TypeScript
89 lines
2.5 KiB
TypeScript
|
/**
|
||
|
* Tar test
|
||
|
*
|
||
|
* **test summary**
|
||
|
* - create a tar archive in memory containing output.txt and dir/tar.ts.
|
||
|
* - read and deflate a tar archive containing output.txt
|
||
|
*
|
||
|
* **to run this test**
|
||
|
* deno run --allow-read archive/tar_test.ts
|
||
|
*/
|
||
|
import { test, runIfMain } from "../testing/mod.ts";
|
||
|
import { assertEquals } from "../testing/asserts.ts";
|
||
|
|
||
|
import { Tar, Untar } from "./tar.ts";
|
||
|
import { resolve } from "../fs/path/mod.ts";
|
||
|
|
||
|
const filePath = resolve("archive", "testdata", "example.txt");
|
||
|
|
||
|
test(async function createTarArchive(): Promise<void> {
|
||
|
// initialize
|
||
|
const tar = new Tar();
|
||
|
|
||
|
// put data on memory
|
||
|
const content = new TextEncoder().encode("hello tar world!");
|
||
|
await tar.append("output.txt", {
|
||
|
reader: new Deno.Buffer(content),
|
||
|
contentSize: content.byteLength
|
||
|
});
|
||
|
|
||
|
// put a file
|
||
|
await tar.append("dir/tar.ts", { filePath });
|
||
|
|
||
|
// write tar data to a buffer
|
||
|
const writer = new Deno.Buffer(),
|
||
|
wrote = await Deno.copy(writer, tar.getReader());
|
||
|
|
||
|
// 3072 = 512 (header) + 512 (content) + 512 (header) + 512 (content) + 1024 (footer)
|
||
|
assertEquals(wrote, 3072);
|
||
|
});
|
||
|
|
||
|
test(async function deflateTarArchive(): Promise<void> {
|
||
|
const fileName = "output.txt";
|
||
|
const text = "hello tar world!";
|
||
|
|
||
|
// create a tar archive
|
||
|
const tar = new Tar();
|
||
|
const content = new TextEncoder().encode(text);
|
||
|
await tar.append(fileName, {
|
||
|
reader: new Deno.Buffer(content),
|
||
|
contentSize: content.byteLength
|
||
|
});
|
||
|
|
||
|
// read data from a tar archive
|
||
|
const untar = new Untar(tar.getReader());
|
||
|
const buf = new Deno.Buffer();
|
||
|
const result = await untar.extract(buf);
|
||
|
const untarText = new TextDecoder("utf-8").decode(buf.bytes());
|
||
|
|
||
|
// tests
|
||
|
assertEquals(result.fileName, fileName);
|
||
|
assertEquals(untarText, text);
|
||
|
});
|
||
|
|
||
|
test(async function appendFileWithLongNameToTarArchive(): Promise<void> {
|
||
|
// 9 * 15 + 13 = 148 bytes
|
||
|
const fileName = new Array(10).join("long-file-name/") + "file-name.txt";
|
||
|
const text = "hello tar world!";
|
||
|
|
||
|
// create a tar archive
|
||
|
const tar = new Tar();
|
||
|
const content = new TextEncoder().encode(text);
|
||
|
await tar.append(fileName, {
|
||
|
reader: new Deno.Buffer(content),
|
||
|
contentSize: content.byteLength
|
||
|
});
|
||
|
|
||
|
// read data from a tar archive
|
||
|
const untar = new Untar(tar.getReader());
|
||
|
const buf = new Deno.Buffer();
|
||
|
const result = await untar.extract(buf);
|
||
|
const untarText = new TextDecoder("utf-8").decode(buf.bytes());
|
||
|
|
||
|
// tests
|
||
|
assertEquals(result.fileName, fileName);
|
||
|
assertEquals(untarText, text);
|
||
|
});
|
||
|
|
||
|
runIfMain(import.meta);
|