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

114 lines (102 loc) 5.57 kB
import { expect } from "chai"; import {CompoundFile} from "../src/CompoundFile"; import {initializedWidth} from "../src/utils"; describe('Stream Directory Entry test', () => { it('read mini stream data', () => { const compoundFile = new CompoundFile(); const storage = compoundFile.getRootStorage().addStorage("test"); const miniStream = storage.addStream("mini", [1, 2, 3, 4, 5, 6, 7]); expect(miniStream.read(2, 5)).to.deep.eq([3 ,4, 5]); const bytes = initializedWidth(65, 0); bytes[64] = 1; const miniStream1 = storage.addStream("mini1", bytes); expect(miniStream1.read(63, 65)).to.deep.eq([0, 1]); }); it('read regular stream data', () => { const compoundFile = new CompoundFile(); const storage = compoundFile.getRootStorage().addStorage("test"); let bytes = initializedWidth(4096, 0); bytes[4093] = 2; bytes[4094] = 3; bytes[4095] = 4; const miniStream = storage.addStream("mini", bytes); expect(miniStream.read(4093, 4096)).to.deep.eq([2, 3, 4]); bytes = initializedWidth(4097, 0); bytes[4096] = 1; const miniStream1 = storage.addStream("mini1", bytes); expect(miniStream1.read(4095, 4097)).to.deep.eq([0, 1]); }); it('writeAt method of mini stream', () => { const compoundFile = new CompoundFile(); const storage = compoundFile.getRootStorage().addStorage("test"); const finalMiniStream = storage.addStream("mini", [0, 1, 2, 3, 4, 5, 6, 7]); expect(() => finalMiniStream.writeAt(0, initializedWidth(9, 0))).throw(); expect(() => finalMiniStream.writeAt(9, initializedWidth(1, 0))).throw(); expect(() => finalMiniStream.writeAt(-1, initializedWidth(1, 0))).throw(); finalMiniStream.writeAt(2, [15]); expect(finalMiniStream.read(2, 3)).to.deep.eq([15]); const miniStream1 = storage.addStream("mini1", initializedWidth(65, 0)); miniStream1.writeAt(63, [1]); expect(miniStream1.read(63, 64)).to.deep.eq([1]); miniStream1.writeAt(64, [1]); expect(miniStream1.read(64, 65)).to.deep.eq([1]); }); it('writeAt method of regular stream', () => { const compoundFile = new CompoundFile(); const storage = compoundFile.getRootStorage().addStorage("test"); const finalMiniStream = storage.addStream("mini", [0, 1, 2, 3, 4, 5, 6, 7]); expect(() => finalMiniStream.writeAt(0, initializedWidth(9, 0))); expect(() => finalMiniStream.writeAt(9, initializedWidth(1, 0))); expect(() => finalMiniStream.writeAt(-1, initializedWidth(1, 0))); const bytes = initializedWidth(4096, 0); finalMiniStream.setStreamData(bytes); expect(() => finalMiniStream.writeAt(0, initializedWidth(4097, 0))); expect(() => finalMiniStream.writeAt(4096, initializedWidth(1, 0))); expect(() => finalMiniStream.writeAt(-1, initializedWidth(1, 0))); finalMiniStream.writeAt(2, [15]); expect(finalMiniStream.read(2, 3)).to.deep.eq([15]); const miniStream1 = storage.addStream("mini1", initializedWidth(4097, 0)); miniStream1.writeAt(4095, [1]); expect(miniStream1.read(4095, 4096)).to.deep.eq([1]); miniStream1.writeAt(4096, [1]); expect(miniStream1.read(4096, 4097)).to.deep.eq([1]); }); it('append to mini stream', () => { const compoundFile = new CompoundFile(); let mini = compoundFile.getRootStorage().addStream("mini", [0, 1, 2]); mini.append([3,4,5]); expect(mini.getStreamData()).to.deep.eq([0, 1,2,3,4,5]); mini = compoundFile.getRootStorage().addStream("mini1", initializedWidth(64, 1)); mini.append([2,3,4]); expect(mini.getStreamSize()).eq(67); expect(mini.read(64, 67)).to.deep.eq([2,3,4]); mini = compoundFile.getRootStorage().addStream("mini2", initializedWidth(63, 1)); mini.append([0]); expect(mini.getStreamSize()).eq(64); expect(mini.read(63, 64)).to.deep.eq([0]); }); it('apend to regular stream', () => { const compoundFile = new CompoundFile(); let mini = compoundFile.getRootStorage().addStream("mini", initializedWidth(4100, 0)); mini.append([3,4,5]); expect(mini.getStreamSize()).eq(4103); expect(mini.read(4100, 4103)).to.deep.eq([3, 4, 5]); mini = compoundFile.getRootStorage().addStream("mini1", initializedWidth(4096, 1)); mini.append([2,3,4]); expect(mini.getStreamSize()).eq(4099); expect(mini.read(4096, 4099)).to.deep.eq([2, 3, 4]); mini = compoundFile.getRootStorage().addStream("mini2", initializedWidth(63, 1)); mini.append([0]); expect(mini.getStreamSize()).eq(64); expect(mini.read(63, 64)).to.deep.eq([0]); }); it('append data so that mini stream converts to regular stream (this happens once stream passes threshold in 4096 bytes)', () => { const compoundFile = new CompoundFile(); const miniStream = compoundFile.getRootStorage().addStream("mini", initializedWidth(4095, 0)); miniStream.append([1]); // Previous operation should turn mini stream in a regular stream const regularStream = miniStream; expect(regularStream.getStreamData().length).eq(4096); expect(regularStream.read(4095, 4096)).to.deep.eq([1]); }); });