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 Read(ReadContext c) { // time scale var epoch = c.Reader.ReadInt64(); var ticksPerDay = c.Reader.ReadInt64(); c.Description.Timescale = Timescale.FromEpoch(epoch, ticksPerDay); // time fields var timeFieldsCount = c.Reader.ReadInt32(); var offsets = new List <int>(); timeFieldsCount.Times(() => offsets.Add(c.Reader.ReadInt32())); c.Description.TimeFieldOffsets = offsets.AsReadOnly(); // adorn item description with time aspects, if available var id = c.Description.ItemDescription; if (id != null) { bool isFirstTimeField = true; foreach (var offset in offsets) { var f = id.FindFieldByOffset(offset); if (f == null) { throw new FileFormatException("Time format section contains an entry for a field at offset {0} but no such field was found in the item description."); } f.IsTime = true; f.IsEventTime = isFirstTimeField; isFirstTimeField = false; } } }