Hello @Dani_S ,
There are several improvements could be made.
JsonFormatDetectorTests.cs
Add the following new test methods to cover edge cases with conflicting format markers and malformed JSON:
[Fact(DisplayName = "Detect_ConflictingMarkers_ReturnsConsistentResult")]
public void Detect_ConflictingMarkers_ReturnsConsistentResult()
{
var json = @"{ ""type"": ""FeatureCollection"", ""spatialReference"": { ""wkid"": 4326 }, ""features"": [] }";
var path = Write("conflicting.json", json);
var result = DetectFromFile(path);
Assert.Equal(Format.GeoJson, result);
}
[Fact(DisplayName = "Detect_SeverelyMalformed_ReturnsUnknown")]
public void Detect_SeverelyMalformed_ReturnsUnknown()
{
var json = @"{ ""type"": ""FeatureCollection"", ""features"": [{ ""type"": ""Feature"" "; // truncated/malformed
var path = Write("malformed.json", json);
var result = DetectFromFile(path);
Assert.Equal(Format.Unknown, result);
}
UniversalGisConverterTests.cs
Add tests for partial archive extraction failures and Aspose conversion failures:
[Fact(DisplayName = "Convert_ArchiveMissingRequiredComponent_ReturnsFailure")]
public void Convert_ArchiveMissingRequiredComponent_ReturnsFailure()
{
var zipPath = Path. Combine(_root, "incomplete. zip");
var tempDir = Path.Combine(_root, "ztemp");
Directory.CreateDirectory(tempDir);
File.WriteAllText(Path. Combine(tempDir, "data.shp"), "shp");
File.WriteAllText(Path.Combine(tempDir, "data.shx"), "shx");
// Missing . dbf file
ZipFile.CreateFromDirectory(tempDir, zipPath);
var conv = new UniversalGisConverter();
var outDir = Path.Combine(_root, "out");
var temp = Path.Combine(_root, "temp");
var res = conv.Convert(zipPath, "Shapefile", "GeoJson", outDir, temp);
Assert.Equal(ConversionStatus.Failure, res.Status);
Assert.Contains("missing", res.Message, StringComparison. OrdinalIgnoreCase);
}
[Fact(DisplayName = "Convert_InvalidGeometry_ReturnsFailure")]
public void Convert_InvalidGeometry_ReturnsFailure()
{
if (!IntegrationEnabled()) return;
var conv = new UniversalGisConverter();
var badGeo = Path.Combine(_root, "invalid.geojson");
File.WriteAllText(badGeo, @"{ ""type"": ""FeatureCollection"", ""features"": [{ ""type"": ""Feature"", ""geometry"": { ""type"": ""Point"", ""coordinates"": [""invalid"", ""data""] }}]}");
var res = conv.Convert(badGeo, "GeoJson", "Shapefile", Path.Combine(_root, "out"), Path.Combine(_root, "temp"));
Assert.Equal(ConversionStatus. Failure, res.Status);
Assert.False(string.IsNullOrWhiteSpace(res.Message));
}
All test Dispose methods (across all test files)
Update the silent exception handling to include debug output:
public void Dispose()
{
try
{
if (Directory. Exists(_root))
Directory.Delete(_root, true);
}
catch (Exception ex)
{
System.Diagnostics.Debug.WriteLine($"Cleanup failed for {_root}: {ex.Message}");
}
}
UniversalGisConverter.cs
Fix the logging inconsistency where the class references "CsvConverter" in log messages. Change line:
Log.Debug($"CsvConverter. Convert params: gisInputFilePath='{gisInputFilePath}'...
to:
Log.Debug($"UniversalGisConverter.Convert params: gisInputFilePath='{gisInputFilePath}'...
And similarly for other log messages in that file that incorrectly reference "CsvConverter".
Happy holidays.