import {expect, test} from 'vitest'; import {computeMissing, parseResources} from './resources.js'; import {encodeResources} from './resources.server.js'; test('cache', async () => { class TestCache { current; async get() { return new Promise((resolve) => { resolve(this.current); }); } async set(manifest) { return new Promise((resolve) => { this.current = manifest; resolve(); }); } } const cache = new TestCache(); expect(await computeMissing(await cache.get(), {foo: 'bar'})).to.deep.equal(['foo']); await cache.set({foo: {hash: 'bar'}}); expect(await computeMissing(await cache.get(), {foo: 'bar'})).to.deep.equal([]); expect(await computeMissing(await cache.get(), {foo: 'bar', baz: '32'})).to.deep.equal(['baz']); await cache.set({foo: {hash: 'bar'}, baz: '32'}); expect(await computeMissing(await cache.get(), {foo: 'bar', baz: '64'})).to.deep.equal(['baz']); }); test('codec', async () => { const asset = { asset: (new Uint8Array('hello'.split('').map((letter) => letter.charCodeAt(0)))).buffer, hash: (new Uint8Array(Array(20).fill(0).map((_, i) => i))).buffer, }; const buffer = await encodeResources([ asset, ]); const parsed = await parseResources(['hello.txt'], buffer); expect('hello.txt' in parsed).to.equal(true); expect(parsed['hello.txt'].hash).to.equal('000102030405060708090a0b0c0d0e0f10111213'); const hello = new Uint8Array(parsed['hello.txt'].asset); for (let i = 0; i < 5; ++i) { expect(hello[i]).to.equal('hello'.charCodeAt(i)); } });