private void RecomputeTimeBase() { _baseTimeSeconds = 86400; _maxTimeSeconds = 0; foreach (Train train in TrainList) { TrainLocationTime first = train.TrainTimes.FirstOrDefault(); if (first == null) { continue; } if (first.ArrivalTime?.Time != null && first.ArrivalTime.Time.AbsoluteSeconds < _baseTimeSeconds) { _baseTimeSeconds = first.ArrivalTime.Time.AbsoluteSeconds; } else if (first.DepartureTime?.Time != null && first.DepartureTime.Time.AbsoluteSeconds < _baseTimeSeconds) { _baseTimeSeconds = first.DepartureTime.Time.AbsoluteSeconds; } TrainLocationTime last = train.TrainTimes.LastOrDefault(); if (last.DepartureTime?.Time != null && last.DepartureTime.Time.AbsoluteSeconds > _maxTimeSeconds) { _maxTimeSeconds = last.DepartureTime.Time.AbsoluteSeconds; } else if (last.ArrivalTime?.Time != null && last.ArrivalTime.Time.AbsoluteSeconds > _maxTimeSeconds) { _maxTimeSeconds = last.ArrivalTime.Time.AbsoluteSeconds; } } // Round up/down to nearest hour _baseTimeSeconds = (_baseTimeSeconds / 3600) * 3600; _maxTimeSeconds = (_maxTimeSeconds / 3600 + 1) * 3600; }
/// <summary> /// Convert a <see cref="TrainLocationTimeModel" /> instance to a <see cref="TrainLocationTime" /> instance. /// </summary> /// <param name="model">The object to be converted.</param> /// <param name="locations">A dictionary of known locations, to use to resolve the location reference in the model.</param> /// <param name="notes">A dictionary of known footnotes, to use to resolve any footnote references in the model.</param> /// <param name="options">Document options to use to determine how to format strings.</param> /// <returns>A <see cref="TrainLocationTime" /> object containing the same data as the <c>model</c> parameter, with ID references resolved.</returns> /// <exception cref="NullReferenceException">Thrown if the <c>model</c> parameter is <c>null</c>.</exception> /// <exception cref="ArgumentNullException">Thrown if the <c>options</c> parameter is <c>null</c>.</exception> public static TrainLocationTime ToTrainLocationTime( this TrainLocationTimeModel model, Dictionary <string, Location> locations, Dictionary <string, Note> notes, DocumentOptions options) { if (model is null) { throw new NullReferenceException(); } if (options is null) { throw new ArgumentNullException(nameof(options)); } TrainLocationTime output = new TrainLocationTime { Pass = model.Pass ?? false, ArrivalTime = model.Arrival?.ToTrainTime(notes), DepartureTime = model.Departure?.ToTrainTime(notes), Path = model.Path, Platform = model.Platform, Line = model.Line, FormattingStrings = options.FormattingStrings, }; if (model.LocationId != null && locations != null && locations.ContainsKey(model.LocationId)) { output.Location = locations[model.LocationId]; } return(output); }
public void TrainLocationTimeExtensionsClass_ToTrainLocationTimeModelMethod_ThrowsArgumentNullException_IfParameterIsNull() { TrainLocationTime testObject = null; _ = testObject.ToTrainLocationTimeModel(); Assert.Fail(); }
public void TrainLocationTimeModelExtensionsClassToTrainLocationTimeMethodReturnsNullIfFirstParameterIsNull() { TrainLocationTimeModel testObject = null; TrainLocationTime testResult = testObject.ToTrainLocationTime(new Dictionary <string, Location>(), new Dictionary <string, Note>(), GetDocumentOptions()); Assert.IsNull(testResult); }
public void TrainLocationTimeModelExtensionsToTrainLocationTimeMethodReturnsObjectWithCorrectLocationPropertyIfLocationIdPropertyOfFirstParameterIsPresentAsKeyInSecondParameter() { Dictionary <string, Location> locationMap = GetRandomLocationMap(); Dictionary <string, Note> noteMap = GetRandomNotes(); TrainLocationTimeModel testObject = GetTrainLocationTimeModel(locationMap, noteMap); TrainLocationTime testResult = testObject.ToTrainLocationTime(locationMap, noteMap, GetDocumentOptions()); Assert.AreSame(locationMap[testObject.LocationId], testResult.Location); }
public void TrainLocationTimeModelExtensionsClassToTrainLocationTimeMethodReturnsObjectWithCorrectLineProperty() { Dictionary <string, Location> locationMap = GetRandomLocationMap(); Dictionary <string, Note> noteMap = GetRandomNotes(); TrainLocationTimeModel testObject = GetTrainLocationTimeModel(locationMap, noteMap); TrainLocationTime testResult = testObject.ToTrainLocationTime(locationMap, noteMap, GetDocumentOptions()); Assert.AreEqual(testObject.Line, testResult.Line); }
private static List <TrainLocationTime> GetTrainLocationTimeList(int min, int max, TimeOfDay beforeTime) { int count = _rnd.Next(min, max); List <TrainLocationTime> items = new List <TrainLocationTime>(count); for (int i = 0; i < count; ++i) { TrainLocationTime item = GetTrainLocationTime(beforeTime); items.Add(item); } return(items); }
public void TrainLocationTimeModelExtensionsClassToTrainLocationTimeMethodReturnsObjectWithNullLocationPropertyIfLocationIdPropertyOfFirstParameterIsNull() { Dictionary <string, Location> locationMap = GetRandomLocationMap(); Dictionary <string, Note> noteMap = GetRandomNotes(); TrainLocationTimeModel testObject = GetTrainLocationTimeModel(locationMap, noteMap); testObject.LocationId = null; TrainLocationTime testResult = testObject.ToTrainLocationTime(locationMap, noteMap, GetDocumentOptions()); Assert.IsNull(testResult.Location); }
public void TrainLocationTimeExtensionsClass_ToTrainLocationTimeModelMethod_ThrowsArgumentNullExceptionWithCorrectParamNameProperty_IfParameterIsNull() { TrainLocationTime testObject = null; try { _ = testObject.ToTrainLocationTimeModel(); Assert.Fail(); } catch (ArgumentNullException ex) { Assert.AreEqual("tlt", ex.ParamName); } }
public void TrainLocationTimeModelExtensionsClassToTrainLocationTimeMethodReturnsObjectWithCorrectFormattingStringsProperty() { Dictionary <string, Location> locationMap = GetRandomLocationMap(); Dictionary <string, Note> noteMap = GetRandomNotes(); DocumentOptions options = GetDocumentOptions(); TrainLocationTimeModel testObject = GetTrainLocationTimeModel(locationMap, noteMap); TrainLocationTime testResult = testObject.ToTrainLocationTime(locationMap, noteMap, options); Assert.AreEqual(options.FormattingStrings.Complete, testResult.FormattingStrings.Complete); Assert.AreEqual(options.FormattingStrings.Hours, testResult.FormattingStrings.Hours); Assert.AreEqual(options.FormattingStrings.Minutes, testResult.FormattingStrings.Minutes); Assert.AreEqual(options.FormattingStrings.TimeWithoutFootnotes, testResult.FormattingStrings.TimeWithoutFootnotes); }
public void TrainLocationTimeModelExtensionsToTrainLocationTimeMethodReturnsObjectWithNullLocationPropertyIfLocationIdPropertyOfFirstParameterIsNotPresentAsKeyInSecondParameter() { Dictionary <string, Location> locationMap = GetRandomLocationMap(); Dictionary <string, Note> noteMap = GetRandomNotes(); TrainLocationTimeModel testObject = GetTrainLocationTimeModel(locationMap, noteMap); do { testObject.LocationId = _random.NextHexString(8); } while (locationMap.ContainsKey(testObject.LocationId)); TrainLocationTime testResult = testObject.ToTrainLocationTime(locationMap, noteMap, GetDocumentOptions()); Assert.IsNull(testResult.Location); }
/// <summary> /// Convert a <see cref="TrainLocationTime" /> instance to a <see cref="TrainLocationTimeModel" /> instance. /// </summary> /// <param name="tlt">The object to be converted.</param> /// <returns>A <see cref="TrainLocationTimeModel" /> instance containing the same data as the parameter in serialisable form.</returns> /// <exception cref="NullReferenceException">Thrown if the parameter is <c>null</c>.</exception> public static TrainLocationTimeModel ToYamlTrainLocationTimeModel(this TrainLocationTime tlt) { if (tlt is null) { throw new NullReferenceException(); } return(new TrainLocationTimeModel { Arrival = tlt.ArrivalTime.ToYamlTrainTimeModel(), Departure = tlt.DepartureTime.ToYamlTrainTimeModel(), LocationId = tlt.Location.Id, Pass = tlt.Pass, Platform = tlt.Platform, Path = tlt.Path, Line = tlt.Line, }); }
/// <summary> /// Convert a <see cref="TrainLocationTime"/> instance into a <see cref="TrainLocationTimeModel"/> instance. /// </summary> /// <param name="tlt">The instance to be converted.</param> /// <returns>A <see cref="TrainLocationTimeModel"/> instance containing the same data as the parameter.</returns> public static TrainLocationTimeModel ToTrainLocationTimeModel(this TrainLocationTime tlt) { if (tlt is null) { throw new ArgumentNullException(nameof(tlt)); } return(new TrainLocationTimeModel { ArrivalTime = tlt.ArrivalTime.ToTrainTimeModel(), DepartureTime = tlt.DepartureTime.ToTrainTimeModel(), LocationId = tlt.Location.Id, Pass = tlt.Pass, Platform = tlt.Platform, Path = tlt.Path, Line = tlt.Line, }); }