From be91164499b263fc4c716c6d44c69f440f8ab634 Mon Sep 17 00:00:00 2001 From: Ben Harris Date: Wed, 22 Apr 2020 10:30:26 -0400 Subject: fix some stateful tests also fixes some warnings about culture-specific string comparisons --- IrcTokens/Line.cs | 30 +++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-) (limited to 'IrcTokens/Line.cs') diff --git a/IrcTokens/Line.cs b/IrcTokens/Line.cs index 6198c04..27d9c0d 100644 --- a/IrcTokens/Line.cs +++ b/IrcTokens/Line.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Globalization; using System.Linq; namespace IrcTokens @@ -20,7 +21,7 @@ namespace IrcTokens public override string ToString() => $"Line(source={Source}, command={Command}, tags={string.Join(";", Tags.Select(kvp => $"{kvp.Key}={kvp.Value}"))}, params={string.Join(",", Params)})"; - public override int GetHashCode() => Format().GetHashCode(); + public override int GetHashCode() => Format().GetHashCode(StringComparison.Ordinal); public override bool Equals(object obj) { @@ -41,6 +42,9 @@ namespace IrcTokens /// irc line to parse public Line(string line) { + if (string.IsNullOrWhiteSpace(line)) + throw new ArgumentNullException(nameof(line)); + _rawLine = line; string[] split; @@ -54,9 +58,9 @@ namespace IrcTokens foreach (var part in messageTags.Substring(1).Split(';')) { - if (part.Contains('=')) + if (part.Contains('=', StringComparison.Ordinal)) { - split = part.Split('='); + split = part.Split('=', 2); Tags[split[0]] = Protocol.UnescapeTag(split[1]); } else @@ -67,19 +71,19 @@ namespace IrcTokens } string trailing; - if (line.Contains(" :")) + if (line.Contains(" :", StringComparison.Ordinal)) { - split = line.Split(" :"); + split = line.Split(" :", 2); line = split[0]; - trailing = string.Join(" :", split.Skip(1)); + trailing = split[1]; } else { trailing = null; } - Params = line.Contains(' ') - ? line.Split(' ').Where(p => !string.IsNullOrWhiteSpace(p)).ToList() + Params = line.Contains(' ', StringComparison.Ordinal) + ? line.Split(' ', StringSplitOptions.RemoveEmptyEntries).ToList() : new List {line}; if (Params[0].StartsWith(':')) @@ -90,7 +94,7 @@ namespace IrcTokens if (Params.Count > 0) { - Command = Params[0].ToUpper(); + Command = Params[0].ToUpper(CultureInfo.InvariantCulture); Params.RemoveAt(0); } @@ -129,14 +133,14 @@ namespace IrcTokens foreach (var p in Params) { - if (p.Contains(' ')) - throw new ArgumentException("non-last parameters cannot have spaces", p); + if (p.Contains(' ', StringComparison.Ordinal)) + throw new ArgumentException(@"non-last parameters cannot have spaces", p); if (p.StartsWith(':')) - throw new ArgumentException("non-last parameters cannot start with colon", p); + throw new ArgumentException(@"non-last parameters cannot start with colon", p); } outs.AddRange(Params); - if (string.IsNullOrWhiteSpace(last) || last.Contains(' ') || last.StartsWith(':')) + if (string.IsNullOrWhiteSpace(last) || last.Contains(' ', StringComparison.Ordinal) || last.StartsWith(':')) last = $":{last}"; outs.Add(last); } -- cgit 1.4.1