Skip to content

Commit 2dc82d7

Browse files
Fixing issue 94, exception when checking for null
1 parent c3220ef commit 2dc82d7

File tree

3 files changed

+78
-2
lines changed

3 files changed

+78
-2
lines changed

src/GeoJSON.Net.Tests/Feature/FeatureTests.cs

Lines changed: 48 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -196,7 +196,7 @@ public void Ctor_Creates_Properties_Collection_When_Passed_Null_Proper_Object()
196196
Assert.IsNotNull(feature.Properties);
197197
CollectionAssert.IsEmpty(feature.Properties);
198198
}
199-
199+
200200
[Test]
201201
public void Feature_Equals_GetHashCode_Contract_Properties_Of_Objects()
202202
{
@@ -309,7 +309,54 @@ public void Serialized_And_Deserialized_Feature_Equals_And_Share_HashCode()
309309
Assert_Are_Equal(left, right); // assert id's + properties doesn't influence comparison and hashcode
310310
}
311311

312+
[Test]
313+
public void Feature_Equals_Null_Issue94()
314+
{
315+
bool equal1 = true;
316+
bool equal2 = true;
317+
318+
var feature = new Net.Feature.Feature(new Point(new Position(123, 12)));
319+
Assert.DoesNotThrow(() =>
320+
{
321+
equal1 = feature.Equals(null);
322+
equal2 = feature == null;
323+
});
312324

325+
Assert.IsFalse(equal1);
326+
Assert.IsFalse(equal2);
327+
}
328+
329+
[Test]
330+
public void Feature_Null_Instance_Equals_Null_Issue94()
331+
{
332+
var equal1 = true;
333+
334+
Net.Feature.Feature feature = null;
335+
Assert.DoesNotThrow(() =>
336+
{
337+
equal1 = feature != null;
338+
});
339+
340+
Assert.IsFalse(equal1);
341+
}
342+
343+
[Test]
344+
public void Feature_Equals_Itself_Issue94()
345+
{
346+
bool equal1 = false;
347+
bool equal2 = false;
348+
349+
var feature = new Net.Feature.Feature(new Point(new Position(123, 12)));
350+
Assert.DoesNotThrow(() =>
351+
{
352+
equal1 = feature == feature;
353+
equal2 = feature.Equals(feature);
354+
});
355+
356+
Assert.IsTrue(equal1);
357+
Assert.IsTrue(equal2);
358+
}
359+
313360
private IGeometryObject GetGeometry()
314361
{
315362
var coordinates = new List<LineString>

src/GeoJSON.Net.Tests/Feature/GenericFeatureTests.cs

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using System.Linq;
1+
using System.Collections.Generic;
2+
using System.Linq;
23
using GeoJSON.Net.Feature;
34
using GeoJSON.Net.Geometry;
45
using Newtonsoft.Json;
@@ -56,6 +57,31 @@ public void Can_Deserialize_LineString_Feature()
5657
//Assert.AreEqual(456, feature.Geometry.Coordinates.Altitude);
5758
}
5859

60+
[Test]
61+
public void Feature_Generic_Equals_Null_Issure94()
62+
{
63+
bool equal1 = true;
64+
bool equal2 = true;
65+
66+
var point = new Point(new Position(123, 34));
67+
var properties = new Dictionary<string, string>
68+
{
69+
{"test1", "test1val"},
70+
{"test2", "test2val"}
71+
};
72+
73+
var feature = new Feature<Point, Dictionary<string, string>>(point, properties, "testid");
74+
75+
Assert.DoesNotThrow(() =>
76+
{
77+
equal1 = feature == null;
78+
equal2 = feature.Equals(null);
79+
});
80+
81+
Assert.IsFalse(equal1);
82+
Assert.IsFalse(equal2);
83+
}
84+
5985
private class TypedFeatureProps
6086
{
6187
[JsonProperty("name")]

src/GeoJSON.Net/Feature/Feature.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,9 @@ private static Dictionary<string, object> GetDictionaryOfPublicProperties(object
172172

173173
public bool Equals(Feature<TGeometry> other)
174174
{
175+
if (ReferenceEquals(null, other)) return false;
176+
if (ReferenceEquals(this, other)) return true;
177+
175178
return Geometry.Equals(other.Geometry);
176179
}
177180

0 commit comments

Comments
 (0)