Beispiel #1
0
        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));
            }
        }
Beispiel #2
0
        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);
            });
        }
Beispiel #4
0
        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");
            }
        }
Beispiel #5
0
        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);
            }
        }
Beispiel #6
0
        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);
            }
        }
Beispiel #7
0
        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));
            }
        }
Beispiel #8
0
        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");
 }