├── .gitignore
├── .travis.yml
├── ChirpAPI.Example
├── ChirpAPI.Examples.csproj
├── Program.cs
└── Properties
│ └── AssemblyInfo.cs
├── ChirpAPI.Tests
├── ChirpAPI.Tests.csproj
├── Test.cs
└── packages.config
├── ChirpAPI.sln
├── ChirpAPI
├── ChirpAPI.csproj
├── Network
│ ├── EventArgs
│ │ ├── IrcMessageEventArgs.cs
│ │ ├── IrcMotdEventArgs.cs
│ │ └── IrcRawMessageEventArgs.cs
│ ├── IrcClient.cs
│ ├── IrcConnectionSettings.cs
│ └── Protocol
│ │ ├── IrcChannel.cs
│ │ ├── IrcChannelCollection.cs
│ │ ├── IrcMessage.cs
│ │ ├── IrcMessageFactory.cs
│ │ ├── IrcSenderExtensions.cs
│ │ ├── IrcServer.cs
│ │ ├── IrcUser.cs
│ │ └── IrcUsersCollection.cs
├── Properties
│ └── AssemblyInfo.cs
└── Utilities
│ ├── ConcurrentDictionaryExtension.cs
│ ├── StringArrayExtensions.cs
│ └── StringExtension.cs
└── packages
├── NUnit.3.2.0
├── CHANGES.txt
├── LICENSE.txt
├── NOTICES.txt
├── NUnit.3.2.0.nupkg
└── lib
│ ├── dotnet
│ └── nunit.framework.dll
│ ├── net20
│ └── nunit.framework.dll
│ ├── net40
│ └── nunit.framework.dll
│ ├── net45
│ └── nunit.framework.dll
│ └── portable-net45+win8+wp8+wpa81+Xamarin.Mac+MonoAndroid10+MonoTouch10+Xamarin.iOS10
│ └── nunit.framework.dll
├── NUnit.Console.3.2.0.1
└── NUnit.Console.3.2.0.1.nupkg
├── NUnit.ConsoleRunner.3.2.0
├── CHANGES.txt
├── LICENSE.txt
├── NOTICES.txt
├── NUnit.ConsoleRunner.3.2.0.nupkg
└── tools
│ ├── Mono.Cecil.dll
│ ├── nunit-agent-x86.exe
│ ├── nunit-agent-x86.exe.config
│ ├── nunit-agent.exe
│ ├── nunit-agent.exe.config
│ ├── nunit.engine.api.dll
│ ├── nunit.engine.dll
│ ├── nunit.nuget.addins
│ ├── nunit3-console.exe
│ └── nunit3-console.exe.config
├── NUnit.Extension.NUnitProjectLoader.3.2.0
├── LICENSE.txt
├── NOTICES.txt
├── NUnit.Extension.NUnitProjectLoader.3.2.0.nupkg
└── tools
│ └── nunit-project-loader.dll
├── NUnit.Extension.NUnitV2Driver.3.2.0
├── LICENSE.txt
├── NOTICES.txt
├── NUnit.Extension.NUnitV2Driver.3.2.0.nupkg
└── tools
│ ├── nunit.core.dll
│ ├── nunit.core.interfaces.dll
│ ├── nunit.v2.driver.addins
│ └── nunit.v2.driver.dll
├── NUnit.Extension.NUnitV2ResultWriter.3.2.0
├── LICENSE.txt
├── NOTICES.txt
├── NUnit.Extension.NUnitV2ResultWriter.3.2.0.nupkg
└── tools
│ └── nunit-v2-result-writer.dll
├── NUnit.Extension.VSProjectLoader.3.2.0
├── LICENSE.txt
├── NOTICES.txt
├── NUnit.Extension.VSProjectLoader.3.2.0.nupkg
└── tools
│ └── vs-project-loader.dll
└── repositories.config
/.gitignore:
--------------------------------------------------------------------------------
1 | #OS junk files
2 | [Tt]humbs.db
3 | *.DS_Store
4 |
5 | #Visual Studio/Xamarin
6 | *.[Oo]bj
7 | *.userprefs
8 | *.user
9 | *.aps
10 | *.pch
11 | *.vspscc
12 | *.vssscc
13 | *_i.c
14 | *_p.c
15 | *.ncb
16 | *.suo
17 | *.tlb
18 | *.tlh
19 | *.bak
20 | *.[Cc]ache
21 | *.ilk
22 | *.log
23 | *.lib
24 | *.sbr
25 | *.sdf
26 | *.pyc
27 | *.xml
28 | ipch/
29 | obj/
30 | [Bb]in
31 | [Dd]ebug*/
32 | [Rr]elease*/
33 | Ankh.NoLoad
--------------------------------------------------------------------------------
/.travis.yml:
--------------------------------------------------------------------------------
1 | language: csharp
2 | solution: ChirpAPI.sln
3 | mono:
4 | -latest
5 | os:
6 | - linux
7 | - osx
8 | sudo: false
9 |
10 | script:
11 | - xbuild /t:Rebuild /p:Configuration=Debug ChirpAPI.sln /p:TargetFrameworkVersion="v4.6"
12 |
13 | notifications:
14 | email: false
15 | irc:
16 | channels:
17 | - "irc.fyrechat.net#vana-commits"
18 | skip_join: true
19 | template:
20 | - "%{repository}#%{build_number} (%{branch} - %{commit} - %{author}): %{message}"
21 |
--------------------------------------------------------------------------------
/ChirpAPI.Example/ChirpAPI.Examples.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Debug
5 | AnyCPU
6 | {9CE26067-3755-4858-A698-DE3CA8A2711D}
7 | Exe
8 | ChirpAPI.Example
9 | ChirpAPI.Example
10 | v4.5
11 |
12 |
13 | true
14 | full
15 | false
16 | bin\Debug
17 | DEBUG;
18 | prompt
19 | 4
20 | true
21 |
22 |
23 | true
24 | bin\Release
25 | prompt
26 | 4
27 | true
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 | {73166CF6-E14A-47A4-B1C0-F00AF998F023}
39 | ChirpAPI
40 |
41 |
42 |
43 |
--------------------------------------------------------------------------------
/ChirpAPI.Example/Program.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using ChirpAPI;
3 | using System.Threading.Tasks;
4 | using System.Linq;
5 |
6 | namespace ChirpAPI.Example
7 | {
8 | class MainClass
9 | {
10 | private static IrcClient client;
11 | static void Main(string[] args)
12 | {
13 | IrcConnectionSettings connSettings = new IrcConnectionSettings("irc.fyrechat.net", 6669, false, false)
14 | {
15 | AutoReconnect = true,
16 | RetryAttempts = 3
17 | };
18 | client = new IrcClient(connSettings);
19 | //client.OnMessageReceived += Client_OnMessageReceived;
20 | client.OnMessageSent += Client_OnMessageSent;
21 | client.OnConnected += Client_OnConnected;
22 | client.Server.OnReplyWelcome += Client_OnReplyWelcome;
23 | client.Server.OnMotd += Client_OnMotd;
24 |
25 | Initialize().Wait();
26 | }
27 |
28 | static async void Client_OnConnected(object sender, EventArgs e)
29 | {
30 | Console.WriteLine($"Connected");
31 | await client.Send("USER ChirpAPI 8 * ChirpAPI");
32 | await client.Send("NICK ChirpAPI");
33 | await client.Send("JOIN #vana");
34 |
35 | }
36 |
37 | static void Client_OnTryReconnect(object sender, EventArgs e)
38 | {
39 | Console.WriteLine("Trying to reconnect");
40 | }
41 |
42 | static void Client_OnReconnectFailed(object sender, EventArgs e)
43 | {
44 | Console.WriteLine("Failed to reconnect. Disposing!");
45 | }
46 |
47 | static void Client_OnMessageReceived(object sender, IrcMessageEventArgs e)
48 | {
49 | //if (e.Message.Command.Contains("PING"))
50 | //{
51 | // await client.Send("PONG " + e.Message.Trail);
52 | //}
53 |
54 | string prm = String.Join(" ", e.Message.Parameters.ToArray());
55 | Console.WriteLine($"p: {e.Message.Prefix} c: {e.Message.Command} params: {prm} trail:{e.Message.Trail}");
56 | }
57 |
58 | static void Client_OnMessageSent(object sender, IrcRawMessageEventArgs e)
59 | {
60 | Console.WriteLine($"[SENT] {e.Message}");
61 | }
62 |
63 | static void Client_OnReplyWelcome(object sender, IrcMessageEventArgs e)
64 | {
65 | Console.WriteLine(e.Message.Trail);
66 | }
67 |
68 | static void Client_OnMotd(object sender, IrcMotdEventArgs e)
69 | {
70 | Console.WriteLine($"[{e.Status}] {e.Message}");
71 | }
72 |
73 | private static async Task Initialize()
74 | {
75 | try
76 | {
77 | await client.ConnectAsync();
78 | }
79 | catch (Exception e)
80 | {
81 | Console.WriteLine(e.Message);
82 | }
83 | }
84 | }
85 | }
--------------------------------------------------------------------------------
/ChirpAPI.Example/Properties/AssemblyInfo.cs:
--------------------------------------------------------------------------------
1 | using System.Reflection;
2 | using System.Runtime.CompilerServices;
3 |
4 | // Information about this assembly is defined by the following attributes.
5 | // Change them to the values specific to your project.
6 |
7 | [assembly: AssemblyTitle("ChirpAPI.Example")]
8 | [assembly: AssemblyDescription("")]
9 | [assembly: AssemblyConfiguration("")]
10 | [assembly: AssemblyCompany("")]
11 | [assembly: AssemblyProduct("")]
12 | [assembly: AssemblyCopyright("artemkreynes")]
13 | [assembly: AssemblyTrademark("")]
14 | [assembly: AssemblyCulture("")]
15 |
16 | // The assembly version has the format "{Major}.{Minor}.{Build}.{Revision}".
17 | // The form "{Major}.{Minor}.*" will automatically update the build and revision,
18 | // and "{Major}.{Minor}.{Build}.*" will update just the revision.
19 |
20 | [assembly: AssemblyVersion("1.0.*")]
21 |
22 | // The following attributes are used to specify the signing key for the assembly,
23 | // if desired. See the Mono documentation for more information about signing.
24 |
25 | //[assembly: AssemblyDelaySign(false)]
26 | //[assembly: AssemblyKeyFile("")]
27 |
28 |
--------------------------------------------------------------------------------
/ChirpAPI.Tests/ChirpAPI.Tests.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Debug
5 | AnyCPU
6 | {6335C8DD-24AE-427C-BD65-2D3844254E1D}
7 | Library
8 | ChirpAPI.Tests
9 | ChirpAPI.Tests
10 | v4.6.1
11 |
12 |
13 | true
14 | full
15 | false
16 | bin\Debug
17 | DEBUG;
18 | prompt
19 | 4
20 | false
21 |
22 |
23 | full
24 | true
25 | bin\Release
26 | prompt
27 | 4
28 | false
29 |
30 |
31 |
32 |
33 | ..\packages\NUnit.3.2.0\lib\net45\nunit.framework.dll
34 |
35 |
36 | ..\ChirpAPI\bin\Debug\ChirpAPI.dll
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
--------------------------------------------------------------------------------
/ChirpAPI.Tests/Test.cs:
--------------------------------------------------------------------------------
1 | using NUnit.Framework;
2 | using System;
3 | using ChirpAPI;
4 | using System.Text;
5 | using System.Threading.Tasks;
6 |
7 | namespace Test
8 | {
9 | public class TestEndpoint : IrcEndpoint
10 | {
11 | private StringBuilder _buf;
12 |
13 | public string Sent => _buf.ToString();
14 |
15 | public TestEndpoint()
16 | {
17 | _buf = new StringBuilder();
18 | }
19 |
20 | public Task Send(string rawMessage)
21 | {
22 | _buf.Append(rawMessage);
23 | _buf.Append("\r\n");
24 | return Task.CompletedTask;
25 | }
26 | }
27 | [TestFixture()]
28 | public class Test
29 | {
30 | [Test()]
31 | public void TestSendPrivmsg()
32 | {
33 | TestEndpoint te = new TestEndpoint();
34 | te.SendPrivateMessage("Test", "Test test test:::!!");
35 | Assert.That(te.Sent, Is.EqualTo("PRIVMSG Test :Test test test:::!!\r\n"));
36 | }
37 | }
38 | }
39 |
40 |
--------------------------------------------------------------------------------
/ChirpAPI.Tests/packages.config:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/ChirpAPI.sln:
--------------------------------------------------------------------------------
1 |
2 | Microsoft Visual Studio Solution File, Format Version 12.00
3 | # Visual Studio 2012
4 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ChirpAPI", "ChirpAPI\ChirpAPI.csproj", "{73166CF6-E14A-47A4-B1C0-F00AF998F023}"
5 | EndProject
6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ChirpAPI.Examples", "ChirpAPI.Example\ChirpAPI.Examples.csproj", "{9CE26067-3755-4858-A698-DE3CA8A2711D}"
7 | EndProject
8 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ChirpAPI.Tests", "ChirpAPI.Tests\ChirpAPI.Tests.csproj", "{6335C8DD-24AE-427C-BD65-2D3844254E1D}"
9 | EndProject
10 | Global
11 | GlobalSection(SolutionConfigurationPlatforms) = preSolution
12 | Debug|Any CPU = Debug|Any CPU
13 | Release|Any CPU = Release|Any CPU
14 | EndGlobalSection
15 | GlobalSection(ProjectConfigurationPlatforms) = postSolution
16 | {6335C8DD-24AE-427C-BD65-2D3844254E1D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
17 | {6335C8DD-24AE-427C-BD65-2D3844254E1D}.Debug|Any CPU.Build.0 = Debug|Any CPU
18 | {6335C8DD-24AE-427C-BD65-2D3844254E1D}.Release|Any CPU.ActiveCfg = Release|Any CPU
19 | {6335C8DD-24AE-427C-BD65-2D3844254E1D}.Release|Any CPU.Build.0 = Release|Any CPU
20 | {73166CF6-E14A-47A4-B1C0-F00AF998F023}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
21 | {73166CF6-E14A-47A4-B1C0-F00AF998F023}.Debug|Any CPU.Build.0 = Debug|Any CPU
22 | {73166CF6-E14A-47A4-B1C0-F00AF998F023}.Release|Any CPU.ActiveCfg = Release|Any CPU
23 | {73166CF6-E14A-47A4-B1C0-F00AF998F023}.Release|Any CPU.Build.0 = Release|Any CPU
24 | {9CE26067-3755-4858-A698-DE3CA8A2711D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
25 | {9CE26067-3755-4858-A698-DE3CA8A2711D}.Debug|Any CPU.Build.0 = Debug|Any CPU
26 | {9CE26067-3755-4858-A698-DE3CA8A2711D}.Release|Any CPU.ActiveCfg = Release|Any CPU
27 | {9CE26067-3755-4858-A698-DE3CA8A2711D}.Release|Any CPU.Build.0 = Release|Any CPU
28 | EndGlobalSection
29 | EndGlobal
30 |
--------------------------------------------------------------------------------
/ChirpAPI/ChirpAPI.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Debug
5 | AnyCPU
6 | {73166CF6-E14A-47A4-B1C0-F00AF998F023}
7 | Library
8 | ChirpAPI
9 | ChirpAPI
10 | v4.6
11 |
12 |
13 | true
14 | full
15 | false
16 | bin\Debug
17 | DEBUG;
18 | prompt
19 | 4
20 | false
21 |
22 |
23 | true
24 | bin\Release
25 | prompt
26 | 4
27 | false
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
--------------------------------------------------------------------------------
/ChirpAPI/Network/EventArgs/IrcMessageEventArgs.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | namespace ChirpAPI
3 | {
4 | public sealed class IrcMessageEventArgs : EventArgs
5 | {
6 | public IrcClient Client { get; private set; }
7 | public IrcMessage Message { get; private set; }
8 | public IrcMessageEventArgs(IrcClient client, IrcMessage message)
9 | {
10 | Client = client;
11 | Message = message;
12 | }
13 | }
14 | }
15 |
16 |
--------------------------------------------------------------------------------
/ChirpAPI/Network/EventArgs/IrcMotdEventArgs.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | namespace ChirpAPI
3 | {
4 | public sealed class IrcMotdEventArgs : EventArgs
5 | {
6 | public IrcClient Client { get; private set; }
7 | public string Status { get; private set; }
8 | public string Message { get; private set; }
9 | public IrcMotdEventArgs(IrcClient client, string status, string message)
10 | {
11 | Client = client;
12 | Status = status;
13 | Message = message;
14 | }
15 | }
16 | }
17 |
18 |
--------------------------------------------------------------------------------
/ChirpAPI/Network/EventArgs/IrcRawMessageEventArgs.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | namespace ChirpAPI
3 | {
4 | public class IrcRawMessageEventArgs : EventArgs
5 | {
6 | public IrcClient Client { get; private set; }
7 | public string Message { get; private set; }
8 |
9 | public IrcRawMessageEventArgs(IrcClient client, string message)
10 | {
11 | Client = client;
12 | Message = message;
13 | }
14 | }
15 | }
16 |
17 |
--------------------------------------------------------------------------------
/ChirpAPI/Network/IrcClient.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.IO;
3 | using System.Net.Sockets;
4 | using System.Net.Security;
5 | using System.Threading.Tasks;
6 | using System.Collections.Concurrent;
7 | using System.Security.Authentication;
8 | using System.Security.Cryptography.X509Certificates;
9 | using System.Diagnostics;
10 | using System.Timers;
11 |
12 | namespace ChirpAPI
13 | {
14 | public interface IrcEndpoint
15 | {
16 | Task Send(string rawMessage);
17 | }
18 |
19 | public class IrcClient : IDisposable, IrcEndpoint
20 | {
21 | internal Stopwatch pingStopwatch;
22 | internal DateTime lastPongTimestamp;
23 |
24 | Socket clientSocket;
25 | NetworkStream networkStream;
26 | StreamReader streamReader;
27 | StreamWriter streamWriter;
28 | //int reconnectCounter;
29 | bool isHandlingReceive;
30 | bool disposedValue;
31 |
32 | public event EventHandler OnConnected;
33 | //public event EventHandler OnTryReconnect;
34 | //public event EventHandler OnReconnectFailed;
35 | public event EventHandler OnMessageReceived;
36 | public event EventHandler OnMessageSent;
37 |
38 | public IrcConnectionSettings Settings { get; }
39 | public IrcMessageFactory MessageFactory { get; }
40 | public IrcServer Server { get; }
41 | public bool Connected { get; private set; }
42 |
43 |
44 | public IrcClient(IrcConnectionSettings connectionSettings)
45 | {
46 | if (connectionSettings == null)
47 | throw new ArgumentNullException(nameof(connectionSettings));
48 |
49 | Settings = connectionSettings;
50 | MessageFactory = new IrcMessageFactory();
51 | Server = new IrcServer(Settings.Hostname);
52 | MessageFactory.LoadHandlers();
53 | }
54 |
55 | public async Task ConnectAsync()
56 | {
57 | if (clientSocket != null && Connected)
58 | throw new InvalidOperationException("Socket already connected.");
59 |
60 | clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
61 |
62 | await Task.Factory.FromAsync(
63 | (cb, obj) => clientSocket.BeginConnect(Settings.Hostname, Settings.Port, cb, null),
64 | iar => clientSocket.EndConnect(iar), null);
65 | Connected = true;
66 |
67 | networkStream = new NetworkStream(clientSocket);
68 |
69 | if (Settings.UseSSL)
70 | {
71 | SslStream sslStream = new SslStream(networkStream, false, (
72 | (object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) =>
73 | {
74 | if (sslPolicyErrors.HasFlag(SslPolicyErrors.None) ||
75 | sslPolicyErrors.HasFlag(SslPolicyErrors.RemoteCertificateNameMismatch) ||
76 | Settings.IgnoreInvalidSslCertificate)
77 | return true;
78 | return false;
79 | }
80 | ));
81 |
82 | sslStream.AuthenticateAsClient(Settings.Hostname, new X509CertificateCollection(),
83 | SslProtocols.Default |
84 | SslProtocols.Tls12, true);
85 |
86 | streamReader = new StreamReader(sslStream);
87 | streamWriter = new StreamWriter(sslStream) { AutoFlush = true };
88 | }
89 | else
90 | {
91 | streamReader = new StreamReader(networkStream);
92 | streamWriter = new StreamWriter(networkStream) { AutoFlush = true };
93 | }
94 | if (Connected)
95 | {
96 | isHandlingReceive = true;
97 | Connected = true;
98 | OnConnected.Invoke(this, EventArgs.Empty);
99 | await Task.WhenAll(Task.Run(BeginReceiveAsync));
100 | }
101 |
102 |
103 | }
104 |
105 | public async Task Send(string rawMessage)
106 | {
107 | if (!Connected)
108 | throw new InvalidOperationException("Client not connected.");
109 | if (String.IsNullOrWhiteSpace(rawMessage))
110 | throw new ArgumentNullException(nameof(rawMessage));
111 |
112 | await streamWriter.WriteLineAsync(rawMessage);
113 | OnMessageSent?.Invoke(this, new IrcRawMessageEventArgs(this, rawMessage));
114 | }
115 |
116 | public async Task Send(IrcMessage message)
117 | {
118 | if (!Connected)
119 | throw new InvalidOperationException("Client not connected.");
120 | if (message == null)
121 | throw new ArgumentNullException(nameof(message));
122 |
123 | await streamWriter.WriteLineAsync(message.ToString());
124 | OnMessageSent?.Invoke(this, new IrcRawMessageEventArgs(this, message.ToString()));
125 | }
126 |
127 | public async Task DisconnectAsync()
128 | {
129 | if (!Connected)
130 | throw new InvalidOperationException("Client already disconnected");
131 | await Task.Factory.FromAsync(clientSocket.BeginDisconnect, clientSocket.EndDisconnect, false, null);
132 | Connected = false;
133 | }
134 |
135 | /*private async Task AutoReconnectAsync()
136 | {
137 | if (Settings.AutoReconnect)
138 | {
139 | isHandlingSending = false;
140 | isHandlingReceive = false;
141 | sendCollection = new BlockingCollection();
142 | Timer reconnectTimer = new Timer(Settings.RetryInterval);
143 | await DisconnectAsync();
144 | while (reconnectCounter < Settings.RetryAttempts || !Connected)
145 | {
146 |
147 | reconnectTimer.Start();
148 | reconnectTimer.Elapsed += async (object sender, System.Timers.ElapsedEventArgs e) =>
149 | {
150 | OnTryReconnect.Invoke(this, EventArgs.Empty);
151 | await ConnectAsync();
152 | reconnectCounter++;
153 | };
154 | }
155 | if (reconnectCounter >= Settings.RetryAttempts && !Connected)
156 | {
157 | reconnectTimer.Stop();
158 | OnReconnectFailed.Invoke(this, EventArgs.Empty);
159 | }
160 | }
161 | }*/
162 |
163 | /*private async Task SendPing()
164 | {
165 | while (true)
166 | {
167 | await Send($"PING {new Random().Next(0, 100).ToString()}");
168 | await Task.Delay(10000);
169 | TimeSpan pingSpan = DateTime.Now - lastPongTimestamp;
170 |
171 | if (Math.Ceiling(pingSpan.TotalSeconds) >= 20)
172 | {
173 | await AutoReconnectAsync();
174 | break;
175 | }
176 | }
177 | }*/
178 |
179 |
180 | private async Task BeginReceiveAsync()
181 | {
182 | while (isHandlingReceive)
183 | {
184 | string rawMessage = await streamReader.ReadLineAsync();
185 | IrcMessage message = IrcMessage.Parse(rawMessage);
186 |
187 | if (rawMessage != null)
188 | {
189 | OnMessageReceived?.Invoke(this, new IrcMessageEventArgs(this, message));
190 | MessageFactory.Execute(message.Command, this, message);
191 | }
192 | }
193 | }
194 |
195 | protected virtual void Dispose(bool disposing)
196 | {
197 | if (!disposedValue)
198 | {
199 | if (disposing)
200 | {
201 | if (clientSocket.Connected)
202 | clientSocket.Disconnect(true);
203 | networkStream.Close();
204 | streamReader.Dispose();
205 | streamWriter.Dispose();
206 | }
207 | disposedValue = true;
208 | }
209 | }
210 |
211 | public void Dispose()
212 | {
213 | Dispose(true);
214 | // GC.SuppressFinalize(this);
215 | }
216 |
217 | }
218 | }
219 |
220 |
--------------------------------------------------------------------------------
/ChirpAPI/Network/IrcConnectionSettings.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | namespace ChirpAPI
3 | {
4 | public class IrcConnectionSettings
5 | {
6 |
7 | public string Hostname { get; set; }
8 | public int Port { get; set; } = 6667;
9 | public string Password { get; set; }
10 | public bool UseSSL { get; set; }
11 | public bool IgnoreInvalidSslCertificate { get; set; }
12 | public string Nickname { get; set; }
13 | public string Username { get; set; }
14 | public string Realname { get; set; }
15 | public bool AutoReconnect { get; set; }
16 | public int RetryAttempts { get; set; }
17 | public int RetryInterval { get; set; } = 10;
18 |
19 | public IrcConnectionSettings(string hostname)
20 | {
21 | if (String.IsNullOrWhiteSpace(hostname))
22 | throw new ArgumentNullException(nameof(hostname));
23 | Hostname = hostname;
24 | }
25 |
26 | public IrcConnectionSettings(string hostname, int port)
27 | : this(hostname)
28 | {
29 | if (port == 0 || port > 65535)
30 | throw new ArgumentException(nameof(port));
31 | Port = port;
32 | }
33 |
34 | public IrcConnectionSettings(string hostname, int port, bool useSsl, bool ignoreInvalidSslCertificate)
35 | : this(hostname, port)
36 | {
37 | UseSSL = useSsl;
38 | IgnoreInvalidSslCertificate = ignoreInvalidSslCertificate;
39 | }
40 | }
41 | }
42 |
43 |
--------------------------------------------------------------------------------
/ChirpAPI/Network/Protocol/IrcChannel.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | namespace ChirpAPI
3 | {
4 | public class IrcChannel
5 | {
6 | public IrcChannel()
7 | {
8 | }
9 | }
10 | }
11 |
12 |
--------------------------------------------------------------------------------
/ChirpAPI/Network/Protocol/IrcChannelCollection.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Concurrent;
3 |
4 | namespace ChirpAPI
5 | {
6 | public class IrcChannelCollection
7 | {
8 | ConcurrentDictionary channelCollection;
9 | public IrcChannelCollection()
10 | {
11 | channelCollection = new ConcurrentDictionary();
12 | }
13 |
14 | public void Add(IrcChannel channel)
15 | {
16 | if (channel == null)
17 | throw new ArgumentNullException(nameof(channel));
18 |
19 | channelCollection.TryAdd(channel.Name, channel);
20 | }
21 |
22 | public void Remove(IrcChannel channel)
23 | {
24 | if (channel == null)
25 | throw new ArgumentNullException(nameof(channel));
26 |
27 | channelCollection.TryRemove(channel.Name);
28 | }
29 |
30 | public IrcChannel GetChannel(string name)
31 | {
32 | if (String.IsNullOrWhiteSpace(name))
33 | throw new ArgumentException(nameof(name));
34 |
35 | IrcChannel channel;
36 | channelCollection.TryGetValue(name, out channel);
37 | return channel;
38 | }
39 | }
40 | }
41 |
42 |
--------------------------------------------------------------------------------
/ChirpAPI/Network/Protocol/IrcMessage.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 |
5 | namespace ChirpAPI
6 | {
7 | public class IrcMessage
8 | {
9 | static readonly char[] TAG_SEPERATOR = { ';' };
10 | static readonly char[] TAG_VALUE_SEPERATOR = { '=' };
11 |
12 | public string Prefix { get; private set; }
13 | public string Command { get; private set; }
14 | public IList Parameters { get; private set; }
15 | public string Trail { get; private set; }
16 | public IDictionary Tags { get; private set; }
17 |
18 | public bool IsHostmaskPrefix
19 | {
20 | get
21 | {
22 | return !String.IsNullOrWhiteSpace(Prefix)
23 | && Prefix.Contains("@")
24 | && Prefix.Contains("!");
25 | }
26 | }
27 |
28 | public bool IsServerPrefix
29 | {
30 | get
31 | {
32 | return !String.IsNullOrEmpty(Prefix)
33 | && !IsHostmaskPrefix
34 | && Prefix.Contains(".");
35 | }
36 | }
37 |
38 |
39 | public IrcMessage(string prefix, string command, IList parameters, string trail)
40 | {
41 | Prefix = prefix;
42 | Command = command;
43 | Parameters = parameters;
44 | Trail = trail;
45 | }
46 |
47 | public IrcMessage(Dictionary tags, string prefix, string command, IList parameters, string trail)
48 | : this(prefix, command, parameters, trail)
49 | {
50 | Tags = tags;
51 | }
52 |
53 | public static IrcMessage Parse(string rawMessage)
54 | {
55 | if (string.IsNullOrWhiteSpace(rawMessage))
56 | throw new ArgumentNullException(nameof(rawMessage));
57 |
58 | bool isTagPrefix = false;
59 | string prefix = string.Empty;
60 | string command;
61 | string trailing = string.Empty;
62 | IList parameters = new string[] { };
63 | Dictionary tags = new Dictionary();
64 |
65 | if (rawMessage.StartsWith("@", StringComparison.Ordinal))
66 | {
67 | isTagPrefix = true;
68 | int spaceToPrefix = rawMessage.IndexOf(' ');
69 | string[] unparsedTags = rawMessage.Substring(1, spaceToPrefix).Split(TAG_SEPERATOR);
70 | rawMessage = rawMessage.Substring(spaceToPrefix + 1);
71 | foreach (string tag in unparsedTags)
72 | {
73 | if (tag.Contains(";"))
74 | {
75 | string[] tempTag = tag.Split(TAG_VALUE_SEPERATOR);
76 | tags.Add(RemoveEscape(tempTag[0]), RemoveEscape(tempTag[1]));
77 | }
78 | else
79 | {
80 | tags.Add(RemoveEscape(tag), string.Empty);
81 | }
82 | }
83 | }
84 |
85 | int prefixEnd = -1;
86 | int trailingStart = rawMessage.Length;
87 |
88 | if (rawMessage.StartsWith(":", StringComparison.Ordinal))
89 | {
90 | prefixEnd = rawMessage.IndexOf(" ", StringComparison.Ordinal);
91 | prefix = rawMessage.Substring(1, prefixEnd - 1);
92 | }
93 |
94 | trailingStart = rawMessage.IndexOf(" :", StringComparison.Ordinal);
95 | if (trailingStart >= 0)
96 | trailing = rawMessage.Substring(trailingStart + 2);
97 | else
98 | trailingStart = rawMessage.Length;
99 |
100 | string[] commandAndParameters = rawMessage.Substring(prefixEnd + 1, trailingStart - prefixEnd - 1).Split(' ');
101 |
102 | command = commandAndParameters[0];
103 | if (commandAndParameters.Length > 1)
104 | parameters = commandAndParameters.Skip(1).ToList();
105 |
106 | if (isTagPrefix)
107 | return new IrcMessage(tags, prefix, command, parameters, trailing);
108 | else
109 | return new IrcMessage(prefix, command, parameters, trailing);
110 | }
111 |
112 | public Hostname GetHostmask()
113 | {
114 | if (!IsHostmaskPrefix)
115 | return null;
116 | string[] splitPrefix = Prefix.Split(new char[] { '@', ':' });
117 | return new Hostname(splitPrefix[0], splitPrefix[1], splitPrefix[2]);
118 | }
119 |
120 | public string GetHostname()
121 | {
122 | if (!IsServerPrefix)
123 | return null;
124 | return Prefix;
125 | }
126 |
127 | public override string ToString()
128 | {
129 | if (Tags.Count > 0)
130 | return string.Format("{0} {1} {2} {3} {4}", string.Join(";", Tags.Select(x => string.Format("{0}={1}", x.Key, x.Value))), Prefix, Command, string.Join(" ", Parameters.ToArray(), Trail));
131 | else
132 | return string.Format("{0} {1} {2}", Prefix, Command, string.Join(" ", Parameters.ToArray(), Trail));
133 | }
134 |
135 | private static string RemoveEscape(string tag)
136 | {
137 | return tag
138 | .Replace(@"\:", ";")
139 | .Replace(@"\s", " ")
140 | .Replace(@"\\", @"\")
141 | .Replace(@"\r", "\r")
142 | .Replace(@"\n", "\n");
143 | }
144 |
145 | public class Hostname
146 | {
147 | public string Nickname { get; private set; }
148 | public string Username { get; private set; }
149 | public string Hostmask { get; private set; }
150 |
151 | public Hostname(string nickname, string username, string hostmask)
152 | {
153 | Nickname = nickname;
154 | Username = username;
155 | Hostmask = hostmask;
156 | }
157 | }
158 | }
159 | }
160 |
161 |
--------------------------------------------------------------------------------
/ChirpAPI/Network/Protocol/IrcMessageFactory.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Threading;
3 | using System.Collections.Generic;
4 | namespace ChirpAPI
5 | {
6 | public class IrcMessageFactory
7 | {
8 | private static Dictionary> MessageHandler = new Dictionary>();
9 | private static Mutex handlerMutex = new Mutex();
10 |
11 | internal void LoadHandlers()
12 | {
13 | MessageHandler.Add("PING", async (IrcClient client, IrcMessage message) =>
14 | {
15 | if (!String.IsNullOrWhiteSpace(message.Trail))
16 | {
17 | await client.Send($"PONG {message.Trail}");
18 | }
19 | });
20 | MessageHandler.Add("PONG", async (IrcClient client, IrcMessage message) =>
21 | {
22 | client.pingStopwatch.Stop();
23 | client.pingStopwatch.Reset();
24 | client.lastPongTimestamp = DateTime.Now;
25 | await client.Send($"PRIVMSG Alon {client.lastPongTimestamp}");
26 | });
27 | MessageHandler.Add("001", (IrcClient client, IrcMessage message) =>
28 | {
29 | client.Server.HandleWelcomeMessage(client, message);
30 | });
31 | MessageHandler.Add("002", (IrcClient client, IrcMessage message) =>
32 | {
33 | client.Server.HandleYourHostMessage(client, message);
34 | });
35 | MessageHandler.Add("003", (IrcClient client, IrcMessage message) =>
36 | {
37 | client.Server.HandleServerCreationDateMessage(client, message);
38 | });
39 | MessageHandler.Add("004", (IrcClient client, IrcMessage message) =>
40 | {
41 | client.Server.HandleMyInfoMessage(client, message);
42 | });
43 | MessageHandler.Add("005", (IrcClient client, IrcMessage message) =>
44 | {
45 | client.Server.HandleServerBounceMessage(client, message);
46 | });
47 | MessageHandler.Add("375", (IrcClient client, IrcMessage message) =>
48 | {
49 | client.Server.HandleMotd(client, message);
50 | });
51 | MessageHandler.Add("372", (IrcClient client, IrcMessage message) =>
52 | {
53 | client.Server.HandleMotd(client, message);
54 | });
55 | MessageHandler.Add("376", (IrcClient client, IrcMessage message) =>
56 | {
57 | client.Server.HandleMotd(client, message);
58 | });
59 | }
60 |
61 | internal void Execute(string key, IrcClient client, IrcMessage message)
62 | {
63 | Action action;
64 | if (MessageHandler.TryGetValue(key, out action))
65 | {
66 | action.Invoke(client, message);
67 |
68 | }
69 | }
70 |
71 | public void Add(string key, Action handler)
72 | {
73 | if (String.IsNullOrWhiteSpace(key))
74 | throw new ArgumentNullException(nameof(key), "Null, empty or whitespace.");
75 | if (handler == null)
76 | throw new ArgumentNullException(nameof(handler), "Null handler");
77 | if (MessageHandler.ContainsKey(key))
78 | throw new InvalidOperationException("Handler with this key already exists.");
79 | handlerMutex.WaitOne();
80 | MessageHandler.Add(key, handler);
81 | handlerMutex.ReleaseMutex();
82 | }
83 |
84 | public void Remove(string key)
85 | {
86 | if (String.IsNullOrWhiteSpace(key))
87 | throw new ArgumentNullException(nameof(key), "Null, empty or whitespace.");
88 | if (!MessageHandler.ContainsKey(key))
89 | throw new InvalidOperationException("No handler with this key found.");
90 | handlerMutex.WaitOne();
91 | MessageHandler.Remove(key);
92 | handlerMutex.ReleaseMutex();
93 | }
94 | }
95 | }
96 |
--------------------------------------------------------------------------------
/ChirpAPI/Network/Protocol/IrcSenderExtensions.cs:
--------------------------------------------------------------------------------
1 | using System;
2 |
3 | namespace ChirpAPI
4 | {
5 |
6 | public static class IrcClientExtensions
7 | {
8 | public static void SendPassword(this IrcEndpoint client, string password)
9 | {
10 | if (client == null)
11 | throw new ArgumentNullException(nameof(client));
12 | if (string.IsNullOrWhiteSpace(password))
13 | throw new ArgumentNullException(nameof(password));
14 |
15 | client.Send($"PASS {password}");
16 | }
17 | public static void SendNickname(this IrcEndpoint client, string nickname)
18 | {
19 | if (client == null)
20 | throw new ArgumentNullException(nameof(client));
21 | if (string.IsNullOrWhiteSpace(nickname))
22 | throw new ArgumentNullException(nameof(nickname));
23 |
24 | client.Send($"NICK {nickname}");
25 | }
26 | public static void SendUsername(this IrcEndpoint client, string username, int mode, string realname)
27 | {
28 | if (client == null)
29 | throw new ArgumentNullException(nameof(client));
30 | if (string.IsNullOrWhiteSpace(username))
31 | throw new ArgumentNullException(nameof(username));
32 | if (string.IsNullOrWhiteSpace(realname))
33 | throw new ArgumentNullException(nameof(realname));
34 |
35 | client.Send($"USER {username} {mode} * :{realname}");
36 | }
37 | public static void SendOper(this IrcEndpoint client, string username, string password)
38 | {
39 | if (client == null)
40 | throw new ArgumentNullException(nameof(client));
41 | if (string.IsNullOrWhiteSpace(username))
42 | throw new ArgumentNullException(nameof(username));
43 | if (string.IsNullOrWhiteSpace(password))
44 | throw new ArgumentNullException(nameof(password));
45 |
46 | client.Send($"OPER {username} {password}");
47 | }
48 | public static void SendUserMode(this IrcEndpoint client, string nickname, string mode)
49 | {
50 | if (client == null)
51 | throw new ArgumentNullException(nameof(client));
52 | if (string.IsNullOrWhiteSpace(nickname))
53 | throw new ArgumentNullException(nameof(nickname));
54 | if (string.IsNullOrWhiteSpace(mode))
55 | throw new ArgumentNullException(nameof(mode));
56 |
57 | client.Send($"MODE {nickname} {mode}");
58 | }
59 | public static void SendService(this IrcEndpoint client, string nickname, string reserved, string distirbution, string type, string reserved_, string info)
60 | {
61 | if (client == null)
62 | throw new ArgumentNullException(nameof(client));
63 | if (string.IsNullOrWhiteSpace(nickname))
64 | throw new ArgumentNullException(nameof(nickname));
65 | if (string.IsNullOrWhiteSpace(distirbution))
66 | throw new ArgumentNullException(nameof(distirbution));
67 | if (string.IsNullOrWhiteSpace(type))
68 | throw new ArgumentNullException(nameof(type));
69 | if (string.IsNullOrWhiteSpace(info))
70 | throw new ArgumentNullException(nameof(info));
71 |
72 | client.Send($"SERVICE {nickname} {reserved} {distirbution} {type} {reserved_} {info}");
73 | }
74 | public static void SendQuit(this IrcEndpoint client)
75 | {
76 | if (client == null)
77 | throw new ArgumentNullException(nameof(client));
78 |
79 | client.Send($"QUIT");
80 | }
81 | public static void SendQuit(this IrcEndpoint client, string message)
82 | {
83 | if (client == null)
84 | throw new ArgumentNullException(nameof(client));
85 | if (string.IsNullOrWhiteSpace(message))
86 | throw new ArgumentNullException(nameof(message));
87 |
88 | client.Send($"QUIT {message}");
89 | }
90 | public static void SendSQuit(this IrcEndpoint client, string server, string comment)
91 | {
92 | if (client == null)
93 | throw new ArgumentNullException(nameof(client));
94 | if (string.IsNullOrWhiteSpace(server))
95 | throw new ArgumentNullException(nameof(server));
96 | if (string.IsNullOrWhiteSpace(comment))
97 | throw new ArgumentNullException(nameof(comment));
98 |
99 | client.Send($"SQUIT {server} {comment}");
100 | }
101 | public static void SendJoin(this IrcEndpoint client, string channel)
102 | {
103 | if (client == null)
104 | throw new ArgumentNullException(nameof(client));
105 | if (string.IsNullOrWhiteSpace(channel))
106 | throw new ArgumentNullException(nameof(channel));
107 |
108 | client.Send($"JOIN {channel}");
109 | }
110 | public static void SendJoin(this IrcEndpoint client, string channel, string key)
111 | {
112 | if (client == null)
113 | throw new ArgumentNullException(nameof(client));
114 | if (string.IsNullOrWhiteSpace(channel))
115 | throw new ArgumentNullException(nameof(channel));
116 | if (string.IsNullOrWhiteSpace(key))
117 | throw new ArgumentNullException(nameof(key));
118 |
119 | client.Send($"JOIN {channel} {key}");
120 | }
121 | public static void SendJoin(this IrcEndpoint client, string[] channels, string[] keys)
122 | {
123 | if (client == null)
124 | throw new ArgumentNullException(nameof(client));
125 | if (channels.IsNullOrEmpty())
126 | throw new ArgumentNullException(nameof(channels));
127 | if (keys.IsNullOrEmpty())
128 | throw new ArgumentNullException(nameof(keys));
129 |
130 | client.Send($"JOIN {string.Join(",", channels)} {string.Join(",", keys)}");
131 | }
132 | public static void SendPart(this IrcEndpoint client, string channel)
133 | {
134 | if (client == null)
135 | throw new ArgumentNullException(nameof(client));
136 | if (string.IsNullOrWhiteSpace(channel))
137 | throw new ArgumentNullException(nameof(channel));
138 |
139 | client.Send($"PART {channel}");
140 | }
141 | public static void SendPart(this IrcEndpoint client, string channel, string message)
142 | {
143 | if (client == null)
144 | throw new ArgumentNullException(nameof(client));
145 | if (string.IsNullOrWhiteSpace(channel))
146 | throw new ArgumentNullException(nameof(channel));
147 | if (string.IsNullOrWhiteSpace(message))
148 | throw new ArgumentNullException(nameof(message));
149 |
150 | client.Send($"PART {channel} {message}");
151 | }
152 | public static void SendPart(this IrcEndpoint client, string[] channels, string message)
153 | {
154 | if (client == null)
155 | throw new ArgumentNullException(nameof(client));
156 | if (channels.IsNullOrEmpty())
157 | throw new ArgumentNullException(nameof(channels));
158 | if (string.IsNullOrWhiteSpace(message))
159 | throw new ArgumentNullException(nameof(message));
160 |
161 | client.Send($"PART {string.Join(",", channels)} {message}");
162 | }
163 | public static void SendChannelMode(this IrcEndpoint client, string channel, string mode, string modeParameters)
164 | {
165 | if (client == null)
166 | throw new ArgumentNullException(nameof(client));
167 | if (string.IsNullOrWhiteSpace(channel))
168 | throw new ArgumentNullException(nameof(channel));
169 | if (string.IsNullOrWhiteSpace(mode))
170 | throw new ArgumentNullException(nameof(mode));
171 | if (string.IsNullOrWhiteSpace(modeParameters))
172 | throw new ArgumentNullException(nameof(modeParameters));
173 |
174 | client.Send($"MODE {channel} {mode} {modeParameters}");
175 | }
176 | public static void SendTopic(this IrcEndpoint client, string channel)
177 | {
178 | if (client == null)
179 | throw new ArgumentNullException(nameof(client));
180 | if (string.IsNullOrWhiteSpace(channel))
181 | throw new ArgumentNullException(nameof(channel));
182 |
183 | client.Send($"TOPIC {channel}");
184 | }
185 | public static void SendTopic(this IrcEndpoint client, string channel, string topic)
186 | {
187 | if (client == null)
188 | throw new ArgumentNullException(nameof(client));
189 | if (string.IsNullOrWhiteSpace(channel))
190 | throw new ArgumentNullException(nameof(channel));
191 | if (string.IsNullOrWhiteSpace(topic))
192 | throw new ArgumentNullException(nameof(topic));
193 |
194 | client.Send($"TOPIC {channel} {topic}");
195 | }
196 | public static void SendNames(this IrcEndpoint client)
197 | {
198 | if (client == null)
199 | throw new ArgumentNullException(nameof(client));
200 |
201 | client.Send($"NAMES");
202 | }
203 | public static void SendNames(this IrcEndpoint client, string channel)
204 | {
205 | if (client == null)
206 | throw new ArgumentNullException(nameof(client));
207 | if (string.IsNullOrWhiteSpace(channel))
208 | throw new ArgumentNullException(nameof(channel));
209 |
210 | client.Send($"NAMES {channel}");
211 | }
212 | public static void SendNames(this IrcEndpoint client, string channel, string target)
213 | {
214 | if (client == null)
215 | throw new ArgumentNullException(nameof(client));
216 | if (string.IsNullOrWhiteSpace(channel))
217 | throw new ArgumentNullException(nameof(channel));
218 | if (string.IsNullOrWhiteSpace(target))
219 | throw new ArgumentNullException(nameof(target));
220 |
221 | client.Send($"NAMES {channel} {target}");
222 | }
223 | public static void SendNames(this IrcEndpoint client, string[] channels)
224 | {
225 | if (client == null)
226 | throw new ArgumentNullException(nameof(client));
227 | if (channels.IsNullOrEmpty())
228 | throw new ArgumentNullException(nameof(channels));
229 |
230 | client.Send($"NAMES {string.Join(",", channels)}");
231 | }
232 | public static void SendNames(this IrcEndpoint client, string[] channels, string target)
233 | {
234 | if (client == null)
235 | throw new ArgumentNullException(nameof(client));
236 | if (channels.IsNullOrEmpty())
237 | throw new ArgumentNullException(nameof(channels));
238 | if (string.IsNullOrWhiteSpace(target))
239 | throw new ArgumentNullException(nameof(target));
240 |
241 | client.Send($"NAMES {string.Join(",", channels)} {target}");
242 | }
243 | public static void SendList(this IrcEndpoint client)
244 | {
245 | if (client == null)
246 | throw new ArgumentNullException(nameof(client));
247 |
248 | client.Send($"LIST");
249 | }
250 | public static void SendList(this IrcEndpoint client, string channel)
251 | {
252 | if (client == null)
253 | throw new ArgumentNullException(nameof(client));
254 | if (string.IsNullOrWhiteSpace(channel))
255 | throw new ArgumentNullException(nameof(channel));
256 |
257 | client.Send($"LIST {channel}");
258 | }
259 | public static void SendList(this IrcEndpoint client, string channel, string target)
260 | {
261 | if (client == null)
262 | throw new ArgumentNullException(nameof(client));
263 | if (string.IsNullOrWhiteSpace(channel))
264 | throw new ArgumentNullException(nameof(channel));
265 | if (string.IsNullOrWhiteSpace(target))
266 | throw new ArgumentNullException(nameof(target));
267 |
268 | client.Send($"LIST {channel} {target}");
269 | }
270 | public static void SendList(this IrcEndpoint client, string[] channels)
271 | {
272 | if (client == null)
273 | throw new ArgumentNullException(nameof(client));
274 | if (channels.IsNullOrEmpty())
275 | throw new ArgumentNullException(nameof(channels));
276 |
277 | client.Send($"LIST {string.Join(",", channels)}");
278 | }
279 | public static void SendList(this IrcEndpoint client, string[] channels, string target)
280 | {
281 | if (client == null)
282 | throw new ArgumentNullException(nameof(client));
283 | if (channels.IsNullOrEmpty())
284 | throw new ArgumentNullException(nameof(channels));
285 | if (string.IsNullOrWhiteSpace(target))
286 | throw new ArgumentNullException(nameof(target));
287 |
288 | client.Send($"LIST {string.Join(",", channels)} {target}");
289 | }
290 | public static void SendInvite(this IrcEndpoint client, string nickname, string channel)
291 | {
292 | if (client == null)
293 | throw new ArgumentNullException(nameof(client));
294 | if (string.IsNullOrWhiteSpace(nickname))
295 | throw new ArgumentNullException(nameof(nickname));
296 | if (string.IsNullOrWhiteSpace(channel))
297 | throw new ArgumentNullException(nameof(channel));
298 |
299 | client.Send($"INVITE {nickname} {channel}");
300 | }
301 | public static void SendKick(this IrcEndpoint client, string channel, string nickname)
302 | {
303 | if (client == null)
304 | throw new ArgumentNullException(nameof(client));
305 | if (string.IsNullOrWhiteSpace(channel))
306 | throw new ArgumentNullException(nameof(channel));
307 | if (string.IsNullOrWhiteSpace(nickname))
308 | throw new ArgumentNullException(nameof(nickname));
309 |
310 | client.Send($"KICK {channel} {nickname}");
311 | }
312 | public static void SendKick(this IrcEndpoint client, string channel, string nickname, string comment)
313 | {
314 | if (client == null)
315 | throw new ArgumentNullException(nameof(client));
316 | if (string.IsNullOrWhiteSpace(channel))
317 | throw new ArgumentNullException(nameof(channel));
318 | if (string.IsNullOrWhiteSpace(nickname))
319 | throw new ArgumentNullException(nameof(nickname));
320 | if (string.IsNullOrWhiteSpace(comment))
321 | throw new ArgumentNullException(nameof(comment));
322 |
323 | client.Send($"KICK {channel} {nickname} {comment}");
324 | }
325 | public static
326 | void SendPrivateMessage(this IrcEndpoint client, string target, string message)
327 | {
328 | if (client == null)
329 | throw new ArgumentNullException(nameof(client));
330 | if (string.IsNullOrWhiteSpace(target))
331 | throw new ArgumentNullException(nameof(target));
332 | if (string.IsNullOrWhiteSpace(message))
333 | throw new ArgumentNullException(nameof(message));
334 |
335 | client.Send($"PRIVMSG {target} :{message}");
336 | }
337 | public static void SendNoticeMessage(this IrcEndpoint client, string target, string message)
338 | {
339 | if (client == null)
340 | throw new ArgumentNullException(nameof(client));
341 | if (string.IsNullOrWhiteSpace(target))
342 | throw new ArgumentNullException(nameof(target));
343 | if (string.IsNullOrWhiteSpace(message))
344 | throw new ArgumentNullException(nameof(message));
345 |
346 | client.Send($"NOTICE {target} :{message}");
347 | }
348 | public static void SendMotd(this IrcEndpoint client, string target)
349 | {
350 | if (client == null)
351 | throw new ArgumentNullException(nameof(client));
352 | if (string.IsNullOrWhiteSpace(target))
353 | throw new ArgumentNullException(nameof(target));
354 |
355 | client.Send($"MOTD {target}");
356 | }
357 | public static void SendLusers(this IrcEndpoint client)
358 | {
359 | if (client == null)
360 | throw new ArgumentNullException(nameof(client));
361 |
362 | client.Send($"LUSERS");
363 | }
364 | public static void SendLusers(this IrcEndpoint client, string mask)
365 | {
366 | if (client == null)
367 | throw new ArgumentNullException(nameof(client));
368 | if (string.IsNullOrWhiteSpace(mask))
369 | throw new ArgumentNullException(nameof(mask));
370 |
371 | client.Send($"LUSERS {mask}");
372 | }
373 | public static void SendLusers(this IrcEndpoint client, string mask, string target)
374 | {
375 | if (client == null)
376 | throw new ArgumentNullException(nameof(client));
377 | if (string.IsNullOrWhiteSpace(mask))
378 | throw new ArgumentNullException(nameof(mask));
379 | if (string.IsNullOrWhiteSpace(target))
380 | throw new ArgumentNullException(nameof(target));
381 |
382 | client.Send($"LUSERS {mask} {target}");
383 | }
384 | public static void SendVersion(this IrcEndpoint client)
385 | {
386 | if (client == null)
387 | throw new ArgumentNullException(nameof(client));
388 |
389 | client.Send($"VERSION");
390 | }
391 | public static void SendVersion(this IrcEndpoint client, string target)
392 | {
393 | if (client == null)
394 | throw new ArgumentNullException(nameof(client));
395 | if (string.IsNullOrWhiteSpace(target))
396 | throw new ArgumentNullException(nameof(target));
397 |
398 | client.Send($"VERSION {target}");
399 | }
400 | public static void SendStats(this IrcEndpoint client)
401 | {
402 | if (client == null)
403 | throw new ArgumentNullException(nameof(client));
404 |
405 | client.Send($"STATS");
406 | }
407 | public static void SendStats(this IrcEndpoint client, string query)
408 | {
409 | if (client == null)
410 | throw new ArgumentNullException(nameof(client));
411 | if (string.IsNullOrWhiteSpace(query))
412 | throw new ArgumentNullException(nameof(query));
413 |
414 | client.Send($"STATS {query}");
415 | }
416 | public static void SendStats(this IrcEndpoint client, string query, string target)
417 | {
418 | if (client == null)
419 | throw new ArgumentNullException(nameof(client));
420 | if (string.IsNullOrWhiteSpace(query))
421 | throw new ArgumentNullException(nameof(query));
422 | if (string.IsNullOrWhiteSpace(target))
423 | throw new ArgumentNullException(nameof(target));
424 |
425 | client.Send($"STATS {query} {target}");
426 | }
427 | public static void SendLinks(this IrcEndpoint client, string remoteServer)
428 | {
429 | if (client == null)
430 | throw new ArgumentNullException(nameof(client));
431 | if (string.IsNullOrWhiteSpace(remoteServer))
432 | throw new ArgumentNullException(nameof(remoteServer));
433 |
434 | client.Send($"LINKS {remoteServer}");
435 | }
436 | public static void SendLinks(this IrcEndpoint client, string remoteServer, string serverMask)
437 | {
438 | if (client == null)
439 | throw new ArgumentNullException(nameof(client));
440 | if (string.IsNullOrWhiteSpace(remoteServer))
441 | throw new ArgumentNullException(nameof(remoteServer));
442 | if (string.IsNullOrWhiteSpace(serverMask))
443 | throw new ArgumentNullException(nameof(serverMask));
444 |
445 | client.Send($"LINKS {remoteServer} {serverMask}");
446 | }
447 | public static void SendTime(this IrcEndpoint client, string target)
448 | {
449 | if (client == null)
450 | throw new ArgumentNullException(nameof(client));
451 | if (string.IsNullOrWhiteSpace(target))
452 | throw new ArgumentNullException(nameof(target));
453 |
454 | client.Send($"TIME {target}");
455 | }
456 | public static void SendConnect(this IrcEndpoint client, string target, int port)
457 | {
458 | if (client == null)
459 | throw new ArgumentNullException(nameof(client));
460 | if (string.IsNullOrWhiteSpace(target))
461 | throw new ArgumentNullException(nameof(target));
462 | if (port == 0)
463 | throw new ArgumentException(nameof(port));
464 |
465 | client.Send($"CONNECT {target} {port}");
466 | }
467 | public static void SendConnect(this IrcEndpoint client, string target, int port, string remoteServer)
468 | {
469 | if (client == null)
470 | throw new ArgumentNullException(nameof(client));
471 | if (string.IsNullOrWhiteSpace(target))
472 | throw new ArgumentNullException(nameof(target));
473 | if (port == 0)
474 | throw new ArgumentException(nameof(port));
475 | if (string.IsNullOrWhiteSpace(remoteServer))
476 | throw new ArgumentNullException(nameof(remoteServer));
477 |
478 | client.Send($"CONNECT {target} {port} {remoteServer}");
479 | }
480 | public static void SendTrace(this IrcEndpoint client, string target)
481 | {
482 | if (client == null)
483 | throw new ArgumentNullException(nameof(client));
484 | if (string.IsNullOrWhiteSpace(target))
485 | throw new ArgumentNullException(nameof(target));
486 |
487 | client.Send($"TRACE {target}");
488 | }
489 | public static void SendAdmin(this IrcEndpoint client, string target)
490 | {
491 | if (client == null)
492 | throw new ArgumentNullException(nameof(client));
493 | if (string.IsNullOrWhiteSpace(target))
494 | throw new ArgumentNullException(nameof(target));
495 |
496 | client.Send($"ADMIN {target}");
497 | }
498 | public static void SendInfo(this IrcEndpoint client, string target)
499 | {
500 | if (client == null)
501 | throw new ArgumentNullException(nameof(client));
502 | if (string.IsNullOrWhiteSpace(target))
503 | throw new ArgumentNullException(nameof(target));
504 |
505 | client.Send($"INFO {target}");
506 | }
507 | public static void SendServlist(this IrcEndpoint client)
508 | {
509 | if (client == null)
510 | throw new ArgumentNullException(nameof(client));
511 | client.Send($"SERVLIST");
512 | }
513 | public static void SendServlist(this IrcEndpoint client, string mask)
514 | {
515 | if (client == null)
516 | throw new ArgumentNullException(nameof(client));
517 | if (string.IsNullOrWhiteSpace(mask))
518 | throw new ArgumentNullException(nameof(mask));
519 |
520 | client.Send($"SERVLIST {mask}");
521 | }
522 | public static void SendServlist(this IrcEndpoint client, string mask, string type)
523 | {
524 | if (client == null)
525 | throw new ArgumentNullException(nameof(client));
526 | if (string.IsNullOrWhiteSpace(mask))
527 | throw new ArgumentNullException(nameof(mask));
528 | if (string.IsNullOrWhiteSpace(type))
529 | throw new ArgumentNullException(nameof(type));
530 |
531 | client.Send($"SERVLIST {mask} {type}");
532 | }
533 | public static void SendSquery(this IrcEndpoint client, string serviceName, string message)
534 | {
535 | if (client == null)
536 | throw new ArgumentNullException(nameof(client));
537 | if (string.IsNullOrWhiteSpace(serviceName))
538 | throw new ArgumentNullException(nameof(serviceName));
539 | if (string.IsNullOrWhiteSpace(message))
540 | throw new ArgumentNullException(nameof(message));
541 |
542 | client.Send($"SQUERY {serviceName} :{message}");
543 | }
544 | public static void SendWho(this IrcEndpoint client)
545 | {
546 | if (client == null)
547 | throw new ArgumentNullException(nameof(client));
548 |
549 | client.Send($"WHO");
550 | }
551 | public static void SendWho(this IrcEndpoint client, string mask, bool onlyOperators = false)
552 | {
553 | if (client == null)
554 | throw new ArgumentNullException(nameof(client));
555 | if (string.IsNullOrWhiteSpace(mask))
556 | throw new ArgumentNullException(nameof(mask));
557 |
558 | if (!onlyOperators)
559 | client.Send($"WHO {mask}");
560 | else
561 | client.Send($"WHO {mask} o");
562 | }
563 | public static void SendWhoIs(this IrcEndpoint client, string mask)
564 | {
565 | if (client == null)
566 | throw new ArgumentNullException(nameof(client));
567 | if (string.IsNullOrWhiteSpace(mask))
568 | throw new ArgumentNullException(nameof(mask));
569 |
570 | client.Send($"WHOIS {mask}");
571 | }
572 | public static void SendWhoIs(this IrcEndpoint client, string target, string mask)
573 | {
574 | if (client == null)
575 | throw new ArgumentNullException(nameof(client));
576 | if (string.IsNullOrWhiteSpace(target))
577 | throw new ArgumentNullException(nameof(target));
578 | if (string.IsNullOrWhiteSpace(mask))
579 | throw new ArgumentNullException(nameof(mask));
580 |
581 | client.Send($"WHOIS {target} {mask}");
582 | }
583 | public static void SendWhoWas(this IrcEndpoint client, string nickname)
584 | {
585 | if (client == null)
586 | throw new ArgumentNullException(nameof(client));
587 | if (string.IsNullOrWhiteSpace(nickname))
588 | throw new ArgumentNullException(nameof(nickname));
589 |
590 | client.Send($"WHOWAS {nickname}");
591 | }
592 | public static void SendWhoWas(this IrcEndpoint client, string nickname, int count)
593 | {
594 | if (client == null)
595 | throw new ArgumentNullException(nameof(client));
596 | if (string.IsNullOrWhiteSpace(nickname))
597 | throw new ArgumentNullException(nameof(nickname));
598 | if (count <= 0)
599 | throw new ArgumentException(nameof(count));
600 |
601 | client.Send($"WHOWAS {nickname} {count}");
602 | }
603 | public static void SendWhoWas(this IrcEndpoint client, string nickname, int count, string target)
604 | {
605 | if (client == null)
606 | throw new ArgumentNullException(nameof(client));
607 | if (string.IsNullOrWhiteSpace(nickname))
608 | throw new ArgumentNullException(nameof(nickname));
609 | if (count <= 0)
610 | throw new ArgumentException(nameof(count));
611 | if (string.IsNullOrWhiteSpace(target))
612 | throw new ArgumentNullException(nameof(target));
613 |
614 | client.Send($"WHOWAS {nickname} {count} {target}");
615 | }
616 | public static void SendKill(this IrcEndpoint client, string nickname, string comment)
617 | {
618 | if (client == null)
619 | throw new ArgumentNullException(nameof(client));
620 | if (string.IsNullOrWhiteSpace(nickname))
621 | throw new ArgumentNullException(nameof(nickname));
622 | if (string.IsNullOrWhiteSpace(comment))
623 | throw new ArgumentNullException(nameof(comment));
624 |
625 | client.Send($"KILL {nickname} {comment}");
626 | }
627 | public static void SendPing(this IrcEndpoint client, string server)
628 | {
629 | if (client == null)
630 | throw new ArgumentNullException(nameof(client));
631 | if (string.IsNullOrWhiteSpace(server))
632 | throw new ArgumentNullException(nameof(server));
633 |
634 | client.Send($"PING {server}");
635 | }
636 | public static void SendPing(this IrcEndpoint client, string server, string forwardTo)
637 | {
638 | if (client == null)
639 | throw new ArgumentNullException(nameof(client));
640 | if (string.IsNullOrWhiteSpace(server))
641 | throw new ArgumentNullException(nameof(server));
642 | if (string.IsNullOrWhiteSpace(forwardTo))
643 | throw new ArgumentNullException(nameof(forwardTo));
644 |
645 | client.Send($"PING {server} {forwardTo}");
646 | }
647 | public static void SendPong(this IrcEndpoint client, string server)
648 | {
649 | if (client == null)
650 | throw new ArgumentNullException(nameof(client));
651 | if (string.IsNullOrWhiteSpace(server))
652 | throw new ArgumentNullException(nameof(server));
653 |
654 | client.Send($"PONG {server}");
655 | }
656 | public static void SendPong(this IrcEndpoint client, string server, string forwardTo)
657 | {
658 | if (client == null)
659 | throw new ArgumentNullException(nameof(client));
660 | if (string.IsNullOrWhiteSpace(server))
661 | throw new ArgumentNullException(nameof(server));
662 | if (string.IsNullOrWhiteSpace(forwardTo))
663 | throw new ArgumentNullException(nameof(forwardTo));
664 |
665 | client.Send($"PONG {server} {forwardTo}");
666 | }
667 |
668 | public static void SendError(this IrcEndpoint client, string errorMessage)
669 | {
670 | if (client == null)
671 | throw new ArgumentNullException(nameof(client));
672 | if (string.IsNullOrWhiteSpace(errorMessage))
673 | throw new ArgumentNullException(nameof(errorMessage));
674 |
675 | client.Send($"ERROR {errorMessage}");
676 | }
677 | public static void SendAway(this IrcEndpoint client)
678 | {
679 | if (client == null)
680 | throw new ArgumentNullException(nameof(client));
681 |
682 | client.Send($"AWAY");
683 | }
684 | public static void SendAway(this IrcEndpoint client, string message)
685 | {
686 | if (client == null)
687 | throw new ArgumentNullException(nameof(client));
688 | if (string.IsNullOrWhiteSpace(message))
689 | throw new ArgumentNullException(nameof(message));
690 |
691 | client.Send($"AWAY :{message}");
692 | }
693 | public static void SendDie(this IrcEndpoint client)
694 | {
695 | if (client == null)
696 | throw new ArgumentNullException(nameof(client));
697 | client.Send($"DIE");
698 | }
699 | public static void SendRestart(this IrcEndpoint client)
700 | {
701 | if (client == null)
702 | throw new ArgumentNullException(nameof(client));
703 | client.Send($"RESTART");
704 | }
705 | public static void SendSummon(this IrcEndpoint client, string user)
706 | {
707 | if (client == null)
708 | throw new ArgumentNullException(nameof(client));
709 | if (string.IsNullOrWhiteSpace(user))
710 | throw new ArgumentNullException(nameof(user));
711 |
712 | client.Send($"SUMMON {user}");
713 | }
714 | public static void SendSummon(this IrcEndpoint client, string user, string target)
715 | {
716 | if (client == null)
717 | throw new ArgumentNullException(nameof(client));
718 | if (string.IsNullOrWhiteSpace(user))
719 | throw new ArgumentNullException(nameof(user));
720 | if (string.IsNullOrWhiteSpace(target))
721 | throw new ArgumentNullException(nameof(target));
722 |
723 | client.Send($"SUMMON {user} {target}");
724 | }
725 | public static void SendSummon(this IrcEndpoint client, string user, string target, string channel)
726 | {
727 | if (client == null)
728 | throw new ArgumentNullException(nameof(client));
729 | if (string.IsNullOrWhiteSpace(user))
730 | throw new ArgumentNullException(nameof(user));
731 | if (string.IsNullOrWhiteSpace(target))
732 | throw new ArgumentNullException(nameof(target));
733 | if (string.IsNullOrWhiteSpace(channel))
734 | throw new ArgumentNullException(nameof(channel));
735 |
736 | client.Send($"SUMMON {user} {target} {channel}");
737 | }
738 | public static void SendUsers(this IrcEndpoint client, string target)
739 | {
740 | if (client == null)
741 | throw new ArgumentNullException(nameof(client));
742 | if (string.IsNullOrWhiteSpace(target))
743 | throw new ArgumentNullException(nameof(target));
744 |
745 | client.Send($"USERS {target}");
746 | }
747 | public static void SendWallops(this IrcEndpoint client, string message)
748 | {
749 | if (client == null)
750 | throw new ArgumentNullException(nameof(client));
751 | if (string.IsNullOrWhiteSpace(message))
752 | throw new ArgumentNullException(nameof(message));
753 |
754 | client.Send($"WALLOPS {message}");
755 | }
756 | public static void SendUserhost(this IrcEndpoint client, string nickname)
757 | {
758 | if (client == null)
759 | throw new ArgumentNullException(nameof(client));
760 | if (string.IsNullOrWhiteSpace(nickname))
761 | throw new ArgumentNullException(nameof(nickname));
762 |
763 | client.Send($"USERHOST {nickname}");
764 | }
765 | public static void SendUserhost(this IrcEndpoint client, string[] nicknames)
766 | {
767 | if (client == null)
768 | throw new ArgumentNullException(nameof(client));
769 | if (nicknames.IsNullOrEmpty())
770 | throw new ArgumentNullException(nameof(nicknames));
771 |
772 | client.Send($"USERHOST {string.Join(" ", nicknames)}");
773 | }
774 | public static void SendIsOn(this IrcEndpoint client, string nickname)
775 | {
776 | if (client == null)
777 | throw new ArgumentNullException(nameof(client));
778 | if (string.IsNullOrWhiteSpace(nickname))
779 | throw new ArgumentNullException(nameof(nickname));
780 |
781 | client.Send($"ISON {nickname}");
782 | }
783 | public static void SendIsOn(this IrcEndpoint client, string[] nicknames)
784 | {
785 | if (client == null)
786 | throw new ArgumentNullException(nameof(client));
787 | if (nicknames.IsNullOrEmpty())
788 | throw new ArgumentNullException(nameof(nicknames));
789 | if (nicknames.Length > 5)
790 | throw new ArgumentException("Nickname list should not be contain more than 5 elements.", nameof(nicknames));
791 |
792 | client.Send($"ISON {string.Join(" ", nicknames)}");
793 | }
794 | }
795 | }
796 |
797 |
--------------------------------------------------------------------------------
/ChirpAPI/Network/Protocol/IrcServer.cs:
--------------------------------------------------------------------------------
1 | using System;
2 |
3 | namespace ChirpAPI
4 | {
5 | public class IrcServer
6 | {
7 | public IrcServer(string servername)
8 | {
9 | Servername = servername;
10 | }
11 |
12 | public event EventHandler OnReplyWelcome;
13 | public event EventHandler OnReplyYourHost;
14 | public event EventHandler OnReplyServerCreationDate;
15 | public event EventHandler OnReplyMyInfo;
16 | public event EventHandler OnReplyBounce;
17 | public event EventHandler OnMotd;
18 |
19 | public string Servername { get; private set; }
20 | public string Hostname { get; private set; }
21 |
22 |
23 | internal void HandleWelcomeMessage(IrcClient client, IrcMessage message)
24 | {
25 | OnReplyWelcome?.Invoke(this, new IrcMessageEventArgs(client, message));
26 | }
27 |
28 | internal void HandleYourHostMessage(IrcClient client, IrcMessage message)
29 | {
30 | OnReplyYourHost?.Invoke(this, new IrcMessageEventArgs(client, message));
31 | }
32 |
33 | internal void HandleServerCreationDateMessage(IrcClient client, IrcMessage message)
34 | {
35 | OnReplyServerCreationDate?.Invoke(this, new IrcMessageEventArgs(client, message));
36 | }
37 |
38 | internal void HandleMyInfoMessage(IrcClient client, IrcMessage message)
39 | {
40 | OnReplyMyInfo?.Invoke(this, new IrcMessageEventArgs(client, message));
41 | }
42 |
43 | internal void HandleServerBounceMessage(IrcClient client, IrcMessage message)
44 | {
45 | OnReplyBounce?.Invoke(this, new IrcMessageEventArgs(client, message));
46 | }
47 |
48 | internal void HandleMotd(IrcClient client, IrcMessage message)
49 | {
50 | OnMotd?.Invoke(this, new IrcMotdEventArgs(client, message.Command, message.Trail));
51 | }
52 | }
53 | }
54 |
55 |
--------------------------------------------------------------------------------
/ChirpAPI/Network/Protocol/IrcUser.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | namespace ChirpAPI
3 | {
4 | public class IrcUser
5 | {
6 | public IrcUser(string nickname, string username, string realname)
7 | {
8 | Nickname = nickname;
9 | Username = username;
10 | Realname = realname;
11 | }
12 |
13 | public string Nickname { get; internal set; }
14 | public string Username { get; internal set; }
15 | public string Realname { get; internal set; }
16 | public string Hostname { get; internal set; }
17 | public bool IsOnline { get; internal set; }
18 | public bool IsAway { get; internal set; }
19 | public string AwayMessage { get; internal set; }
20 |
21 | }
22 | }
--------------------------------------------------------------------------------
/ChirpAPI/Network/Protocol/IrcUsersCollection.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections;
3 | using System.Reflection;
4 | using System.Collections.Concurrent;
5 |
6 | namespace ChirpAPI
7 | {
8 | class IrcUsersCollection
9 | {
10 | ConcurrentDictionary userCollection;
11 |
12 | public IrcUsersCollection()
13 | {
14 | userCollection = new ConcurrentDictionary();
15 | }
16 |
17 | public void Add(IrcUser user)
18 | {
19 | if (user == null)
20 | throw new ArgumentNullException(nameof(user));
21 |
22 | userCollection.TryAdd(user.Nickname, user);
23 | }
24 |
25 | public void Remove(IrcUser user)
26 | {
27 | if (user == null)
28 | throw new ArgumentNullException(nameof(user));
29 |
30 | userCollection.TryRemove(user.Username);
31 | }
32 |
33 | public IrcUser GetUser(string nickname)
34 | {
35 | if (String.IsNullOrWhiteSpace(nickname))
36 | throw new ArgumentException(nameof(nickname));
37 |
38 | IrcUser user;
39 | userCollection.TryGetValue(nickname, out user);
40 | return user;
41 | }
42 | }
43 | }
44 |
45 |
--------------------------------------------------------------------------------
/ChirpAPI/Properties/AssemblyInfo.cs:
--------------------------------------------------------------------------------
1 | using System.Reflection;
2 | using System.Runtime.CompilerServices;
3 |
4 | // Information about this assembly is defined by the following attributes.
5 | // Change them to the values specific to your project.
6 |
7 | [assembly: AssemblyTitle("ChirpAPI")]
8 | [assembly: AssemblyDescription("")]
9 | [assembly: AssemblyConfiguration("")]
10 | [assembly: AssemblyCompany("")]
11 | [assembly: AssemblyProduct("")]
12 | [assembly: AssemblyCopyright("artemkreynes")]
13 | [assembly: AssemblyTrademark("")]
14 | [assembly: AssemblyCulture("")]
15 |
16 | // The assembly version has the format "{Major}.{Minor}.{Build}.{Revision}".
17 | // The form "{Major}.{Minor}.*" will automatically update the build and revision,
18 | // and "{Major}.{Minor}.{Build}.*" will update just the revision.
19 |
20 | [assembly: AssemblyVersion("1.0.*")]
21 |
22 | // The following attributes are used to specify the signing key for the assembly,
23 | // if desired. See the Mono documentation for more information about signing.
24 |
25 | //[assembly: AssemblyDelaySign(false)]
26 | //[assembly: AssemblyKeyFile("")]
27 |
28 |
--------------------------------------------------------------------------------
/ChirpAPI/Utilities/ConcurrentDictionaryExtension.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Concurrent;
3 |
4 | namespace ChirpAPI
5 | {
6 | static class ConcurrentDictionaryExtension
7 | {
8 | public static bool TryRemove(this ConcurrentDictionary dictionary, TKey key)
9 | {
10 | TValue dummy;
11 | return dictionary.TryRemove(key, out dummy);
12 | }
13 | }
14 | }
15 |
16 |
--------------------------------------------------------------------------------
/ChirpAPI/Utilities/StringArrayExtensions.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | namespace ChirpAPI
3 | {
4 | public static class StringArrayExtensions
5 | {
6 | public static bool IsNullOrEmpty(this Array array)
7 | {
8 | return (array == null || array.Length == 0);
9 | }
10 | }
11 | }
12 |
13 |
--------------------------------------------------------------------------------
/ChirpAPI/Utilities/StringExtension.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections;
3 | using System.Collections.Generic;
4 | using System.Linq;
5 |
6 | namespace ChirpAPI
7 | {
8 | public static class StringExtension
9 | {
10 | public static IEnumerable ChunkSplit(this string str, int chunkSize)
11 | {
12 | if (String.IsNullOrWhiteSpace(str))
13 | throw new ArgumentNullException(nameof(str));
14 | if (chunkSize < 0)
15 | throw new ArgumentException(nameof(chunkSize));
16 | if (str.Length < chunkSize)
17 | chunkSize = str.Length;
18 | var split = new List();
19 | split.AddRange(Enumerable.Range(0, str.Length / chunkSize)
20 | .Select(i => str.Substring(i * chunkSize, chunkSize)));
21 | split.Add(str.Length % chunkSize > 0
22 | ? str.Substring((str.Length / chunkSize) * chunkSize, str.Length - ((str.Length / chunkSize) * chunkSize))
23 | : string.Empty);
24 | return split;
25 |
26 | }
27 | }
28 | }
29 |
30 |
--------------------------------------------------------------------------------
/packages/NUnit.3.2.0/CHANGES.txt:
--------------------------------------------------------------------------------
1 | NUnit 3.2 - March 5, 2016
2 |
3 | Framework
4 |
5 | * Added an Order attribute that defines the order in which tests are run
6 | * Added Assert.ThrowsAsync for testing if async methods throw an exception
7 | * You can now compare unlike collections using Is.EquivalentTo().Using(...)
8 | * Added the ability to add custom message formatters to MsgUtils
9 | * TestCaseSourceAttribute now optionally takes an array of parameters that can be passed to the source method
10 | * Added Is.Zero and Is.Not.Zero to the fluent syntax as a shorter option for Is.EqualTo(0) and Is.Not.EqualTo(0)
11 |
12 | Engine
13 |
14 | * Engine extensions can be installed via NuGet packages
15 |
16 | Issues Resolved
17 |
18 | * 170 Test Order Attribute
19 | * 300 Create an NUnit Visual Studio Template
20 | * 464 Async delegate assertions
21 | * 532 Batch runner for Silverlight tests
22 | * 533 Separate NUnitLite runner and autorunner
23 | * 681 NUnit agent cannot resolve test dependency assemblies when mixed mode initialization runs in the default AppDomain
24 | * 793 Replace CoreEngine by use of Extensions
25 | * 907 Console report tests are too fragile
26 | * 922 Wrap Console in NUnitLite
27 | * 930 Switch from MSBuild based build system to Cake
28 | * 981 Define NUnit Versioning for post-3.0 Development
29 | * 1004 Poor formatting of results for Assert.AreEqual(DateTimeOffset, DateTimeOffset)
30 | * 1018 ArgumentException when 2.x version of NUnit Framework is in the bin directory
31 | * 1022 Support Comparing Unlike Collections using Is.EquivalentTo().Using(...)
32 | * 1044 Re-order Test Summary Errors/Failures
33 | * 1066 ApartmentAttribute and TestCaseAttribute(s) do not work together
34 | * 1103 Can't use TestCaseData from base class
35 | * 1109 NullReferenceException when using inherited property for ValueSource
36 | * 1113 Console runner and xml output consistency
37 | * 1117 Fix misbehaviour of Throws.Exception with non-void returning functions
38 | * 1120 NUnitProject should parse .nunit project files containing Xml Declarations
39 | * 1121 Usage of field set to null as value source leads to somewhat cryptic error
40 | * 1122 Region may be disposed before test delegate is executed
41 | * 1133 Provide a way to install extensions as nuget packages
42 | * 1136 Don't allow V2 framework to update in V2 driver tests
43 | * 1171 A bug when using Assert.That() with Is.Not.Empty
44 | * 1185 Engine finds .NET 4.0 Client Profile twice
45 | * 1187 ITestAssemblyRunner.StopRun as implemented by NUnitTestAssemblyRunner
46 | * 1195 name attribute in test-suite and test-results element of output xml is different to nunit 2.6.4 using nunit2-format
47 | * 1196 Custom value formatter for v3 via MsgUtils
48 | * 1210 Available runtimes issues
49 | * 1230 Add ability for testcasedatasource to have parameters passed to methods
50 | * 1233 Add TestAssemblyRunner tests to both portable and silverlight builds
51 | * 1234 Have default NUnitLite Runner Program.cs return exit code
52 | * 1236 Make Appveyor NuGet feed more useable
53 | * 1246 Introduce Is.Zero syntax to test for zero
54 | * 1252 Exception thrown when any assembly is not found
55 | * 1261 TypeHelper.GetDisplayName generates the wrong name for generic types with nested classes
56 | * 1278 Fix optional parameters in TestCaseAttribute
57 | * 1282 TestCase using Params Behaves Oddly
58 | * 1283 Engine should expose available frameworks.
59 | * 1286 value of the time attribute in nunit2 outputs depends on the machine culture
60 | * 1297 NUnit.Engine nuget package improvements
61 | * 1301 Assert.AreNotSame evaluates ToString unnecessarily
62 |
63 | NUnit 3.0.1 - December 1, 2015
64 |
65 | Console Runner
66 |
67 | * The Nunit.Runners NuGet package was updated to become a meta-package that pulls in the NUnit.Console package
68 | * Reinstated the --pause command line option that will display a message box allowing you to attach a debugger if the --debug option does not work
69 |
70 | Issues Resolved
71 |
72 | * 994 Add max number of Agents to the NUnit project file
73 | * 1014 Ensure NUnit API assembly updates with MSI installs
74 | * 1024 Added --pause flag to console runner
75 | * 1030 Update Nunit.Runners package to 3.0
76 | * 1033 "No arguments were provided" with Theory and Values combination
77 | * 1035 Check null arguments
78 | * 1037 Async tests not working on Windows 10 Universal
79 | * 1041 NUnit2XmlResult Writer is reporting Sucess when test fails
80 | * 1042 NUnit2 reports on 3.0 is different than 2.6.4
81 | * 1046 FloatingPointNumerics.AreAlmostEqualUlps throws OverflowException
82 | * 1049 Cannot select Generic tests from command line
83 | * 1050 Do not expose System.Runtime.CompilerServices.ExtensionAttribute to public
84 | * 1054 Create nuget feeds for CI builds on Appveyor
85 | * 1055 nunit3 console runner --where option does not return error on invalid selection string
86 | * 1060 Remove "Version 3" from NUnit Nuget Package
87 | * 1061 Nunit30Settings.xml becomes corrupted
88 | * 1062 Console.WriteLine statements in "OneTimeSetUp" and "OneTimeTearDown" annotated methods are not directed to the console when using nunit3-console.exe runner
89 | * 1063 Error in Random Test
90 |
91 | NUnit 3.0.0 Final Release - November 15, 2015
92 |
93 | Issues Resolved
94 |
95 | * 635 Mono 4.0 Support
96 |
97 | NUnit 3.0.0 Release Candidate 3 - November 13, 2015
98 |
99 | Engine
100 |
101 | * The engine now only sets the config file for project.nunit to project.config if project.config exists. Otherwise, each assembly uses its own config, provided it is run in a separate AppDomain by itself.
102 |
103 | NOTE: It is not possible for multiple assemblies in the same AppDomain to use different configs. This is not an NUnit limitation, it's just how configs work!
104 |
105 | Issues Resolved
106 |
107 | * 856 Extensions support for third party runners in NUnit 3.0
108 | * 1003 Delete TeamCityEventHandler as it is not used
109 | * 1015 Specifying .nunit project and --framework on command line causes crash
110 | * 1017 Remove Assert.Multiple from framework
111 |
112 | NUnit 3.0.0 Release Candidate 2 - November 8, 2015
113 |
114 | Engine
115 |
116 | * The IDriverFactory extensibility interface has been modified.
117 |
118 | Issues Resolved
119 |
120 | * 970 Define PARALLEL in CF build of nunitlite
121 | * 978 It should be possible to determine version of NUnit using nunit console tool
122 | * 983 Inconsistent return codes depending on ProcessModel
123 | * 986 Update docs for parallel execution
124 | * 988 Don't run portable tests from NUnit Console
125 | * 990 V2 driver is passing invalid filter elements to NUnit
126 | * 991 Mono.Options should not be exposed to public directly
127 | * 993 Give error message when a regex filter is used with NUnit V2
128 | * 997 Add missing XML Documentation
129 | * 1008 NUnitLite namespace not updated in the NuGet Packages
130 |
131 | NUnit 3.0.0 Release Candidate - November 1, 2015
132 |
133 | Framework
134 |
135 | * The portable build now supports ASP.NET 5 and the new Core CLR.
136 |
137 | NOTE: The `nunit3-console` runner cannot run tests that reference the portable build.
138 | You may run such tests using NUnitLite or a platform-specific runner.
139 |
140 | * `TestCaseAttribute` and `TestCaseData` now allow modifying the test name without replacing it entirely.
141 | * The Silverlight packages are now separate downloads.
142 |
143 | NUnitLite
144 |
145 | * The NUnitLite runner now produces the same output display and XML results as the console runner.
146 |
147 | Engine
148 |
149 | * The format of the XML result file has been finalized and documented.
150 |
151 | Console Runner
152 |
153 | * The console runner program is now called `nunit3-console`.
154 | * Console runner output has been modified so that the summary comes at the end, to reduce the need for scrolling.
155 |
156 | Issues Resolved
157 |
158 | * 59 Length of generated test names should be limited
159 | * 68 Customization of test case name generation
160 | * 404 Split tests between nunitlite.runner and nunit.framework
161 | * 575 Add support for ASP.NET 5 and the new Core CLR
162 | * 783 Package separately for Silverlight
163 | * 833 Intermittent failure of WorkItemQueueTests.StopQueue_WithWorkers
164 | * 859 NUnit-Console output - move Test Run Summary to end
165 | * 867 Remove Warnings from Ignored tests
166 | * 868 Review skipped tests
167 | * 887 Move environment and settings elements to the assembly suite in the result file
168 | * 899 Colors for ColorConsole on grey background are too light
169 | * 904 InternalPreserveStackTrace is not supported on all Portable platforms
170 | * 914 Unclear error message from console runner when assembly has no tests
171 | * 916 Console runner dies when test agent dies
172 | * 918 Console runner --where parameter is case sensitive
173 | * 920 Remove addins\nunit.engine.api.dll from NuGet package
174 | * 929 Rename nunit-console.exe
175 | * 931 Remove beta warnings from NuGet packages
176 | * 936 Explicit skipped tests not displayed
177 | * 939 Installer complains about .NET even if already installed
178 | * 940 Confirm or modify list of packages for release
179 | * 947 Breaking API change in ValueSourceAttribute
180 | * 949 Update copyright in NUnit Console
181 | * 954 NUnitLite XML output is not consistent with the engine's
182 | * 955 NUnitLite does not display the where clause
183 | * 959 Restore filter options for NUnitLite portable build
184 | * 960 Intermittent failure of CategoryFilterTests
185 | * 967 Run Settings Report is not being displayed.
186 |
187 | NUnit 3.0.0 Beta 5 - October 16, 2015
188 |
189 | Framework
190 |
191 | * Parameterized test cases now support nullable arguments.
192 | * The NUnit framework may now be built for the .NET Core framework. Note that this is only available through building the source code. A binary will be available in the next release.
193 |
194 | Engine
195 |
196 | * The engine now runs multiple test assemblies in parallel by default
197 | * The output XML now includes more information about the test run, including the text of the command used, any engine settings and the filter used to select tests.
198 | * Extensions may now specify data in an identifying attribute, for use by the engine in deciding whether to load that extension.
199 |
200 |
201 | Console Runner
202 |
203 | * The console now displays all settings used by the engine to run tests as well as the filter used to select tests.
204 | * The console runner accepts a new option --maxagents. If multiple assemblies are run in separate processes, this value may be used to limit the number that are executed simultaneously in parallel.
205 | * The console runner no longer accepts the --include and --exclude options. Instead, the new --where option provides a more general way to express which tests will be executed, such as --where "cat==Fast && Priority==High". See the docs for details of the syntax.
206 | * The new --debug option causes NUnit to break in the debugger immediately before tests are run. This simplifies debugging, especially when the test is run in a separate process.
207 |
208 | Issues Resolved
209 |
210 | * 41 Check for zeroes in Assert messages
211 | * 254 Finalize XML format for test results
212 | * 275 NUnitEqualityComparer fails to compare IEquatable where second object is derived from T
213 | * 304 Run test Assemblies in parallel
214 | * 374 New syntax for selecting tests to be run
215 | * 515 OSPlatform.IsMacOSX doesn't work
216 | * 573 nunit-console hangs on Mac OS X after all tests have run
217 | * 669 TeamCity service message should have assembly name as a part of test name.
218 | * 689 The TeamCity service message "testFinished" should have an integer value in the "duration" attribute
219 | * 713 Include command information in XML
220 | * 719 We have no way to configure tests for several assemblies using NUnit project file and the common installation from msi file
221 | * 735 Workers number in xml report file cannot be found
222 | * 784 Build Portable Framework on Linux
223 | * 790 Allow Extensions to provide data through an attribute
224 | * 794 Make it easier to debug tests as well as NUnit itself
225 | * 801 NUnit calls Dispose multiple times
226 | * 814 Support nullable types with TestCase
227 | * 818 Possible error in Merge Pull Request #797
228 | * 821 Wrapped method results in loss of result information
229 | * 822 Test for Debugger in NUnitTestAssemblyRunner probably should not be in CF build
230 | * 824 Remove unused System.Reflection using statements
231 | * 826 Randomizer uniqueness tests fail randomly!
232 | * 828 Merge pull request #827 (issue 826)
233 | * 830 Add ability to report test results synchronously to test runners
234 | * 837 Enumerators not disposed when comparing IEnumerables
235 | * 840 Add missing copyright notices
236 | * 844 Pull Request #835 (Issue #814) does not build in CF
237 | * 847 Add new --process:inprocess and --inprocess options
238 | * 850 Test runner fails if test name contains invalid xml characters
239 | * 851 'Exclude' console option is not working in NUnit Lite
240 | * 853 Cannot run NUnit Console from another directory
241 | * 860 Use CDATA section for message, stack-trace and output elements of XML
242 | * 863 Eliminate core engine
243 | * 865 Intermittent failures of StopWatchTests
244 | * 869 Tests that use directory separator char to determine platform misreport Linux on MaxOSX
245 | * 870 NUnit Console Runtime Environment misreports on MacOSX
246 | * 874 Add .NET Core Framework
247 | * 878 Cannot exclude MacOSX or XBox platforms when running on CF
248 | * 892 Fixed test runner returning early when executing more than one test run.
249 | * 894 Give nunit.engine and nunit.engine.api assemblies strong names
250 | * 896 NUnit 3.0 console runner not placing test result xml in --work directory
251 |
252 | NUnit 3.0.0 Beta 4 - August 25, 2015
253 |
254 | Framework
255 |
256 | * A new RetryAttribute allows retrying of failing tests.
257 | * New SupersetConstraint and Is.SupersetOf syntax complement SubsetConstraint.
258 | * Tests skipped due to ExplicitAttribute are now reported as skipped.
259 |
260 | Engine
261 |
262 | * We now use Cecil to examine assemblies prior to loading them.
263 | * Extensions are no longer based on Mono.Addins but use our own extension framework.
264 |
265 | Issues Resolved
266 |
267 | * 125 3rd-party dependencies should be downloaded on demand
268 | * 283 What should we do when a user extension does something bad?
269 | * 585 RetryAttribute
270 | * 642 Restructure MSBuild script
271 | * 649 Change how we zip packages
272 | * 654 ReflectionOnlyLoad and ReflectionOnlyLoadFrom
273 | * 664 Invalid "id" attribute in the report for case "test started"
274 | * 685 In the some cases when tests cannot be started NUnit returns exit code "0"
275 | * 728 Missing Assert.That overload
276 | * 741 Explicit Tests get run when using --exclude
277 | * 746 Framework should send events for all tests
278 | * 747 NUnit should apply attributes even if test is non-runnable
279 | * 749 Review Use of Mono.Addins for Engine Extensibility
280 | * 750 Include Explicit Tests in Test Results
281 | * 753 Feature request: Is.SupersetOf() assertion constraint
282 | * 755 TimeOut attribute doesn't work with TestCaseSource Attribute
283 | * 757 Implement some way to wait for execution to complete in ITestEngineRunner
284 | * 760 Packaging targets do not run on Linux
285 | * 766 Added overloads for True()/False() accepting booleans
286 | * 778 Build and build.cmd scripts invoke nuget.exe improperly
287 | * 780 Teamcity fix
288 | * 782 No sources for 2.6.4
289 |
290 | NUnit 3.0.0 Beta 3 - July 15, 2015
291 |
292 | Framework
293 |
294 | * The RangeAttribute has been extended to support more data types including
295 | uint, long and ulong
296 | * Added platform support for Windows 10 and fixed issues with Windows 8 and
297 | 8.1 support
298 | * Added async support to the portable version of NUnit Framework
299 | * The named members of the TestCaseSource and ValueSource attributes must now be
300 | static.
301 | * RandomAttribute has been extended to add support for new data types including
302 | uint, long, ulong, short, ushort, float, byte and sbyte
303 | * TestContext.Random has also been extended to add support for new data types including
304 | uint, long, ulong, short, ushort, float, byte, sbyte and decimal
305 | * Removed the dependency on Microsoft.Bcl.Async from the NUnit Framework assembly
306 | targeting .NET 4.0. If you want to write async tests in .NET 4.0, you will need
307 | to reference the NuGet package yourself.
308 | * Added a new TestFixtureSource attribute which is the equivalent to TestCaseSource
309 | but provides for instantiation of fixtures.
310 | * Significant improvements have been made in how NUnit deduces the type arguments of
311 | generic methods based on the arguments provided.
312 |
313 | Engine
314 |
315 | * If the target framework is not specified, test assemblies that are compiled
316 | to target .NET 4.5 will no longer run in .NET 4.0 compatibility mode
317 |
318 | Console
319 |
320 | * If the console is run without arguments, it will now display help
321 |
322 | Issues Resolved
323 |
324 | * 47 Extensions to RangeAttribute
325 | * 237 System.Uri .ctor works not properly under Nunit
326 | * 244 NUnit should properly distinguish between .NET 4.0 and 4.5
327 | * 310 Target framework not specified on the AppDomain when running against .Net 4.5
328 | * 321 Rationalize how we count tests
329 | * 472 Overflow exception and DivideByZero exception from the RangeAttribute
330 | * 524 int and char do not compare correctly?
331 | * 539 Truncation of string arguments
332 | * 544 AsyncTestMethodTests for 4.5 Framework fails frequently on Travis CI
333 | * 656 Unused parameter in Console.WriteLine found
334 | * 670 Failing Tests in TeamCity Build
335 | * 673 Ensure proper disposal of engine objects
336 | * 674 Engine does not release test assemblies
337 | * 679 Windows 10 Support
338 | * 682 Add Async Support to Portable Framework
339 | * 683 Make FrameworkController available in portable build
340 | * 687 TestAgency does not launch agent process correctly if runtime type is not specified (i.e. v4.0)
341 | * 692 PlatformAttribute_OperatingSystemBitNess fails when running in 32-bit process
342 | * 693 Generic Test Method cannot determine type arguments for fixture when passed as IEnumerable
343 | * 698 Require TestCaseSource and ValueSource named members to be static
344 | * 703 TeamCity non-equal flowid for 'testStarted' and 'testFinished' messages
345 | * 712 Extensions to RandomAttribute
346 | * 715 Provide a data source attribute at TestFixture Level
347 | * 718 RangeConstraint gives error with from and two args of differing types
348 | * 723 Does nunit.nuspec require dependency on Microsoft.Bcl.Async?
349 | * 724 Adds support for Nullable to Assert.IsTrue and Assert.IsFalse
350 | * 734 Console without parameters doesn't show help
351 |
352 | NUnit 3.0.0 Beta 2 - May 12, 2015
353 |
354 | Framework
355 |
356 | * The Compact Framework version of the framework is now packaged separately
357 | and will be distributed as a ZIP file and as a NuGet package.
358 | * The NUnit 2.x RepeatAttribute was added back into the framework.
359 | * Added Throws.ArgumentNullException
360 | * Added GetString methods to NUnit.Framework.Internal.RandomGenerator to
361 | create repeatable random strings for testing
362 | * When checking the equality of DateTimeOffset, you can now use the
363 | WithSameOffset modifier
364 | * Some classes intended for internal usage that were public for testing
365 | have now been made internal. Additional classes will be made internal
366 | for the final 3.0 release.
367 |
368 | Engine
369 |
370 | * Added a core engine which is a non-extensible, minimal engine for use by
371 | devices and similar situations where reduced functionality is compensated
372 | for by reduced size and simplicity of usage. See
373 | https://github.com/nunit/dev/wiki/Core-Engine for more information.
374 |
375 | Issues Resolved
376 |
377 | * 22 Add OSArchitecture Attribute to Environment node in result xml
378 | * 24 Assert on Dictionary Content
379 | * 48 Explicit seems to conflict with Ignore
380 | * 168 Create NUnit 3.0 documentation
381 | * 196 Compare DateTimeOffsets including the offset in the comparison
382 | * 217 New icon for the 3.0 release
383 | * 316 NUnitLite TextUI Runner
384 | * 320 No Tests found: Using parametrized Fixture and TestCaseSource
385 | * 360 Better exception message when using non-BCL class in property
386 | * 454 Rare registry configurations may cause NUnit to fail
387 | * 478 RepeatAttribute
388 | * 481 Testing multiple assemblies in nunitlite
389 | * 538 Potential bug using TestContext in constructors
390 | * 546 Enable Parallel in NUnitLite/CF (or more) builds
391 | * 551 TextRunner not passing the NumWorkers option to the ITestAssemblyRunner
392 | * 556 Executed tests should always return a non-zero duration
393 | * 559 Fix text of NuGet packages
394 | * 560 Fix PackageVersion property on wix install projects
395 | * 562 Program.cs in NUnitLite NuGet package is incorrect
396 | * 564 NUnitLite Nuget package is Beta 1a, Framework is Beta 1
397 | * 565 NUnitLite Nuget package adds Program.cs to a VB Project
398 | * 568 Isolate packaging from building
399 | * 570 ThrowsConstraint failure message should include stack trace of actual exception
400 | * 576 Throws.ArgumentNullException would be nice
401 | * 577 Documentation on some members of Throws falsely claims that they return `TargetInvocationException` constraints
402 | * 579 No documentation for recommended usage of TestCaseSourceAttribute
403 | * 580 TeamCity Service Message Uses Incorrect Test Name with NUnit2Driver
404 | * 582 Test Ids Are Not Unique
405 | * 583 TeamCity service messages to support parallel test execution
406 | * 584 Non-runnable assembly has incorrect ResultState
407 | * 609 Add support for integration with TeamCity
408 | * 611 Remove unused --teamcity option from CF build of NUnitLite
409 | * 612 MaxTime doesn't work when used for TestCase
410 | * 621 Core Engine
411 | * 622 nunit-console fails when use --output
412 | * 628 Modify IService interface and simplify ServiceContext
413 | * 631 Separate packaging for the compact framework
414 | * 646 ConfigurationManager.AppSettings Params Return Null under Beta 1
415 | * 648 Passing 2 or more test assemblies targeting > .NET 2.0 to nunit-console fails
416 |
417 | NUnit 3.0.0 Beta 1 - March 25, 2015
418 |
419 | General
420 |
421 | * There is now a master windows installer for the framework, engine and console runner.
422 |
423 | Framework
424 |
425 | * We no longer create a separate framework build for .NET 3.5. The 2.0 and
426 | 3.5 builds were essentially the same, so the former should now be used
427 | under both runtimes.
428 | * A new Constraint, DictionaryContainsKeyConstraint, may be used to test
429 | that a specified key is present in a dictionary.
430 | * LevelOfParallelizationAttribute has been renamed to LevelOfParallelismAttribute.
431 | * The Silverlight runner now displays output in color and includes any
432 | text output created by the tests.
433 | * The class and method names of each test are included in the output xml
434 | where applicable.
435 | * String arguments used in test case names are now truncated to 40 rather
436 | than 20 characters.
437 |
438 | Engine
439 |
440 | * The engine API has now been finalized. It permits specifying a minimum
441 | version of the engine that a runner is able to use. The best installed
442 | version of the engine will be loaded. Third-party runners may override
443 | the selection process by including a copy of the engine in their
444 | installation directory and specifying that it must be used.
445 | * The V2 framework driver now uses the event listener and test listener
446 | passed to it by the runner. This corrects several outstanding issues
447 | caused by events not being received and allows selecting V2 tests to
448 | be run from the command-line, in the same way that V3 tests are selected.
449 |
450 | Console
451 |
452 | * The console now defaults to not using shadowcopy. There is a new option
453 | --shadowcopy to turn it on if needed.
454 |
455 | Issues Resolved
456 |
457 | * 224 Silverlight Support
458 | * 318 TestActionAttribute: Retrieving the TestFixture
459 | * 428 Add ExpectedExceptionAttribute to C# samples
460 | * 440 Automatic selection of Test Engine to use
461 | * 450 Create master install that includes the framework, engine and console installs
462 | * 477 Assert does not work with ArraySegment
463 | * 482 nunit-console has multiple errors related to -framework option
464 | * 483 Adds constraint for asserting that a dictionary contains a particular key
465 | * 484 Missing file in NUnit.Console nuget package
466 | * 485 Can't run v2 tests with nunit-console 3.0
467 | * 487 NUnitLite can't load assemblies by their file name
468 | * 488 Async setup and teardown still don't work
469 | * 497 Framework installer shold register the portable framework
470 | * 504 Option --workers:0 is ignored
471 | * 508 Travis builds with failure in engine tests show as successful
472 | * 509 Under linux, not all mono profiles are listed as available
473 | * 512 Drop the .NET 3.5 build
474 | * 517 V2 FrameworkDriver does not make use of passed in TestEventListener
475 | * 523 Provide an option to disable shadowcopy in NUnit v3
476 | * 528 V2 FrameworkDriver does not make use of passed in TestFilter
477 | * 530 Color display for Silverlight runner
478 | * 531 Display text output from tests in Silverlight runner
479 | * 534 Add classname and methodname to test result xml
480 | * 541 Console help doesn't indicate defaults
481 |
482 | NUnit 3.0.0 Alpha 5 - January 30, 2015
483 |
484 | General
485 |
486 | * A Windows installer is now included in the release packages.
487 |
488 | Framework
489 |
490 | * TestCaseAttribute now allows arguments with default values to be omitted. Additionaly, it accepts a Platform property to specify the platforms on which the test case should be run.
491 | * TestFixture and TestCase attributes now enforce the requirement that a reason needs to be provided when ignoring a test.
492 | * SetUp, TearDown, OneTimeSetUp and OneTimeTearDown methods may now be async.
493 | * String arguments over 20 characters in length are truncated when used as part of a test name.
494 |
495 | Engine
496 |
497 | * The engine is now extensible using Mono.Addins. In this release, extension points are provided for FrameworkDrivers, ProjectLoaders and OutputWriters. The following addins are bundled as a part of NUnit:
498 | * A FrameworkDriver that allows running NUnit V2 tests under NUnit 3.0.
499 | * ProjectLoaders for NUnit and Visual Studio projects.
500 | * An OutputWriter that creates XML output in NUnit V2 format.
501 | * DomainUsage now defaults to Multiple if not specified by the runner
502 |
503 | Console
504 |
505 | * New options supported:
506 | * --testlist provides a list of tests to run in a file
507 | * --stoponerror indicates that the run should terminate when any test fails.
508 |
509 | Issues Resolved
510 |
511 | * 20 TestCaseAttribute needs Platform property.
512 | * 60 NUnit should support async setup, teardown, fixture setup and fixture teardown.
513 | * 257 TestCaseAttribute should not require parameters with default values to be specified.
514 | * 266 Pluggable framework drivers.
515 | * 368 Create addin model.
516 | * 369 Project loader addins
517 | * 370 OutputWriter addins
518 | * 403 Move ConsoleOptions.cs and Options.cs to Common and share...
519 | * 419 Create Windows Installer for NUnit.
520 | * 427 [TestFixture(Ignore=true)] should not be allowed.
521 | * 437 Errors in tests under Linux due to hard-coded paths.
522 | * 441 NUnit-Console should support --testlist option
523 | * 442 Add --stoponerror option back to nunit-console.
524 | * 456 Fix memory leak in RuntimeFramework.
525 | * 459 Remove the Mixed Platforms build configuration.
526 | * 468 Change default domain usage to multiple.
527 | * 469 Truncate string arguments in test names in order to limit the length.
528 |
529 | NUnit 3.0.0 Alpha 4 - December 30, 2014
530 |
531 | Framework
532 |
533 | * ApartmentAttribute has been added, replacing STAAttribute and MTAAttribute.
534 | * Unnecessary overloads of Assert.That and Assume.That have been removed.
535 | * Multiple SetUpFixtures may be specified in a single namespace.
536 | * Improvements to the Pairwise strategy test case generation algorithm.
537 | * The new NUnitLite runner --testlist option, allows a list of tests to be kept in a file.
538 |
539 | Engine
540 |
541 | * A driver is now included, which allows running NUnit 2.x tests under NUnit 3.0.
542 | * The engine can now load and run tests specified in a number of project formats:
543 | * NUnit (.nunit)
544 | * Visual Studio C# projects (.csproj)
545 | * Visual Studio F# projects (.vjsproj)
546 | * Visual Studio Visual Basic projects (.vbproj)
547 | * Visual Studio solutions (.sln)
548 | * Legacy C++ and Visual JScript projects (.csproj and .vjsproj) are also supported
549 | * Support for the current C++ format (.csxproj) is not yet available
550 | * Creation of output files like TestResult.xml in various formats is now a
551 | service of the engine, available to any runner.
552 |
553 | Console
554 |
555 | * The command-line may now include any number of assemblies and/or supported projects.
556 |
557 | Issues Resolved
558 |
559 | * 37 Multiple SetUpFixtures should be permitted on same namespace
560 | * 210 TestContext.WriteLine in an AppDomain causes an error
561 | * 227 Add support for VS projects and solutions
562 | * 231 Update C# samples to use NUnit 3.0
563 | * 233 Update F# samples to use NUnit 3.0
564 | * 234 Update C++ samples to use NUnit 3.0
565 | * 265 Reorganize console reports for nunit-console and nunitlite
566 | * 299 No full path to assembly in XML file under Compact Framework
567 | * 301 Command-line length
568 | * 363 Make Xml result output an engine service
569 | * 377 CombiningStrategyAttributes don't work correctly on generic methods
570 | * 388 Improvements to NUnitLite runner output
571 | * 390 Specify exactly what happens when a test times out
572 | * 396 ApartmentAttribute
573 | * 397 CF nunitlite runner assembly has the wrong name
574 | * 407 Assert.Pass() with ]]> in message crashes console runner
575 | * 414 Simplify Assert overloads
576 | * 416 NUnit 2.x Framework Driver
577 | * 417 Complete work on NUnit projects
578 | * 420 Create Settings file in proper location
579 |
580 | NUnit 3.0.0 Alpha 3 - November 29, 2014
581 |
582 | Breaking Changes
583 |
584 | * NUnitLite tests must reference both the nunit.framework and nunitlite assemblies.
585 |
586 | Framework
587 |
588 | * The NUnit and NUnitLite frameworks have now been merged. There is no longer any distinction
589 | between them in terms of features, although some features are not available on all platforms.
590 | * The release includes two new framework builds: compact framework 3.5 and portable. The portable
591 | library is compatible with .NET 4.5, Silverlight 5.0, Windows 8, Windows Phone 8.1,
592 | Windows Phone Silverlight 8, Mono for Android and MonoTouch.
593 | * A number of previously unsupported features are available for the Compact Framework:
594 | - Generic methods as tests
595 | - RegexConstraint
596 | - TimeoutAttribute
597 | - FileAssert, DirectoryAssert and file-related constraints
598 |
599 | Engine
600 |
601 | * The logic of runtime selection has now changed so that each assembly runs by default
602 | in a separate process using the runtime for which it was built.
603 | * On 64-bit systems, each test process is automatically created as 32-bit or 64-bit,
604 | depending on the platform specified for the test assembly.
605 |
606 | Console
607 |
608 | * The console runner now runs tests in a separate process per assembly by default. They may
609 | still be run in process or in a single separate process by use of command-line options.
610 | * The console runner now starts in the highest version of the .NET runtime available, making
611 | it simpler to debug tests by specifying that they should run in-process on the command-line.
612 | * The -x86 command-line option is provided to force execution in a 32-bit process on a 64-bit system.
613 | * A writeability check is performed for each output result file before trying to run the tests.
614 | * The -teamcity option is now supported.
615 |
616 | Issues Resolved
617 |
618 | * 12 Compact framework should support generic methods
619 | * 145 NUnit-console fails if test result message contains invalid xml characters
620 | * 155 Create utility classes for platform-specific code
621 | * 223 Common code for NUnitLite console runner and NUnit-Console
622 | * 225 Compact Framework Support
623 | * 238 Improvements to running 32 bit tests on a 64 bit system
624 | * 261 Add portable nunitlite build
625 | * 284 NUnitLite Unification
626 | * 293 CF does not have a CurrentDirectory
627 | * 306 Assure NUnit can write resultfile
628 | * 308 Early disposal of runners
629 | * 309 NUnit-Console should support incremental output under TeamCity
630 | * 325 Add RegexConstraint to compact framework build
631 | * 326 Add TimeoutAttribute to compact framework build
632 | * 327 Allow generic test methods in the compact framework
633 | * 328 Use .NET Stopwatch class for compact framework builds
634 | * 331 Alpha 2 CF does not build
635 | * 333 Add parallel execution to desktop builds of NUnitLite
636 | * 334 Include File-related constraints and syntax in NUnitLite builds
637 | * 335 Re-introduce 'Classic' NUnit syntax in NUnitLite
638 | * 336 Document use of separate obj directories per build in our projects
639 | * 337 Update Standard Defines page for .NET 3.0
640 | * 341 Move the NUnitLite runners to separate assemblies
641 | * 367 Refactor XML Escaping Tests
642 | * 372 CF Build TestAssemblyRunnerTests
643 | * 373 Minor CF Test Fixes
644 | * 378 Correct documentation for PairwiseAttribute
645 | * 386 Console Output Improvements
646 |
647 | NUnit 3.0.0 Alpha 2 - November 2, 2014
648 |
649 | Breaking Changes
650 |
651 | * The console runner no longer displays test results in the debugger.
652 | * The NUnitLite compact framework 2.0 build has been removed.
653 | * All addin support has been removed from the framework. Documentation of NUnit 3.0 extensibility features will be published in time for the beta release. In the interim, please ask for support on the nunit-discuss list.
654 |
655 | General
656 |
657 | * A separate solution has been created for Linux
658 | * We now have continuous integration builds under both Travis and Appveyor
659 | * The compact framework 3.5 build is now working and will be supported in future releases.
660 |
661 | New Features
662 |
663 | * The console runner now automatically detects 32- versus 64-bit test assemblies.
664 | * The NUnitLite report output has been standardized to match that of nunit-console.
665 | * The NUnitLite command-line has been standardized to match that of nunit-console where they share the same options.
666 | * Both nunit-console and NUnitLite now display output in color.
667 | * ActionAttributes now allow specification of multiple targets on the attribute as designed. This didn't work in the first alpha.
668 | * OneTimeSetUp and OneTimeTearDown failures are now shown on the test report. Individual test failures after OneTimeSetUp failure are no longer shown.
669 | * The console runner refuses to run tests build with older versions of NUnit. A plugin will be available to run older tests in the future.
670 |
671 | Issues Resolved
672 |
673 | * 222 Color console for NUnitLite
674 | * 229 Timing failures in tests
675 | * 241 Remove reference to Microslft BCL packages
676 | * 243 Create solution for Linux
677 | * 245 Multiple targets on action attributes not implemented
678 | * 246 C++ tests do not compile in VS2013
679 | * 247 Eliminate trace display when running tests in debug
680 | * 255 Add new result states for more precision in where failures occur
681 | * 256 ContainsConstraint break when used with AndConstraint
682 | * 264 Stacktrace displays too many entries
683 | * 269 Add manifest to nunit-console and nunit-agent
684 | * 270 OneTimeSetUp failure results in too much output
685 | * 271 Invalid tests should be treated as errors
686 | * 274 Command line options should be case insensitive
687 | * 276 NUnit-console should not reference nunit.framework
688 | * 278 New result states (ChildFailure and SetupFailure) break NUnit2XmlOutputWriter
689 | * 282 Get tests for NUnit2XmlOutputWriter working
690 | * 288 Set up Appveyor CI build
691 | * 290 Stack trace still displays too many items
692 | * 315 NUnit 3.0 alpha: Cannot run in console on my assembly
693 | * 319 CI builds are not treating test failures as failures of the build
694 | * 322 Remove Stopwatch tests where they test the real .NET Stopwatch
695 |
696 | NUnit 3.0.0 Alpha 1 - September 22, 2014
697 |
698 | Breaking Changes
699 |
700 | * Legacy suites are no longer supported
701 | * Assert.NullOrEmpty is no longer supported (Use Is.Null.Or.Empty)
702 |
703 | General
704 |
705 | * MsBuild is now used for the build rather than NAnt
706 | * The framework test harness has been removed now that nunit-console is at a point where it can run the tests.
707 |
708 | New Features
709 |
710 | * Action Attributes have been added with the same features as in NUnit 2.6.3.
711 | * TestContext now has a method that allows writing to the XML output.
712 | * TestContext.CurrentContext.Result now provides the error message and stack trace during teardown.
713 | * Does prefix operator supplies several added constraints.
714 |
715 | Issues Resolved
716 |
717 | * 6 Log4net not working with NUnit
718 | * 13 Standardize commandline options for nunitlite runner
719 | * 17 No allowance is currently made for nullable arguents in TestCase parameter conversions
720 | * 33 TestCaseSource cannot refer to a parameterized test fixture
721 | * 54 Store message and stack trace in TestContext for use in TearDown
722 | * 111 Implement Changes to File, Directory and Path Assertions
723 | * 112 Implement Action Attributes
724 | * 156 Accessing multiple AppDomains within unit tests result in SerializationException
725 | * 163 Add --trace option to NUnitLite
726 | * 167 Create interim documentation for the alpha release
727 | * 169 Design and implement distribution of NUnit packages
728 | * 171 Assert.That should work with any lambda returning bool
729 | * 175 Test Harness should return an error if any tests fail
730 | * 180 Errors in Linux CI build
731 | * 181 Replace NAnt with MsBuild / XBuild
732 | * 183 Standardize commandline options for test harness
733 | * 188 No output from NUnitLite when selected test is not found
734 | * 189 Add string operators to Does prefix
735 | * 193 TestWorkerTests.BusyExecutedIdleEventsCalledInSequence fails occasionally
736 | * 197 Deprecate or remove Assert.NullOrEmpty
737 | * 202 Eliminate legacy suites
738 | * 203 Combine framework, engine and console runner in a single solution and repository
739 | * 209 Make Ignore attribute's reason mandatory
740 | * 215 Running 32-bit tests on a 64-bit OS
741 | * 219 Teardown failures are not reported
742 |
743 | Console Issues Resolved (Old nunit-console project, now combined with nunit)
744 |
745 | * 2 Failure in TestFixtureSetUp is not reported correctly
746 | * 5 CI Server for nunit-console
747 | * 6 System.NullReferenceException on start nunit-console-x86
748 | * 21 NUnitFrameworkDriverTests fail if not run from same directory
749 | * 24 'Debug' value for /trace option is deprecated in 2.6.3
750 | * 38 Confusing Excluded categories output
751 |
752 | NUnit 2.9.7 - August 8, 2014
753 |
754 | Breaking Changes
755 |
756 | * NUnit no longer supports void async test methods. You should use a Task return Type instead.
757 | * The ExpectedExceptionAttribute is no longer supported. Use Assert.Throws() or Assert.That(..., Throws) instead for a more precise specification of where the exception is expected to be thrown.
758 |
759 | New Features
760 |
761 | * Parallel test execution is supported down to the Fixture level. Use ParallelizableAttribute to indicate types that may be run in parallel.
762 | * Async tests are supported for .NET 4.0 if the user has installed support for them.
763 | * A new FileExistsConstraint has been added along with FileAssert.Exists and FileAssert.DoesNotExist
764 | * ExpectedResult is now supported on simple (non-TestCase) tests.
765 | * The Ignore attribute now takes a named parameter Until, which allows specifying a date after which the test is no longer ignored.
766 | * The following new values are now recognized by PlatformAttribute: Win7, Win8, Win8.1, Win2012Server, Win2012ServerR2, NT6.1, NT6.2, 32-bit, 64-bit
767 | * TimeoutAttribute is now supported under Silverlight
768 | * ValuesAttribute may be used without any values on an enum or boolean argument. All possible values are used.
769 | * You may now specify a tolerance using Within when testing equality of DateTimeOffset values.
770 | * The XML output now includes a start and end time for each test.
771 |
772 | Issues Resolved
773 |
774 | * 8 [SetUpFixture] is not working as expected
775 | * 14 CI Server for NUnit Framework
776 | * 21 Is.InRange Constraint Ambiguity
777 | * 27 Values attribute support for enum types
778 | * 29 Specifying a tolerance with "Within" doesn't work for DateTimeOffset data types
779 | * 31 Report start and end time of test execution
780 | * 36 Make RequiresThread, RequiresSTA, RequiresMTA inheritable
781 | * 45 Need of Enddate together with Ignore
782 | * 55 Incorrect XML comments for CollectionAssert.IsSubsetOf
783 | * 62 Matches(Constraint) does not work as expected
784 | * 63 Async support should handle Task return type without state machine
785 | * 64 AsyncStateMachineAttribute should only be checked by name
786 | * 65 Update NUnit Wiki to show the new location of samples
787 | * 66 Parallel Test Execution within test assemblies
788 | * 67 Allow Expected Result on simple tests
789 | * 70 EquivalentTo isn't compatible with IgnoreCase for dictioneries
790 | * 75 Async tests should be supported for projects that target .NET 4.0
791 | * 82 nunit-framework tests are timing out on Linux
792 | * 83 Path-related tests fail on Linux
793 | * 85 Culture-dependent NUnit tests fail on non-English machine
794 | * 88 TestCaseSourceAttribute documentation
795 | * 90 EquivalentTo isn't compatible with IgnoreCase for char
796 | * 100 Changes to Tolerance definitions
797 | * 110 Add new platforms to PlatformAttribute
798 | * 113 Remove ExpectedException
799 | * 118 Workarounds for missing InternalPreserveStackTrace in mono
800 | * 121 Test harness does not honor the --worker option when set to zero
801 | * 129 Standardize Timeout in the Silverlight build
802 | * 130 Add FileAssert.Exists and FileAssert.DoesNotExist
803 | * 132 Drop support for void async methods
804 | * 153 Surprising behavior of DelayedConstraint pollingInterval
805 | * 161 Update API to support stopping an ongoing test run
806 |
807 | NOTE: Bug Fixes below this point refer to the number of the bug in Launchpad.
808 |
809 | NUnit 2.9.6 - October 4, 2013
810 |
811 | Main Features
812 |
813 | * Separate projects for nunit-console and nunit.engine
814 | * New builds for .NET 4.5 and Silverlight
815 | * TestContext is now supported
816 | * External API is now stable; internal interfaces are separate from API
817 | * Tests may be run in parallel on separate threads
818 | * Solutions and projects now use VS2012 (except for Compact framework)
819 |
820 | Bug Fixes
821 |
822 | * 463470 We should encapsulate references to pre-2.0 collections
823 | * 498690 Assert.That() doesn't like properties with scoped setters
824 | * 501784 Theory tests do not work correctly when using null parameters
825 | * 531873 Feature: Extraction of unit tests from NUnit test assembly and calling appropriate one
826 | * 611325 Allow Teardown to detect if last test failed
827 | * 611938 Generic Test Instances disappear
828 | * 655882 Make CategoryAttribute inherited
829 | * 664081 Add Server2008 R2 and Windows 7 to PlatformAttribute
830 | * 671432 Upgrade NAnt to Latest Release
831 | * 676560 Assert.AreEqual does not support IEquatable
832 | * 691129 Add Category parameter to TestFixture
833 | * 697069 Feature request: dynamic location for TestResult.xml
834 | * 708173 NUnit's logic for comparing arrays - use Comparer if it is provided
835 | * 709062 "System.ArgumentException : Cannot compare" when the element is a list
836 | * 712156 Tests cannot use AppDomain.SetPrincipalPolicy
837 | * 719184 Platformdependency in src/ClientUtilities/util/Services/DomainManager.cs:40
838 | * 719187 Using Path.GetTempPath() causes conflicts in shared temporary folders
839 | * 735851 Add detection of 3.0, 3.5 and 4.0 frameworks to PlatformAttribute
840 | * 736062 Deadlock when EventListener performs a Trace call + EventPump synchronisation
841 | * 756843 Failing assertion does not show non-linear tolerance mode
842 | * 766749 net-2.0\nunit-console-x86.exe.config should have a element and also enable loadFromRemoteSources
843 | * 770471 Assert.IsEmpty does not support IEnumerable
844 | * 785460 Add Category parameter to TestCaseSourceAttribute
845 | * 787106 EqualConstraint provides inadequate failure information for IEnumerables
846 | * 792466 TestContext MethodName
847 | * 794115 HashSet incorrectly reported
848 | * 800089 Assert.Throws() hides details of inner AssertionException
849 | * 848713 Feature request: Add switch for console to break on any test case error
850 | * 878376 Add 'Exactly(n)' to the NUnit constraint syntax
851 | * 882137 When no tests are run, higher level suites display as Inconclusive
852 | * 882517 NUnit 2.5.10 doesn't recognize TestFixture if there are only TestCaseSource inside
853 | * 885173 Tests are still executed after cancellation by user
854 | * 885277 Exception when project calls for a runtime using only 2 digits
855 | * 885604 Feature request: Explicit named parameter to TestCaseAttribute
856 | * 890129 DelayedConstraint doesn't appear to poll properties of objects
857 | * 892844 Not using Mono 4.0 profile under Windows
858 | * 893919 DelayedConstraint fails polling properties on references which are initially null
859 | * 896973 Console output lines are run together under Linux
860 | * 897289 Is.Empty constraint has unclear failure message
861 | * 898192 Feature Request: Is.Negative, Is.Positive
862 | * 898256 IEnumerable for Datapoints doesn't work
863 | * 899178 Wrong failure message for parameterized tests that expect exceptions
864 | * 904841 After exiting for timeout the teardown method is not executed
865 | * 908829 TestCase attribute does not play well with variadic test functions
866 | * 910218 NUnit should add a trailing separator to the ApplicationBase
867 | * 920472 CollectionAssert.IsNotEmpty must dispose Enumerator
868 | * 922455 Add Support for Windows 8 and Windows 2012 Server to PlatformAttribute
869 | * 928246 Use assembly.Location instead of assembly.CodeBase
870 | * 958766 For development work under TeamCity, we need to support nunit2 formatted output under direct-runner
871 | * 1000181 Parameterized TestFixture with System.Type as constructor arguments fails
872 | * 1000213 Inconclusive message Not in report output
873 | * 1023084 Add Enum support to RandomAttribute
874 | * 1028188 Add Support for Silverlight
875 | * 1029785 Test loaded from remote folder failed to run with exception System.IODirectory
876 | * 1037144 Add MonoTouch support to PlatformAttribute
877 | * 1041365 Add MaxOsX and Xbox support to platform attribute
878 | * 1057981 C#5 async tests are not supported
879 | * 1060631 Add .NET 4.5 build
880 | * 1064014 Simple async tests should not return Task
881 | * 1071164 Support async methods in usage scenarios of Throws constraints
882 | * 1071343 Runner.Load fails on CF if the test assembly contains a generic method
883 | * 1071861 Error in Path Constraints
884 | * 1072379 Report test execution time at a higher resolution
885 | * 1074568 Assert/Assume should support an async method for the ActualValueDelegate
886 | * 1082330 Better Exception if SetCulture attribute is applied multiple times
887 | * 1111834 Expose Random Object as part of the test context
888 | * 1111838 Include Random Seed in Test Report
889 | * 1172979 Add Category Support to nunitlite Runner
890 | * 1203361 Randomizer uniqueness tests sometimes fail
891 | * 1221712 When non-existing test method is specified in -test, result is still "Tests run: 1, Passed: 1"
892 | * 1223294 System.NullReferenceException thrown when ExpectedExceptionAttribute is used in a static class
893 | * 1225542 Standardize commandline options for test harness
894 |
895 | Bug Fixes in 2.9.6 But Not Listed Here in the Release
896 |
897 | * 541699 Silverlight Support
898 | * 1222148 /framework switch does not recognize net-4.5
899 | * 1228979 Theories with all test cases inconclusive are not reported as failures
900 |
901 |
902 | NUnit 2.9.5 - July 30, 2010
903 |
904 | Bug Fixes
905 |
906 | * 483836 Allow non-public test fixtures consistently
907 | * 487878 Tests in generic class without proper TestFixture attribute should be invalid
908 | * 498656 TestCase should show array values in GUI
909 | * 513989 Is.Empty should work for directories
910 | * 519912 Thread.CurrentPrincipal Set In TestFixtureSetUp Not Maintained Between Tests
911 | * 532488 constraints from ConstraintExpression/ConstraintBuilder are not reusable
912 | * 590717 categorie contains dash or trail spaces is not selectable
913 | * 590970 static TestFixtureSetUp/TestFixtureTearDown methods in base classes are not run
914 | * 595683 NUnit console runner fails to load assemblies
915 | * 600627 Assertion message formatted poorly by PropertyConstraint
916 | * 601108 Duplicate test using abstract test fixtures
917 | * 601645 Parametered test should try to convert data type from source to parameter
918 | * 605432 ToString not working properly for some properties
919 | * 606548 Deprecate Directory Assert in 2.5 and remove it in 3.0
920 | * 608875 NUnit Equality Comparer incorrectly defines equality for Dictionary objects
921 |
922 | NUnit 2.9.4 - May 4, 2010
923 |
924 | Bug Fixes
925 |
926 | * 419411 Fixture With No Tests Shows as Non-Runnable
927 | * 459219 Changes to thread princpal cause failures under .NET 4.0
928 | * 459224 Culture test failure under .NET 4.0
929 | * 462019 Line endings needs to be better controlled in source
930 | * 462418 Assume.That() fails if I specify a message
931 | * 483845 TestCase expected return value cannot be null
932 | * 488002 Should not report tests in abstract class as invalid
933 | * 490679 Category in TestCaseData clashes with Category on ParameterizedMethodSuite
934 | * 501352 VS2010 projects have not been updated for new directory structure
935 | * 504018 Automatic Values For Theory Test Parameters Not Provided For bool And enum
936 | * 505899 'Description' parameter in both TestAttribute and TestCaseAttribute is not allowed
937 | * 523335 TestFixtureTearDown in static class not executed
938 | * 556971 Datapoint(s)Attribute should work on IEnumerable as well as on Arrays
939 | * 561436 SetCulture broken with 2.5.4
940 | * 563532 DatapointsAttribute should be allowed on properties and methods
941 |
942 | NUnit 2.9.3 - October 26, 2009
943 |
944 | Main Features
945 |
946 | * Created new API for controlling framework
947 | * New builds for .Net 3.5 and 4.0, compact framework 3.5
948 | * Support for old style tests has been removed
949 | * New adhoc runner for testing the framework
950 |
951 | Bug Fixes
952 |
953 | * 432805 Some Framework Tests don't run on Linux
954 | * 440109 Full Framework does not support "Contains"
955 |
956 | NUnit 2.9.2 - September 19, 2009
957 |
958 | Main Features
959 |
960 | * NUnitLite code is now merged with NUnit
961 | * Added NUnitLite runner to the framework code
962 | * Added Compact framework builds
963 |
964 | Bug Fixes
965 |
966 | * 430100 Assert.Catch should return T
967 | * 432566 NUnitLite shows empty string as argument
968 | * 432573 Mono test should be at runtime
969 |
970 | NUnit 2.9.1 - August 27, 2009
971 |
972 | General
973 |
974 | * Created a separate project for the framework and framework tests
975 | * Changed license to MIT / X11
976 | * Created Windows installer for the framework
977 |
978 | Bug Fixes
979 |
980 | * 400502 NUnitEqualityComparer.StreamsEqual fails for same stream
981 | * 400508 TestCaseSource attirbute is not working when Type is given
982 | * 400510 TestCaseData variable length ctor drops values
983 | * 417557 Add SetUICultureAttribute from NUnit 2.5.2
984 | * 417559 Add Ignore to TestFixture, TestCase and TestCaseData
985 | * 417560 Merge Assert.Throws and Assert.Catch changes from NUnit 2.5.2
986 | * 417564 TimeoutAttribute on Assembly
987 |
--------------------------------------------------------------------------------
/packages/NUnit.3.2.0/LICENSE.txt:
--------------------------------------------------------------------------------
1 | Copyright (c) 2016 Charlie Poole
2 |
3 | Permission is hereby granted, free of charge, to any person obtaining a copy
4 | of this software and associated documentation files (the "Software"), to deal
5 | in the Software without restriction, including without limitation the rights
6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7 | copies of the Software, and to permit persons to whom the Software is
8 | furnished to do so, subject to the following conditions:
9 |
10 | The above copyright notice and this permission notice shall be included in
11 | all copies or substantial portions of the Software.
12 |
13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19 | THE SOFTWARE.
20 |
21 |
--------------------------------------------------------------------------------
/packages/NUnit.3.2.0/NOTICES.txt:
--------------------------------------------------------------------------------
1 | NUnit 3.0 is based on earlier versions of NUnit, with Portions
2 |
3 | Copyright (c) 2002-2014 Charlie Poole or
4 | Copyright (c) 2002-2004 James W. Newkirk, Michael C. Two, Alexei A. Vorontsov or
5 | Copyright (c) 2000-2002 Philip A. Craig
6 |
--------------------------------------------------------------------------------
/packages/NUnit.3.2.0/NUnit.3.2.0.nupkg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kreynes/ChirpAPI/345d1789e0f75c9bcaeeaefca9cd0a7b478bdbd7/packages/NUnit.3.2.0/NUnit.3.2.0.nupkg
--------------------------------------------------------------------------------
/packages/NUnit.3.2.0/lib/dotnet/nunit.framework.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kreynes/ChirpAPI/345d1789e0f75c9bcaeeaefca9cd0a7b478bdbd7/packages/NUnit.3.2.0/lib/dotnet/nunit.framework.dll
--------------------------------------------------------------------------------
/packages/NUnit.3.2.0/lib/net20/nunit.framework.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kreynes/ChirpAPI/345d1789e0f75c9bcaeeaefca9cd0a7b478bdbd7/packages/NUnit.3.2.0/lib/net20/nunit.framework.dll
--------------------------------------------------------------------------------
/packages/NUnit.3.2.0/lib/net40/nunit.framework.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kreynes/ChirpAPI/345d1789e0f75c9bcaeeaefca9cd0a7b478bdbd7/packages/NUnit.3.2.0/lib/net40/nunit.framework.dll
--------------------------------------------------------------------------------
/packages/NUnit.3.2.0/lib/net45/nunit.framework.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kreynes/ChirpAPI/345d1789e0f75c9bcaeeaefca9cd0a7b478bdbd7/packages/NUnit.3.2.0/lib/net45/nunit.framework.dll
--------------------------------------------------------------------------------
/packages/NUnit.3.2.0/lib/portable-net45+win8+wp8+wpa81+Xamarin.Mac+MonoAndroid10+MonoTouch10+Xamarin.iOS10/nunit.framework.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kreynes/ChirpAPI/345d1789e0f75c9bcaeeaefca9cd0a7b478bdbd7/packages/NUnit.3.2.0/lib/portable-net45+win8+wp8+wpa81+Xamarin.Mac+MonoAndroid10+MonoTouch10+Xamarin.iOS10/nunit.framework.dll
--------------------------------------------------------------------------------
/packages/NUnit.Console.3.2.0.1/NUnit.Console.3.2.0.1.nupkg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kreynes/ChirpAPI/345d1789e0f75c9bcaeeaefca9cd0a7b478bdbd7/packages/NUnit.Console.3.2.0.1/NUnit.Console.3.2.0.1.nupkg
--------------------------------------------------------------------------------
/packages/NUnit.ConsoleRunner.3.2.0/CHANGES.txt:
--------------------------------------------------------------------------------
1 | NUnit 3.2 - March 5, 2016
2 |
3 | Framework
4 |
5 | * Added an Order attribute that defines the order in which tests are run
6 | * Added Assert.ThrowsAsync for testing if async methods throw an exception
7 | * You can now compare unlike collections using Is.EquivalentTo().Using(...)
8 | * Added the ability to add custom message formatters to MsgUtils
9 | * TestCaseSourceAttribute now optionally takes an array of parameters that can be passed to the source method
10 | * Added Is.Zero and Is.Not.Zero to the fluent syntax as a shorter option for Is.EqualTo(0) and Is.Not.EqualTo(0)
11 |
12 | Engine
13 |
14 | * Engine extensions can be installed via NuGet packages
15 |
16 | Issues Resolved
17 |
18 | * 170 Test Order Attribute
19 | * 300 Create an NUnit Visual Studio Template
20 | * 464 Async delegate assertions
21 | * 532 Batch runner for Silverlight tests
22 | * 533 Separate NUnitLite runner and autorunner
23 | * 681 NUnit agent cannot resolve test dependency assemblies when mixed mode initialization runs in the default AppDomain
24 | * 793 Replace CoreEngine by use of Extensions
25 | * 907 Console report tests are too fragile
26 | * 922 Wrap Console in NUnitLite
27 | * 930 Switch from MSBuild based build system to Cake
28 | * 981 Define NUnit Versioning for post-3.0 Development
29 | * 1004 Poor formatting of results for Assert.AreEqual(DateTimeOffset, DateTimeOffset)
30 | * 1018 ArgumentException when 2.x version of NUnit Framework is in the bin directory
31 | * 1022 Support Comparing Unlike Collections using Is.EquivalentTo().Using(...)
32 | * 1044 Re-order Test Summary Errors/Failures
33 | * 1066 ApartmentAttribute and TestCaseAttribute(s) do not work together
34 | * 1103 Can't use TestCaseData from base class
35 | * 1109 NullReferenceException when using inherited property for ValueSource
36 | * 1113 Console runner and xml output consistency
37 | * 1117 Fix misbehaviour of Throws.Exception with non-void returning functions
38 | * 1120 NUnitProject should parse .nunit project files containing Xml Declarations
39 | * 1121 Usage of field set to null as value source leads to somewhat cryptic error
40 | * 1122 Region may be disposed before test delegate is executed
41 | * 1133 Provide a way to install extensions as nuget packages
42 | * 1136 Don't allow V2 framework to update in V2 driver tests
43 | * 1171 A bug when using Assert.That() with Is.Not.Empty
44 | * 1185 Engine finds .NET 4.0 Client Profile twice
45 | * 1187 ITestAssemblyRunner.StopRun as implemented by NUnitTestAssemblyRunner
46 | * 1195 name attribute in test-suite and test-results element of output xml is different to nunit 2.6.4 using nunit2-format
47 | * 1196 Custom value formatter for v3 via MsgUtils
48 | * 1210 Available runtimes issues
49 | * 1230 Add ability for testcasedatasource to have parameters passed to methods
50 | * 1233 Add TestAssemblyRunner tests to both portable and silverlight builds
51 | * 1234 Have default NUnitLite Runner Program.cs return exit code
52 | * 1236 Make Appveyor NuGet feed more useable
53 | * 1246 Introduce Is.Zero syntax to test for zero
54 | * 1252 Exception thrown when any assembly is not found
55 | * 1261 TypeHelper.GetDisplayName generates the wrong name for generic types with nested classes
56 | * 1278 Fix optional parameters in TestCaseAttribute
57 | * 1282 TestCase using Params Behaves Oddly
58 | * 1283 Engine should expose available frameworks.
59 | * 1286 value of the time attribute in nunit2 outputs depends on the machine culture
60 | * 1297 NUnit.Engine nuget package improvements
61 | * 1301 Assert.AreNotSame evaluates ToString unnecessarily
62 |
63 | NUnit 3.0.1 - December 1, 2015
64 |
65 | Console Runner
66 |
67 | * The Nunit.Runners NuGet package was updated to become a meta-package that pulls in the NUnit.Console package
68 | * Reinstated the --pause command line option that will display a message box allowing you to attach a debugger if the --debug option does not work
69 |
70 | Issues Resolved
71 |
72 | * 994 Add max number of Agents to the NUnit project file
73 | * 1014 Ensure NUnit API assembly updates with MSI installs
74 | * 1024 Added --pause flag to console runner
75 | * 1030 Update Nunit.Runners package to 3.0
76 | * 1033 "No arguments were provided" with Theory and Values combination
77 | * 1035 Check null arguments
78 | * 1037 Async tests not working on Windows 10 Universal
79 | * 1041 NUnit2XmlResult Writer is reporting Sucess when test fails
80 | * 1042 NUnit2 reports on 3.0 is different than 2.6.4
81 | * 1046 FloatingPointNumerics.AreAlmostEqualUlps throws OverflowException
82 | * 1049 Cannot select Generic tests from command line
83 | * 1050 Do not expose System.Runtime.CompilerServices.ExtensionAttribute to public
84 | * 1054 Create nuget feeds for CI builds on Appveyor
85 | * 1055 nunit3 console runner --where option does not return error on invalid selection string
86 | * 1060 Remove "Version 3" from NUnit Nuget Package
87 | * 1061 Nunit30Settings.xml becomes corrupted
88 | * 1062 Console.WriteLine statements in "OneTimeSetUp" and "OneTimeTearDown" annotated methods are not directed to the console when using nunit3-console.exe runner
89 | * 1063 Error in Random Test
90 |
91 | NUnit 3.0.0 Final Release - November 15, 2015
92 |
93 | Issues Resolved
94 |
95 | * 635 Mono 4.0 Support
96 |
97 | NUnit 3.0.0 Release Candidate 3 - November 13, 2015
98 |
99 | Engine
100 |
101 | * The engine now only sets the config file for project.nunit to project.config if project.config exists. Otherwise, each assembly uses its own config, provided it is run in a separate AppDomain by itself.
102 |
103 | NOTE: It is not possible for multiple assemblies in the same AppDomain to use different configs. This is not an NUnit limitation, it's just how configs work!
104 |
105 | Issues Resolved
106 |
107 | * 856 Extensions support for third party runners in NUnit 3.0
108 | * 1003 Delete TeamCityEventHandler as it is not used
109 | * 1015 Specifying .nunit project and --framework on command line causes crash
110 | * 1017 Remove Assert.Multiple from framework
111 |
112 | NUnit 3.0.0 Release Candidate 2 - November 8, 2015
113 |
114 | Engine
115 |
116 | * The IDriverFactory extensibility interface has been modified.
117 |
118 | Issues Resolved
119 |
120 | * 970 Define PARALLEL in CF build of nunitlite
121 | * 978 It should be possible to determine version of NUnit using nunit console tool
122 | * 983 Inconsistent return codes depending on ProcessModel
123 | * 986 Update docs for parallel execution
124 | * 988 Don't run portable tests from NUnit Console
125 | * 990 V2 driver is passing invalid filter elements to NUnit
126 | * 991 Mono.Options should not be exposed to public directly
127 | * 993 Give error message when a regex filter is used with NUnit V2
128 | * 997 Add missing XML Documentation
129 | * 1008 NUnitLite namespace not updated in the NuGet Packages
130 |
131 | NUnit 3.0.0 Release Candidate - November 1, 2015
132 |
133 | Framework
134 |
135 | * The portable build now supports ASP.NET 5 and the new Core CLR.
136 |
137 | NOTE: The `nunit3-console` runner cannot run tests that reference the portable build.
138 | You may run such tests using NUnitLite or a platform-specific runner.
139 |
140 | * `TestCaseAttribute` and `TestCaseData` now allow modifying the test name without replacing it entirely.
141 | * The Silverlight packages are now separate downloads.
142 |
143 | NUnitLite
144 |
145 | * The NUnitLite runner now produces the same output display and XML results as the console runner.
146 |
147 | Engine
148 |
149 | * The format of the XML result file has been finalized and documented.
150 |
151 | Console Runner
152 |
153 | * The console runner program is now called `nunit3-console`.
154 | * Console runner output has been modified so that the summary comes at the end, to reduce the need for scrolling.
155 |
156 | Issues Resolved
157 |
158 | * 59 Length of generated test names should be limited
159 | * 68 Customization of test case name generation
160 | * 404 Split tests between nunitlite.runner and nunit.framework
161 | * 575 Add support for ASP.NET 5 and the new Core CLR
162 | * 783 Package separately for Silverlight
163 | * 833 Intermittent failure of WorkItemQueueTests.StopQueue_WithWorkers
164 | * 859 NUnit-Console output - move Test Run Summary to end
165 | * 867 Remove Warnings from Ignored tests
166 | * 868 Review skipped tests
167 | * 887 Move environment and settings elements to the assembly suite in the result file
168 | * 899 Colors for ColorConsole on grey background are too light
169 | * 904 InternalPreserveStackTrace is not supported on all Portable platforms
170 | * 914 Unclear error message from console runner when assembly has no tests
171 | * 916 Console runner dies when test agent dies
172 | * 918 Console runner --where parameter is case sensitive
173 | * 920 Remove addins\nunit.engine.api.dll from NuGet package
174 | * 929 Rename nunit-console.exe
175 | * 931 Remove beta warnings from NuGet packages
176 | * 936 Explicit skipped tests not displayed
177 | * 939 Installer complains about .NET even if already installed
178 | * 940 Confirm or modify list of packages for release
179 | * 947 Breaking API change in ValueSourceAttribute
180 | * 949 Update copyright in NUnit Console
181 | * 954 NUnitLite XML output is not consistent with the engine's
182 | * 955 NUnitLite does not display the where clause
183 | * 959 Restore filter options for NUnitLite portable build
184 | * 960 Intermittent failure of CategoryFilterTests
185 | * 967 Run Settings Report is not being displayed.
186 |
187 | NUnit 3.0.0 Beta 5 - October 16, 2015
188 |
189 | Framework
190 |
191 | * Parameterized test cases now support nullable arguments.
192 | * The NUnit framework may now be built for the .NET Core framework. Note that this is only available through building the source code. A binary will be available in the next release.
193 |
194 | Engine
195 |
196 | * The engine now runs multiple test assemblies in parallel by default
197 | * The output XML now includes more information about the test run, including the text of the command used, any engine settings and the filter used to select tests.
198 | * Extensions may now specify data in an identifying attribute, for use by the engine in deciding whether to load that extension.
199 |
200 |
201 | Console Runner
202 |
203 | * The console now displays all settings used by the engine to run tests as well as the filter used to select tests.
204 | * The console runner accepts a new option --maxagents. If multiple assemblies are run in separate processes, this value may be used to limit the number that are executed simultaneously in parallel.
205 | * The console runner no longer accepts the --include and --exclude options. Instead, the new --where option provides a more general way to express which tests will be executed, such as --where "cat==Fast && Priority==High". See the docs for details of the syntax.
206 | * The new --debug option causes NUnit to break in the debugger immediately before tests are run. This simplifies debugging, especially when the test is run in a separate process.
207 |
208 | Issues Resolved
209 |
210 | * 41 Check for zeroes in Assert messages
211 | * 254 Finalize XML format for test results
212 | * 275 NUnitEqualityComparer fails to compare IEquatable where second object is derived from T
213 | * 304 Run test Assemblies in parallel
214 | * 374 New syntax for selecting tests to be run
215 | * 515 OSPlatform.IsMacOSX doesn't work
216 | * 573 nunit-console hangs on Mac OS X after all tests have run
217 | * 669 TeamCity service message should have assembly name as a part of test name.
218 | * 689 The TeamCity service message "testFinished" should have an integer value in the "duration" attribute
219 | * 713 Include command information in XML
220 | * 719 We have no way to configure tests for several assemblies using NUnit project file and the common installation from msi file
221 | * 735 Workers number in xml report file cannot be found
222 | * 784 Build Portable Framework on Linux
223 | * 790 Allow Extensions to provide data through an attribute
224 | * 794 Make it easier to debug tests as well as NUnit itself
225 | * 801 NUnit calls Dispose multiple times
226 | * 814 Support nullable types with TestCase
227 | * 818 Possible error in Merge Pull Request #797
228 | * 821 Wrapped method results in loss of result information
229 | * 822 Test for Debugger in NUnitTestAssemblyRunner probably should not be in CF build
230 | * 824 Remove unused System.Reflection using statements
231 | * 826 Randomizer uniqueness tests fail randomly!
232 | * 828 Merge pull request #827 (issue 826)
233 | * 830 Add ability to report test results synchronously to test runners
234 | * 837 Enumerators not disposed when comparing IEnumerables
235 | * 840 Add missing copyright notices
236 | * 844 Pull Request #835 (Issue #814) does not build in CF
237 | * 847 Add new --process:inprocess and --inprocess options
238 | * 850 Test runner fails if test name contains invalid xml characters
239 | * 851 'Exclude' console option is not working in NUnit Lite
240 | * 853 Cannot run NUnit Console from another directory
241 | * 860 Use CDATA section for message, stack-trace and output elements of XML
242 | * 863 Eliminate core engine
243 | * 865 Intermittent failures of StopWatchTests
244 | * 869 Tests that use directory separator char to determine platform misreport Linux on MaxOSX
245 | * 870 NUnit Console Runtime Environment misreports on MacOSX
246 | * 874 Add .NET Core Framework
247 | * 878 Cannot exclude MacOSX or XBox platforms when running on CF
248 | * 892 Fixed test runner returning early when executing more than one test run.
249 | * 894 Give nunit.engine and nunit.engine.api assemblies strong names
250 | * 896 NUnit 3.0 console runner not placing test result xml in --work directory
251 |
252 | NUnit 3.0.0 Beta 4 - August 25, 2015
253 |
254 | Framework
255 |
256 | * A new RetryAttribute allows retrying of failing tests.
257 | * New SupersetConstraint and Is.SupersetOf syntax complement SubsetConstraint.
258 | * Tests skipped due to ExplicitAttribute are now reported as skipped.
259 |
260 | Engine
261 |
262 | * We now use Cecil to examine assemblies prior to loading them.
263 | * Extensions are no longer based on Mono.Addins but use our own extension framework.
264 |
265 | Issues Resolved
266 |
267 | * 125 3rd-party dependencies should be downloaded on demand
268 | * 283 What should we do when a user extension does something bad?
269 | * 585 RetryAttribute
270 | * 642 Restructure MSBuild script
271 | * 649 Change how we zip packages
272 | * 654 ReflectionOnlyLoad and ReflectionOnlyLoadFrom
273 | * 664 Invalid "id" attribute in the report for case "test started"
274 | * 685 In the some cases when tests cannot be started NUnit returns exit code "0"
275 | * 728 Missing Assert.That overload
276 | * 741 Explicit Tests get run when using --exclude
277 | * 746 Framework should send events for all tests
278 | * 747 NUnit should apply attributes even if test is non-runnable
279 | * 749 Review Use of Mono.Addins for Engine Extensibility
280 | * 750 Include Explicit Tests in Test Results
281 | * 753 Feature request: Is.SupersetOf() assertion constraint
282 | * 755 TimeOut attribute doesn't work with TestCaseSource Attribute
283 | * 757 Implement some way to wait for execution to complete in ITestEngineRunner
284 | * 760 Packaging targets do not run on Linux
285 | * 766 Added overloads for True()/False() accepting booleans
286 | * 778 Build and build.cmd scripts invoke nuget.exe improperly
287 | * 780 Teamcity fix
288 | * 782 No sources for 2.6.4
289 |
290 | NUnit 3.0.0 Beta 3 - July 15, 2015
291 |
292 | Framework
293 |
294 | * The RangeAttribute has been extended to support more data types including
295 | uint, long and ulong
296 | * Added platform support for Windows 10 and fixed issues with Windows 8 and
297 | 8.1 support
298 | * Added async support to the portable version of NUnit Framework
299 | * The named members of the TestCaseSource and ValueSource attributes must now be
300 | static.
301 | * RandomAttribute has been extended to add support for new data types including
302 | uint, long, ulong, short, ushort, float, byte and sbyte
303 | * TestContext.Random has also been extended to add support for new data types including
304 | uint, long, ulong, short, ushort, float, byte, sbyte and decimal
305 | * Removed the dependency on Microsoft.Bcl.Async from the NUnit Framework assembly
306 | targeting .NET 4.0. If you want to write async tests in .NET 4.0, you will need
307 | to reference the NuGet package yourself.
308 | * Added a new TestFixtureSource attribute which is the equivalent to TestCaseSource
309 | but provides for instantiation of fixtures.
310 | * Significant improvements have been made in how NUnit deduces the type arguments of
311 | generic methods based on the arguments provided.
312 |
313 | Engine
314 |
315 | * If the target framework is not specified, test assemblies that are compiled
316 | to target .NET 4.5 will no longer run in .NET 4.0 compatibility mode
317 |
318 | Console
319 |
320 | * If the console is run without arguments, it will now display help
321 |
322 | Issues Resolved
323 |
324 | * 47 Extensions to RangeAttribute
325 | * 237 System.Uri .ctor works not properly under Nunit
326 | * 244 NUnit should properly distinguish between .NET 4.0 and 4.5
327 | * 310 Target framework not specified on the AppDomain when running against .Net 4.5
328 | * 321 Rationalize how we count tests
329 | * 472 Overflow exception and DivideByZero exception from the RangeAttribute
330 | * 524 int and char do not compare correctly?
331 | * 539 Truncation of string arguments
332 | * 544 AsyncTestMethodTests for 4.5 Framework fails frequently on Travis CI
333 | * 656 Unused parameter in Console.WriteLine found
334 | * 670 Failing Tests in TeamCity Build
335 | * 673 Ensure proper disposal of engine objects
336 | * 674 Engine does not release test assemblies
337 | * 679 Windows 10 Support
338 | * 682 Add Async Support to Portable Framework
339 | * 683 Make FrameworkController available in portable build
340 | * 687 TestAgency does not launch agent process correctly if runtime type is not specified (i.e. v4.0)
341 | * 692 PlatformAttribute_OperatingSystemBitNess fails when running in 32-bit process
342 | * 693 Generic Test Method cannot determine type arguments for fixture when passed as IEnumerable
343 | * 698 Require TestCaseSource and ValueSource named members to be static
344 | * 703 TeamCity non-equal flowid for 'testStarted' and 'testFinished' messages
345 | * 712 Extensions to RandomAttribute
346 | * 715 Provide a data source attribute at TestFixture Level
347 | * 718 RangeConstraint gives error with from and two args of differing types
348 | * 723 Does nunit.nuspec require dependency on Microsoft.Bcl.Async?
349 | * 724 Adds support for Nullable to Assert.IsTrue and Assert.IsFalse
350 | * 734 Console without parameters doesn't show help
351 |
352 | NUnit 3.0.0 Beta 2 - May 12, 2015
353 |
354 | Framework
355 |
356 | * The Compact Framework version of the framework is now packaged separately
357 | and will be distributed as a ZIP file and as a NuGet package.
358 | * The NUnit 2.x RepeatAttribute was added back into the framework.
359 | * Added Throws.ArgumentNullException
360 | * Added GetString methods to NUnit.Framework.Internal.RandomGenerator to
361 | create repeatable random strings for testing
362 | * When checking the equality of DateTimeOffset, you can now use the
363 | WithSameOffset modifier
364 | * Some classes intended for internal usage that were public for testing
365 | have now been made internal. Additional classes will be made internal
366 | for the final 3.0 release.
367 |
368 | Engine
369 |
370 | * Added a core engine which is a non-extensible, minimal engine for use by
371 | devices and similar situations where reduced functionality is compensated
372 | for by reduced size and simplicity of usage. See
373 | https://github.com/nunit/dev/wiki/Core-Engine for more information.
374 |
375 | Issues Resolved
376 |
377 | * 22 Add OSArchitecture Attribute to Environment node in result xml
378 | * 24 Assert on Dictionary Content
379 | * 48 Explicit seems to conflict with Ignore
380 | * 168 Create NUnit 3.0 documentation
381 | * 196 Compare DateTimeOffsets including the offset in the comparison
382 | * 217 New icon for the 3.0 release
383 | * 316 NUnitLite TextUI Runner
384 | * 320 No Tests found: Using parametrized Fixture and TestCaseSource
385 | * 360 Better exception message when using non-BCL class in property
386 | * 454 Rare registry configurations may cause NUnit to fail
387 | * 478 RepeatAttribute
388 | * 481 Testing multiple assemblies in nunitlite
389 | * 538 Potential bug using TestContext in constructors
390 | * 546 Enable Parallel in NUnitLite/CF (or more) builds
391 | * 551 TextRunner not passing the NumWorkers option to the ITestAssemblyRunner
392 | * 556 Executed tests should always return a non-zero duration
393 | * 559 Fix text of NuGet packages
394 | * 560 Fix PackageVersion property on wix install projects
395 | * 562 Program.cs in NUnitLite NuGet package is incorrect
396 | * 564 NUnitLite Nuget package is Beta 1a, Framework is Beta 1
397 | * 565 NUnitLite Nuget package adds Program.cs to a VB Project
398 | * 568 Isolate packaging from building
399 | * 570 ThrowsConstraint failure message should include stack trace of actual exception
400 | * 576 Throws.ArgumentNullException would be nice
401 | * 577 Documentation on some members of Throws falsely claims that they return `TargetInvocationException` constraints
402 | * 579 No documentation for recommended usage of TestCaseSourceAttribute
403 | * 580 TeamCity Service Message Uses Incorrect Test Name with NUnit2Driver
404 | * 582 Test Ids Are Not Unique
405 | * 583 TeamCity service messages to support parallel test execution
406 | * 584 Non-runnable assembly has incorrect ResultState
407 | * 609 Add support for integration with TeamCity
408 | * 611 Remove unused --teamcity option from CF build of NUnitLite
409 | * 612 MaxTime doesn't work when used for TestCase
410 | * 621 Core Engine
411 | * 622 nunit-console fails when use --output
412 | * 628 Modify IService interface and simplify ServiceContext
413 | * 631 Separate packaging for the compact framework
414 | * 646 ConfigurationManager.AppSettings Params Return Null under Beta 1
415 | * 648 Passing 2 or more test assemblies targeting > .NET 2.0 to nunit-console fails
416 |
417 | NUnit 3.0.0 Beta 1 - March 25, 2015
418 |
419 | General
420 |
421 | * There is now a master windows installer for the framework, engine and console runner.
422 |
423 | Framework
424 |
425 | * We no longer create a separate framework build for .NET 3.5. The 2.0 and
426 | 3.5 builds were essentially the same, so the former should now be used
427 | under both runtimes.
428 | * A new Constraint, DictionaryContainsKeyConstraint, may be used to test
429 | that a specified key is present in a dictionary.
430 | * LevelOfParallelizationAttribute has been renamed to LevelOfParallelismAttribute.
431 | * The Silverlight runner now displays output in color and includes any
432 | text output created by the tests.
433 | * The class and method names of each test are included in the output xml
434 | where applicable.
435 | * String arguments used in test case names are now truncated to 40 rather
436 | than 20 characters.
437 |
438 | Engine
439 |
440 | * The engine API has now been finalized. It permits specifying a minimum
441 | version of the engine that a runner is able to use. The best installed
442 | version of the engine will be loaded. Third-party runners may override
443 | the selection process by including a copy of the engine in their
444 | installation directory and specifying that it must be used.
445 | * The V2 framework driver now uses the event listener and test listener
446 | passed to it by the runner. This corrects several outstanding issues
447 | caused by events not being received and allows selecting V2 tests to
448 | be run from the command-line, in the same way that V3 tests are selected.
449 |
450 | Console
451 |
452 | * The console now defaults to not using shadowcopy. There is a new option
453 | --shadowcopy to turn it on if needed.
454 |
455 | Issues Resolved
456 |
457 | * 224 Silverlight Support
458 | * 318 TestActionAttribute: Retrieving the TestFixture
459 | * 428 Add ExpectedExceptionAttribute to C# samples
460 | * 440 Automatic selection of Test Engine to use
461 | * 450 Create master install that includes the framework, engine and console installs
462 | * 477 Assert does not work with ArraySegment
463 | * 482 nunit-console has multiple errors related to -framework option
464 | * 483 Adds constraint for asserting that a dictionary contains a particular key
465 | * 484 Missing file in NUnit.Console nuget package
466 | * 485 Can't run v2 tests with nunit-console 3.0
467 | * 487 NUnitLite can't load assemblies by their file name
468 | * 488 Async setup and teardown still don't work
469 | * 497 Framework installer shold register the portable framework
470 | * 504 Option --workers:0 is ignored
471 | * 508 Travis builds with failure in engine tests show as successful
472 | * 509 Under linux, not all mono profiles are listed as available
473 | * 512 Drop the .NET 3.5 build
474 | * 517 V2 FrameworkDriver does not make use of passed in TestEventListener
475 | * 523 Provide an option to disable shadowcopy in NUnit v3
476 | * 528 V2 FrameworkDriver does not make use of passed in TestFilter
477 | * 530 Color display for Silverlight runner
478 | * 531 Display text output from tests in Silverlight runner
479 | * 534 Add classname and methodname to test result xml
480 | * 541 Console help doesn't indicate defaults
481 |
482 | NUnit 3.0.0 Alpha 5 - January 30, 2015
483 |
484 | General
485 |
486 | * A Windows installer is now included in the release packages.
487 |
488 | Framework
489 |
490 | * TestCaseAttribute now allows arguments with default values to be omitted. Additionaly, it accepts a Platform property to specify the platforms on which the test case should be run.
491 | * TestFixture and TestCase attributes now enforce the requirement that a reason needs to be provided when ignoring a test.
492 | * SetUp, TearDown, OneTimeSetUp and OneTimeTearDown methods may now be async.
493 | * String arguments over 20 characters in length are truncated when used as part of a test name.
494 |
495 | Engine
496 |
497 | * The engine is now extensible using Mono.Addins. In this release, extension points are provided for FrameworkDrivers, ProjectLoaders and OutputWriters. The following addins are bundled as a part of NUnit:
498 | * A FrameworkDriver that allows running NUnit V2 tests under NUnit 3.0.
499 | * ProjectLoaders for NUnit and Visual Studio projects.
500 | * An OutputWriter that creates XML output in NUnit V2 format.
501 | * DomainUsage now defaults to Multiple if not specified by the runner
502 |
503 | Console
504 |
505 | * New options supported:
506 | * --testlist provides a list of tests to run in a file
507 | * --stoponerror indicates that the run should terminate when any test fails.
508 |
509 | Issues Resolved
510 |
511 | * 20 TestCaseAttribute needs Platform property.
512 | * 60 NUnit should support async setup, teardown, fixture setup and fixture teardown.
513 | * 257 TestCaseAttribute should not require parameters with default values to be specified.
514 | * 266 Pluggable framework drivers.
515 | * 368 Create addin model.
516 | * 369 Project loader addins
517 | * 370 OutputWriter addins
518 | * 403 Move ConsoleOptions.cs and Options.cs to Common and share...
519 | * 419 Create Windows Installer for NUnit.
520 | * 427 [TestFixture(Ignore=true)] should not be allowed.
521 | * 437 Errors in tests under Linux due to hard-coded paths.
522 | * 441 NUnit-Console should support --testlist option
523 | * 442 Add --stoponerror option back to nunit-console.
524 | * 456 Fix memory leak in RuntimeFramework.
525 | * 459 Remove the Mixed Platforms build configuration.
526 | * 468 Change default domain usage to multiple.
527 | * 469 Truncate string arguments in test names in order to limit the length.
528 |
529 | NUnit 3.0.0 Alpha 4 - December 30, 2014
530 |
531 | Framework
532 |
533 | * ApartmentAttribute has been added, replacing STAAttribute and MTAAttribute.
534 | * Unnecessary overloads of Assert.That and Assume.That have been removed.
535 | * Multiple SetUpFixtures may be specified in a single namespace.
536 | * Improvements to the Pairwise strategy test case generation algorithm.
537 | * The new NUnitLite runner --testlist option, allows a list of tests to be kept in a file.
538 |
539 | Engine
540 |
541 | * A driver is now included, which allows running NUnit 2.x tests under NUnit 3.0.
542 | * The engine can now load and run tests specified in a number of project formats:
543 | * NUnit (.nunit)
544 | * Visual Studio C# projects (.csproj)
545 | * Visual Studio F# projects (.vjsproj)
546 | * Visual Studio Visual Basic projects (.vbproj)
547 | * Visual Studio solutions (.sln)
548 | * Legacy C++ and Visual JScript projects (.csproj and .vjsproj) are also supported
549 | * Support for the current C++ format (.csxproj) is not yet available
550 | * Creation of output files like TestResult.xml in various formats is now a
551 | service of the engine, available to any runner.
552 |
553 | Console
554 |
555 | * The command-line may now include any number of assemblies and/or supported projects.
556 |
557 | Issues Resolved
558 |
559 | * 37 Multiple SetUpFixtures should be permitted on same namespace
560 | * 210 TestContext.WriteLine in an AppDomain causes an error
561 | * 227 Add support for VS projects and solutions
562 | * 231 Update C# samples to use NUnit 3.0
563 | * 233 Update F# samples to use NUnit 3.0
564 | * 234 Update C++ samples to use NUnit 3.0
565 | * 265 Reorganize console reports for nunit-console and nunitlite
566 | * 299 No full path to assembly in XML file under Compact Framework
567 | * 301 Command-line length
568 | * 363 Make Xml result output an engine service
569 | * 377 CombiningStrategyAttributes don't work correctly on generic methods
570 | * 388 Improvements to NUnitLite runner output
571 | * 390 Specify exactly what happens when a test times out
572 | * 396 ApartmentAttribute
573 | * 397 CF nunitlite runner assembly has the wrong name
574 | * 407 Assert.Pass() with ]]> in message crashes console runner
575 | * 414 Simplify Assert overloads
576 | * 416 NUnit 2.x Framework Driver
577 | * 417 Complete work on NUnit projects
578 | * 420 Create Settings file in proper location
579 |
580 | NUnit 3.0.0 Alpha 3 - November 29, 2014
581 |
582 | Breaking Changes
583 |
584 | * NUnitLite tests must reference both the nunit.framework and nunitlite assemblies.
585 |
586 | Framework
587 |
588 | * The NUnit and NUnitLite frameworks have now been merged. There is no longer any distinction
589 | between them in terms of features, although some features are not available on all platforms.
590 | * The release includes two new framework builds: compact framework 3.5 and portable. The portable
591 | library is compatible with .NET 4.5, Silverlight 5.0, Windows 8, Windows Phone 8.1,
592 | Windows Phone Silverlight 8, Mono for Android and MonoTouch.
593 | * A number of previously unsupported features are available for the Compact Framework:
594 | - Generic methods as tests
595 | - RegexConstraint
596 | - TimeoutAttribute
597 | - FileAssert, DirectoryAssert and file-related constraints
598 |
599 | Engine
600 |
601 | * The logic of runtime selection has now changed so that each assembly runs by default
602 | in a separate process using the runtime for which it was built.
603 | * On 64-bit systems, each test process is automatically created as 32-bit or 64-bit,
604 | depending on the platform specified for the test assembly.
605 |
606 | Console
607 |
608 | * The console runner now runs tests in a separate process per assembly by default. They may
609 | still be run in process or in a single separate process by use of command-line options.
610 | * The console runner now starts in the highest version of the .NET runtime available, making
611 | it simpler to debug tests by specifying that they should run in-process on the command-line.
612 | * The -x86 command-line option is provided to force execution in a 32-bit process on a 64-bit system.
613 | * A writeability check is performed for each output result file before trying to run the tests.
614 | * The -teamcity option is now supported.
615 |
616 | Issues Resolved
617 |
618 | * 12 Compact framework should support generic methods
619 | * 145 NUnit-console fails if test result message contains invalid xml characters
620 | * 155 Create utility classes for platform-specific code
621 | * 223 Common code for NUnitLite console runner and NUnit-Console
622 | * 225 Compact Framework Support
623 | * 238 Improvements to running 32 bit tests on a 64 bit system
624 | * 261 Add portable nunitlite build
625 | * 284 NUnitLite Unification
626 | * 293 CF does not have a CurrentDirectory
627 | * 306 Assure NUnit can write resultfile
628 | * 308 Early disposal of runners
629 | * 309 NUnit-Console should support incremental output under TeamCity
630 | * 325 Add RegexConstraint to compact framework build
631 | * 326 Add TimeoutAttribute to compact framework build
632 | * 327 Allow generic test methods in the compact framework
633 | * 328 Use .NET Stopwatch class for compact framework builds
634 | * 331 Alpha 2 CF does not build
635 | * 333 Add parallel execution to desktop builds of NUnitLite
636 | * 334 Include File-related constraints and syntax in NUnitLite builds
637 | * 335 Re-introduce 'Classic' NUnit syntax in NUnitLite
638 | * 336 Document use of separate obj directories per build in our projects
639 | * 337 Update Standard Defines page for .NET 3.0
640 | * 341 Move the NUnitLite runners to separate assemblies
641 | * 367 Refactor XML Escaping Tests
642 | * 372 CF Build TestAssemblyRunnerTests
643 | * 373 Minor CF Test Fixes
644 | * 378 Correct documentation for PairwiseAttribute
645 | * 386 Console Output Improvements
646 |
647 | NUnit 3.0.0 Alpha 2 - November 2, 2014
648 |
649 | Breaking Changes
650 |
651 | * The console runner no longer displays test results in the debugger.
652 | * The NUnitLite compact framework 2.0 build has been removed.
653 | * All addin support has been removed from the framework. Documentation of NUnit 3.0 extensibility features will be published in time for the beta release. In the interim, please ask for support on the nunit-discuss list.
654 |
655 | General
656 |
657 | * A separate solution has been created for Linux
658 | * We now have continuous integration builds under both Travis and Appveyor
659 | * The compact framework 3.5 build is now working and will be supported in future releases.
660 |
661 | New Features
662 |
663 | * The console runner now automatically detects 32- versus 64-bit test assemblies.
664 | * The NUnitLite report output has been standardized to match that of nunit-console.
665 | * The NUnitLite command-line has been standardized to match that of nunit-console where they share the same options.
666 | * Both nunit-console and NUnitLite now display output in color.
667 | * ActionAttributes now allow specification of multiple targets on the attribute as designed. This didn't work in the first alpha.
668 | * OneTimeSetUp and OneTimeTearDown failures are now shown on the test report. Individual test failures after OneTimeSetUp failure are no longer shown.
669 | * The console runner refuses to run tests build with older versions of NUnit. A plugin will be available to run older tests in the future.
670 |
671 | Issues Resolved
672 |
673 | * 222 Color console for NUnitLite
674 | * 229 Timing failures in tests
675 | * 241 Remove reference to Microslft BCL packages
676 | * 243 Create solution for Linux
677 | * 245 Multiple targets on action attributes not implemented
678 | * 246 C++ tests do not compile in VS2013
679 | * 247 Eliminate trace display when running tests in debug
680 | * 255 Add new result states for more precision in where failures occur
681 | * 256 ContainsConstraint break when used with AndConstraint
682 | * 264 Stacktrace displays too many entries
683 | * 269 Add manifest to nunit-console and nunit-agent
684 | * 270 OneTimeSetUp failure results in too much output
685 | * 271 Invalid tests should be treated as errors
686 | * 274 Command line options should be case insensitive
687 | * 276 NUnit-console should not reference nunit.framework
688 | * 278 New result states (ChildFailure and SetupFailure) break NUnit2XmlOutputWriter
689 | * 282 Get tests for NUnit2XmlOutputWriter working
690 | * 288 Set up Appveyor CI build
691 | * 290 Stack trace still displays too many items
692 | * 315 NUnit 3.0 alpha: Cannot run in console on my assembly
693 | * 319 CI builds are not treating test failures as failures of the build
694 | * 322 Remove Stopwatch tests where they test the real .NET Stopwatch
695 |
696 | NUnit 3.0.0 Alpha 1 - September 22, 2014
697 |
698 | Breaking Changes
699 |
700 | * Legacy suites are no longer supported
701 | * Assert.NullOrEmpty is no longer supported (Use Is.Null.Or.Empty)
702 |
703 | General
704 |
705 | * MsBuild is now used for the build rather than NAnt
706 | * The framework test harness has been removed now that nunit-console is at a point where it can run the tests.
707 |
708 | New Features
709 |
710 | * Action Attributes have been added with the same features as in NUnit 2.6.3.
711 | * TestContext now has a method that allows writing to the XML output.
712 | * TestContext.CurrentContext.Result now provides the error message and stack trace during teardown.
713 | * Does prefix operator supplies several added constraints.
714 |
715 | Issues Resolved
716 |
717 | * 6 Log4net not working with NUnit
718 | * 13 Standardize commandline options for nunitlite runner
719 | * 17 No allowance is currently made for nullable arguents in TestCase parameter conversions
720 | * 33 TestCaseSource cannot refer to a parameterized test fixture
721 | * 54 Store message and stack trace in TestContext for use in TearDown
722 | * 111 Implement Changes to File, Directory and Path Assertions
723 | * 112 Implement Action Attributes
724 | * 156 Accessing multiple AppDomains within unit tests result in SerializationException
725 | * 163 Add --trace option to NUnitLite
726 | * 167 Create interim documentation for the alpha release
727 | * 169 Design and implement distribution of NUnit packages
728 | * 171 Assert.That should work with any lambda returning bool
729 | * 175 Test Harness should return an error if any tests fail
730 | * 180 Errors in Linux CI build
731 | * 181 Replace NAnt with MsBuild / XBuild
732 | * 183 Standardize commandline options for test harness
733 | * 188 No output from NUnitLite when selected test is not found
734 | * 189 Add string operators to Does prefix
735 | * 193 TestWorkerTests.BusyExecutedIdleEventsCalledInSequence fails occasionally
736 | * 197 Deprecate or remove Assert.NullOrEmpty
737 | * 202 Eliminate legacy suites
738 | * 203 Combine framework, engine and console runner in a single solution and repository
739 | * 209 Make Ignore attribute's reason mandatory
740 | * 215 Running 32-bit tests on a 64-bit OS
741 | * 219 Teardown failures are not reported
742 |
743 | Console Issues Resolved (Old nunit-console project, now combined with nunit)
744 |
745 | * 2 Failure in TestFixtureSetUp is not reported correctly
746 | * 5 CI Server for nunit-console
747 | * 6 System.NullReferenceException on start nunit-console-x86
748 | * 21 NUnitFrameworkDriverTests fail if not run from same directory
749 | * 24 'Debug' value for /trace option is deprecated in 2.6.3
750 | * 38 Confusing Excluded categories output
751 |
752 | NUnit 2.9.7 - August 8, 2014
753 |
754 | Breaking Changes
755 |
756 | * NUnit no longer supports void async test methods. You should use a Task return Type instead.
757 | * The ExpectedExceptionAttribute is no longer supported. Use Assert.Throws() or Assert.That(..., Throws) instead for a more precise specification of where the exception is expected to be thrown.
758 |
759 | New Features
760 |
761 | * Parallel test execution is supported down to the Fixture level. Use ParallelizableAttribute to indicate types that may be run in parallel.
762 | * Async tests are supported for .NET 4.0 if the user has installed support for them.
763 | * A new FileExistsConstraint has been added along with FileAssert.Exists and FileAssert.DoesNotExist
764 | * ExpectedResult is now supported on simple (non-TestCase) tests.
765 | * The Ignore attribute now takes a named parameter Until, which allows specifying a date after which the test is no longer ignored.
766 | * The following new values are now recognized by PlatformAttribute: Win7, Win8, Win8.1, Win2012Server, Win2012ServerR2, NT6.1, NT6.2, 32-bit, 64-bit
767 | * TimeoutAttribute is now supported under Silverlight
768 | * ValuesAttribute may be used without any values on an enum or boolean argument. All possible values are used.
769 | * You may now specify a tolerance using Within when testing equality of DateTimeOffset values.
770 | * The XML output now includes a start and end time for each test.
771 |
772 | Issues Resolved
773 |
774 | * 8 [SetUpFixture] is not working as expected
775 | * 14 CI Server for NUnit Framework
776 | * 21 Is.InRange Constraint Ambiguity
777 | * 27 Values attribute support for enum types
778 | * 29 Specifying a tolerance with "Within" doesn't work for DateTimeOffset data types
779 | * 31 Report start and end time of test execution
780 | * 36 Make RequiresThread, RequiresSTA, RequiresMTA inheritable
781 | * 45 Need of Enddate together with Ignore
782 | * 55 Incorrect XML comments for CollectionAssert.IsSubsetOf
783 | * 62 Matches(Constraint) does not work as expected
784 | * 63 Async support should handle Task return type without state machine
785 | * 64 AsyncStateMachineAttribute should only be checked by name
786 | * 65 Update NUnit Wiki to show the new location of samples
787 | * 66 Parallel Test Execution within test assemblies
788 | * 67 Allow Expected Result on simple tests
789 | * 70 EquivalentTo isn't compatible with IgnoreCase for dictioneries
790 | * 75 Async tests should be supported for projects that target .NET 4.0
791 | * 82 nunit-framework tests are timing out on Linux
792 | * 83 Path-related tests fail on Linux
793 | * 85 Culture-dependent NUnit tests fail on non-English machine
794 | * 88 TestCaseSourceAttribute documentation
795 | * 90 EquivalentTo isn't compatible with IgnoreCase for char
796 | * 100 Changes to Tolerance definitions
797 | * 110 Add new platforms to PlatformAttribute
798 | * 113 Remove ExpectedException
799 | * 118 Workarounds for missing InternalPreserveStackTrace in mono
800 | * 121 Test harness does not honor the --worker option when set to zero
801 | * 129 Standardize Timeout in the Silverlight build
802 | * 130 Add FileAssert.Exists and FileAssert.DoesNotExist
803 | * 132 Drop support for void async methods
804 | * 153 Surprising behavior of DelayedConstraint pollingInterval
805 | * 161 Update API to support stopping an ongoing test run
806 |
807 | NOTE: Bug Fixes below this point refer to the number of the bug in Launchpad.
808 |
809 | NUnit 2.9.6 - October 4, 2013
810 |
811 | Main Features
812 |
813 | * Separate projects for nunit-console and nunit.engine
814 | * New builds for .NET 4.5 and Silverlight
815 | * TestContext is now supported
816 | * External API is now stable; internal interfaces are separate from API
817 | * Tests may be run in parallel on separate threads
818 | * Solutions and projects now use VS2012 (except for Compact framework)
819 |
820 | Bug Fixes
821 |
822 | * 463470 We should encapsulate references to pre-2.0 collections
823 | * 498690 Assert.That() doesn't like properties with scoped setters
824 | * 501784 Theory tests do not work correctly when using null parameters
825 | * 531873 Feature: Extraction of unit tests from NUnit test assembly and calling appropriate one
826 | * 611325 Allow Teardown to detect if last test failed
827 | * 611938 Generic Test Instances disappear
828 | * 655882 Make CategoryAttribute inherited
829 | * 664081 Add Server2008 R2 and Windows 7 to PlatformAttribute
830 | * 671432 Upgrade NAnt to Latest Release
831 | * 676560 Assert.AreEqual does not support IEquatable
832 | * 691129 Add Category parameter to TestFixture
833 | * 697069 Feature request: dynamic location for TestResult.xml
834 | * 708173 NUnit's logic for comparing arrays - use Comparer if it is provided
835 | * 709062 "System.ArgumentException : Cannot compare" when the element is a list
836 | * 712156 Tests cannot use AppDomain.SetPrincipalPolicy
837 | * 719184 Platformdependency in src/ClientUtilities/util/Services/DomainManager.cs:40
838 | * 719187 Using Path.GetTempPath() causes conflicts in shared temporary folders
839 | * 735851 Add detection of 3.0, 3.5 and 4.0 frameworks to PlatformAttribute
840 | * 736062 Deadlock when EventListener performs a Trace call + EventPump synchronisation
841 | * 756843 Failing assertion does not show non-linear tolerance mode
842 | * 766749 net-2.0\nunit-console-x86.exe.config should have a element and also enable loadFromRemoteSources
843 | * 770471 Assert.IsEmpty does not support IEnumerable
844 | * 785460 Add Category parameter to TestCaseSourceAttribute
845 | * 787106 EqualConstraint provides inadequate failure information for IEnumerables
846 | * 792466 TestContext MethodName
847 | * 794115 HashSet incorrectly reported
848 | * 800089 Assert.Throws() hides details of inner AssertionException
849 | * 848713 Feature request: Add switch for console to break on any test case error
850 | * 878376 Add 'Exactly(n)' to the NUnit constraint syntax
851 | * 882137 When no tests are run, higher level suites display as Inconclusive
852 | * 882517 NUnit 2.5.10 doesn't recognize TestFixture if there are only TestCaseSource inside
853 | * 885173 Tests are still executed after cancellation by user
854 | * 885277 Exception when project calls for a runtime using only 2 digits
855 | * 885604 Feature request: Explicit named parameter to TestCaseAttribute
856 | * 890129 DelayedConstraint doesn't appear to poll properties of objects
857 | * 892844 Not using Mono 4.0 profile under Windows
858 | * 893919 DelayedConstraint fails polling properties on references which are initially null
859 | * 896973 Console output lines are run together under Linux
860 | * 897289 Is.Empty constraint has unclear failure message
861 | * 898192 Feature Request: Is.Negative, Is.Positive
862 | * 898256 IEnumerable for Datapoints doesn't work
863 | * 899178 Wrong failure message for parameterized tests that expect exceptions
864 | * 904841 After exiting for timeout the teardown method is not executed
865 | * 908829 TestCase attribute does not play well with variadic test functions
866 | * 910218 NUnit should add a trailing separator to the ApplicationBase
867 | * 920472 CollectionAssert.IsNotEmpty must dispose Enumerator
868 | * 922455 Add Support for Windows 8 and Windows 2012 Server to PlatformAttribute
869 | * 928246 Use assembly.Location instead of assembly.CodeBase
870 | * 958766 For development work under TeamCity, we need to support nunit2 formatted output under direct-runner
871 | * 1000181 Parameterized TestFixture with System.Type as constructor arguments fails
872 | * 1000213 Inconclusive message Not in report output
873 | * 1023084 Add Enum support to RandomAttribute
874 | * 1028188 Add Support for Silverlight
875 | * 1029785 Test loaded from remote folder failed to run with exception System.IODirectory
876 | * 1037144 Add MonoTouch support to PlatformAttribute
877 | * 1041365 Add MaxOsX and Xbox support to platform attribute
878 | * 1057981 C#5 async tests are not supported
879 | * 1060631 Add .NET 4.5 build
880 | * 1064014 Simple async tests should not return Task
881 | * 1071164 Support async methods in usage scenarios of Throws constraints
882 | * 1071343 Runner.Load fails on CF if the test assembly contains a generic method
883 | * 1071861 Error in Path Constraints
884 | * 1072379 Report test execution time at a higher resolution
885 | * 1074568 Assert/Assume should support an async method for the ActualValueDelegate
886 | * 1082330 Better Exception if SetCulture attribute is applied multiple times
887 | * 1111834 Expose Random Object as part of the test context
888 | * 1111838 Include Random Seed in Test Report
889 | * 1172979 Add Category Support to nunitlite Runner
890 | * 1203361 Randomizer uniqueness tests sometimes fail
891 | * 1221712 When non-existing test method is specified in -test, result is still "Tests run: 1, Passed: 1"
892 | * 1223294 System.NullReferenceException thrown when ExpectedExceptionAttribute is used in a static class
893 | * 1225542 Standardize commandline options for test harness
894 |
895 | Bug Fixes in 2.9.6 But Not Listed Here in the Release
896 |
897 | * 541699 Silverlight Support
898 | * 1222148 /framework switch does not recognize net-4.5
899 | * 1228979 Theories with all test cases inconclusive are not reported as failures
900 |
901 |
902 | NUnit 2.9.5 - July 30, 2010
903 |
904 | Bug Fixes
905 |
906 | * 483836 Allow non-public test fixtures consistently
907 | * 487878 Tests in generic class without proper TestFixture attribute should be invalid
908 | * 498656 TestCase should show array values in GUI
909 | * 513989 Is.Empty should work for directories
910 | * 519912 Thread.CurrentPrincipal Set In TestFixtureSetUp Not Maintained Between Tests
911 | * 532488 constraints from ConstraintExpression/ConstraintBuilder are not reusable
912 | * 590717 categorie contains dash or trail spaces is not selectable
913 | * 590970 static TestFixtureSetUp/TestFixtureTearDown methods in base classes are not run
914 | * 595683 NUnit console runner fails to load assemblies
915 | * 600627 Assertion message formatted poorly by PropertyConstraint
916 | * 601108 Duplicate test using abstract test fixtures
917 | * 601645 Parametered test should try to convert data type from source to parameter
918 | * 605432 ToString not working properly for some properties
919 | * 606548 Deprecate Directory Assert in 2.5 and remove it in 3.0
920 | * 608875 NUnit Equality Comparer incorrectly defines equality for Dictionary objects
921 |
922 | NUnit 2.9.4 - May 4, 2010
923 |
924 | Bug Fixes
925 |
926 | * 419411 Fixture With No Tests Shows as Non-Runnable
927 | * 459219 Changes to thread princpal cause failures under .NET 4.0
928 | * 459224 Culture test failure under .NET 4.0
929 | * 462019 Line endings needs to be better controlled in source
930 | * 462418 Assume.That() fails if I specify a message
931 | * 483845 TestCase expected return value cannot be null
932 | * 488002 Should not report tests in abstract class as invalid
933 | * 490679 Category in TestCaseData clashes with Category on ParameterizedMethodSuite
934 | * 501352 VS2010 projects have not been updated for new directory structure
935 | * 504018 Automatic Values For Theory Test Parameters Not Provided For bool And enum
936 | * 505899 'Description' parameter in both TestAttribute and TestCaseAttribute is not allowed
937 | * 523335 TestFixtureTearDown in static class not executed
938 | * 556971 Datapoint(s)Attribute should work on IEnumerable as well as on Arrays
939 | * 561436 SetCulture broken with 2.5.4
940 | * 563532 DatapointsAttribute should be allowed on properties and methods
941 |
942 | NUnit 2.9.3 - October 26, 2009
943 |
944 | Main Features
945 |
946 | * Created new API for controlling framework
947 | * New builds for .Net 3.5 and 4.0, compact framework 3.5
948 | * Support for old style tests has been removed
949 | * New adhoc runner for testing the framework
950 |
951 | Bug Fixes
952 |
953 | * 432805 Some Framework Tests don't run on Linux
954 | * 440109 Full Framework does not support "Contains"
955 |
956 | NUnit 2.9.2 - September 19, 2009
957 |
958 | Main Features
959 |
960 | * NUnitLite code is now merged with NUnit
961 | * Added NUnitLite runner to the framework code
962 | * Added Compact framework builds
963 |
964 | Bug Fixes
965 |
966 | * 430100 Assert.Catch should return T
967 | * 432566 NUnitLite shows empty string as argument
968 | * 432573 Mono test should be at runtime
969 |
970 | NUnit 2.9.1 - August 27, 2009
971 |
972 | General
973 |
974 | * Created a separate project for the framework and framework tests
975 | * Changed license to MIT / X11
976 | * Created Windows installer for the framework
977 |
978 | Bug Fixes
979 |
980 | * 400502 NUnitEqualityComparer.StreamsEqual fails for same stream
981 | * 400508 TestCaseSource attirbute is not working when Type is given
982 | * 400510 TestCaseData variable length ctor drops values
983 | * 417557 Add SetUICultureAttribute from NUnit 2.5.2
984 | * 417559 Add Ignore to TestFixture, TestCase and TestCaseData
985 | * 417560 Merge Assert.Throws and Assert.Catch changes from NUnit 2.5.2
986 | * 417564 TimeoutAttribute on Assembly
987 |
--------------------------------------------------------------------------------
/packages/NUnit.ConsoleRunner.3.2.0/LICENSE.txt:
--------------------------------------------------------------------------------
1 | Copyright (c) 2016 Charlie Poole
2 |
3 | Permission is hereby granted, free of charge, to any person obtaining a copy
4 | of this software and associated documentation files (the "Software"), to deal
5 | in the Software without restriction, including without limitation the rights
6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7 | copies of the Software, and to permit persons to whom the Software is
8 | furnished to do so, subject to the following conditions:
9 |
10 | The above copyright notice and this permission notice shall be included in
11 | all copies or substantial portions of the Software.
12 |
13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19 | THE SOFTWARE.
20 |
21 |
--------------------------------------------------------------------------------
/packages/NUnit.ConsoleRunner.3.2.0/NOTICES.txt:
--------------------------------------------------------------------------------
1 | NUnit 3.0 is based on earlier versions of NUnit, with Portions
2 |
3 | Copyright (c) 2002-2014 Charlie Poole or
4 | Copyright (c) 2002-2004 James W. Newkirk, Michael C. Two, Alexei A. Vorontsov or
5 | Copyright (c) 2000-2002 Philip A. Craig
6 |
--------------------------------------------------------------------------------
/packages/NUnit.ConsoleRunner.3.2.0/NUnit.ConsoleRunner.3.2.0.nupkg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kreynes/ChirpAPI/345d1789e0f75c9bcaeeaefca9cd0a7b478bdbd7/packages/NUnit.ConsoleRunner.3.2.0/NUnit.ConsoleRunner.3.2.0.nupkg
--------------------------------------------------------------------------------
/packages/NUnit.ConsoleRunner.3.2.0/tools/Mono.Cecil.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kreynes/ChirpAPI/345d1789e0f75c9bcaeeaefca9cd0a7b478bdbd7/packages/NUnit.ConsoleRunner.3.2.0/tools/Mono.Cecil.dll
--------------------------------------------------------------------------------
/packages/NUnit.ConsoleRunner.3.2.0/tools/nunit-agent-x86.exe:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kreynes/ChirpAPI/345d1789e0f75c9bcaeeaefca9cd0a7b478bdbd7/packages/NUnit.ConsoleRunner.3.2.0/tools/nunit-agent-x86.exe
--------------------------------------------------------------------------------
/packages/NUnit.ConsoleRunner.3.2.0/tools/nunit-agent-x86.exe.config:
--------------------------------------------------------------------------------
1 |
2 |
3 |
9 |
10 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
--------------------------------------------------------------------------------
/packages/NUnit.ConsoleRunner.3.2.0/tools/nunit-agent.exe:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kreynes/ChirpAPI/345d1789e0f75c9bcaeeaefca9cd0a7b478bdbd7/packages/NUnit.ConsoleRunner.3.2.0/tools/nunit-agent.exe
--------------------------------------------------------------------------------
/packages/NUnit.ConsoleRunner.3.2.0/tools/nunit-agent.exe.config:
--------------------------------------------------------------------------------
1 |
2 |
3 |
9 |
10 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
--------------------------------------------------------------------------------
/packages/NUnit.ConsoleRunner.3.2.0/tools/nunit.engine.api.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kreynes/ChirpAPI/345d1789e0f75c9bcaeeaefca9cd0a7b478bdbd7/packages/NUnit.ConsoleRunner.3.2.0/tools/nunit.engine.api.dll
--------------------------------------------------------------------------------
/packages/NUnit.ConsoleRunner.3.2.0/tools/nunit.engine.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kreynes/ChirpAPI/345d1789e0f75c9bcaeeaefca9cd0a7b478bdbd7/packages/NUnit.ConsoleRunner.3.2.0/tools/nunit.engine.dll
--------------------------------------------------------------------------------
/packages/NUnit.ConsoleRunner.3.2.0/tools/nunit.nuget.addins:
--------------------------------------------------------------------------------
1 | ../../NUnit.Extension.*/tools/
2 |
--------------------------------------------------------------------------------
/packages/NUnit.ConsoleRunner.3.2.0/tools/nunit3-console.exe:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kreynes/ChirpAPI/345d1789e0f75c9bcaeeaefca9cd0a7b478bdbd7/packages/NUnit.ConsoleRunner.3.2.0/tools/nunit3-console.exe
--------------------------------------------------------------------------------
/packages/NUnit.ConsoleRunner.3.2.0/tools/nunit3-console.exe.config:
--------------------------------------------------------------------------------
1 |
2 |
3 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/packages/NUnit.Extension.NUnitProjectLoader.3.2.0/LICENSE.txt:
--------------------------------------------------------------------------------
1 | Copyright (c) 2016 Charlie Poole
2 |
3 | Permission is hereby granted, free of charge, to any person obtaining a copy
4 | of this software and associated documentation files (the "Software"), to deal
5 | in the Software without restriction, including without limitation the rights
6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7 | copies of the Software, and to permit persons to whom the Software is
8 | furnished to do so, subject to the following conditions:
9 |
10 | The above copyright notice and this permission notice shall be included in
11 | all copies or substantial portions of the Software.
12 |
13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19 | THE SOFTWARE.
20 |
21 |
--------------------------------------------------------------------------------
/packages/NUnit.Extension.NUnitProjectLoader.3.2.0/NOTICES.txt:
--------------------------------------------------------------------------------
1 | NUnit 3.0 is based on earlier versions of NUnit, with Portions
2 |
3 | Copyright (c) 2002-2014 Charlie Poole or
4 | Copyright (c) 2002-2004 James W. Newkirk, Michael C. Two, Alexei A. Vorontsov or
5 | Copyright (c) 2000-2002 Philip A. Craig
6 |
--------------------------------------------------------------------------------
/packages/NUnit.Extension.NUnitProjectLoader.3.2.0/NUnit.Extension.NUnitProjectLoader.3.2.0.nupkg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kreynes/ChirpAPI/345d1789e0f75c9bcaeeaefca9cd0a7b478bdbd7/packages/NUnit.Extension.NUnitProjectLoader.3.2.0/NUnit.Extension.NUnitProjectLoader.3.2.0.nupkg
--------------------------------------------------------------------------------
/packages/NUnit.Extension.NUnitProjectLoader.3.2.0/tools/nunit-project-loader.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kreynes/ChirpAPI/345d1789e0f75c9bcaeeaefca9cd0a7b478bdbd7/packages/NUnit.Extension.NUnitProjectLoader.3.2.0/tools/nunit-project-loader.dll
--------------------------------------------------------------------------------
/packages/NUnit.Extension.NUnitV2Driver.3.2.0/LICENSE.txt:
--------------------------------------------------------------------------------
1 | Copyright (c) 2016 Charlie Poole
2 |
3 | Permission is hereby granted, free of charge, to any person obtaining a copy
4 | of this software and associated documentation files (the "Software"), to deal
5 | in the Software without restriction, including without limitation the rights
6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7 | copies of the Software, and to permit persons to whom the Software is
8 | furnished to do so, subject to the following conditions:
9 |
10 | The above copyright notice and this permission notice shall be included in
11 | all copies or substantial portions of the Software.
12 |
13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19 | THE SOFTWARE.
20 |
21 |
--------------------------------------------------------------------------------
/packages/NUnit.Extension.NUnitV2Driver.3.2.0/NOTICES.txt:
--------------------------------------------------------------------------------
1 | NUnit 3.0 is based on earlier versions of NUnit, with Portions
2 |
3 | Copyright (c) 2002-2014 Charlie Poole or
4 | Copyright (c) 2002-2004 James W. Newkirk, Michael C. Two, Alexei A. Vorontsov or
5 | Copyright (c) 2000-2002 Philip A. Craig
6 |
--------------------------------------------------------------------------------
/packages/NUnit.Extension.NUnitV2Driver.3.2.0/NUnit.Extension.NUnitV2Driver.3.2.0.nupkg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kreynes/ChirpAPI/345d1789e0f75c9bcaeeaefca9cd0a7b478bdbd7/packages/NUnit.Extension.NUnitV2Driver.3.2.0/NUnit.Extension.NUnitV2Driver.3.2.0.nupkg
--------------------------------------------------------------------------------
/packages/NUnit.Extension.NUnitV2Driver.3.2.0/tools/nunit.core.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kreynes/ChirpAPI/345d1789e0f75c9bcaeeaefca9cd0a7b478bdbd7/packages/NUnit.Extension.NUnitV2Driver.3.2.0/tools/nunit.core.dll
--------------------------------------------------------------------------------
/packages/NUnit.Extension.NUnitV2Driver.3.2.0/tools/nunit.core.interfaces.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kreynes/ChirpAPI/345d1789e0f75c9bcaeeaefca9cd0a7b478bdbd7/packages/NUnit.Extension.NUnitV2Driver.3.2.0/tools/nunit.core.interfaces.dll
--------------------------------------------------------------------------------
/packages/NUnit.Extension.NUnitV2Driver.3.2.0/tools/nunit.v2.driver.addins:
--------------------------------------------------------------------------------
1 | nunit.v2.driver.dll
2 |
--------------------------------------------------------------------------------
/packages/NUnit.Extension.NUnitV2Driver.3.2.0/tools/nunit.v2.driver.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kreynes/ChirpAPI/345d1789e0f75c9bcaeeaefca9cd0a7b478bdbd7/packages/NUnit.Extension.NUnitV2Driver.3.2.0/tools/nunit.v2.driver.dll
--------------------------------------------------------------------------------
/packages/NUnit.Extension.NUnitV2ResultWriter.3.2.0/LICENSE.txt:
--------------------------------------------------------------------------------
1 | Copyright (c) 2016 Charlie Poole
2 |
3 | Permission is hereby granted, free of charge, to any person obtaining a copy
4 | of this software and associated documentation files (the "Software"), to deal
5 | in the Software without restriction, including without limitation the rights
6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7 | copies of the Software, and to permit persons to whom the Software is
8 | furnished to do so, subject to the following conditions:
9 |
10 | The above copyright notice and this permission notice shall be included in
11 | all copies or substantial portions of the Software.
12 |
13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19 | THE SOFTWARE.
20 |
21 |
--------------------------------------------------------------------------------
/packages/NUnit.Extension.NUnitV2ResultWriter.3.2.0/NOTICES.txt:
--------------------------------------------------------------------------------
1 | NUnit 3.0 is based on earlier versions of NUnit, with Portions
2 |
3 | Copyright (c) 2002-2014 Charlie Poole or
4 | Copyright (c) 2002-2004 James W. Newkirk, Michael C. Two, Alexei A. Vorontsov or
5 | Copyright (c) 2000-2002 Philip A. Craig
6 |
--------------------------------------------------------------------------------
/packages/NUnit.Extension.NUnitV2ResultWriter.3.2.0/NUnit.Extension.NUnitV2ResultWriter.3.2.0.nupkg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kreynes/ChirpAPI/345d1789e0f75c9bcaeeaefca9cd0a7b478bdbd7/packages/NUnit.Extension.NUnitV2ResultWriter.3.2.0/NUnit.Extension.NUnitV2ResultWriter.3.2.0.nupkg
--------------------------------------------------------------------------------
/packages/NUnit.Extension.NUnitV2ResultWriter.3.2.0/tools/nunit-v2-result-writer.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kreynes/ChirpAPI/345d1789e0f75c9bcaeeaefca9cd0a7b478bdbd7/packages/NUnit.Extension.NUnitV2ResultWriter.3.2.0/tools/nunit-v2-result-writer.dll
--------------------------------------------------------------------------------
/packages/NUnit.Extension.VSProjectLoader.3.2.0/LICENSE.txt:
--------------------------------------------------------------------------------
1 | Copyright (c) 2016 Charlie Poole
2 |
3 | Permission is hereby granted, free of charge, to any person obtaining a copy
4 | of this software and associated documentation files (the "Software"), to deal
5 | in the Software without restriction, including without limitation the rights
6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7 | copies of the Software, and to permit persons to whom the Software is
8 | furnished to do so, subject to the following conditions:
9 |
10 | The above copyright notice and this permission notice shall be included in
11 | all copies or substantial portions of the Software.
12 |
13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19 | THE SOFTWARE.
20 |
21 |
--------------------------------------------------------------------------------
/packages/NUnit.Extension.VSProjectLoader.3.2.0/NOTICES.txt:
--------------------------------------------------------------------------------
1 | NUnit 3.0 is based on earlier versions of NUnit, with Portions
2 |
3 | Copyright (c) 2002-2014 Charlie Poole or
4 | Copyright (c) 2002-2004 James W. Newkirk, Michael C. Two, Alexei A. Vorontsov or
5 | Copyright (c) 2000-2002 Philip A. Craig
6 |
--------------------------------------------------------------------------------
/packages/NUnit.Extension.VSProjectLoader.3.2.0/NUnit.Extension.VSProjectLoader.3.2.0.nupkg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kreynes/ChirpAPI/345d1789e0f75c9bcaeeaefca9cd0a7b478bdbd7/packages/NUnit.Extension.VSProjectLoader.3.2.0/NUnit.Extension.VSProjectLoader.3.2.0.nupkg
--------------------------------------------------------------------------------
/packages/NUnit.Extension.VSProjectLoader.3.2.0/tools/vs-project-loader.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kreynes/ChirpAPI/345d1789e0f75c9bcaeeaefca9cd0a7b478bdbd7/packages/NUnit.Extension.VSProjectLoader.3.2.0/tools/vs-project-loader.dll
--------------------------------------------------------------------------------
/packages/repositories.config:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------