mirror of
https://github.com/MaSzyna-EU07/StarterNG.git
synced 2026-11-01 20:34:57 +01:00
A consist added to the warehouse gets a name there. The crew type stays through loading a consist. The vehicle base window replaces the texture base. The depot follows consists changed on the scenarios page, also with the warehouse tab left open.
140 lines
4.2 KiB
C#
140 lines
4.2 KiB
C#
using StarterNG.Application;
|
|
using StarterNG.Classes;
|
|
using StarterNG.Tests.Fakes;
|
|
|
|
namespace StarterNG.Tests;
|
|
|
|
// PresetStore keeps the disk of the first test that reaches it, a fake one as every
|
|
// composition root in the tests is built on fakes. So each test has a name to itself.
|
|
public class WarehouseEditTests
|
|
{
|
|
private const string Text =
|
|
"trainset a tor 0 0\nnode -1 0 v1 dynamic d s m 0 headdriver 3 0 enddynamic\nendtrainset\n";
|
|
|
|
private static readonly string Entry = ConsistText.Serialize(new Trainset(Text));
|
|
|
|
private readonly WarehouseEdit _edit = new();
|
|
|
|
public WarehouseEditTests()
|
|
{
|
|
var installation = new TestInstallation(new InMemoryFileSystem());
|
|
AppServices.Initialize(installation.Paths, installation.Files, installation.Clock, installation.Environment);
|
|
}
|
|
|
|
private static TrainsetPreset Preset(string name, string? entry = null) => new() { Name = name, Entry = entry ?? Entry };
|
|
|
|
private static TrainsetPreset? Stored(string name) => PresetStore.All().FirstOrDefault(p => p.Name == name);
|
|
|
|
[Fact]
|
|
public void Opening_says_what_is_edited_and_closing_that_nothing_is()
|
|
{
|
|
var trainset = _edit.Open(Preset("edit-open"));
|
|
|
|
Assert.Same(trainset, _edit.Trainset);
|
|
Assert.Equal("edit-open", _edit.Name);
|
|
|
|
_edit.Close();
|
|
|
|
Assert.Null(_edit.Trainset);
|
|
Assert.Null(_edit.Name);
|
|
}
|
|
|
|
[Fact]
|
|
public void A_consist_opened_again_is_the_same_trainset_so_its_undo_history_outlives_a_switch()
|
|
{
|
|
var first = _edit.Open(Preset("edit-switch"));
|
|
_edit.Open(Preset("edit-switch-other"));
|
|
|
|
Assert.Same(first, _edit.Open(Preset("edit-switch")));
|
|
}
|
|
|
|
[Fact]
|
|
public void An_entry_written_over_from_elsewhere_is_read_afresh()
|
|
{
|
|
var first = _edit.Open(Preset("edit-over"));
|
|
|
|
var second = _edit.Open(Preset("edit-over", ConsistText.Serialize(new Trainset(Text.Replace(" v1 ", " v9 ")))));
|
|
|
|
Assert.NotSame(first, second);
|
|
Assert.Equal("v9", second.Vehicles.Single().Name);
|
|
}
|
|
|
|
[Fact]
|
|
public void The_name_of_a_consist_goes_with_any_letter_case()
|
|
{
|
|
var first = _edit.Open(Preset("edit-case"));
|
|
|
|
Assert.Same(first, _edit.Open(Preset("EDIT-CASE")));
|
|
}
|
|
|
|
[Fact]
|
|
public void Nothing_is_written_while_the_consist_stands_as_it_was_read()
|
|
{
|
|
PresetStore.Save("edit-unchanged", Entry);
|
|
_edit.Open(Stored("edit-unchanged")!);
|
|
PresetStore.Delete("edit-unchanged");
|
|
|
|
_edit.Save();
|
|
|
|
Assert.Null(Stored("edit-unchanged"));
|
|
}
|
|
|
|
[Fact]
|
|
public void A_change_is_written_once()
|
|
{
|
|
PresetStore.Save("edit-changed", Entry);
|
|
var trainset = _edit.Open(Stored("edit-changed")!);
|
|
trainset.Vehicles.Add(trainset.Vehicles[0].Clone());
|
|
|
|
_edit.Save();
|
|
|
|
Assert.Equal(ConsistText.Serialize(trainset), Stored("edit-changed")!.Entry);
|
|
|
|
PresetStore.Delete("edit-changed");
|
|
_edit.Save();
|
|
|
|
Assert.Null(Stored("edit-changed"));
|
|
}
|
|
|
|
[Fact]
|
|
public void Nothing_is_written_with_nothing_open()
|
|
{
|
|
var trainset = _edit.Open(Preset("edit-closed"));
|
|
trainset.Vehicles.Add(trainset.Vehicles[0].Clone());
|
|
_edit.Close();
|
|
|
|
_edit.Save();
|
|
|
|
Assert.Null(Stored("edit-closed"));
|
|
}
|
|
|
|
[Fact]
|
|
public void A_rename_keeps_the_trainset_and_saves_under_the_new_name()
|
|
{
|
|
var trainset = _edit.Open(Preset("edit-old"));
|
|
|
|
_edit.Renamed("edit-old", "edit-new");
|
|
|
|
Assert.Equal("edit-new", _edit.Name);
|
|
trainset.Vehicles.Add(trainset.Vehicles[0].Clone());
|
|
_edit.Save();
|
|
Assert.Null(Stored("edit-old"));
|
|
Assert.Equal(ConsistText.Serialize(trainset), Stored("edit-new")!.Entry);
|
|
|
|
Assert.Same(trainset, _edit.Open(Preset("edit-new", Stored("edit-new")!.Entry)));
|
|
}
|
|
|
|
[Fact]
|
|
public void Renaming_another_consist_leaves_the_one_open_alone()
|
|
{
|
|
var other = _edit.Open(Preset("edit-other"));
|
|
var open = _edit.Open(Preset("edit-mine"));
|
|
|
|
_edit.Renamed("edit-other", "edit-other-new");
|
|
|
|
Assert.Same(open, _edit.Trainset);
|
|
Assert.Equal("edit-mine", _edit.Name);
|
|
Assert.Same(other, _edit.Open(Preset("edit-other-new")));
|
|
}
|
|
}
|