diff --git a/src/GoogleSheetsWrapper.Tests/SheetRangeTests.cs b/src/GoogleSheetsWrapper.Tests/SheetRangeTests.cs index 53de095..1e4540e 100644 --- a/src/GoogleSheetsWrapper.Tests/SheetRangeTests.cs +++ b/src/GoogleSheetsWrapper.Tests/SheetRangeTests.cs @@ -180,6 +180,35 @@ public void SheetRangeNoTabNameSingleCellR1C1FormattedCorrectly() Assert.That(newRange, Is.EqualTo(range)); } + [Test] + public void SheetRangeEqualsHandlesNullAndDifferentObjectType() + { + var range = new SheetRange("Tab", 1, 1, 2, 2); + + Assert.That(range.Equals((SheetRange)null), Is.False); + Assert.That(range.Equals((object)null), Is.False); + Assert.That(range.Equals("not-a-range"), Is.False); + } + + [Test] + public void SheetRangeEqualsUsesRangeCoordinatesAndTabName() + { + var rangeA = new SheetRange("Tab", 1, 1, 2, 2); + var rangeB = new SheetRange("Tab", 1, 1, 2, 2); + var rangeC = new SheetRange("Tab", 1, 1, 3, 2); + + Assert.That(rangeA.Equals(rangeB), Is.True); + Assert.That(rangeA.GetHashCode(), Is.EqualTo(rangeB.GetHashCode())); + Assert.That(rangeA.Equals(rangeC), Is.False); + + // Derived notation/flags should not participate in equality + var mutated = new SheetRange("Tab", 1, 1, 2, 2); + mutated.EndColumn = null; + var constructed = new SheetRange("Tab", 1, 1, null, 2); + + Assert.That(mutated.Equals(constructed), Is.True); + } + private static void AssertLettersFromColumnID(int columnID, string expectedLetters) { var result = SheetRange.GetLettersFromColumnID(columnID); diff --git a/src/GoogleSheetsWrapper/GoogleSheetsWrapper.csproj b/src/GoogleSheetsWrapper/GoogleSheetsWrapper.csproj index 43e758f..5bd4b22 100644 --- a/src/GoogleSheetsWrapper/GoogleSheetsWrapper.csproj +++ b/src/GoogleSheetsWrapper/GoogleSheetsWrapper.csproj @@ -8,7 +8,7 @@ https://github.com/SteveWinward/GoogleSheetsWrapper LICENSE https://github.com/SteveWinward/GoogleSheetsWrapper - 2.0.27 + 2.0.28 Google Sheets README.md A simple wrapper library that makes it easier to perform CRUD operations against Google Sheets spreadsheets. diff --git a/src/GoogleSheetsWrapper/SheetRange.cs b/src/GoogleSheetsWrapper/SheetRange.cs index fdd14ad..5da2523 100644 --- a/src/GoogleSheetsWrapper/SheetRange.cs +++ b/src/GoogleSheetsWrapper/SheetRange.cs @@ -266,6 +266,16 @@ public static int GetHashCode(SheetRange obj) /// when the ranges are equal; otherwise, . public bool Equals(SheetRange other) { + if (other is null) + { + return false; + } + + if (ReferenceEquals(this, other)) + { + return true; + } + return A1Notation == other.A1Notation && CanSupportA1Notation == other.CanSupportA1Notation && @@ -285,7 +295,7 @@ public bool Equals(SheetRange other) /// when the object is an equal range; otherwise, . public override bool Equals(object obj) { - return Equals((SheetRange)obj); + return obj is SheetRange other && Equals(other); } /// @@ -299,4 +309,4 @@ public override int GetHashCode() #endregion } -} \ No newline at end of file +}