diff --git a/src/SheetMe.Designer/Diagnostics/EditSmoke.cs b/src/SheetMe.Designer/Diagnostics/EditSmoke.cs index 32d5f35..bfe3eb8 100644 --- a/src/SheetMe.Designer/Diagnostics/EditSmoke.cs +++ b/src/SheetMe.Designer/Diagnostics/EditSmoke.cs @@ -705,7 +705,32 @@ public static class EditSmoke !previewCleared.Contains("C-9003", StringComparison.Ordinal) && previewCleared.Contains("[PAT_차트번호", StringComparison.Ordinal), previewCleared); + + // ── "앱 전체 적용" 이 말뿐인지 값인지 ── + // 제목줄 아이콘은 PatientSession 만 건드린다. 열려 있는 창들이 그것을 듣지 않으면 + // 아이콘은 켜지는데 종이는 그대로다 — 사용자에게는 "설정했는데 안 먹는다"가 된다. + // 세션에만 쓰고 종이가 따라오는지 본다(창의 메서드를 직접 부르지 않는다). + Services.PatientSession.Set(Fake("C-9004", "세션환자"), "표본"); + var afterSession = PreviewPaper(); + Check("전체 적용: 세션에 넣으면 열린 미리보기가 따라온다", + afterSession.Contains("C-9004", StringComparison.Ordinal) + && afterSession.Contains("세션환자", StringComparison.Ordinal), + afterSession); + + Services.PatientSession.Set(null, string.Empty); + var afterSessionClear = PreviewPaper(); + Check("전체 적용: 세션에서 떼면 열린 미리보기도 따라 뗀다", + !afterSessionClear.Contains("C-9004", StringComparison.Ordinal) + && afterSessionClear.Contains("[PAT_차트번호", StringComparison.Ordinal), + afterSessionClear); + + // 창을 닫은 뒤에도 이벤트가 남아 있으면 회수되지 않고, 죽은 창이 계속 그린다. + // 닫고 다시 세션을 건드려 예외 없이 지나가는지 본다(구독이 남아 있으면 + // 죽은 창의 PagesHost 를 만지다 터진다). patientPreview.Close(); + Services.PatientSession.Set(Fake("C-9005", "닫힌뒤"), "표본"); + Services.PatientSession.Set(null, string.Empty); + Check("전체 적용: 창을 닫으면 구독이 떨어진다", true, "예외 없이 통과"); var emptyName = PatientPaper( new Services.PatientTagResolver(Fake("C-9002", string.Empty), new StubTagResolver())); diff --git a/src/SheetMe.Designer/Views/MainView.xaml b/src/SheetMe.Designer/Views/MainView.xaml index 935e86f..fef7bb3 100644 --- a/src/SheetMe.Designer/Views/MainView.xaml +++ b/src/SheetMe.Designer/Views/MainView.xaml @@ -294,6 +294,14 @@