Skip to content

Commit 27fe0c4

Browse files
authored
Add comprehensive unit tests for coverage improvement (#4084)
<!-- Please be sure to read the [Contribute](https://github.com/reactiveui/reactiveui#contribute) section of the README --> **What kind of change does this PR introduce?** <!-- Bug fix, feature, docs update, ... --> Tests update **What is the new behavior?** <!-- If this is a feature change --> Added multiple new unit tests to MessageBusTest.cs and RandomTests.cs to increase code coverage. Tests include scenarios for MessageBus contract isolation, scheduler registration, static properties, and various attribute and type converter behaviors. Also added tests for mixins, helpers, and static members to ensure all major code paths are exercised. **What might this PR break?** N/A **Please check if the PR fulfills these requirements** - [x] Tests for the changes have been added (for bug fixes / features) - [ ] Docs have been added / updated (for bug fixes / features) **Other information**:
1 parent 41a30a1 commit 27fe0c4

File tree

2 files changed

+678
-1
lines changed

2 files changed

+678
-1
lines changed

src/ReactiveUI.Tests/MessageBusTest.cs

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,4 +153,91 @@ public void MessageBusThreadingTest()
153153
Assert.NotEqual(listenedThreadId!.Value, thisThreadId);
154154
Assert.Equal(listenedThreadId.Value, otherThreadId!.Value);
155155
}
156+
157+
/// <summary>
158+
/// Tests MessageBus.RegisterScheduler method for complete coverage.
159+
/// </summary>
160+
[Fact]
161+
public void MessageBus_RegisterScheduler_ShouldWork()
162+
{
163+
// Arrange
164+
var messageBus = new MessageBus();
165+
var receivedMessages = new List<int>();
166+
167+
// Act - Register scheduler without contract first
168+
messageBus.RegisterScheduler<int>(CurrentThreadScheduler.Instance);
169+
messageBus.Listen<int>().Subscribe(x => receivedMessages.Add(x));
170+
messageBus.SendMessage(42);
171+
172+
// Assert
173+
Assert.Single(receivedMessages);
174+
Assert.Equal(42, receivedMessages[0]);
175+
}
176+
177+
/// <summary>
178+
/// Tests MessageBus.ListenIncludeLatest method for complete coverage.
179+
/// </summary>
180+
[Fact]
181+
public void MessageBus_ListenIncludeLatest_ShouldIncludeLastMessage()
182+
{
183+
// Arrange
184+
var messageBus = new MessageBus();
185+
var receivedMessages = new List<int>();
186+
187+
// Send a message first
188+
messageBus.SendMessage(42);
189+
190+
// Act - Listen including latest should get the previously sent message
191+
messageBus.ListenIncludeLatest<int>().Subscribe(x => receivedMessages.Add(x));
192+
193+
// Assert
194+
Assert.Single(receivedMessages);
195+
Assert.Equal(42, receivedMessages[0]);
196+
}
197+
198+
/// <summary>
199+
/// Tests MessageBus.Current static property for complete coverage.
200+
/// </summary>
201+
[Fact]
202+
public void MessageBus_Current_ShouldBeAccessible()
203+
{
204+
// Act
205+
var current = MessageBus.Current;
206+
207+
// Assert
208+
Assert.NotNull(current);
209+
Assert.IsAssignableFrom<IMessageBus>(current);
210+
}
211+
212+
/// <summary>
213+
/// Tests MessageBus with contracts to ensure message isolation.
214+
/// </summary>
215+
[Fact]
216+
public void MessageBus_WithContracts_ShouldIsolateMessages()
217+
{
218+
// Arrange
219+
var messageBus = new MessageBus();
220+
var contract1Messages = new List<int>();
221+
var contract2Messages = new List<int>();
222+
var noContractMessages = new List<int>();
223+
224+
// Act
225+
messageBus.Listen<int>("Contract1").Subscribe(x => contract1Messages.Add(x));
226+
messageBus.Listen<int>("Contract2").Subscribe(x => contract2Messages.Add(x));
227+
messageBus.Listen<int>().Subscribe(x => noContractMessages.Add(x));
228+
229+
messageBus.SendMessage(1, "Contract1");
230+
messageBus.SendMessage(2, "Contract2");
231+
messageBus.SendMessage(3);
232+
233+
// Assert
234+
Assert.Single(contract1Messages);
235+
Assert.Equal(1, contract1Messages[0]);
236+
237+
Assert.Single(contract2Messages);
238+
Assert.Equal(2, contract2Messages[0]);
239+
240+
Assert.Single(noContractMessages);
241+
Assert.Equal(3, noContractMessages[0]);
242+
}
156243
}

0 commit comments

Comments
 (0)