// Copyright 2015 The Vanadium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

/**
 * @fileoverview Tests for binary reader.
 */

var test = require('prova');

var BinaryReader = require('./../../src/vom/binary-reader.js');
var ByteUtil = require('./../../src/vdl/byte-util.js');

test('readByte', function(t) {
  var expectedBytes = [ 0x0, 0xff, 0x10, 0x20, 0x30, 0x40 ];
  var buf = new Uint8Array(expectedBytes);

  var br = new BinaryReader(buf);
  for (var i = 0; i < expectedBytes.length; i++) {
    t.equals(br.readByte(), expectedBytes[i], 'index ' + i + ' differs');
  }
  t.end();
});

test('readByteArray', function(t) {
  var expectedBytes = [ 0x00, 0xff, 0x10, 0x20, 0x30, 0x40 ];
  var br = new BinaryReader(new Uint8Array(expectedBytes));
  t.equals(ByteUtil.bytes2Hex(br.readByteArray(2)),
    ByteUtil.bytes2Hex(new Uint8Array([0x00, 0xff])));
  t.equals(ByteUtil.bytes2Hex(br.readByteArray(4)),
    ByteUtil.bytes2Hex(new Uint8Array([0x10, 0x20, 0x30, 0x40])));
  t.end();
});
