public void ParseNext_WhenBufferContainsUnsignedString_ReturnsExpectedTypedDataTypeAndValue() { // arrange int offset = 0; // 00010000 11000000 10000110 01000110 11000110 BitArray ba = new BitArray( new bool[] { false, false, false, true, false, false, false, false, true, true, false, false, false, false, false, false, true, false, false, false, false, true, true, false, false, true, false, false, false, true, true, false, true, true, false, false, false, true, true, false }); byte[] buffer = new byte[5]; ba.CopyTo(buffer, 0); // act TypedData result = TypedDataParser.ParseNext(buffer, ref offset); // assert Assert.AreEqual(DataType.String, result.Type); Assert.AreEqual("abc", result.Value); }
internal override void Parse(byte[] buffer, ref int offset) { while (offset < buffer.Length) { VariableInt messageNameLength = VariableInt.DecodeVariableInt(buffer.Skip(offset).ToArray()); offset += messageNameLength.Length; string messageName = Encoding.ASCII.GetString(buffer, offset, (int)messageNameLength.Value); offset += messageName.Length; byte numberOfArgs = buffer.Skip(offset).Take(1).First(); offset++; var message = new SpoeMessage(messageName); for (byte i = 0; i < numberOfArgs; i++) { VariableInt keyNameLength = VariableInt.DecodeVariableInt(buffer.Skip(offset).ToArray()); offset += keyNameLength.Length; string keyname = Encoding.ASCII.GetString(buffer, offset, (int)keyNameLength.Value); offset += keyname.Length; TypedData data = TypedDataParser.ParseNext(buffer, ref offset); message.Args.Add(keyname, data); } this.Messages.Add(message); } }
public void ParseNext_WhenBufferContainsBinary_ReturnsExpectedTypedDataTypeAndValue() { // arrange int offset = 0; // act // 10010000 11100000 01100110 11110110 11110110 10111100 01000110 10000110 01001110 BitArray ba = new BitArray( new bool[] { true, false, false, true, false, false, false, false, true, true, true, false, false, false, false, false, false, true, true, false, false, true, true, false, true, true, true, true, false, true, true, false, true, true, true, true, false, true, true, false, true, false, true, true, true, true, false, false, false, true, false, false, false, true, true, false, true, false, false, false, false, true, true, false, false, true, false, false, true, true, true, false }); byte[] buffer = new byte[9]; ba.CopyTo(buffer, 0); TypedData result = TypedDataParser.ParseNext(buffer, ref offset); // assert Assert.AreEqual(DataType.Binary, result.Type); Assert.AreEqual("Zm9vPWJhcg==", result.ToString()); // base64 foo=bar }
internal override void Parse(byte[] buffer, ref int offset) { while (offset < buffer.Length) { // key-value format: [length-of-keyname(varint)][keyname][datatype][value] VariableInt keyNameLength = VariableInt.DecodeVariableInt(buffer.Skip(offset).ToArray()); offset += keyNameLength.Length; string keyname = Encoding.ASCII.GetString(buffer, offset, (int)keyNameLength.Value); offset += keyname.Length; TypedData data = TypedDataParser.ParseNext(buffer, ref offset); this.KeyValueItems.Add(keyname, data); } }
public void ParseNext_WhenBufferContainsBoolean_ReturnsExpectedTypedDataTypeAndValue() { // arrange int offset = 0; // 10001000 BitArray ba = new BitArray( new bool[] { true, false, false, false, true, false, false, false }); byte[] buffer = new byte[4]; ba.CopyTo(buffer, 0); // act TypedData result = TypedDataParser.ParseNext(buffer, ref offset); // assert Assert.AreEqual(DataType.Boolean, result.Type); Assert.AreEqual(true, result.Value); }