From 32919299ec541c1e6048338ed7486107c5a1f6d2 Mon Sep 17 00:00:00 2001 From: Alexander O'Mara Date: Sat, 18 Jan 2025 22:00:48 -0500 Subject: [PATCH] Test open offset and length combinations --- macho/universal.test.ts | 45 +++++++++++++++++++++++++++++++++++------ macho/universal.ts | 18 +++++++++++++++++ 2 files changed, 57 insertions(+), 6 deletions(-) diff --git a/macho/universal.test.ts b/macho/universal.test.ts index 39b8e9b..209f1ce 100644 --- a/macho/universal.test.ts +++ b/macho/universal.test.ts @@ -5,22 +5,55 @@ import { Universal } from './universal.ts'; const fixtures = fixtureMachos(); -for (const { kind, arch, file, archs } of fixtures) { +for (const [index, { kind, arch, file, archs }] of fixtures.entries()) { Deno.test(`${kind}: ${arch}: ${file}`, async () => { const [macho] = await fixtureMacho(kind, arch, [file]); - const blob = new Blob([macho]); const uni = new Universal(); - await uni.open(blob); + switch (index % 4) { + case 0: { + const blob = new Blob([macho]); + await uni.open(blob); + assertEquals(uni.offset(), 0); + assertEquals(uni.length(), 0); + break; + } + case 1: { + const blob = new Blob([macho]); + await uni.open(blob, 0, blob.size); + assertEquals(uni.offset(), 0); + assertEquals(uni.length(), blob.size); + break; + } + case 2: { + const blob = new Blob([ + new ArrayBuffer(3), + macho, + new ArrayBuffer(3), + ]); + await uni.open(blob, 3); + assertEquals(uni.offset(), 3); + assertEquals(uni.length(), 0); + break; + } + case 3: { + const blob = new Blob([ + new ArrayBuffer(3), + macho, + new ArrayBuffer(3), + ]); + await uni.open(blob, 3, macho.byteLength); + assertEquals(uni.offset(), 3); + assertEquals(uni.length(), macho.byteLength); + break; + } + } assertEquals(uni.isUniversal(), archs.size > 1); const architectures = new Set(); uni.architectures(architectures); - assertEquals(architectures.size, archs.size); - uni.architectures(architectures); - assertEquals(architectures.size, archs.size); }); } diff --git a/macho/universal.ts b/macho/universal.ts index 4b75cff..9235885 100644 --- a/macho/universal.ts +++ b/macho/universal.ts @@ -255,4 +255,22 @@ export class Universal { public isUniversal(): boolean { return !!this.mArchList; } + + /** + * Get offset in reader. + * + * @returns Byte offset in reader. + */ + public offset(): number { + return this.mBase; + } + + /** + * Get length in reader. + * + * @returns Byte length in reader. + */ + public length(): number { + return this.mLength; + } }