public void CanWriteAndReadRosTime() { using (var s = new MemoryStream()) { var writer = new RosBinaryWriter(s); var reader = new RosBinaryReader(s); var writtenTime = new DateTime(2021, 03, 15, 18, 55, 12, 7, DateTimeKind.Unspecified) .ToRosTime(); // Writing should convert to UTC. writer.WriteBuiltInType(typeof(RosTime), writtenTime); // Read back what we wrote. s.Position = 0; var readTime = (RosTime)reader.ReadRosTime(); // Expected behaviour is that time in ROS-Messages is UTC. // Max difference is 0.001 since only milliseconds are preserved and ROS uses nanoseconds. readTime.Seconds.Should().Be(writtenTime.Seconds); readTime.Nanoseconds.Should().Be(writtenTime.Nanoseconds); readTime.DateTime.Kind.Should().Be(DateTimeKind.Utc); readTime.DateTime.Should().BeCloseTo(writtenTime.DateTime, TimeSpan.FromSeconds(0.001)); } }
public void WriteNullStringThrowsException() { using (var s = new MemoryStream()) { var writer = new RosBinaryWriter(s); Action writeAction = () => writer.WriteBuiltInType(typeof(string), null); writeAction.Should().Throw <ArgumentNullException>(); } }
private static Action Serialize(object message) { return(() => { var formatter = new DescriptorBasedMessageFormatter(); var context = new SerializationContext(Stream.Null, new[] { formatter }, new MessageTypeRegistry()); var messageTypeInfo = context.MessageTypeRegistry.GetOrCreateMessageTypeInfo(message.GetType()); var writer = new RosBinaryWriter(context.Stream); formatter.Serialize(context, writer, messageTypeInfo, message); }); }
public void CanWriteAndReadString() { using (var s = new MemoryStream()) { var writer = new RosBinaryWriter(s); var reader = new RosBinaryReader(s); writer.Write("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxASDF"); s.Position = 0; reader.ReadString().Should().Be("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxASDF"); } }
public void CanWriteAndReadTimeSpan() { using (var s = new MemoryStream()) { var writer = new RosBinaryWriter(s); var reader = new RosBinaryReader(s); var writtenTimeSpan = TimeSpan.FromSeconds(123456789.123); writer.WriteBuiltInType(typeof(TimeSpan), writtenTimeSpan); s.Position = 0; var readTime = (TimeSpan)reader.ReadBuiltInType(typeof(TimeSpan)); Assert.Equal(writtenTimeSpan, readTime); } }
public void CanWriteAndReadInt() { using (var s = new MemoryStream()) { var writer = new RosBinaryWriter(s); var reader = new RosBinaryReader(s); writer.Write((int)4); writer.Write((int)5); writer.Write((int)6); s.Position = 0; reader.ReadInt32().Should().Be(4); reader.ReadInt32().Should().Be(5); reader.ReadInt32().Should().Be(6); } }
public void CanWriteAndReadDateTime() { using (var s = new MemoryStream()) { var writer = new RosBinaryWriter(s); var reader = new RosBinaryReader(s); var writtenTime = DateTime.Now; // Writing should convert to UTC. writer.WriteBuiltInType(typeof(DateTime), writtenTime); // Read back what we wrote. s.Position = 0; var readTime = (DateTime)reader.ReadBuiltInType(typeof(DateTime)); // Expected behaviour is that time in ROS-Messages is UTC. // Max difference is 0.001 since only milliseconds are preserved and ROS uses nanoseconds. Assert.Equal(writtenTime.ToUniversalTime(), readTime, TimeSpan.FromSeconds(0.001)); } }
public void CanWriteAndReadBuiltInTypes2(string rosType, object writeValue, object expectedValue) { var primitiveRosType = RosType.Parse(rosType); primitiveRosType.IsBuiltIn.Should().BeTrue(); primitiveRosType.IsArray.Should().BeFalse(); using (var s = new MemoryStream()) { var writer = new RosBinaryWriter(s); var reader = new RosBinaryReader(s); writer.WriteBuiltInType(primitiveRosType, writeValue); s.Position = 0; var readValue = reader.ReadBuiltInType(primitiveRosType, expectedValue.GetType()); readValue.Should().BeEquivalentTo(expectedValue); readValue.GetType().Should().Be(expectedValue.GetType()); } }
public void Serialize(SerializationContext context, RosBinaryWriter writer, IRosMessageTypeInfo messageTypeInfo, object o) { throw new NotSupportedException("This formatter only supports deserialization"); }