Oprava: úprava dodávané položky číselníku se tiše ztrácela
Nacti() uložilo dodávanou vrstvu do referenčního snímku _vychozi a tytéž objekty vložilo do kolekcí, na které se váže mřížka. Úprava buňky tak mutovala i ten snímek – UlozRozdil pak porovnával stav sám se sebou, rozdíl vyšel prázdný a oprava dodávané položky zmizela. Mazání a přidávání přitom fungovalo (tam se reference nesdílí), takže se chyba dobře schovala. Sluc nově vkládá dodávané položky jako hluboké kopie (serializací, stejně jako klonování přílohy), takže snímek zůstane netknutý. Nahlášeno na přejmenování kraje Karlovarský – přesně ten scénář teď hlídají dva regresní testy; bez opravy oba padají. Build 0 chyb / 0 varování, 57 testů zelených. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -178,6 +178,49 @@ public class CiselnikyVrstvyTesty
|
||||
Assert.Equal(new[] { "Novák", "Černý" }, vysledek.Select(j => j.Hodnota));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void UpravaDodavanePolozkyVMrizceSeZapiseDoRozdilu()
|
||||
{
|
||||
// Regrese: dodávané položky se dřív do mřížky vkládaly jako tytéž objekty, jaké držel
|
||||
// referenční snímek dodávané vrstvy. Úprava v mřížce mutovala i snímek, rozdíl se pak
|
||||
// počítal proti už změněným datům, vyšel prázdný a oprava se tiše ztratila.
|
||||
// Mazání a přidávání přitom fungovalo, takže se to snadno přehlédne.
|
||||
var dodavana = new List<Kraj>
|
||||
{
|
||||
new() { Nazev = "Jihomoravský" },
|
||||
new() { Nazev = "Karlovarský" },
|
||||
};
|
||||
|
||||
var vMrizce = new ObservableCollection<Kraj>();
|
||||
CiselnikyStore.Sluc(vMrizce, dodavana, null);
|
||||
|
||||
// Uživatel přepíše buňku v mřížce.
|
||||
vMrizce[1].Nazev = "Karlovarskýýýýý";
|
||||
|
||||
var rozdil = CiselnikyStore.Rozdil(vMrizce, dodavana);
|
||||
|
||||
Assert.Equal(new[] { "Karlovarskýýýýý" }, rozdil.Vlastni.Select(k => k.Nazev));
|
||||
Assert.Equal(new[] { "Karlovarský" }, rozdil.Skryte);
|
||||
|
||||
// A po restartu programu tam ta úprava musí být.
|
||||
var poRestartu = new ObservableCollection<Kraj>();
|
||||
CiselnikyStore.Sluc(poRestartu, dodavana, rozdil);
|
||||
Assert.Equal(new[] { "Jihomoravský", "Karlovarskýýýýý" }, poRestartu.Select(k => k.Nazev));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void UpravaNemutujeDodavanouVrstvu()
|
||||
{
|
||||
var dodavana = new List<Organizace> { new() { Nazev = "SŽ Praha", Adresa = "Dlážděná 1003/7" } };
|
||||
|
||||
var vMrizce = new ObservableCollection<Organizace>();
|
||||
CiselnikyStore.Sluc(vMrizce, dodavana, null);
|
||||
vMrizce[0].Adresa = "jiná adresa";
|
||||
|
||||
Assert.Equal("Dlážděná 1003/7", dodavana[0].Adresa);
|
||||
Assert.NotSame(dodavana[0], vMrizce[0]);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void KlicSeBerePodleTypuPolozky()
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user