From 4cf06af98a5181d312e334f0dfce114bdc445072 Mon Sep 17 00:00:00 2001 From: John Lambert Date: Wed, 6 May 2026 13:46:19 -0400 Subject: [PATCH 1/2] test: split FdoUi delete regression and Generic macro fixes --- Src/FdoUi/FdoUiTests/FdoUiTests.cs | 31 ++++++++++++++++++++++++++++++ Src/Generic/GenSmartPtr.h | 6 ++++-- Src/Generic/UtilCom.h | 6 ++++-- Src/Generic/UtilTime.h | 4 +++- 4 files changed, 42 insertions(+), 5 deletions(-) diff --git a/Src/FdoUi/FdoUiTests/FdoUiTests.cs b/Src/FdoUi/FdoUiTests/FdoUiTests.cs index 6046e94180..44751c52d1 100644 --- a/Src/FdoUi/FdoUiTests/FdoUiTests.cs +++ b/Src/FdoUi/FdoUiTests/FdoUiTests.cs @@ -6,10 +6,13 @@ // Responsibility: TE Team // --------------------------------------------------------------------------------------------- +using System; using NUnit.Framework; +using SIL.FieldWorks.Common.FwUtils; using SIL.LCModel.Core.Text; using SIL.LCModel; using SIL.LCModel.DomainServices; +using XCore; namespace SIL.FieldWorks.FdoUi { @@ -141,5 +144,33 @@ public void DeleteCmPictureObject_RelatedCleanUpDoesNotNegateDeletion() Assert.That(obj.IsValidObject, Is.False); } } + + [Test] + public void DeleteUnderlyingObject_PublishesDeleteRecordForCurrentObject() + { + var obj = Cache.ServiceLocator.GetInstance().Create(); + using (var propertyTable = new PropertyTable(null)) + using (DummyCmObjectUi objectUi = DummyCmObjectUi.MakeDummyUi(obj)) + { + propertyTable.SetProperty("ActiveClerkSelectedObject", obj, false); + objectUi.PropTable = propertyTable; + + object published = null; + Action deleteRecordHandler = data => published = data; + try + { + FwUtils.Subscriber.Subscribe(EventConstants.DeleteRecord, deleteRecordHandler); + + objectUi.DeleteUnderlyingObject(); + + Assert.That(published, Is.SameAs(objectUi)); + Assert.That(obj.IsValidObject, Is.True); + } + finally + { + FwUtils.Subscriber.Unsubscribe(EventConstants.DeleteRecord, deleteRecordHandler); + } + } + } } } diff --git a/Src/Generic/GenSmartPtr.h b/Src/Generic/GenSmartPtr.h index d8e8868ac9..843bb47973 100644 --- a/Src/Generic/GenSmartPtr.h +++ b/Src/Generic/GenSmartPtr.h @@ -92,8 +92,10 @@ class _Lock_GenRefObj } }; -#define GenLockThis() _Lock_GenRefObj _lock_this_##__LINE__(this) -#define GenLockObj(pobj) _Lock_GenRefObj _lock_obj_##__LINE__(pobj) +#define GENSMARTPTR_CONCAT_INNER(a, b) a##b +#define GENSMARTPTR_CONCAT(a, b) GENSMARTPTR_CONCAT_INNER(a, b) +#define GenLockThis() _Lock_GenRefObj GENSMARTPTR_CONCAT(_lock_this_, __LINE__)(this) +#define GenLockObj(pobj) _Lock_GenRefObj GENSMARTPTR_CONCAT(_lock_obj_, __LINE__)(pobj) diff --git a/Src/Generic/UtilCom.h b/Src/Generic/UtilCom.h index e0b42d17b9..d8ee3d2504 100644 --- a/Src/Generic/UtilCom.h +++ b/Src/Generic/UtilCom.h @@ -351,8 +351,10 @@ class _Lock_Unknown } }; -#define LockThis() _Lock_Unknown _lock_this_##__LINE__(this) -#define LockObj(pobj) _Lock_Unknown _lock_obj_##__LINE__(pobj) +#define UTILCOM_CONCAT_INNER(a, b) a##b +#define UTILCOM_CONCAT(a, b) UTILCOM_CONCAT_INNER(a, b) +#define LockThis() _Lock_Unknown UTILCOM_CONCAT(_lock_this_, __LINE__)(this) +#define LockObj(pobj) _Lock_Unknown UTILCOM_CONCAT(_lock_obj_, __LINE__)(pobj) /************************************************************************************* Miscellaneous COM related utility functions. diff --git a/Src/Generic/UtilTime.h b/Src/Generic/UtilTime.h index c08acfb297..aeca7bfc1f 100644 --- a/Src/Generic/UtilTime.h +++ b/Src/Generic/UtilTime.h @@ -468,7 +468,9 @@ At some convenient point set m_msMyMethod to zero, and later see what it contain You can also surround a smaller piece of code with braces and call this at the start. Hungarian: not needed ----------------------------------------------------------------------------------------------*/ -#define MeasureDuration(arg) _MeasureDuration _measure_duration_##__LINE__(&arg) +#define UTILTIME_CONCAT_INNER(a, b) a##b +#define UTILTIME_CONCAT(a, b) UTILTIME_CONCAT_INNER(a, b) +#define MeasureDuration(arg) _MeasureDuration UTILTIME_CONCAT(_measure_duration_, __LINE__)(&arg) class _MeasureDuration { From b63a1f91c40559ec740387040bea6b579a8b6779 Mon Sep 17 00:00:00 2001 From: John Lambert Date: Wed, 6 May 2026 19:05:33 -0400 Subject: [PATCH 2/2] test: drop Generic macro cleanup from PR --- Src/Generic/GenSmartPtr.h | 6 ++---- Src/Generic/UtilCom.h | 6 ++---- Src/Generic/UtilTime.h | 4 +--- 3 files changed, 5 insertions(+), 11 deletions(-) diff --git a/Src/Generic/GenSmartPtr.h b/Src/Generic/GenSmartPtr.h index 843bb47973..d8e8868ac9 100644 --- a/Src/Generic/GenSmartPtr.h +++ b/Src/Generic/GenSmartPtr.h @@ -92,10 +92,8 @@ class _Lock_GenRefObj } }; -#define GENSMARTPTR_CONCAT_INNER(a, b) a##b -#define GENSMARTPTR_CONCAT(a, b) GENSMARTPTR_CONCAT_INNER(a, b) -#define GenLockThis() _Lock_GenRefObj GENSMARTPTR_CONCAT(_lock_this_, __LINE__)(this) -#define GenLockObj(pobj) _Lock_GenRefObj GENSMARTPTR_CONCAT(_lock_obj_, __LINE__)(pobj) +#define GenLockThis() _Lock_GenRefObj _lock_this_##__LINE__(this) +#define GenLockObj(pobj) _Lock_GenRefObj _lock_obj_##__LINE__(pobj) diff --git a/Src/Generic/UtilCom.h b/Src/Generic/UtilCom.h index d8ee3d2504..e0b42d17b9 100644 --- a/Src/Generic/UtilCom.h +++ b/Src/Generic/UtilCom.h @@ -351,10 +351,8 @@ class _Lock_Unknown } }; -#define UTILCOM_CONCAT_INNER(a, b) a##b -#define UTILCOM_CONCAT(a, b) UTILCOM_CONCAT_INNER(a, b) -#define LockThis() _Lock_Unknown UTILCOM_CONCAT(_lock_this_, __LINE__)(this) -#define LockObj(pobj) _Lock_Unknown UTILCOM_CONCAT(_lock_obj_, __LINE__)(pobj) +#define LockThis() _Lock_Unknown _lock_this_##__LINE__(this) +#define LockObj(pobj) _Lock_Unknown _lock_obj_##__LINE__(pobj) /************************************************************************************* Miscellaneous COM related utility functions. diff --git a/Src/Generic/UtilTime.h b/Src/Generic/UtilTime.h index aeca7bfc1f..c08acfb297 100644 --- a/Src/Generic/UtilTime.h +++ b/Src/Generic/UtilTime.h @@ -468,9 +468,7 @@ At some convenient point set m_msMyMethod to zero, and later see what it contain You can also surround a smaller piece of code with braces and call this at the start. Hungarian: not needed ----------------------------------------------------------------------------------------------*/ -#define UTILTIME_CONCAT_INNER(a, b) a##b -#define UTILTIME_CONCAT(a, b) UTILTIME_CONCAT_INNER(a, b) -#define MeasureDuration(arg) _MeasureDuration UTILTIME_CONCAT(_measure_duration_, __LINE__)(&arg) +#define MeasureDuration(arg) _MeasureDuration _measure_duration_##__LINE__(&arg) class _MeasureDuration {