Files
StarterNG/StarterNG.Tests/TexturesTxtParserTests.cs
maj00r 0444070e12 Move rolling stock and physics into the domain
VehicleDatabase becomes VehicleCatalog, Physics becomes VehiclePhysics, and the
textures.txt and .fiz parsers move to Infrastructure. GameLibrary replaces the
GameData singleton.
2026-09-04 21:03:08 +02:00

104 lines
3.2 KiB
C#

using StarterNG.Infrastructure.Vehicles;
namespace StarterNG.Tests;
public class TexturesTxtParserTests
{
private static readonly TexturesTxtParser Parser = new();
[Fact]
public void A_livery_line_yields_a_texture_with_its_model_and_thumbnail()
{
var entry = Parser.Parse("pkp/ep07/", new[] { "ep07-135.mat=ep07.e3d,ep07" });
var texture = Assert.Single(entry!.Textures);
Assert.Equal("ep07-135", texture.Skinfile);
Assert.Equal("pkp/ep07/", texture.Directory);
Assert.Equal("ep07.e3d", texture.Model);
Assert.Equal("ep07", texture.MiniRef);
Assert.False(texture.Wreck);
}
[Fact]
public void The_trailing_comment_is_read_as_the_credit_line()
{
var entry = Parser.Parse("pkp/ep07/", new[]
{
"ep07-135.mat=ep07.e3d,ep07 // 1.0,EP07-135,PKP Intercity,Warszawa,2019-04-01,Wrocław,Autor,Fotograf"
});
var meta = Assert.Single(entry!.Textures).Meta;
Assert.NotNull(meta);
Assert.Equal("EP07-135", meta!.Vehicle);
Assert.Equal("PKP Intercity", meta.Operator);
Assert.Equal("Warszawa", meta.Depot);
Assert.Equal("Autor", meta.TextureAuthor);
Assert.Equal("Fotograf", meta.PhotoAuthor);
}
[Fact]
public void Wreck_liveries_are_marked_so_the_depot_can_hide_them()
{
var entry = Parser.Parse("pkp/ep07/", new[] { "ep07wreck.mat=ep07.e3d,ep07" });
Assert.True(Assert.Single(entry!.Textures).Wreck);
}
[Fact]
public void The_dollar_a_marker_archives_everything_after_it()
{
var entry = Parser.Parse("pkp/ep07/", new[]
{
"ep07-135.mat=ep07.e3d,ep07",
"$a",
"ep07-old.mat=ep07.e3d,ep07old"
});
var groups = entry!.Groups;
Assert.Contains(groups, group => group is { Mini: "ep07", Archived: false });
Assert.Contains(groups, group => group is { Mini: "ep07old", Archived: true });
}
[Fact]
public void A_caret_opens_a_fixed_set_of_the_following_vehicles()
{
var entry = Parser.Parse("pkp/en57/", new[]
{
"^3",
"en57-a.mat=en57.e3d,en57",
"en57-b.mat=en57.e3d,en57",
"en57-c.mat=en57.e3d,en57"
});
var set = Assert.Single(entry!.Sets);
Assert.Equal(3, set.Count);
Assert.Equal(3, set.TextureRefs.Count);
}
[Fact]
public void Extra_equals_segments_become_alternative_models()
{
var entry = Parser.Parse("pkp/111a/", new[] { "111a.mat=111a.e3d,111a=111ab.e3d,111ab" });
var texture = Assert.Single(entry!.Textures);
Assert.Equal("111a.e3d", texture.Model);
Assert.Equal("111ab.e3d", Assert.Single(texture.Aliases).Model);
}
[Fact]
public void Comments_headers_and_blank_lines_are_ignored()
{
var entry = Parser.Parse("pkp/ep07/", new[] { "", "# nagłówek", "@ coś", "// komentarz", "bez znaku równości" });
Assert.Null(entry);
}
[Fact]
public void The_category_marker_applies_to_the_liveries_after_it()
{
var entry = Parser.Parse("pkp/ep07/", new[] { "!=e", "ep07-135.mat=ep07.e3d,ep07" });
Assert.Equal("e", Assert.Single(entry!.Groups).Category);
}
}