summaryrefslogtreecommitdiff
path: root/node_modules/blake3-wasm/dist/browser.test.js
diff options
context:
space:
mode:
authorakiyamn2023-09-24 23:22:21 +1000
committerakiyamn2023-09-24 23:22:21 +1000
commit4e87195739f2a5d9a05451b48773c8afdc680765 (patch)
tree9cba501844a4a11dcbdffc4050ed8189561c55ed /node_modules/blake3-wasm/dist/browser.test.js
downloadprice-tracker-worker-4e87195739f2a5d9a05451b48773c8afdc680765.tar.gz
price-tracker-worker-4e87195739f2a5d9a05451b48773c8afdc680765.zip
Initial commit (by create-cloudflare CLI)
Diffstat (limited to 'node_modules/blake3-wasm/dist/browser.test.js')
-rw-r--r--node_modules/blake3-wasm/dist/browser.test.js266
1 files changed, 266 insertions, 0 deletions
diff --git a/node_modules/blake3-wasm/dist/browser.test.js b/node_modules/blake3-wasm/dist/browser.test.js
new file mode 100644
index 0000000..b0da1cb
--- /dev/null
+++ b/node_modules/blake3-wasm/dist/browser.test.js
@@ -0,0 +1,266 @@
+"use strict";
+var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
+ return new (P || (P = Promise))(function (resolve, reject) {
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
+ });
+};
+var __importDefault = (this && this.__importDefault) || function (mod) {
+ return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const chai_1 = require("chai");
+const fs_1 = require("fs");
+const http_1 = require("http");
+const os_1 = require("os");
+const path_1 = require("path");
+const puppeteer_1 = __importDefault(require("puppeteer"));
+const serve_handler_1 = __importDefault(require("serve-handler"));
+const webpack_1 = __importDefault(require("webpack"));
+const test_helpers_1 = require("./base/test-helpers");
+// Much of the browser code is also used in Node's wasm. We test things more
+// thoroughly there because tests are easier to write and debug, these tests
+// are primarily for sanity and checking browser-specific behavior.
+describe('browser', () => {
+ const addInputs = `window.inputs = ${JSON.stringify(test_helpers_1.inputs)}`;
+ describe('webpack', () => {
+ const testDir = path_1.resolve(os_1.tmpdir(), 'blake3-browser-test');
+ let server;
+ let page;
+ /**
+ * Builds the browser lib into the testDir.
+ */
+ function buildWebpack() {
+ return __awaiter(this, void 0, void 0, function* () {
+ try {
+ fs_1.mkdirSync(testDir);
+ }
+ catch (_a) {
+ // already exists, probably
+ }
+ fs_1.writeFileSync(path_1.resolve(testDir, 'entry-src.js'), `import("blake3/browser").then(b3 => window.blake3 = b3);`);
+ const stats = yield new Promise((res, rej) => webpack_1.default({
+ mode: 'production',
+ devtool: 'source-map',
+ entry: path_1.resolve(testDir, 'entry-src.js'),
+ output: {
+ path: testDir,
+ filename: 'main.js',
+ },
+ resolve: {
+ alias: {
+ 'blake3/browser': path_1.resolve(__dirname, '../', 'browser.js'),
+ },
+ },
+ }, (err, stats) => (err ? rej(err) : res(stats))));
+ if (stats.hasErrors()) {
+ throw stats.toString('errors-only');
+ }
+ fs_1.writeFileSync(path_1.resolve(testDir, 'index.html'), `<script src="/main.js"></script>`);
+ });
+ }
+ function serve() {
+ return __awaiter(this, void 0, void 0, function* () {
+ server = http_1.createServer((req, res) => serve_handler_1.default(req, res, { public: testDir }));
+ yield new Promise(resolve => server.listen(0, resolve));
+ });
+ }
+ before(function () {
+ return __awaiter(this, void 0, void 0, function* () {
+ yield buildWebpack();
+ yield serve();
+ this.timeout(20 * 1000);
+ const { port } = server.address();
+ const browser = yield puppeteer_1.default.launch({
+ executablePath: 'google-chrome-stable',
+ args: ['--no-sandbox'],
+ });
+ page = yield browser.newPage();
+ yield page.goto(`http://localhost:${port}`);
+ yield page.waitForFunction('!!window.blake3');
+ yield page.evaluate(addInputs);
+ });
+ });
+ runTests({
+ get page() {
+ return page;
+ },
+ });
+ after(() => {
+ page === null || page === void 0 ? void 0 : page.browser().close();
+ server === null || server === void 0 ? void 0 : server.close();
+ });
+ });
+ describe('native browser', () => {
+ let server;
+ let page;
+ function serve() {
+ return __awaiter(this, void 0, void 0, function* () {
+ server = http_1.createServer((req, res) => serve_handler_1.default(req, res, { public: path_1.resolve(__dirname, '..') }));
+ yield new Promise(resolve => server.listen(0, resolve));
+ });
+ }
+ before(function () {
+ return __awaiter(this, void 0, void 0, function* () {
+ yield serve();
+ this.timeout(20 * 1000);
+ const { port } = server.address();
+ const browser = yield puppeteer_1.default.launch({
+ executablePath: 'google-chrome-stable',
+ args: ['--no-sandbox'],
+ });
+ page = yield browser.newPage();
+ page.on('console', console.log);
+ page.on('pageerror', console.log);
+ page.on('error', console.log);
+ yield page.goto(`http://localhost:${port}/browser-async.test.html`);
+ yield page.waitForFunction('!!window.blake3');
+ yield page.evaluate(addInputs);
+ });
+ });
+ runTests({
+ get page() {
+ return page;
+ },
+ });
+ after(() => {
+ page === null || page === void 0 ? void 0 : page.browser().close();
+ server.close();
+ });
+ });
+});
+function runTests(opts) {
+ it('hashes a string', () => __awaiter(this, void 0, void 0, function* () {
+ const result = yield opts.page.evaluate('blake3.hash(inputs.large.input).toString("hex")');
+ chai_1.expect(result).to.equal(test_helpers_1.inputs.large.hash.toString('hex'));
+ }));
+ describe('input encoding', () => {
+ it('hashes a uint8array', () => __awaiter(this, void 0, void 0, function* () {
+ const contents = [...new Uint8Array(Buffer.from(test_helpers_1.inputs.hello.input))];
+ const result = yield opts.page.evaluate(`blake3.hash(new Uint8Array([${contents.join(',')}])).toString("hex")`);
+ chai_1.expect(result).to.equal(test_helpers_1.inputs.hello.hash.toString('hex'));
+ }));
+ it('hashes a string', () => __awaiter(this, void 0, void 0, function* () {
+ const result = yield opts.page.evaluate('blake3.hash(inputs.large.input).toString("hex")');
+ chai_1.expect(result).to.equal(test_helpers_1.inputs.large.hash.toString('hex'));
+ }));
+ it('customizes output length', () => __awaiter(this, void 0, void 0, function* () {
+ const result = yield opts.page.evaluate('blake3.hash(inputs.hello.input, { length: 16 }).toString("hex")');
+ chai_1.expect(result).to.equal(test_helpers_1.inputs.hello.hash.slice(0, 16).toString('hex'));
+ }));
+ });
+ describe('output encoding', () => {
+ const tcases = [
+ { encoding: 'hex', expected: test_helpers_1.inputs.hello.hash.toString('hex') },
+ { encoding: 'base64', expected: test_helpers_1.inputs.hello.hash.toString('base64') },
+ { encoding: 'utf8', expected: test_helpers_1.inputs.hello.hash.toString('utf8') },
+ ];
+ tcases.forEach(({ encoding, expected }) => it(encoding, () => __awaiter(this, void 0, void 0, function* () {
+ const result = yield opts.page.evaluate(`blake3.hash(inputs.hello.input).toString("${encoding}")`);
+ chai_1.expect(result).to.equal(expected);
+ })));
+ it('raw', () => __awaiter(this, void 0, void 0, function* () {
+ const result = (yield opts.page.evaluate(`blake3.hash(inputs.hello.input)`));
+ const actual = Buffer.alloc(32);
+ for (let i = 0; i < actual.length; i++) {
+ actual[i] = result[i]; // it comes as a plain object, we need to convert it to a buffer
+ }
+ chai_1.expect(actual).to.deep.equal(test_helpers_1.inputs.hello.hash);
+ }));
+ });
+ describe('hash class', () => {
+ it('digests', () => __awaiter(this, void 0, void 0, function* () {
+ const result = yield opts.page.evaluate(`(() => {
+ const hash = blake3.createHash();
+ ${[...Buffer.from(test_helpers_1.inputs.hello.input)]
+ .map(byte => `hash.update(new Uint8Array([${byte}]));`)
+ .join('\n')}
+ return hash.digest('hex');
+ })()`);
+ chai_1.expect(result).to.equal(test_helpers_1.inputs.hello.hash.toString('hex'));
+ }));
+ it('customizes the output length', () => __awaiter(this, void 0, void 0, function* () {
+ const result = yield opts.page.evaluate(`(() => {
+ const hash = blake3.createHash();
+ hash.update(${JSON.stringify(test_helpers_1.inputs.hello.input)});
+ return hash.digest('hex', { length: 16 });
+ })()`);
+ chai_1.expect(result).to.equal(test_helpers_1.inputs.hello.hash.slice(0, 16).toString('hex'));
+ }));
+ it('returns a hash instance from digest', () => __awaiter(this, void 0, void 0, function* () {
+ const result = yield opts.page.evaluate(`(() => {
+ const hash = blake3.createHash();
+ ${[...Buffer.from(test_helpers_1.inputs.hello.input)]
+ .map(byte => `hash.update(new Uint8Array([${byte}]));`)
+ .join('\n')}
+ return hash.digest('hex');
+ })()`);
+ chai_1.expect(result).to.equal(test_helpers_1.inputs.hello.hash.toString('hex'));
+ }));
+ });
+ describe('reader', () => {
+ it('is sane with a Hash', () => __awaiter(this, void 0, void 0, function* () {
+ const result = yield opts.page.evaluate(`(() => {
+ const hash = blake3.createHash();
+ hash.update("hello");
+
+ return blake3.using(hash.reader(), reader => [
+ reader.read(48).toString('hex'),
+ reader.toArray().toString('hex'),
+ reader.toString('hex'),
+ ]);
+ })()`);
+ chai_1.expect(result).to.deep.equal([
+ test_helpers_1.hello48.toString('hex'),
+ test_helpers_1.inputs.hello.hash.toString('hex'),
+ test_helpers_1.inputs.hello.hash.toString('hex'),
+ ]);
+ }));
+ });
+ describe('original test vectors', () => {
+ for (const { inputLen, expectedDerive, expectedHash, expectedKeyed, } of test_helpers_1.ogTestVectors.cases.slice(0, 6)) {
+ describe(`${inputLen}`, () => __awaiter(this, void 0, void 0, function* () {
+ const input = Buffer.alloc(inputLen);
+ for (let i = 0; i < inputLen; i++) {
+ input[i] = i % 251;
+ }
+ const inputStr = `new Uint8Array([${input.join(',')}])`;
+ it('hash()', () => __awaiter(this, void 0, void 0, function* () {
+ const result = yield opts.page.evaluate(`blake3.hash(
+ ${inputStr},
+ { length: ${expectedHash.length / 2} }
+ ).toString("hex")`);
+ chai_1.expect(result).to.equal(expectedHash);
+ }));
+ it('deriveKey()', () => __awaiter(this, void 0, void 0, function* () {
+ const result = yield opts.page.evaluate(`blake3.deriveKey(
+ ${JSON.stringify(test_helpers_1.ogTestVectors.context)},
+ ${inputStr},
+ { length: ${expectedHash.length / 2} }
+ ).toString("hex")`);
+ chai_1.expect(result).to.equal(expectedDerive);
+ }));
+ it('createKeyed()', () => __awaiter(this, void 0, void 0, function* () {
+ const result = yield opts.page.evaluate(`(() => {
+ const hasher = blake3.createKeyed(new Uint8Array([${Buffer.from(test_helpers_1.ogTestVectors.key).join(',')}]));
+ hasher.update(${inputStr});
+ return hasher.digest({ length: ${expectedHash.length / 2} }).toString('hex');
+ })()`);
+ chai_1.expect(result).to.equal(expectedKeyed);
+ }));
+ it('keyedHash()', () => __awaiter(this, void 0, void 0, function* () {
+ const result = yield opts.page.evaluate(`blake3.keyedHash(
+ new Uint8Array([${Buffer.from(test_helpers_1.ogTestVectors.key).join(',')}]),
+ ${inputStr},
+ { length: ${expectedHash.length / 2} }
+ ).toString("hex")`);
+ chai_1.expect(result).to.equal(expectedKeyed);
+ }));
+ }));
+ }
+ });
+}
+//# sourceMappingURL=browser.test.js.map \ No newline at end of file