public void WriteRawArgumentTest() { var fio = new Mock <IFileIO>(MockBehavior.Strict); FormattedWriter fw = new FormattedWriter(fio.Object); Executing.This(() => fw.WriteRaw(null)).Should().Throw <ArgumentNullException>(); }
public void NameValueSectionRoundTrip1EntryTest() { var ms = new MemoryStream(); var fio = new FileIO(ms); var fw = new FormattedWriter(fio); var wc = new WriteContext(fw); ISectionFormatter f = new NameValueSectionFormatter(); wc.Description = new TeaFileDescription(); wc.Description.NameValues = new NameValueCollection(); wc.Description.NameValues.Add(new NameValue("someName", 1.23)); f.Write(wc); ms.Position = 0; var fr = new FormattedReader(fio); var rc = new ReadContext(fr); f.Read(rc); rc.Description.Should().Not.Be.Null(); rc.Description.NameValues.Should().Not.Be.Null(); rc.Description.NameValues.Should().Have.Count.EqualTo(1); rc.Description.NameValues.First().Name.Should().Be("someName"); rc.Description.NameValues.First().GetValue<double>().Should().Be(1.23); }
public void ItemSectionRoundTrip() { var ms = new MemoryStream(); var fio = new FileIO(ms); var fw = new FormattedWriter(fio); var wc = new WriteContext(fw); wc.Description = new TeaFileDescription(); var writeID = wc.Description.ItemDescription = ItemDescription.FromAnalysis<Event<OHLCV>>(); ISectionFormatter f = new ItemSectionFormatter(); f.Write(wc); ms.Position = 0; var fr = new FormattedReader(fio); var rc = new ReadContext(fr); rc.Description.Should().Not.Be.Null(); f.Read(rc); rc.Description.Should().Not.Be.Null(); var id = rc.Description.ItemDescription; id.ItemTypeName.Should().Be(typeof (Event<OHLCV>).GetLanguageName()); id.ItemSize.Should().Be(wc.Description.ItemDescription.ItemSize); id.Fields.Select(ff => ff.Name).Should().Have.SameValuesAs("Time", "Open", "High", "Low", "Close", "Volume"); id.Fields.Select(ff => ff.Index).Should().Have.SameValuesAs(0, 1, 2, 3, 4, 5); id.Fields.Select(ff => ff.FieldType).Should().Have.SameValuesAs(FieldType.Int64, FieldType.Double, FieldType.Double, FieldType.Double, FieldType.Double); id.Fields.Select(ff => ff.Offset).Should().Have.SameValuesAs(writeID.Fields.Select(ff => ff.Offset)); ms.Position.Should().Be(ms.Length); // very important, all bytes must have been read }
public void WriteInt32Test() { var fio = new Mock<IFileIO>(MockBehavior.Strict); fio.Setup(io => io.WriteInt32(1743)); FormattedWriter fw = new FormattedWriter(fio.Object); fw.WriteInt32(1743); fio.Verify(f => f.WriteInt32(1743), Times.Once()); }
public void WriteInt64Test() { var fio = new Mock<IFileIO>(MockBehavior.Strict); fio.Setup(io => io.WriteInt64(0x7fffeeeebbbbaaaa)); FormattedWriter fw = new FormattedWriter(fio.Object); fw.WriteInt64(0x7fffeeeebbbbaaaa); fio.Verify(f => f.WriteInt64(0x7fffeeeebbbbaaaa), Times.Once()); }
public void WriteDoubleTest() { var fio = new Mock<IFileIO>(MockBehavior.Strict); fio.Setup(io => io.WriteDouble(1.2345)); FormattedWriter fw = new FormattedWriter(fio.Object); fw.WriteDouble(1.2345); fio.Verify(f => f.WriteDouble(1.2345), Times.Once()); }
public void WriteRawTest() { byte[] bytes = new byte[] {1, 3, 7, 8, 9}; var fio = new Mock<IFileIO>(MockBehavior.Strict); fio.Setup(io => io.WriteBytes(It.IsAny<byte[]>())); FormattedWriter fw = new FormattedWriter(fio.Object); fw.WriteRaw(bytes); fio.Verify(f => f.WriteBytes(It.Is<byte[]>(bs => bs.SequenceEqual(bytes))), Times.Once()); }
public void WriteDoubleTest() { var fio = new Mock <IFileIO>(MockBehavior.Strict); fio.Setup(io => io.WriteDouble(1.2345)); FormattedWriter fw = new FormattedWriter(fio.Object); fw.WriteDouble(1.2345); fio.Verify(f => f.WriteDouble(1.2345), Times.Once()); }
public void WriteInt32Test() { var fio = new Mock <IFileIO>(MockBehavior.Strict); fio.Setup(io => io.WriteInt32(1743)); FormattedWriter fw = new FormattedWriter(fio.Object); fw.WriteInt32(1743); fio.Verify(f => f.WriteInt32(1743), Times.Once()); }
public void WriteInt64Test() { var fio = new Mock <IFileIO>(MockBehavior.Strict); fio.Setup(io => io.WriteInt64(0x7fffeeeebbbbaaaa)); FormattedWriter fw = new FormattedWriter(fio.Object); fw.WriteInt64(0x7fffeeeebbbbaaaa); fio.Verify(f => f.WriteInt64(0x7fffeeeebbbbaaaa), Times.Once()); }
public void WriteRawTest() { byte[] bytes = new byte[] { 1, 3, 7, 8, 9 }; var fio = new Mock <IFileIO>(MockBehavior.Strict); fio.Setup(io => io.WriteBytes(It.IsAny <byte[]>())); FormattedWriter fw = new FormattedWriter(fio.Object); fw.WriteRaw(bytes); fio.Verify(f => f.WriteBytes(It.Is <byte[]>(bs => bs.SequenceEqual(bytes))), Times.Once()); }
public void WriteGuidTest() { Guid g = Guid.NewGuid(); // not strictly deterministic but deterministic enough var guidBytes = g.ToByteArray(); var fio = new Mock<IFileIO>(MockBehavior.Default); fio.Setup(io => io.WriteBytes(It.IsAny<byte[]>())); var fw = new FormattedWriter(fio.Object); fw.WriteGuid(g); fio.Verify(f => f.WriteBytes(It.IsAny<byte[]>()), Times.Once()); }
public void WriteNullTextTest() { const string testText = null; var fio = new Mock <IFileIO>(MockBehavior.Strict); fio.Setup(io => io.WriteInt32(It.IsAny <int>())); fio.Setup(io => io.WriteBytes(It.IsAny <byte[]>())); FormattedWriter fw = new FormattedWriter(fio.Object); fw.WriteText(testText); fio.Verify(f => f.WriteInt32(0), Times.Once()); }
public void WriteTextTest() { const string testText = "Traditionnellement, il est conseillé d'accompagner cette soupe et ses poissons soit d'un vin rosé issu du vignoble de Provence, soit d'un vin rouge. €"; var fio = new Mock <IFileIO>(MockBehavior.Strict); fio.Setup(io => io.WriteInt32(It.IsAny <int>())); fio.Setup(io => io.WriteBytes(It.IsAny <byte[]>())); FormattedWriter fw = new FormattedWriter(fio.Object); fw.WriteText(testText); fio.Verify(f => f.WriteInt32(It.Is <int>(n => n >= testText.Length)), Times.Once()); fio.Verify(f => f.WriteBytes(It.Is <byte[]>(bytes => (new UTF8Encoding(false, true).GetString(bytes)) == testText)), Times.Once()); }
public void WriteGuidTest() { Guid g = Guid.NewGuid(); // not strictly deterministic but deterministic enough var guidBytes = g.ToByteArray(); var fio = new Mock <IFileIO>(MockBehavior.Default); fio.Setup(io => io.WriteBytes(It.IsAny <byte[]>())); var fw = new FormattedWriter(fio.Object); fw.WriteGuid(g); fio.Verify(f => f.WriteBytes(It.IsAny <byte[]>()), Times.Once()); }
public void NameValueRoundTripTest() { var stream = new MemoryStream(); var fio = new FileIO(stream); var w = new FormattedWriter(fio); Guid g = new Guid("1116C195-8975-4E73-B777-23E1C548BC71"); const string testText = "some text with special characters €,@, ʤǤDŽƪҗ∰"; { var nv1 = new NameValue("name1", 1.23); var nv2 = new NameValue("name2", 722); var nv3 = new NameValue("name3", g); var nv4 = new NameValue("name4", testText); w.WriteNameValue(nv1); w.WriteNameValue(nv2); w.WriteNameValue(nv3); w.WriteNameValue(nv4); } stream.Position = 0; var r = new FormattedReader(fio); { var nv1 = r.ReadNameValue(); nv1.Name.Should().Be("name1"); nv1.GetValue <double>().Should().Be(1.23); nv1.Kind.Should().Be(NameValue.ValueKind.Double); var nv2 = r.ReadNameValue(); nv2.Name.Should().Be("name2"); nv2.GetValue <int>().Should().Be(722); nv2.Kind.Should().Be(NameValue.ValueKind.Int32); var nv3 = r.ReadNameValue(); nv3.Name.Should().Be("name3"); nv3.GetValue <Guid>().Should().Be(g); nv3.Kind.Should().Be(NameValue.ValueKind.Guid); var nv4 = r.ReadNameValue(); nv4.Name.Should().Be("name4"); nv4.GetValue <string>().Should().Be(testText); nv4.Kind.Should().Be(NameValue.ValueKind.Text); } }
public void ContentSectionFormatterRoundTrip() { const string testValue = "Météo pour Paris, France. @€"; var ms = new MemoryStream(); var fio = new FileIO(ms); var fw = new FormattedWriter(fio); var wc = new WriteContext(fw); wc.Description = new TeaFileDescription(); wc.Description.ContentDescription = testValue; ISectionFormatter f = new ContentSectionFormatter(); f.Write(wc); ms.Position = 0; var fr = new FormattedReader(fio); var rc = new ReadContext(fr); f.Read(rc); rc.Description.Should().Not.Be.Null(); rc.Description.ContentDescription.Should().Be(testValue); }
/// <summary> /// Creates the header's sections from the descriptions found in the context. Computes their positions /// and sets the FirstItemPosition property in the context. /// </summary> internal byte[] CreateSections(WriteContext wc) { var saved = wc.Writer; using (var sectionStream = new MemoryStream()) // see noop-Dispose comment below { var sectionWriter = new FormattedWriter(new FileIO(sectionStream)); int pos = 32; // sections start at byte position 32 foreach (var formatter in this.sectionFormatters) { // payload using (var payloadStream = new MemoryStream()) // actually MemoryStream.Dispose() is a noop here, but for the code analysers pleasure we wrap these usings around { wc.Writer = new FormattedWriter(new FileIO(payloadStream)); formatter.Write(wc); var size = (int)payloadStream.Length; if (size > 0) { // section id sectionWriter.WriteInt32(formatter.Id); pos += 4; // nextSectionOffset sectionWriter.WriteInt32(size); pos += 4; // payload sectionWriter.WriteRaw(payloadStream.ToArray()); pos += size; // no padding or spacing done here wc.SectionCount++; } } } // padding int paddingBytes = (8 - pos % 8); if (paddingBytes == 8) paddingBytes = 0; sectionWriter.WriteRaw(new byte[paddingBytes]); wc.ItemAreaStart = pos + paddingBytes; // first item starts padded on 8 byte boundary. wc.Writer = saved; return sectionStream.ToArray(); } }
public void TimeSectionValuesRoundTrip() { var ms = new MemoryStream(); var fio = new FileIO(ms); var fw = new FormattedWriter(fio); var wc = new WriteContext(fw); wc.Description = new TeaFileDescription(); wc.Description.ItemDescription = ItemDescription.FromAnalysis<Event<C>>(); Time.Scale = Timescale.FromEpoch(33, 77); wc.Description.Timescale = Time.Scale; ISectionFormatter f = new TimeSectionFormatter(); f.Write(wc); ms.Position = 0; var fr = new FormattedReader(fio); var rc = new ReadContext(fr); rc.Description.Should().Not.Be.Null(); rc.Description.ItemDescription = wc.Description.ItemDescription; f.Read(rc); rc.Description.Timescale.Value.Epoch.Should().Be(33); rc.Description.Timescale.Value.TicksPerDay.Should().Be(77); Executing.This(() => f.Read(rc)).Should().Throw<EndOfStreamException>(); }
public void FirstTimeFieldIsAutomaticallyEventTime() { var ms = new MemoryStream(); var fio = new FileIO(ms); var fw = new FormattedWriter(fio); var wc = new WriteContext(fw); wc.Description = new TeaFileDescription(); wc.Description.ItemDescription = ItemDescription.FromAnalysis<C2>(); wc.Description.Timescale = Time.Scale; ISectionFormatter f = new TimeSectionFormatter(); f.Write(wc); ms.Position = 0; var fr = new FormattedReader(fio); var rc = new ReadContext(fr); rc.Description.Should().Not.Be.Null(); rc.Description.ItemDescription = ItemDescription.FromAnalysis<C2>(); f.Read(rc); var fields = rc.Description.ItemDescription.Fields; fields[0].IsEventTime.Should().Be.True(); fields[1].IsEventTime.Should().Be.False(); }
public void EventTimeAttributeRoundTrip() { Time.Scale = Timescale.Net; var ms = new MemoryStream(); var fio = new FileIO(ms); var fw = new FormattedWriter(fio); var wc = new WriteContext(fw); wc.Description = new TeaFileDescription(); wc.Description.ItemDescription = ItemDescription.FromAnalysis<Event<C>>(); wc.Description.Timescale = Time.Scale; ISectionFormatter f = new TimeSectionFormatter(); f.Write(wc); ms.Position = 0; var fr = new FormattedReader(fio); var rc = new ReadContext(fr); rc.Description.Should().Not.Be.Null(); rc.Description.ItemDescription = wc.Description.ItemDescription; rc.Description.ItemDescription.Fields.ForEach(ff => ff.IsEventTime = ff.IsTime = false); // reset flags f.Read(rc); rc.Description.ItemDescription.Fields.Count(ff => ff.IsTime).Should().Be(1); rc.Description.ItemDescription.Fields.Count(ff => ff.IsEventTime).Should().Be(1); rc.Description.Timescale.Value.Epoch.Should().Be(0); rc.Description.Timescale.Value.TicksPerDay.Should().Be(TimeSpan.TicksPerDay); }
public void TimeSectionRoundTrip() { var ms = new MemoryStream(); var fio = new FileIO(ms); var fw = new FormattedWriter(fio); var wc = new WriteContext(fw); wc.Description = new TeaFileDescription(); wc.Description.ItemDescription = ItemDescription.FromAnalysis<Event<C>>(); wc.Description.Timescale = Time.Scale; ISectionFormatter f = new TimeSectionFormatter(); f.Write(wc); ms.Position = 0; ms.Length.Should().Be(24); // epoch(8) ticksperday(8) fieldcount(4) + timefieldoffset(4) = 24 var fr = new FormattedReader(fio); var rc = new ReadContext(fr); rc.Description.Should().Not.Be.Null(); rc.Description.ItemDescription = wc.Description.ItemDescription; // this makes the test a bit weaker, but we need some item description here f.Read(rc); rc.Description.Should().Not.Be.Null(); rc.Description.Timescale.HasValue.Should().Be.True(); }
public void TimeSectionRoundTripFieldIsNotInItemDescriptionError() { var ms = new MemoryStream(); var fio = new FileIO(ms); var fw = new FormattedWriter(fio); var wc = new WriteContext(fw); wc.Description = new TeaFileDescription(); wc.Description.ItemDescription = ItemDescription.FromAnalysis<Event<C>>(); wc.Description.Timescale = Time.Scale; ISectionFormatter f = new TimeSectionFormatter(); f.Write(wc); ms.Position = 0; var fr = new FormattedReader(fio); var rc = new ReadContext(fr); rc.Description.Should().Not.Be.Null(); rc.Description.ItemDescription = ItemDescription.FromAnalysis<C2>(); Executing.This(() => f.Read(rc)).Should().Throw<FileFormatException>(); }
public void WriteTextTest() { const string testText = "Traditionnellement, il est conseillé d'accompagner cette soupe et ses poissons soit d'un vin rosé issu du vignoble de Provence, soit d'un vin rouge. €"; var fio = new Mock<IFileIO>(MockBehavior.Strict); fio.Setup(io => io.WriteInt32(It.IsAny<int>())); fio.Setup(io => io.WriteBytes(It.IsAny<byte[]>())); FormattedWriter fw = new FormattedWriter(fio.Object); fw.WriteText(testText); fio.Verify(f => f.WriteInt32(It.Is<int>(n => n >= testText.Length)), Times.Once()); fio.Verify(f => f.WriteBytes(It.Is<byte[]>(bytes => (new UTF8Encoding(false, true).GetString(bytes)) == testText)), Times.Once()); }
public void WriteRawArgumentTest() { var fio = new Mock<IFileIO>(MockBehavior.Strict); FormattedWriter fw = new FormattedWriter(fio.Object); Executing.This(() => fw.WriteRaw(null)).Should().Throw<ArgumentNullException>(); }
public void NameValueSectionRoundTrip3EntriesTest() { var ms = new MemoryStream(); var fio = new FileIO(ms); var fw = new FormattedWriter(fio); var wc = new WriteContext(fw); ISectionFormatter f = new NameValueSectionFormatter(); wc.Description = new TeaFileDescription(); wc.Description.NameValues = new NameValueCollection(); wc.Description.NameValues.Add(new NameValue("someName", 1.23)); wc.Description.NameValues.Add(new NameValue("someName2", "second value")); wc.Description.NameValues.Add(new NameValue("someName3", 333)); f.Write(wc); ms.Position = 0; var fr = new FormattedReader(fio); var rc = new ReadContext(fr); f.Read(rc); rc.Description.Should().Not.Be.Null(); rc.Description.NameValues.Should().Not.Be.Null(); rc.Description.NameValues.Should().Have.Count.EqualTo(3); rc.Description.NameValues.Select(nv => nv.Name).Should().Have.SameSequenceAs("someName", "someName2", "someName3"); rc.Description.NameValues.Select(nv => nv.GetValue<object>()).Should().Have.SameSequenceAs(1.23, "second value", 333); }
public void WriteNullTextTest() { const string testText = null; var fio = new Mock<IFileIO>(MockBehavior.Strict); fio.Setup(io => io.WriteInt32(It.IsAny<int>())); fio.Setup(io => io.WriteBytes(It.IsAny<byte[]>())); FormattedWriter fw = new FormattedWriter(fio.Object); fw.WriteText(testText); fio.Verify(f => f.WriteInt32(0), Times.Once()); }
public void NameValueRoundTripTest() { var stream = new MemoryStream(); var fio = new FileIO(stream); var w = new FormattedWriter(fio); Guid g = new Guid("1116C195-8975-4E73-B777-23E1C548BC71"); const string testText = "some text with special characters €,@, ʤǤDŽƪҗ∰"; { var nv1 = new NameValue("name1", 1.23); var nv2 = new NameValue("name2", 722); var nv3 = new NameValue("name3", g); var nv4 = new NameValue("name4", testText); w.WriteNameValue(nv1); w.WriteNameValue(nv2); w.WriteNameValue(nv3); w.WriteNameValue(nv4); } stream.Position = 0; var r = new FormattedReader(fio); { var nv1 = r.ReadNameValue(); nv1.Name.Should().Be("name1"); nv1.GetValue<double>().Should().Be(1.23); nv1.Kind.Should().Be(NameValue.ValueKind.Double); var nv2 = r.ReadNameValue(); nv2.Name.Should().Be("name2"); nv2.GetValue<int>().Should().Be(722); nv2.Kind.Should().Be(NameValue.ValueKind.Int32); var nv3 = r.ReadNameValue(); nv3.Name.Should().Be("name3"); nv3.GetValue<Guid>().Should().Be(g); nv3.Kind.Should().Be(NameValue.ValueKind.Guid); var nv4 = r.ReadNameValue(); nv4.Name.Should().Be("name4"); nv4.GetValue<string>().Should().Be(testText); nv4.Kind.Should().Be(NameValue.ValueKind.Text); } }