Skip to content

Commit

Permalink
[dotnet] Add nullability to IniFileReader (SeleniumHQ#14929)
Browse files Browse the repository at this point in the history
  • Loading branch information
RenderMichael authored Dec 26, 2024
1 parent 59f090b commit eaf4fa7
Showing 1 changed file with 21 additions and 16 deletions.
37 changes: 21 additions & 16 deletions dotnet/src/webdriver/Firefox/Internal/IniFileReader.cs
Original file line number Diff line number Diff line change
Expand Up @@ -22,19 +22,23 @@
using System.Collections.ObjectModel;
using System.IO;

#nullable enable

namespace OpenQA.Selenium.Firefox.Internal
{
/// <summary>
/// Parses and reads an INI file.
/// </summary>
internal class IniFileReader
internal sealed class IniFileReader
{
private Dictionary<string, Dictionary<string, string>> iniFileStore = new Dictionary<string, Dictionary<string, string>>();
private readonly Dictionary<string, Dictionary<string, string>> iniFileStore = new Dictionary<string, Dictionary<string, string>>();

/// <summary>
/// Initializes a new instance of the <see cref="IniFileReader"/> class.
/// </summary>
/// <param name="fileName">The full path to the .INI file to be read.</param>
/// <exception cref="ArgumentNullException">If <paramref name="fileName"/> is <see langword="null"/> or <see cref="string.Empty"/>.</exception>
/// <exception cref="FileNotFoundException">If no file exists at file path <paramref name="fileName"/>.</exception>
public IniFileReader(string fileName)
{
if (string.IsNullOrEmpty(fileName))
Expand All @@ -53,7 +57,7 @@ public IniFileReader(string fileName)
string[] iniFileContent = File.ReadAllLines(fileName);
foreach (string iniFileLine in iniFileContent)
{
if (!string.IsNullOrEmpty(iniFileLine.Trim()) && !iniFileLine.StartsWith(";", StringComparison.OrdinalIgnoreCase))
if (!string.IsNullOrWhiteSpace(iniFileLine) && !iniFileLine.StartsWith(";", StringComparison.OrdinalIgnoreCase))
{
if (iniFileLine.StartsWith("[", StringComparison.OrdinalIgnoreCase) && iniFileLine.EndsWith("]", StringComparison.OrdinalIgnoreCase))
{
Expand Down Expand Up @@ -86,21 +90,24 @@ public IniFileReader(string fileName)
/// <summary>
/// Gets a <see cref="ReadOnlyCollection{T}"/> containing the names of the sections in the .INI file.
/// </summary>
public ReadOnlyCollection<string> SectionNames
{
get
{
List<string> keyList = new List<string>(this.iniFileStore.Keys);
return new ReadOnlyCollection<string>(keyList);
}
}
public ReadOnlyCollection<string> SectionNames => new ReadOnlyCollection<string>(new List<string>(this.iniFileStore.Keys));

/// <summary>
/// Gets a value from the .INI file.
/// </summary>
/// <param name="sectionName">The section in which to find the key-value pair.</param>
/// <param name="valueName">The key of the key-value pair.</param>
/// <returns>The value associated with the given section and key.</returns>
/// <exception cref="ArgumentNullException">
/// <para>If <paramref name="sectionName"/> is <see langword="null"/> or <see cref="string.Empty"/>.</para>
/// <para>-or-</para>
/// <para>If <paramref name="valueName"/> is <see langword="null"/> or <see cref="string.Empty"/>.</para>
/// </exception>
/// <exception cref="ArgumentException">
/// <para>If no section named <paramref name="sectionName"/> exists.</para>
/// <para>-or-</para>
///<para>If the section does not contain a value named <paramref name="valueName"/>.</para>
/// </exception>
public string GetValue(string sectionName, string valueName)
{
if (string.IsNullOrEmpty(sectionName))
Expand All @@ -117,19 +124,17 @@ public string GetValue(string sectionName, string valueName)

string lowerCaseValueName = valueName.ToUpperInvariant();

if (!this.iniFileStore.ContainsKey(lowerCaseSectionName))
if (!this.iniFileStore.TryGetValue(lowerCaseSectionName, out Dictionary<string, string>? section))
{
throw new ArgumentException("Section does not exist: " + sectionName, nameof(sectionName));
}

Dictionary<string, string> section = this.iniFileStore[lowerCaseSectionName];

if (!section.ContainsKey(lowerCaseValueName))
if (!section.TryGetValue(lowerCaseValueName, out string? value))
{
throw new ArgumentException("Value does not exist: " + valueName, nameof(valueName));
}

return section[lowerCaseValueName];
return value;
}
}
}

0 comments on commit eaf4fa7

Please sign in to comment.