提交 cfd156be 编写于 作者: C CyrusNajmabadi 提交者: GitHub

Merge pull request #14944 from mattwar/Issue14943

Add DateTime support back to serializer
......@@ -528,6 +528,8 @@ public void TestFalseBooleanArray()
TestRoundTripMember(inputBool);
}
private static readonly DateTime _testNow = DateTime.Now;
[Fact]
public void TestPrimitiveValues()
{
......@@ -562,6 +564,7 @@ public void TestPrimitiveValues()
TestRoundTripValue(ELong.Value);
TestRoundTripValue(EULong.Value);
TestRoundTripValue(typeof(object));
TestRoundTripValue(_testNow);
}
[Fact]
......@@ -638,6 +641,7 @@ public void TestPrimitiveMemberValues()
TestRoundTripMember(ELong.Value);
TestRoundTripMember(EULong.Value);
TestRoundTripMember(typeof(object));
TestRoundTripMember(_testNow);
}
[Fact]
......@@ -783,6 +787,7 @@ private static void TestWritingPrimitiveValues(ObjectWriter writer)
writer.WriteValue(ELong.Value);
writer.WriteValue(EULong.Value);
writer.WriteValue(typeof(object));
writer.WriteValue(_testNow);
}
private static void TestReadingPrimitiveValues(ObjectReader reader)
......@@ -818,6 +823,7 @@ private static void TestReadingPrimitiveValues(ObjectReader reader)
Assert.Equal(ELong.Value, reader.ReadValue());
Assert.Equal(EULong.Value, reader.ReadValue());
Assert.Equal(typeof(object), (Type)reader.ReadValue());
Assert.Equal(_testNow, (DateTime)reader.ReadValue());
}
public enum EByte : byte
......
......@@ -372,6 +372,8 @@ private Variant ReadVariant()
return Variant.FromType(ReadType(kind));
case EncodingKind.Enum:
return Variant.FromBoxedEnum(ReadBoxedEnum());
case EncodingKind.DateTime:
return Variant.FromDateTime(DateTime.FromBinary(_reader.ReadInt64()));
case EncodingKind.Array:
case EncodingKind.Array_0:
case EncodingKind.Array_1:
......
......@@ -302,6 +302,11 @@ private void WriteVariant(Variant value)
WriteBoxedEnum(e, e.GetType());
break;
case VariantKind.DateTime:
_writer.Write((byte)EncodingKind.DateTime);
_writer.Write(value.AsDateTime().ToBinary());
break;
case VariantKind.Type:
WriteType(value.AsType());
break;
......@@ -1283,6 +1288,11 @@ internal enum EncodingKind : byte
/// </summary>
Enum,
/// <summary>
/// A DateTime value
/// </summary>
DateTime,
/// <summary>
/// An array with length encoded as compressed uint
/// </summary>
......@@ -1339,6 +1349,7 @@ internal enum VariantKind
String,
Object,
BoxedEnum,
DateTime,
Array,
Type
}
......@@ -1434,6 +1445,11 @@ public static Variant FromBoxedEnum(object value)
return new Variant(VariantKind.BoxedEnum, image: 0, instance: value);
}
public static Variant FromDateTime(DateTime value)
{
return new Variant(VariantKind.DateTime, image: value.ToBinary(), instance: null);
}
public static Variant FromType(Type value)
{
return new Variant(VariantKind.Type, image: 0, instance: value);
......@@ -1545,6 +1561,12 @@ public object AsBoxedEnum()
return _instance;
}
public DateTime AsDateTime()
{
Debug.Assert(Kind == VariantKind.DateTime);
return DateTime.FromBinary((long)_image);
}
public Type AsType()
{
Debug.Assert(Kind == VariantKind.Type);
......@@ -1628,6 +1650,10 @@ public static Variant FromBoxedObject(object value)
{
return FromDouble((double)value);
}
else if (type == typeof(DateTime))
{
return FromDateTime((DateTime)value);
}
else if (type.IsArray)
{
var instance = (Array)value;
......@@ -1664,6 +1690,8 @@ public object ToBoxedObject()
return this.AsByte();
case VariantKind.Char:
return this.AsChar();
case VariantKind.DateTime:
return this.AsDateTime();
case VariantKind.Decimal:
return this.AsDecimal();
case VariantKind.Float4:
......
......@@ -37,6 +37,16 @@ End Class
</Foo>.Value)
End Sub
<Fact>
Public Sub TestRoundTripDateTimeLiteral()
Dim x As DateTime = #10/5/2015#
RoundTrip(<Foo>
Public Class C
Private _x As DateTime = #10/5/2015#
End Class
</Foo>.Value)
End Sub
<Fact>
Public Sub TestRoundTripSyntaxNodeWithDiagnostics()
Dim text = <Foo>
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册