From 96ccd7fcd3d0a4f274c0489de5ee4863106eaadb Mon Sep 17 00:00:00 2001 From: Muller Date: Tue, 11 Jan 2022 17:10:41 -0300 Subject: [PATCH 1/7] Added EventRaisedOrder to correctly track order of raised events in Monitor --- Src/FluentAssertions/Events/EventMonitor.cs | 6 ++- .../Events/EventRaisedOrder.cs | 20 +++++++++ Src/FluentAssertions/Events/EventRecorder.cs | 11 +++-- Src/FluentAssertions/Events/OccurredEvent.cs | 5 +++ Src/FluentAssertions/Events/RecordedEvent.cs | 8 +++- .../FluentAssertions/net47.verified.txt | 1 + .../netcoreapp2.1.verified.txt | 1 + .../netcoreapp3.0.verified.txt | 1 + .../netstandard2.1.verified.txt | 1 + .../Events/EventAssertionSpecs.cs | 43 +++++++++++++++++++ 10 files changed, 91 insertions(+), 6 deletions(-) create mode 100644 Src/FluentAssertions/Events/EventRaisedOrder.cs diff --git a/Src/FluentAssertions/Events/EventMonitor.cs b/Src/FluentAssertions/Events/EventMonitor.cs index 132154b758..2d17376475 100644 --- a/Src/FluentAssertions/Events/EventMonitor.cs +++ b/Src/FluentAssertions/Events/EventMonitor.cs @@ -30,6 +30,8 @@ public EventMonitor(object eventSource, Func utcNow) public T Subject => (T)subject.Target; + private EventRaisedOrder EventRaisedOrder { get; } = new(); + public EventMetadata[] MonitoredEvents { get @@ -49,7 +51,7 @@ public OccurredEvent[] OccurredEvents from eventName in recorderMap.Keys let recording = GetRecordingFor(eventName) from @event in recording - orderby @event.TimestampUtc + orderby @event.RaisedOrderIndex select @event; return query.ToArray(); @@ -125,7 +127,7 @@ private void AttachEventHandler(EventInfo eventInfo, Func utcNow) { if (!recorderMap.TryGetValue(eventInfo.Name, out _)) { - var recorder = new EventRecorder(subject.Target, eventInfo.Name, utcNow); + var recorder = new EventRecorder(subject.Target, eventInfo.Name, utcNow, EventRaisedOrder); if (recorderMap.TryAdd(eventInfo.Name, recorder)) { recorder.Attach(subject, eventInfo); diff --git a/Src/FluentAssertions/Events/EventRaisedOrder.cs b/Src/FluentAssertions/Events/EventRaisedOrder.cs new file mode 100644 index 0000000000..e5be295a2a --- /dev/null +++ b/Src/FluentAssertions/Events/EventRaisedOrder.cs @@ -0,0 +1,20 @@ +using System.Threading; + +namespace FluentAssertions.Events +{ + /// + /// Tracks the order of events raised by . + /// + internal sealed class EventRaisedOrder + { + private int orderIndex = -1; + + /// + /// Increments the current order index. + /// + public int Increment() + { + return Interlocked.Increment(ref orderIndex); + } + } +} diff --git a/Src/FluentAssertions/Events/EventRecorder.cs b/Src/FluentAssertions/Events/EventRecorder.cs index 647e216f9e..4692f893f2 100644 --- a/Src/FluentAssertions/Events/EventRecorder.cs +++ b/Src/FluentAssertions/Events/EventRecorder.cs @@ -25,11 +25,13 @@ internal sealed class EventRecorder : IEventRecording, IDisposable /// The object events are recorded from /// The name of the event that's recorded /// A delegate to get the current date and time in UTC format. - public EventRecorder(object eventRaiser, string eventName, Func utcNow) + /// Class used to track order of raised events. + public EventRecorder(object eventRaiser, string eventName, Func utcNow, EventRaisedOrder eventRaisedOrder) { this.utcNow = utcNow; EventObject = eventRaiser; EventName = eventName; + EventRaisedOrder = eventRaisedOrder; } /// @@ -40,6 +42,8 @@ public EventRecorder(object eventRaiser, string eventName, Func utcNow /// public string EventName { get; } + private EventRaisedOrder EventRaisedOrder { get; } + public Type EventHandlerType { get; private set; } public void Attach(WeakReference subject, EventInfo eventInfo) @@ -77,7 +81,7 @@ public void RecordEvent(params object[] parameters) { lock (lockable) { - raisedEvents.Add(new RecordedEvent(utcNow(), parameters)); + raisedEvents.Add(new RecordedEvent(utcNow(), EventRaisedOrder.Increment(), parameters)); } } @@ -105,7 +109,8 @@ public IEnumerator GetEnumerator() { EventName = EventName, Parameters = @event.Parameters, - TimestampUtc = @event.TimestampUtc + TimestampUtc = @event.TimestampUtc, + RaisedOrderIndex = @event.RaisedOrderIndex }; } } diff --git a/Src/FluentAssertions/Events/OccurredEvent.cs b/Src/FluentAssertions/Events/OccurredEvent.cs index 937025bfd3..631fee562a 100644 --- a/Src/FluentAssertions/Events/OccurredEvent.cs +++ b/Src/FluentAssertions/Events/OccurredEvent.cs @@ -21,5 +21,10 @@ public class OccurredEvent /// The exact date and time of the occurrence in . /// public DateTime TimestampUtc { get; set; } + + /// + /// The order in which this event was raised on the monitored object. + /// + public int RaisedOrderIndex { get; set; } } } diff --git a/Src/FluentAssertions/Events/RecordedEvent.cs b/Src/FluentAssertions/Events/RecordedEvent.cs index 1930a605ee..4abae4fef7 100644 --- a/Src/FluentAssertions/Events/RecordedEvent.cs +++ b/Src/FluentAssertions/Events/RecordedEvent.cs @@ -12,10 +12,11 @@ internal class RecordedEvent /// /// Default constructor stores the parameters the event was raised with /// - public RecordedEvent(DateTime utcNow, params object[] parameters) + public RecordedEvent(DateTime utcNow, int raisedOrderIndex, params object[] parameters) { Parameters = parameters; TimestampUtc = utcNow; + RaisedOrderIndex = raisedOrderIndex; } /// @@ -27,5 +28,10 @@ public RecordedEvent(DateTime utcNow, params object[] parameters) /// Parameters for the event /// public object[] Parameters { get; } + + /// + /// The order in which this event was invoked on the monitored object. + /// + public int RaisedOrderIndex { get; } } } diff --git a/Tests/Approval.Tests/ApprovedApi/FluentAssertions/net47.verified.txt b/Tests/Approval.Tests/ApprovedApi/FluentAssertions/net47.verified.txt index 8f749545dd..7188633927 100644 --- a/Tests/Approval.Tests/ApprovedApi/FluentAssertions/net47.verified.txt +++ b/Tests/Approval.Tests/ApprovedApi/FluentAssertions/net47.verified.txt @@ -1217,6 +1217,7 @@ namespace FluentAssertions.Events public OccurredEvent() { } public string EventName { get; set; } public object[] Parameters { get; set; } + public int RaisedOrderIndex { get; set; } public System.DateTime TimestampUtc { get; set; } } } diff --git a/Tests/Approval.Tests/ApprovedApi/FluentAssertions/netcoreapp2.1.verified.txt b/Tests/Approval.Tests/ApprovedApi/FluentAssertions/netcoreapp2.1.verified.txt index 74366f32aa..0242440b18 100644 --- a/Tests/Approval.Tests/ApprovedApi/FluentAssertions/netcoreapp2.1.verified.txt +++ b/Tests/Approval.Tests/ApprovedApi/FluentAssertions/netcoreapp2.1.verified.txt @@ -1217,6 +1217,7 @@ namespace FluentAssertions.Events public OccurredEvent() { } public string EventName { get; set; } public object[] Parameters { get; set; } + public int RaisedOrderIndex { get; set; } public System.DateTime TimestampUtc { get; set; } } } diff --git a/Tests/Approval.Tests/ApprovedApi/FluentAssertions/netcoreapp3.0.verified.txt b/Tests/Approval.Tests/ApprovedApi/FluentAssertions/netcoreapp3.0.verified.txt index 742058b3f4..0eaa8c5f08 100644 --- a/Tests/Approval.Tests/ApprovedApi/FluentAssertions/netcoreapp3.0.verified.txt +++ b/Tests/Approval.Tests/ApprovedApi/FluentAssertions/netcoreapp3.0.verified.txt @@ -1217,6 +1217,7 @@ namespace FluentAssertions.Events public OccurredEvent() { } public string EventName { get; set; } public object[] Parameters { get; set; } + public int RaisedOrderIndex { get; set; } public System.DateTime TimestampUtc { get; set; } } } diff --git a/Tests/Approval.Tests/ApprovedApi/FluentAssertions/netstandard2.1.verified.txt b/Tests/Approval.Tests/ApprovedApi/FluentAssertions/netstandard2.1.verified.txt index 27d7e7a226..16076c9579 100644 --- a/Tests/Approval.Tests/ApprovedApi/FluentAssertions/netstandard2.1.verified.txt +++ b/Tests/Approval.Tests/ApprovedApi/FluentAssertions/netstandard2.1.verified.txt @@ -1217,6 +1217,7 @@ namespace FluentAssertions.Events public OccurredEvent() { } public string EventName { get; set; } public object[] Parameters { get; set; } + public int RaisedOrderIndex { get; set; } public System.DateTime TimestampUtc { get; set; } } } diff --git a/Tests/FluentAssertions.Specs/Events/EventAssertionSpecs.cs b/Tests/FluentAssertions.Specs/Events/EventAssertionSpecs.cs index 432996e070..013dff3dbb 100644 --- a/Tests/FluentAssertions.Specs/Events/EventAssertionSpecs.cs +++ b/Tests/FluentAssertions.Specs/Events/EventAssertionSpecs.cs @@ -411,6 +411,28 @@ public void When_constraints_are_specified_it_should_filter_the_events_based_on_ .Which.PropertyName.Should().Be("Boo"); } + [Fact] + public void When_events_are_raised_regardless_of_time_tick_it_should_return_by_invokation_order() + { + // Arrange + var observable = new TestEventRaisingInOrder(); + var utcNow = 11.January(2022).At(12, 00).AsUtc(); + using var monitor = observable.Monitor(() => utcNow); + + // Act + observable.RaiseAllEvents(); + + // Assert + monitor.OccurredEvents[0].EventName.Should().Be(nameof(TestEventRaisingInOrder.InterfaceEvent)); + monitor.OccurredEvents[0].RaisedOrderIndex.Should().Be(0); + + monitor.OccurredEvents[1].EventName.Should().Be(nameof(TestEventRaisingInOrder.Interface2Event)); + monitor.OccurredEvents[1].RaisedOrderIndex.Should().Be(1); + + monitor.OccurredEvents[2].EventName.Should().Be(nameof(TestEventRaisingInOrder.Interface3Event)); + monitor.OccurredEvents[2].RaisedOrderIndex.Should().Be(2); + } + #endregion #region Should(Not)RaisePropertyChanged events @@ -817,6 +839,22 @@ public void RaiseBothEvents() } } + private class TestEventRaisingInOrder : IEventRaisingInterface, IEventRaisingInterface2, IEventRaisingInterface3 + { + public event EventHandler Interface3Event; + + public event EventHandler Interface2Event; + + public event EventHandler InterfaceEvent; + + public void RaiseAllEvents() + { + InterfaceEvent?.Invoke(this, EventArgs.Empty); + Interface2Event?.Invoke(this, EventArgs.Empty); + Interface3Event?.Invoke(this, EventArgs.Empty); + } + } + public interface IEventRaisingInterface { event EventHandler InterfaceEvent; @@ -827,6 +865,11 @@ public interface IEventRaisingInterface2 event EventHandler Interface2Event; } + public interface IEventRaisingInterface3 + { + event EventHandler Interface3Event; + } + public interface IInheritsEventRaisingInterface : IEventRaisingInterface { } From 50a781b492b292e57cba6b4ccb1a1e052d88031f Mon Sep 17 00:00:00 2001 From: Muller Date: Tue, 11 Jan 2022 17:33:30 -0300 Subject: [PATCH 2/7] Updated release notes. --- docs/_pages/releases.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/_pages/releases.md b/docs/_pages/releases.md index 833e2674ee..f774bd817c 100644 --- a/docs/_pages/releases.md +++ b/docs/_pages/releases.md @@ -17,7 +17,7 @@ sidebar: * `ContainItemsAssignableTo` now expects at least one item assignable to `T` - [#1765](https://github.com/fluentassertions/fluentassertions/pull/1765) * Querying methods on classes, e.g. `typeof(MyController).Methods()`, now also includes static methods - [#1740](https://github.com/fluentassertions/fluentassertions/pull/1740) * Variable name is not captured after await assertion - [#1770](https://github.com/fluentassertions/fluentassertions/pull/1770) - +* `OccurredEvent` ordering on monitored object is now done via thread-safe counter - [#1723](https://github.com/fluentassertions/fluentassertions/pull/1773) ## 6.3.0 ### What's New From 92ecdc51c608402a79ffa4bb32b188aea053839f Mon Sep 17 00:00:00 2001 From: Muller Date: Sun, 16 Jan 2022 12:21:47 -0300 Subject: [PATCH 3/7] Requested changes on releases.md. --- docs/_pages/releases.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/_pages/releases.md b/docs/_pages/releases.md index 1fdacadb67..5b69bb9c9b 100644 --- a/docs/_pages/releases.md +++ b/docs/_pages/releases.md @@ -18,7 +18,7 @@ sidebar: * `ContainItemsAssignableTo` now expects at least one item assignable to `T` - [#1765](https://github.com/fluentassertions/fluentassertions/pull/1765) * Querying methods on classes, e.g. `typeof(MyController).Methods()`, now also includes static methods - [#1740](https://github.com/fluentassertions/fluentassertions/pull/1740) * Variable name is not captured after await assertion - [#1770](https://github.com/fluentassertions/fluentassertions/pull/1770) -* `OccurredEvent` ordering on monitored object is now done via thread-safe counter - [#1723](https://github.com/fluentassertions/fluentassertions/pull/1773) +* `OccurredEvent` ordering on monitored object is now done via thread-safe counter - [#1773](https://github.com/fluentassertions/fluentassertions/pull/1773) * Avoid a `NullReferenceException` when testing an application compiled with .NET Native - [#1776](https://github.com/fluentassertions/fluentassertions/pull/1776) ## 6.3.0 From ee0b86ba673e5491c542e9aca797095ad66db2cc Mon Sep 17 00:00:00 2001 From: Muller Date: Sun, 16 Jan 2022 15:42:55 -0300 Subject: [PATCH 4/7] Suggested changes regarding the thread-safe sequence generator. --- Src/FluentAssertions/Events/EventMonitor.cs | 6 +++--- .../Events/EventRaisedOrder.cs | 20 ------------------- Src/FluentAssertions/Events/EventRecorder.cs | 12 +++++------ Src/FluentAssertions/Events/OccurredEvent.cs | 2 +- .../Events/ThreadSafeSequenceGenerator.cs | 20 +++++++++++++++++++ .../Events/EventAssertionSpecs.cs | 6 +++--- 6 files changed, 33 insertions(+), 33 deletions(-) delete mode 100644 Src/FluentAssertions/Events/EventRaisedOrder.cs create mode 100644 Src/FluentAssertions/Events/ThreadSafeSequenceGenerator.cs diff --git a/Src/FluentAssertions/Events/EventMonitor.cs b/Src/FluentAssertions/Events/EventMonitor.cs index 2d17376475..41cc874c2c 100644 --- a/Src/FluentAssertions/Events/EventMonitor.cs +++ b/Src/FluentAssertions/Events/EventMonitor.cs @@ -30,7 +30,7 @@ public EventMonitor(object eventSource, Func utcNow) public T Subject => (T)subject.Target; - private EventRaisedOrder EventRaisedOrder { get; } = new(); + private readonly ThreadSafeSequenceGenerator threadSafeSequenceGenerator = new(); public EventMetadata[] MonitoredEvents { @@ -51,7 +51,7 @@ public OccurredEvent[] OccurredEvents from eventName in recorderMap.Keys let recording = GetRecordingFor(eventName) from @event in recording - orderby @event.RaisedOrderIndex + orderby @event.Sequence select @event; return query.ToArray(); @@ -127,7 +127,7 @@ private void AttachEventHandler(EventInfo eventInfo, Func utcNow) { if (!recorderMap.TryGetValue(eventInfo.Name, out _)) { - var recorder = new EventRecorder(subject.Target, eventInfo.Name, utcNow, EventRaisedOrder); + var recorder = new EventRecorder(subject.Target, eventInfo.Name, utcNow, threadSafeSequenceGenerator); if (recorderMap.TryAdd(eventInfo.Name, recorder)) { recorder.Attach(subject, eventInfo); diff --git a/Src/FluentAssertions/Events/EventRaisedOrder.cs b/Src/FluentAssertions/Events/EventRaisedOrder.cs deleted file mode 100644 index e5be295a2a..0000000000 --- a/Src/FluentAssertions/Events/EventRaisedOrder.cs +++ /dev/null @@ -1,20 +0,0 @@ -using System.Threading; - -namespace FluentAssertions.Events -{ - /// - /// Tracks the order of events raised by . - /// - internal sealed class EventRaisedOrder - { - private int orderIndex = -1; - - /// - /// Increments the current order index. - /// - public int Increment() - { - return Interlocked.Increment(ref orderIndex); - } - } -} diff --git a/Src/FluentAssertions/Events/EventRecorder.cs b/Src/FluentAssertions/Events/EventRecorder.cs index 4692f893f2..5fe4ec7e3d 100644 --- a/Src/FluentAssertions/Events/EventRecorder.cs +++ b/Src/FluentAssertions/Events/EventRecorder.cs @@ -25,13 +25,13 @@ internal sealed class EventRecorder : IEventRecording, IDisposable /// The object events are recorded from /// The name of the event that's recorded /// A delegate to get the current date and time in UTC format. - /// Class used to track order of raised events. - public EventRecorder(object eventRaiser, string eventName, Func utcNow, EventRaisedOrder eventRaisedOrder) + /// Class used to generate a thread-safe sequence. + public EventRecorder(object eventRaiser, string eventName, Func utcNow, ThreadSafeSequenceGenerator threadSafeSequenceGenerator) { this.utcNow = utcNow; EventObject = eventRaiser; EventName = eventName; - EventRaisedOrder = eventRaisedOrder; + this.threadSafeSequenceGenerator = threadSafeSequenceGenerator; } /// @@ -42,7 +42,7 @@ public EventRecorder(object eventRaiser, string eventName, Func utcNow /// public string EventName { get; } - private EventRaisedOrder EventRaisedOrder { get; } + private readonly ThreadSafeSequenceGenerator threadSafeSequenceGenerator; public Type EventHandlerType { get; private set; } @@ -81,7 +81,7 @@ public void RecordEvent(params object[] parameters) { lock (lockable) { - raisedEvents.Add(new RecordedEvent(utcNow(), EventRaisedOrder.Increment(), parameters)); + raisedEvents.Add(new RecordedEvent(utcNow(), threadSafeSequenceGenerator.Increment(), parameters)); } } @@ -110,7 +110,7 @@ public IEnumerator GetEnumerator() EventName = EventName, Parameters = @event.Parameters, TimestampUtc = @event.TimestampUtc, - RaisedOrderIndex = @event.RaisedOrderIndex + Sequence = @event.RaisedOrderIndex }; } } diff --git a/Src/FluentAssertions/Events/OccurredEvent.cs b/Src/FluentAssertions/Events/OccurredEvent.cs index 631fee562a..761341ea29 100644 --- a/Src/FluentAssertions/Events/OccurredEvent.cs +++ b/Src/FluentAssertions/Events/OccurredEvent.cs @@ -25,6 +25,6 @@ public class OccurredEvent /// /// The order in which this event was raised on the monitored object. /// - public int RaisedOrderIndex { get; set; } + public int Sequence { get; set; } } } diff --git a/Src/FluentAssertions/Events/ThreadSafeSequenceGenerator.cs b/Src/FluentAssertions/Events/ThreadSafeSequenceGenerator.cs new file mode 100644 index 0000000000..ff211b3ff6 --- /dev/null +++ b/Src/FluentAssertions/Events/ThreadSafeSequenceGenerator.cs @@ -0,0 +1,20 @@ +using System.Threading; + +namespace FluentAssertions.Events +{ + /// + /// Generates a thread-safe sequence. + /// + internal sealed class ThreadSafeSequenceGenerator + { + private int sequence = -1; + + /// + /// Increments the current sequence. + /// + public int Increment() + { + return Interlocked.Increment(ref sequence); + } + } +} diff --git a/Tests/FluentAssertions.Specs/Events/EventAssertionSpecs.cs b/Tests/FluentAssertions.Specs/Events/EventAssertionSpecs.cs index 013dff3dbb..f07bc28c78 100644 --- a/Tests/FluentAssertions.Specs/Events/EventAssertionSpecs.cs +++ b/Tests/FluentAssertions.Specs/Events/EventAssertionSpecs.cs @@ -424,13 +424,13 @@ public void When_events_are_raised_regardless_of_time_tick_it_should_return_by_i // Assert monitor.OccurredEvents[0].EventName.Should().Be(nameof(TestEventRaisingInOrder.InterfaceEvent)); - monitor.OccurredEvents[0].RaisedOrderIndex.Should().Be(0); + monitor.OccurredEvents[0].Sequence.Should().Be(0); monitor.OccurredEvents[1].EventName.Should().Be(nameof(TestEventRaisingInOrder.Interface2Event)); - monitor.OccurredEvents[1].RaisedOrderIndex.Should().Be(1); + monitor.OccurredEvents[1].Sequence.Should().Be(1); monitor.OccurredEvents[2].EventName.Should().Be(nameof(TestEventRaisingInOrder.Interface3Event)); - monitor.OccurredEvents[2].RaisedOrderIndex.Should().Be(2); + monitor.OccurredEvents[2].Sequence.Should().Be(2); } #endregion From 53ad71d7b11df18db03f2c1f012492ed8d9814ff Mon Sep 17 00:00:00 2001 From: Muller Date: Sun, 16 Jan 2022 15:54:07 -0300 Subject: [PATCH 5/7] API changes script --- .../ApprovedApi/FluentAssertions/net47.verified.txt | 2 +- .../ApprovedApi/FluentAssertions/netcoreapp2.1.verified.txt | 2 +- .../ApprovedApi/FluentAssertions/netcoreapp3.0.verified.txt | 2 +- .../ApprovedApi/FluentAssertions/netstandard2.1.verified.txt | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Tests/Approval.Tests/ApprovedApi/FluentAssertions/net47.verified.txt b/Tests/Approval.Tests/ApprovedApi/FluentAssertions/net47.verified.txt index 59389fb3b9..3abc0f26e9 100644 --- a/Tests/Approval.Tests/ApprovedApi/FluentAssertions/net47.verified.txt +++ b/Tests/Approval.Tests/ApprovedApi/FluentAssertions/net47.verified.txt @@ -1221,7 +1221,7 @@ namespace FluentAssertions.Events public OccurredEvent() { } public string EventName { get; set; } public object[] Parameters { get; set; } - public int RaisedOrderIndex { get; set; } + public int Sequence { get; set; } public System.DateTime TimestampUtc { get; set; } } } diff --git a/Tests/Approval.Tests/ApprovedApi/FluentAssertions/netcoreapp2.1.verified.txt b/Tests/Approval.Tests/ApprovedApi/FluentAssertions/netcoreapp2.1.verified.txt index 1a4024968a..2163da6552 100644 --- a/Tests/Approval.Tests/ApprovedApi/FluentAssertions/netcoreapp2.1.verified.txt +++ b/Tests/Approval.Tests/ApprovedApi/FluentAssertions/netcoreapp2.1.verified.txt @@ -1221,7 +1221,7 @@ namespace FluentAssertions.Events public OccurredEvent() { } public string EventName { get; set; } public object[] Parameters { get; set; } - public int RaisedOrderIndex { get; set; } + public int Sequence { get; set; } public System.DateTime TimestampUtc { get; set; } } } diff --git a/Tests/Approval.Tests/ApprovedApi/FluentAssertions/netcoreapp3.0.verified.txt b/Tests/Approval.Tests/ApprovedApi/FluentAssertions/netcoreapp3.0.verified.txt index 29cfe9c3f6..a97c3e2b3a 100644 --- a/Tests/Approval.Tests/ApprovedApi/FluentAssertions/netcoreapp3.0.verified.txt +++ b/Tests/Approval.Tests/ApprovedApi/FluentAssertions/netcoreapp3.0.verified.txt @@ -1221,7 +1221,7 @@ namespace FluentAssertions.Events public OccurredEvent() { } public string EventName { get; set; } public object[] Parameters { get; set; } - public int RaisedOrderIndex { get; set; } + public int Sequence { get; set; } public System.DateTime TimestampUtc { get; set; } } } diff --git a/Tests/Approval.Tests/ApprovedApi/FluentAssertions/netstandard2.1.verified.txt b/Tests/Approval.Tests/ApprovedApi/FluentAssertions/netstandard2.1.verified.txt index ee39bad095..17041a01d3 100644 --- a/Tests/Approval.Tests/ApprovedApi/FluentAssertions/netstandard2.1.verified.txt +++ b/Tests/Approval.Tests/ApprovedApi/FluentAssertions/netstandard2.1.verified.txt @@ -1221,7 +1221,7 @@ namespace FluentAssertions.Events public OccurredEvent() { } public string EventName { get; set; } public object[] Parameters { get; set; } - public int RaisedOrderIndex { get; set; } + public int Sequence { get; set; } public System.DateTime TimestampUtc { get; set; } } } From 1b60c30f04754eaae986ffa081bf48cf6f44c79c Mon Sep 17 00:00:00 2001 From: Muller Date: Mon, 17 Jan 2022 09:00:45 -0300 Subject: [PATCH 6/7] Requested changes for docs and naming. --- Src/FluentAssertions/Events/EventRecorder.cs | 10 +++++----- .../Events/ThreadSafeSequenceGenerator.cs | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Src/FluentAssertions/Events/EventRecorder.cs b/Src/FluentAssertions/Events/EventRecorder.cs index 5fe4ec7e3d..2ac9c838d9 100644 --- a/Src/FluentAssertions/Events/EventRecorder.cs +++ b/Src/FluentAssertions/Events/EventRecorder.cs @@ -25,13 +25,13 @@ internal sealed class EventRecorder : IEventRecording, IDisposable /// The object events are recorded from /// The name of the event that's recorded /// A delegate to get the current date and time in UTC format. - /// Class used to generate a thread-safe sequence. - public EventRecorder(object eventRaiser, string eventName, Func utcNow, ThreadSafeSequenceGenerator threadSafeSequenceGenerator) + /// Class used to generate a sequence in a thread-safe manner. + public EventRecorder(object eventRaiser, string eventName, Func utcNow, ThreadSafeSequenceGenerator sequenceGenerator) { this.utcNow = utcNow; EventObject = eventRaiser; EventName = eventName; - this.threadSafeSequenceGenerator = threadSafeSequenceGenerator; + this.sequenceGenerator = sequenceGenerator; } /// @@ -42,7 +42,7 @@ public EventRecorder(object eventRaiser, string eventName, Func utcNow /// public string EventName { get; } - private readonly ThreadSafeSequenceGenerator threadSafeSequenceGenerator; + private readonly ThreadSafeSequenceGenerator sequenceGenerator; public Type EventHandlerType { get; private set; } @@ -81,7 +81,7 @@ public void RecordEvent(params object[] parameters) { lock (lockable) { - raisedEvents.Add(new RecordedEvent(utcNow(), threadSafeSequenceGenerator.Increment(), parameters)); + raisedEvents.Add(new RecordedEvent(utcNow(), sequenceGenerator.Increment(), parameters)); } } diff --git a/Src/FluentAssertions/Events/ThreadSafeSequenceGenerator.cs b/Src/FluentAssertions/Events/ThreadSafeSequenceGenerator.cs index ff211b3ff6..4ccf4ad443 100644 --- a/Src/FluentAssertions/Events/ThreadSafeSequenceGenerator.cs +++ b/Src/FluentAssertions/Events/ThreadSafeSequenceGenerator.cs @@ -3,7 +3,7 @@ namespace FluentAssertions.Events { /// - /// Generates a thread-safe sequence. + /// Generates a sequence in a thread-safe manner. /// internal sealed class ThreadSafeSequenceGenerator { From d378d0ee0fbbe5923ad100ed6e3b4f3c30188579 Mon Sep 17 00:00:00 2001 From: Muller Date: Mon, 17 Jan 2022 12:45:17 -0300 Subject: [PATCH 7/7] Renamed another index variable. --- Src/FluentAssertions/Events/EventRecorder.cs | 2 +- Src/FluentAssertions/Events/RecordedEvent.cs | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Src/FluentAssertions/Events/EventRecorder.cs b/Src/FluentAssertions/Events/EventRecorder.cs index 2ac9c838d9..abea8d3b2b 100644 --- a/Src/FluentAssertions/Events/EventRecorder.cs +++ b/Src/FluentAssertions/Events/EventRecorder.cs @@ -110,7 +110,7 @@ public IEnumerator GetEnumerator() EventName = EventName, Parameters = @event.Parameters, TimestampUtc = @event.TimestampUtc, - Sequence = @event.RaisedOrderIndex + Sequence = @event.Sequence }; } } diff --git a/Src/FluentAssertions/Events/RecordedEvent.cs b/Src/FluentAssertions/Events/RecordedEvent.cs index 4abae4fef7..69168a7692 100644 --- a/Src/FluentAssertions/Events/RecordedEvent.cs +++ b/Src/FluentAssertions/Events/RecordedEvent.cs @@ -12,11 +12,11 @@ internal class RecordedEvent /// /// Default constructor stores the parameters the event was raised with /// - public RecordedEvent(DateTime utcNow, int raisedOrderIndex, params object[] parameters) + public RecordedEvent(DateTime utcNow, int sequence, params object[] parameters) { Parameters = parameters; TimestampUtc = utcNow; - RaisedOrderIndex = raisedOrderIndex; + Sequence = sequence; } /// @@ -32,6 +32,6 @@ public RecordedEvent(DateTime utcNow, int raisedOrderIndex, params object[] para /// /// The order in which this event was invoked on the monitored object. /// - public int RaisedOrderIndex { get; } + public int Sequence { get; } } }