/// <summary> /// Determines whether the specified <see cref="System.Object"/> is /// equal to this instance. /// </summary> /// <param name="obj">The <see cref="System.Object"/> to compare with /// this instance.</param> /// <returns> /// Value of <c>true</c> if the specified <see cref="System.Object"/> /// is equal to this instance; otherwise, <c>false</c>. /// </returns> /// <exception cref="T:System.NullReferenceException"> /// The <paramref name="obj"/> parameter is null. /// </exception> public override bool Equals(object obj) { LineEndingMode other = obj as LineEndingMode; if ((object)other == null) { return(false); } return(this.NewLineCharacters == other.NewLineCharacters); }
/// <summary> /// Converts the given object to the type of this converter, using the specified context and culture information. /// </summary> /// <returns> /// An <see cref="T:System.Object"/> that represents the converted value. /// </returns> /// <param name="context">An <see cref="T:System.ComponentModel.ITypeDescriptorContext"/> that provides a format context. </param><param name="culture">The <see cref="T:System.Globalization.CultureInfo"/> to use as the current culture. </param><param name="value">The <see cref="T:System.Object"/> to convert. </param><exception cref="T:System.NotSupportedException">The conversion cannot be performed. </exception> public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value) { var name = value as string; return(name != null?LineEndingMode.FromString(name) : base.ConvertFrom(context, culture, value)); }
private void HappyPathTest(bool newLine, LineEndingMode lineEnding, params string[] messages) { var senderFactory = new MySenderFactory(); var target = new NetworkTarget(); target.Address = "tcp://someaddress/"; target.SenderFactory = senderFactory; target.Layout = "${message}"; target.NewLine = newLine; target.LineEnding = lineEnding; target.KeepConnection = true; target.Initialize(null); var exceptions = new List<Exception>(); var mre = new ManualResetEvent(false); int remaining = 3; AsyncContinuation asyncContinuation = ex => { lock (exceptions) { exceptions.Add(ex); if (--remaining == 0) { mre.Set(); } } }; target.WriteAsyncLogEvent(new LogEventInfo(LogLevel.Info, "logger", "msg1").WithContinuation(asyncContinuation)); target.WriteAsyncLogEvent(new LogEventInfo(LogLevel.Info, "logger", "msg2").WithContinuation(asyncContinuation)); target.WriteAsyncLogEvent(new LogEventInfo(LogLevel.Info, "logger", "msg3").WithContinuation(asyncContinuation)); mre.WaitOne(); foreach (var ex in exceptions) { if (ex != null) { Assert.True(false, ex.ToString()); } } Assert.Equal(1, senderFactory.Senders.Count); var sender = senderFactory.Senders[0]; target.Close(); // Get the length of all the messages and their line endings var eol = newLine ? lineEnding.NewLineCharacters : string.Empty; var eolLength = eol.Length; var length = messages.Sum(m => m.Length) + (eolLength * messages.Length); Assert.Equal(length, sender.MemoryStream.Length); Assert.Equal(string.Join(eol, messages) + eol, target.Encoding.GetString(sender.MemoryStream.GetBuffer(), 0, (int)sender.MemoryStream.Length)); // we invoke the sender for each message, each time sending 4 bytes var actual = senderFactory.Log.ToString(); Assert.True(actual.IndexOf("1: connect tcp://someaddress/") != -1); foreach (var message in messages) { Assert.True(actual.IndexOf(string.Format("1: send 0 {0}", message.Length + eolLength)) != -1); } Assert.True(actual.IndexOf("1: close") != -1); }