UNPKG

compound-binary-file-js

Version:

This is an implementation of [Compound Binary File v.3](https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-cfb/53989ce4-7b05-4f8d-829b-d08d6148375b) \ Allows reading existing files, creation of the/write operation

110 lines (98 loc) 4.91 kB
import { expect } from "chai"; import {SimpleDataview} from "../src/dataview/SimpleDataview"; import {FixedSizeChunkedDataview} from "../src/dataview/FixedSizeChunkedDataview"; import {VariableSizeChunkedDataView} from "../src/dataview/VarSizeChunkedDataview"; describe('should throw exception on overflow during write operation', () => { it('Simple Data View', () => { let view = new SimpleDataview(new Array(0)); expect(() => view.writeAt(0, [1])).to.throw(); view = new SimpleDataview(new Array(512)); expect(() => view.writeAt(510, new Array(6))).to.throw(); }); it('Referencing Subview', () => { let view = new SimpleDataview(new Array(1)).subView(0, 1); expect(() => view.writeAt(1,[1])).to.throw(); view = new SimpleDataview(new Array(512)).subView(510); expect(() => view.writeAt(0, new Array(6))).to.throw(); }); it('Fixed Size Chunked Dataview', () => { const view = new FixedSizeChunkedDataview(512, [new SimpleDataview(new Array(512)), new SimpleDataview(new Array(512))]); expect(() => view.writeAt(1024, [1])).to.throw(); expect(() => view.writeAt(1020, new Array(6))).to.throw(); }); it('Var Size Chunked Dataview', () => { const view = new VariableSizeChunkedDataView( [new SimpleDataview(new Array(64)), new SimpleDataview(new Array(128))] ); expect(() => view.writeAt(196, [1])).to.throw(); expect(() => view.writeAt(190, new Array(6))).to.throw(); }); }); describe('test allocate', () => { it('Simple Data View', () => { const view = new SimpleDataview(new Array(0)); expect(() => view.allocate(1)).to.throw(); }); it('Referencing Subview', () => { const view = new SimpleDataview(new Array(1)).subView(0); expect(() => view.allocate(1)).to.throw(); }); it('Fixed Size Chunked Dataview', () => { const view = new FixedSizeChunkedDataview(64, [new SimpleDataview(new Array(64))]); expect(() => view.allocate(1)).to.throw(); expect(() => view.allocate(64)).to.not.throw(); }); it('Var Size Chunked Dataview', () => { const view = new VariableSizeChunkedDataView([new SimpleDataview(new Array(0)), new SimpleDataview(new Array(0))]); expect(() => view.allocate(1)).to.throw(); }); }); describe('test subview', () => { it('Simple Data View', () => { const view = new SimpleDataview(new Array(64)); expect(() => view.subView(64)).to.throw(); expect(() => view.subView(63, 65)).to.throw(); expect(view.subView(0, 0).getSize()).eq(0); expect(view.subView(0, 64).getSize()).eq(64); expect(view.subView(0, 1).getSize()).eq(1); expect(() => view.subView(-1).getSize()).to.throw(); expect(() => view.subView(1, 0).getSize()).to.throw(); }); it('Referencing Subview', () => { const view = new SimpleDataview(new Array(1)).subView(0); expect(view.subView(0).getSize()).eq(1); expect(() => view.subView(1)).to.throw(); expect(view.subView(0, 0).getSize()).eq(0); expect(() => view.subView(-1).getSize()).to.throw(); expect(() => view.subView(1, 0).getSize()).to.throw(); }); it('Fixed Size Chunked Dataview', () => { const view = new FixedSizeChunkedDataview(64, [new SimpleDataview(new Array(64)), new SimpleDataview(new Array(64))]); expect(() => view.subView(1)).to.throw(); expect(() => view.subView(0, 0)).to.throw(); expect(() => view.subView(63, 65)).to.throw(); expect(() => view.subView(64)).to.throw(); expect(() => view.subView(128).getSize()).to.throw(); expect(() => view.subView(-1).getSize()).to.throw(); expect(() => view.subView(1, 0).getSize()).to.throw(); }); it('Var Size Chunked Dataview', () => { let view = new VariableSizeChunkedDataView([new SimpleDataview(new Array(64)), new SimpleDataview(new Array(32))]); expect(() => view.subView(96)).to.throw(); expect(view.subView(32).getSize()).eq(64); expect(view.subView(0, 0).getSize()).eq(0); expect(view.subView(0).getSize()).eq(96); expect(view.subView(0, 96).getSize()).eq(96); expect(view.subView(0, 96).getSize()).eq(96); expect(() => view.subView(-1).getSize()).to.throw(); expect(() => view.subView(1, 0).getSize()).to.throw(); view = new VariableSizeChunkedDataView([new SimpleDataview(new Array(64))]); expect(view.subView(0).getSize()).eq(64); expect(view.subView(60).getSize()).eq(4); expect(view.subView(5, 10).getSize()).eq(5); expect(() => view.subView(64)).to.throw(); }); });