Advertisement
lignite0

ROBO24 - typeRegistry tests

Nov 15th, 2019
172
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import assert from "assert";
  2. import Action from "../../../../src/action/Action";
  3. import MessageBinarySerializer from "../../../../src/network/communication/serialization/MessageBinarySerializer";
  4. import BinaryDescriptor from "../../../../src/binary/BinaryDescriptor";
  5. import Message from "../../../../src/network/communication/Message";
  6.  
  7. class ExampleAction {
  8.     constructor() {
  9.         this.static = 0x00f4;
  10.         this.vector = new Uint16Array([1, 2, 3]);
  11.         this.matrix = new Float32Array([1.1, 2.2, 3.3, 4.4]);
  12.     }
  13. }
  14.  
  15. Action.bind(ExampleAction, {
  16.     code: 0x00e4,
  17.     name: "example",
  18.     type: "binary",
  19. });
  20.  
  21. BinaryDescriptor.bind(ExampleAction, {
  22.     properties: [
  23.         {type: "u16", property: "static"},
  24.         {type: "vec3<u16>", property: "vector"},
  25.         {type: "mat2<f32>", property: "matrix"},
  26.     ],
  27. });
  28.  
  29. const action = new ExampleAction();
  30. const actionRegistryMock = {
  31.     getConstructorByCode: code => ExampleAction,
  32. };
  33. const serializer = new MessageBinarySerializer(actionRegistryMock);
  34. const message = Message.createFromAction(action);
  35. const messageByteSize = message[BinaryDescriptor.symbol].getTotalByteSize(message);
  36.  
  37. describe("MessageBinarySerializer", function () {
  38.  
  39.     it("serialize example message", function () {
  40.         const arrayBuffer = serializer.serialize(message);
  41.         const messageDataView = new DataView(arrayBuffer, 0, messageByteSize);
  42.         const actionDataView = new DataView(arrayBuffer, messageByteSize);
  43.  
  44.         assert.strictEqual(arrayBuffer.byteLength, messageByteSize + 24);
  45.         assert.strictEqual(messageDataView.getUint16(0, true), 0x00e4);
  46.         assert.strictEqual(messageDataView.getUint16(2, true), 0x0000);
  47.         assert.strictEqual(actionDataView.getUint16(0, true), 0x00f4);
  48.         assert.strictEqual(actionDataView.getUint16(2, true), 1);
  49.         assert.strictEqual(actionDataView.getUint16(4, true), 2);
  50.         assert.strictEqual(actionDataView.getUint16(6, true), 3);
  51.         assert.strictEqual(actionDataView.getFloat32(8, true).toFixed(4), "1.1000");
  52.         assert.strictEqual(actionDataView.getFloat32(12, true).toFixed(4), "2.2000");
  53.         assert.strictEqual(actionDataView.getFloat32(16, true).toFixed(4), "3.3000");
  54.         assert.strictEqual(actionDataView.getFloat32(20, true).toFixed(4), "4.4000");
  55.     });
  56.  
  57.     it("deserialize example message", function () {
  58.         const arrayBuffer = new ArrayBuffer(messageByteSize + 24);
  59.         const messageDataView = new DataView(arrayBuffer, 0, messageByteSize);
  60.         const actionDataView = new DataView(arrayBuffer, messageByteSize);
  61.         messageDataView.setUint16(0, 0x00e4, true);
  62.         messageDataView.setUint16(2, 0x1111, true);
  63.         actionDataView.setUint16(0, 0x00a4, true);
  64.         actionDataView.setUint16(2, 4, true);
  65.         actionDataView.setUint16(4, 5, true);
  66.         actionDataView.setUint16(6, 6, true);
  67.         actionDataView.setFloat32(8, 5.5, true);
  68.         actionDataView.setFloat32(12, 6.6, true);
  69.         actionDataView.setFloat32(16, 7.7, true);
  70.         actionDataView.setFloat32(20, 8.8, true);
  71.  
  72.         const message = serializer.deserialize(arrayBuffer);
  73.  
  74.         assert(message instanceof Message);
  75.         assert.strictEqual(message.code, 0x00e4);
  76.         assert.strictEqual(message.id, 0x1111);
  77.         assert(message.action instanceof ExampleAction);
  78.         assert.strictEqual(message.action.static, 0x00a4);
  79.         assert.strictEqual(message.action.vector[0], 4);
  80.         assert.strictEqual(message.action.vector[1], 5);
  81.         assert.strictEqual(message.action.vector[2], 6);
  82.         assert.strictEqual(message.action.matrix[0].toFixed(4), "5.5000");
  83.         assert.strictEqual(message.action.matrix[1].toFixed(4), "6.6000");
  84.         assert.strictEqual(message.action.matrix[2].toFixed(4), "7.7000");
  85.         assert.strictEqual(message.action.matrix[3].toFixed(4), "8.8000");
  86.     });
  87. });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement