123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- var bodec = require('bodec');
- var run = require('./run.js');
- var decoders = require('../lib/object-codec.js').decoders;
- var encoders = require('../lib/object-codec.js').encoders;
- // The thing we mean to test.
- var codec = require('../lib/pack-codec.js');
- var pack = require('./sample-pack.js');
- var items = [];
- var newPack;
- function unpackStream(stream) {
- var meta, out = [], finished = false;
- var write = codec.decodePack(onItem);
- for (var i = 0, l = stream.length; i < l; i += 128) {
- var slice = bodec.slice(stream, i, i + 128);
- try {
- // console.log("SLICE", slice);
- write(slice);
- }
- catch (err) {
- throw err;
- }
- }
- write();
- function onItem(item) {
- // console.log("UNPACK", item);
- if (item === undefined) {
- finished = true;
- }
- else if (!meta) {
- meta = item;
- }
- else {
- out.push(item);
- }
- }
- if (!finished) throw new Error("unpack stream didn't finish");
- if (out.length !== meta.num) throw new Error("Item num mismatch");
- return out;
- }
- run([
- function testDecodePack() {
- var counts = {};
- items = unpackStream(pack).map(function (item) {
- counts[item.type] = counts[item.type] || 0;
- counts[item.type]++;
- if (item.type === "tree" || item.type === "tag" || item.type === "commit") {
- item.body = decoders[item.type](item.body);
- }
- return item;
- });
- if (counts.commit !== 6) throw new Error("Wrong number of commits parsed");
- if (counts.tree !== 4) throw new Error("Wrong number of trees parsed");
- if (counts.blob !== 4) throw new Error("Wrong number of blobs parsed");
- if (counts['ofs-delta'] !== 2) throw new Error("Wrong number of offset deltas parsed");
- },
- function testEncodePack() {
- var done = false;
- var outs = [];
- var write = codec.encodePack(function (item) {
- if (item === undefined) {
- done = true;
- return;
- }
- if (!bodec.isBinary(item)) throw new Error("encode output must be buffers");
- outs.push(item);
- });
- write({num:items.length});
- items.forEach(function (item) {
- if (!bodec.isBinary(item.body)) {
- item.body = encoders[item.type](item.body);
- }
- write(item);
- });
- write();
- if (!done) throw new Error("Output stream never ended");
- newPack = bodec.join(outs);
- },
- function verifyEncodePack() {
- try {
- unpackStream(newPack);
- if (bodec.toHex(pack) !== bodec.toHex(newPack)) {
- throw new Error("Final pack doesn't match original.");
- }
- }
- catch (err) {
- console.log(bodec.toHex(pack));
- console.log(bodec.toHex(newPack));
- throw err;
- }
- }
- ]);
|