Adds Refactor to Equals in Path String, Adds Regression Tests

This commit is contained in:
Justin Kotalik 2016-06-15 14:11:42 -07:00
parent 8f3d894b95
commit d71c2cb6ce
2 changed files with 48 additions and 6 deletions

View File

@ -213,7 +213,7 @@ namespace Microsoft.AspNetCore.Http
/// <returns>True if both PathString values are equal</returns>
public bool Equals(PathString other)
{
return string.Equals(_value, other._value, StringComparison.OrdinalIgnoreCase);
return Equals(other, StringComparison.OrdinalIgnoreCase);
}
/// <summary>
@ -224,6 +224,10 @@ namespace Microsoft.AspNetCore.Http
/// <returns>True if both PathString values are equal</returns>
public bool Equals(PathString other, StringComparison comparisonType)
{
if (!HasValue && !other.HasValue)
{
return true;
}
return string.Equals(_value, other._value, comparisonType);
}
@ -236,9 +240,9 @@ namespace Microsoft.AspNetCore.Http
{
if (ReferenceEquals(null, obj))
{
return false;
return !HasValue;
}
return obj is PathString && Equals((PathString)obj, StringComparison.OrdinalIgnoreCase);
return obj is PathString && Equals((PathString)obj);
}
/// <summary>
@ -247,7 +251,7 @@ namespace Microsoft.AspNetCore.Http
/// <returns>The hash code</returns>
public override int GetHashCode()
{
return (_value != null ? StringComparer.OrdinalIgnoreCase.GetHashCode(_value) : 0);
return (HasValue ? StringComparer.OrdinalIgnoreCase.GetHashCode(_value) : 0);
}
/// <summary>
@ -258,7 +262,7 @@ namespace Microsoft.AspNetCore.Http
/// <returns>True if both PathString values are equal</returns>
public static bool operator ==(PathString left, PathString right)
{
return left.Equals(right, StringComparison.OrdinalIgnoreCase);
return left.Equals(right);
}
/// <summary>
@ -269,7 +273,7 @@ namespace Microsoft.AspNetCore.Http
/// <returns>True if both PathString values are not equal</returns>
public static bool operator !=(PathString left, PathString right)
{
return !left.Equals(right, StringComparison.OrdinalIgnoreCase);
return !left.Equals(right);
}
/// <summary>

View File

@ -16,6 +16,44 @@ namespace Microsoft.AspNetCore.Http
ExceptionAssert.ThrowsArgument(() => new PathString("hello"), "value", "The path in 'value' must start with '/'.");
}
[Fact]
public void Equals_EmptyPathStringAndDefaultPathString()
{
// Act and Assert
Assert.Equal(PathString.Empty, default(PathString));
Assert.Equal(default(PathString), PathString.Empty);
Assert.True(PathString.Empty == default(PathString));
Assert.True(default(PathString) == PathString.Empty);
Assert.True(PathString.Empty.Equals(default(PathString)));
Assert.True(default(PathString).Equals(PathString.Empty));
}
[Fact]
public void NotEquals_DefaultPathStringAndNonNullPathString()
{
// Arrange
var pathString = new PathString("/hello");
// Act and Assert
Assert.NotEqual(pathString, default(PathString));
}
[Fact]
public void NotEquals_EmptyPathStringAndNonNullPathString()
{
// Arrange
var pathString = new PathString("/hello");
// Act and Assert
Assert.NotEqual(pathString, PathString.Empty);
}
[Fact]
public void HashCode_CheckNullAndEmptyHaveSameHashcodes()
{
Assert.Equal(PathString.Empty.GetHashCode(), default(PathString).GetHashCode());
}
[Theory]
[InlineData(null, null)]
[InlineData("", null)]