using Aspose.Gis.Rendering;
using GitConverter.Lib.Models;
using static System.Runtime.InteropServices.JavaScript.JSType;
namespace GitConverter.TestsApp.Models
{
///
/// Unit tests for FileExtension enum and helpers.
///
///
/// These tests verify the canonical mapping between enum members and their dot-prefixed file extensions,
/// and ensure option-string -> enum mapping is case-insensitive and stable.
/// Keep tests small and deterministic: when adding new enum members update these tests accordingly.
///
public class FileExtensionTests
{
[Fact(DisplayName = "ToDotExtension_ReturnsExpected")]
public void ToDotExtension_ReturnsExpected()
{
Assert.Equal(".csv", FileExtension.Csv.ToDotExtension());
Assert.Equal(".json", FileExtension.EsriJson.ToDotExtension());
Assert.Equal(".gdb", FileExtension.FileGdb.ToDotExtension());
Assert.Equal(".json", FileExtension.GeoJson.ToDotExtension());
Assert.Equal(".json", FileExtension.GeoJsonSeq.ToDotExtension());
Assert.Equal(".gpkg", FileExtension.GeoPackage.ToDotExtension());
Assert.Equal(".gml", FileExtension.Gml.ToDotExtension());
Assert.Equal(".gpx", FileExtension.Gpx.ToDotExtension());
Assert.Equal(".kml", FileExtension.Kml.ToDotExtension());
Assert.Equal(".kmz", FileExtension.Kmz.ToDotExtension());
Assert.Equal(".mif", FileExtension.MapInfoInterchange.ToDotExtension());
Assert.Equal(".tab", FileExtension.MapInfoTab.ToDotExtension());
Assert.Equal(".osm", FileExtension.Osm.ToDotExtension());
Assert.Equal(".shp", FileExtension.Shapefile.ToDotExtension());
Assert.Equal(".json", FileExtension.TopoJson.ToDotExtension());
}
[Theory(DisplayName = "FromOption_RecognizesOptions_CaseInsensitive")]
[InlineData("csv", FileExtension.Csv)]
[InlineData("CSV", FileExtension.Csv)]
[InlineData("esrijson", FileExtension.EsriJson)]
[InlineData("Esrijson", FileExtension.EsriJson)]
[InlineData("gdb", FileExtension.FileGdb)]
[InlineData("Gdb", FileExtension.FileGdb)]
[InlineData("gdbtable", FileExtension.FileGdb)]
[InlineData("Gdbtable", FileExtension.FileGdb)]
[InlineData("gdbtablx", FileExtension.FileGdb)]
[InlineData("Gdbtablx", FileExtension.FileGdb)]
[InlineData("geojson", FileExtension.GeoJson)]
[InlineData("GeoJson", FileExtension.GeoJson)]
[InlineData("jsonl", FileExtension.GeoJsonSeq)]
[InlineData("JSONL", FileExtension.GeoJsonSeq)]
[InlineData("ndjson", FileExtension.GeoJsonSeq)]
[InlineData("NDJSON", FileExtension.GeoJsonSeq)]
[InlineData("gpkg", FileExtension.GeoPackage)]
[InlineData("Gpkg", FileExtension.GeoPackage)]
[InlineData("gml", FileExtension.Gml)]
[InlineData("Gml", FileExtension.Gml)]
[InlineData("gpx", FileExtension.Gpx)]
[InlineData("Gpx", FileExtension.Gpx)]
[InlineData("kml", FileExtension.Kml)]
[InlineData("Kml", FileExtension.Kml)]
[InlineData("kmz", FileExtension.Kmz)]
[InlineData("Kmz", FileExtension.Kmz)]
[InlineData("mif", FileExtension.MapInfoInterchange)]
[InlineData("Mif", FileExtension.MapInfoInterchange)]
[InlineData("mid", FileExtension.MapInfoInterchange)]
[InlineData("Mid", FileExtension.MapInfoInterchange)]
[InlineData("tab", FileExtension.MapInfoTab)]
[InlineData("Tab", FileExtension.MapInfoTab)]
[InlineData("dat", FileExtension.MapInfoTab)]
[InlineData("Dat", FileExtension.MapInfoTab)]
[InlineData("map", FileExtension.MapInfoTab)]
[InlineData("Map", FileExtension.MapInfoTab)]
[InlineData("id", FileExtension.MapInfoTab)]
[InlineData("Id", FileExtension.MapInfoTab)]
[InlineData("osm", FileExtension.Osm)]
[InlineData("Osm", FileExtension.Osm)]
[InlineData("shp", FileExtension.Shapefile)]
[InlineData("Shp", FileExtension.Shapefile)]
[InlineData("shx", FileExtension.Shapefile)]
[InlineData("Shx", FileExtension.Shapefile)]
[InlineData("dbf", FileExtension.Shapefile)]
[InlineData("Dbf", FileExtension.Shapefile)]
[InlineData("topojson", FileExtension.TopoJson)]
[InlineData("TopoJson", FileExtension.TopoJson)]
public void FromOption_RecognizesOptions(string option, FileExtension expected)
{
var fe = FileExtensionHelpers.FromOption(option);
Assert.True(fe.HasValue, $"Expected FromOption to recognize '{option}'");
Assert.Equal(expected, fe.Value);
}
[Fact(DisplayName = "FromOption_ReturnsNull_ForUnknown")]
public void FromOption_ReturnsNull_ForUnknown()
{
var fe = FileExtensionHelpers.FromOption("unknown-format-xyz");
Assert.False(fe.HasValue);
}
}
}