Skip to content

Commit 407c10f

Browse files
author
Erik
committed
added tests
1 parent 9041fa7 commit 407c10f

8 files changed

Lines changed: 253 additions & 139 deletions

File tree

EventSource4Net.Test/EventSource4Net.Test.csproj

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
<DebugType>pdbonly</DebugType>
3131
<Optimize>true</Optimize>
3232
<OutputPath>bin\Release\</OutputPath>
33-
<DefineConstants>TRACE</DefineConstants>
33+
<DefineConstants>DEBUG;TRACE</DefineConstants>
3434
<ErrorReport>prompt</ErrorReport>
3535
<WarningLevel>4</WarningLevel>
3636
</PropertyGroup>
@@ -51,9 +51,10 @@
5151
</Choose>
5252
<ItemGroup>
5353
<Compile Include="Properties\AssemblyInfo.cs" />
54-
<Compile Include="StringSplitterTest.cs" />
54+
<Compile Include="MessagesTest.cs" />
5555
<Compile Include="TestableEventSource.cs" />
5656
<Compile Include="EventSourceTest.cs" />
57+
<Compile Include="TestExtensions.cs" />
5758
<Compile Include="WebRequesterFactoryTest.cs" />
5859
</ItemGroup>
5960
<ItemGroup>
Lines changed: 149 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,149 @@
1+
using System;
2+
using Microsoft.VisualStudio.TestTools.UnitTesting;
3+
using System.Threading;
4+
using System.Collections.Generic;
5+
6+
namespace EventSource4Net.Test
7+
{
8+
[TestClass]
9+
public class MessagesTest
10+
{
11+
Uri url = new Uri("http://test.com");
12+
CancellationTokenSource cts;
13+
List<EventSourceState> states;
14+
ServiceResponseMock response;
15+
WebRequesterFactoryMock factory;
16+
ManualResetEvent stateIsOpen;
17+
List<ServerSentEvent> receivedMessages;
18+
ManualResetEvent eventReceived;
19+
20+
private TestableEventSource SetupAndConnect()
21+
{
22+
// setup
23+
cts = new CancellationTokenSource();
24+
states = new List<EventSourceState>();
25+
response = new ServiceResponseMock(url, System.Net.HttpStatusCode.OK);
26+
factory = new WebRequesterFactoryMock(response);
27+
stateIsOpen = new ManualResetEvent(false);
28+
receivedMessages = new List<ServerSentEvent>();
29+
eventReceived = new ManualResetEvent(false);
30+
31+
TestableEventSource es = new TestableEventSource(url, factory);
32+
es.StateChanged += (o, e) =>
33+
{
34+
states.Add(e.State);
35+
if (e.State == EventSourceState.OPEN)
36+
stateIsOpen.Set();
37+
};
38+
es.EventReceived += (o, e) =>
39+
{
40+
receivedMessages.Add(e.Message);
41+
eventReceived.Set();
42+
};
43+
44+
return es;
45+
}
46+
47+
[TestMethod]
48+
public void TestDoubleLineFeed()
49+
{
50+
// setup
51+
TestableEventSource es = SetupAndConnect();
52+
53+
// act
54+
es.Start(cts.Token);
55+
stateIsOpen.WaitOrThrow();
56+
response.WriteTestTextToStream("event: test\n\n");
57+
eventReceived.WaitOrThrow();
58+
59+
// assert
60+
Assert.AreEqual(receivedMessages.Count, 1);
61+
Assert.AreEqual(receivedMessages[0].EventType, "test");
62+
}
63+
[TestMethod]
64+
public void TestDoubleCarriageReturn()
65+
{
66+
// setup
67+
TestableEventSource es = SetupAndConnect();
68+
69+
// act
70+
es.Start(cts.Token);
71+
stateIsOpen.WaitOrThrow();
72+
response.WriteTestTextToStream("event: test\r\r");
73+
eventReceived.WaitOrThrow();
74+
75+
// assert
76+
Assert.AreEqual(receivedMessages.Count, 1);
77+
Assert.AreEqual(receivedMessages[0].EventType, "test");
78+
}
79+
[TestMethod]
80+
public void TestDoubleCarriageReturnLineFeedPair()
81+
{
82+
// setup
83+
TestableEventSource es = SetupAndConnect();
84+
85+
// act
86+
es.Start(cts.Token);
87+
stateIsOpen.WaitOrThrow();
88+
response.WriteTestTextToStream("event: test\r\n\r\n");
89+
eventReceived.WaitOrThrow();
90+
91+
// assert
92+
Assert.AreEqual(receivedMessages.Count, 1);
93+
Assert.AreEqual(receivedMessages[0].EventType, "test");
94+
}
95+
[TestMethod]
96+
public void TestTwoLines()
97+
{
98+
// setup
99+
TestableEventSource es = SetupAndConnect();
100+
101+
// act
102+
es.Start(cts.Token);
103+
stateIsOpen.WaitOrThrow();
104+
response.WriteTestTextToStream("event: test\ndata: simple\n\n");
105+
eventReceived.WaitOrThrow();
106+
107+
// assert
108+
Assert.AreEqual(receivedMessages.Count, 1);
109+
Assert.AreEqual(receivedMessages[0].EventType, "test");
110+
Assert.AreEqual(receivedMessages[0].Data, "simple\n");
111+
}
112+
[TestMethod]
113+
public void TestMixedSeparators()
114+
{
115+
// setup
116+
TestableEventSource es = SetupAndConnect();
117+
118+
// act
119+
es.Start(cts.Token);
120+
stateIsOpen.WaitOrThrow();
121+
response.WriteTestTextToStream("event: test\rdata: simple\n\n");
122+
eventReceived.WaitOrThrow();
123+
124+
// assert
125+
Assert.AreEqual(receivedMessages.Count, 1);
126+
Assert.AreEqual(receivedMessages[0].EventType, "test");
127+
Assert.AreEqual(receivedMessages[0].Data, "simple\n");
128+
}
129+
[TestMethod]
130+
public void TestDataSentInParts()
131+
{
132+
// setup
133+
TestableEventSource es = SetupAndConnect();
134+
135+
// act
136+
es.Start(cts.Token);
137+
stateIsOpen.WaitOrThrow();
138+
response.WriteTestTextToStream("event: tes");
139+
Thread.Sleep(10);
140+
response.WriteTestTextToStream("t\ndata: simple\n\n");
141+
eventReceived.WaitOrThrow();
142+
143+
// assert
144+
Assert.AreEqual(receivedMessages.Count, 1);
145+
Assert.AreEqual(receivedMessages[0].EventType, "test");
146+
Assert.AreEqual(receivedMessages[0].Data, "simple\n");
147+
}
148+
}
149+
}

EventSource4Net.Test/StringSplitterTest.cs

Lines changed: 0 additions & 132 deletions
This file was deleted.
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Linq;
4+
using System.Text;
5+
using System.Threading;
6+
using System.Threading.Tasks;
7+
8+
namespace EventSource4Net.Test
9+
{
10+
static class TestExtensions
11+
{
12+
public static void WaitOrThrow(this ManualResetEvent mre)
13+
{
14+
#if DEBUG
15+
mre.WaitOne();
16+
#else
17+
if (!mre.WaitOne(1000))
18+
throw new TimeoutException("Timeout waiting for manualresetevent");
19+
#endif
20+
}
21+
}
22+
}

0 commit comments

Comments
 (0)