Stefan Bodewig <bode...@apache.org> wrote on 23.08.2016 06:14:32: > Von: Stefan Bodewig <bode...@apache.org> > An: "Log4Net Developers List" <log4net-dev@logging.apache.org> > Datum: 23.08.2016 06:14 > Betreff: Re: String Equality Comparison, Broken Tests and .NET-1.x > > On 2016-08-22, <jonas.ba...@rohde-schwarz.com> wrote: > > > A recent commit [1] changed, among other things, some string equality > > comparisons from `SomeComparer.Compare(a, "B", IgnoreCase) == 0` to > > `a.ToUpperInvariant() == "B"`, see also [2]. > > > > Unfortunately, this doesn't work if `a` is allowed to be null. Currently a > > lot of log4net.Tests are broken because of such a null reference exception > > in `NewLinePatternConverter.ActivateOptions` (apparently "%newline" is > > quite common in pattern layouts ;-). > > Oh, I'm sorry. I must admit I glanced over the PR and applied it without > running the tests. My fault. > > > For new code I tend to opt for `String.Equals(Option, "DOS", > > StringComparison.OrdinalIgnoreCase)` for a fast, case-insensitive > > comparison with fixed ASCII-only patterns, but static > > `String.Equals(String, String, StringComparison)` is not awailable on > > .NET-1.x [3]. > > This is what the original code before PR #16 looked like, but it doesn't > seem to be available for .NET Core, see the discussion around > https://github.com/apache/log4net/pull/16/ > files#diff-51624ab11a9b3d95cc770de1a4e1bdbc
Note quite, it used `string.compare(string, string, bool, CultireInfo) == 0` which is available on .NET-1.x, while `String.Equals(string, string StringComparison)` and `ToUpperInvariant` are not. > > Should we create some helper in SystemInfo that provides null-aware, > > ordinal, casing-agnostic string equality comparison, with some #if's > > .NET-1.x? > > +1 Here you go. The attached patch introduces a ` SystemInfo.EqualsIgnoringCase(string, string)`, some unit tests, and fixes `NewLinePatternConverter.ActivateOptions` so that the test suite passes again. Please note that I was only able to test with .NET-4.5.2. I have no .NET-1x around, nor .NET Core (maybe we can even drop this #elif). I used the code for these platforms from previous revisions of NewLinePatternConverter.cs. In addition, I'm not sure if I got all the defines for the #if right. Is there some doc for that? regards, Jonas
SystemInfo_EqualsIgnoringCase.patch
Description: Binary data