UNPKG

diamante-js-xdr

Version:

Read/write XDR encoded data structures (RFC 4506)

99 lines (83 loc) 3.47 kB
import { XdrReader } from '../../src/serialization/xdr-reader'; import { XdrWriter } from '../../src/serialization/xdr-writer'; /* jshint -W030 */ let emptyContext = { definitions: {}, results: {} }; let Color = XDR.Enum.create(emptyContext, 'Color', { red: 0, green: 1, evenMoreGreen: 3 }); describe('Enum.fromName', function () { it('returns the member with the provided name', function () { expect(Color.fromName('red')).to.eql(Color.red()); expect(Color.fromName('green')).to.eql(Color.green()); expect(Color.fromName('evenMoreGreen')).to.eql(Color.evenMoreGreen()); }); it('throws an error if the name is not correct', function () { expect(() => Color.fromName('obviouslyNotAColor')).to.throw( /not a member/i ); }); }); describe('Enum.fromValue', function () { it('returns the member with the provided value', function () { expect(Color.fromValue(0)).to.eql(Color.red()); expect(Color.fromValue(1)).to.eql(Color.green()); expect(Color.fromValue(3)).to.eql(Color.evenMoreGreen()); }); it('throws an error if the value is not correct', function () { expect(() => Color.fromValue(999)).to.throw(/not a value/i); }); }); describe('Enum.read', function () { it('decodes correctly', function () { expect(read([0x00, 0x00, 0x00, 0x00])).to.eql(Color.red()); expect(read([0x00, 0x00, 0x00, 0x01])).to.eql(Color.green()); expect(read([0x00, 0x00, 0x00, 0x03])).to.eql(Color.evenMoreGreen()); }); it("throws read error when encoded value isn't defined on the enum", function () { expect(() => read([0x00, 0x00, 0x00, 0x02])).to.throw(/read error/i); }); function read(bytes) { let io = new XdrReader(bytes); return Color.read(io); } }); describe('Enum.write', function () { it('encodes correctly', function () { expect(write(Color.red())).to.eql([0x00, 0x00, 0x00, 0x00]); expect(write(Color.green())).to.eql([0x00, 0x00, 0x00, 0x01]); expect(write(Color.evenMoreGreen())).to.eql([0x00, 0x00, 0x00, 0x03]); expect(Color.red().toXDR('hex')).to.eql('00000000'); expect(Color.green().toXDR('hex')).to.eql('00000001'); expect(Color.evenMoreGreen().toXDR('hex')).to.eql('00000003'); }); it('throws a write error if the value is not the correct type', function () { expect(() => write(null)).to.throw(/write error/i); expect(() => write(undefined)).to.throw(/write error/i); expect(() => write([])).to.throw(/write error/i); expect(() => write({})).to.throw(/write error/i); expect(() => write(1)).to.throw(/write error/i); expect(() => write(true)).to.throw(/write error/i); }); function write(value) { let io = new XdrWriter(8); Color.write(value, io); return io.toArray(); } }); describe('Enum.isValid', function () { it('returns true for members of the enum', function () { expect(Color.isValid(Color.red())).to.be.true; expect(Color.isValid(Color.green())).to.be.true; expect(Color.isValid(Color.evenMoreGreen())).to.be.true; }); it('returns false for arrays of the wrong size', function () { expect(Color.isValid(null)).to.be.false; expect(Color.isValid(undefined)).to.be.false; expect(Color.isValid([])).to.be.false; expect(Color.isValid({})).to.be.false; expect(Color.isValid(1)).to.be.false; expect(Color.isValid(true)).to.be.false; }); });