From c0c93a692362e8e00301b7e3785d4bfed3111ec2 Mon Sep 17 00:00:00 2001
From: Simon Heybrock <simon.heybrock@esss.se>
Date: Thu, 16 Mar 2017 07:49:24 +0100
Subject: [PATCH] Re #19016. Assert exception text in Beamline::DetectorInfo.

---
 Framework/Beamline/src/DetectorInfo.cpp    |  2 +-
 Framework/Beamline/test/DetectorInfoTest.h | 57 +++++++++++++++++-----
 2 files changed, 45 insertions(+), 14 deletions(-)

diff --git a/Framework/Beamline/src/DetectorInfo.cpp b/Framework/Beamline/src/DetectorInfo.cpp
index 20d46301083..efb95ad9b88 100644
--- a/Framework/Beamline/src/DetectorInfo.cpp
+++ b/Framework/Beamline/src/DetectorInfo.cpp
@@ -204,7 +204,7 @@ void DetectorInfo::setScanInterval(
     initScanIntervals();
   if (interval.first >= interval.second)
     throw std::runtime_error(
-        "DetectorInfo: cannot set scan interval with start > end");
+        "DetectorInfo: cannot set scan interval with start >= end");
   m_scanIntervals.access()[index] = interval;
 }
 
diff --git a/Framework/Beamline/test/DetectorInfoTest.h b/Framework/Beamline/test/DetectorInfoTest.h
index 9ca8a7d4ea5..418746bc99c 100644
--- a/Framework/Beamline/test/DetectorInfoTest.h
+++ b/Framework/Beamline/test/DetectorInfoTest.h
@@ -275,8 +275,14 @@ public:
 
   void test_setScanInterval_failures() {
     DetectorInfo info(PosVec(1), RotVec(1));
-    TS_ASSERT_THROWS(info.setScanInterval(0, {1, 1}), std::runtime_error);
-    TS_ASSERT_THROWS(info.setScanInterval(0, {2, 1}), std::runtime_error);
+    TS_ASSERT_THROWS_EQUALS(
+        info.setScanInterval(0, {1, 1}), const std::runtime_error &e,
+        std::string(e.what()),
+        "DetectorInfo: cannot set scan interval with start >= end");
+    TS_ASSERT_THROWS_EQUALS(
+        info.setScanInterval(0, {2, 1}), const std::runtime_error &e,
+        std::string(e.what()),
+        "DetectorInfo: cannot set scan interval with start >= end");
   }
 
   void test_merge_fail_size() {
@@ -285,18 +291,26 @@ public:
     a.setScanInterval(0, {0, 1});
     b.setScanInterval(0, {0, 1});
     b.setScanInterval(1, {0, 1});
-    TS_ASSERT_THROWS(a.merge(b), std::runtime_error);
+    TS_ASSERT_THROWS_EQUALS(a.merge(b), const std::runtime_error &e,
+                            std::string(e.what()),
+                            "Cannot merge DetectorInfo: size mismatch");
   }
 
   void test_merge_fail_no_intervals() {
     DetectorInfo a(PosVec(1), RotVec(1));
     DetectorInfo b(PosVec(1), RotVec(1));
     DetectorInfo c(PosVec(1), RotVec(1));
-    TS_ASSERT_THROWS(a.merge(b), std::runtime_error);
+    TS_ASSERT_THROWS_EQUALS(
+        a.merge(b), const std::runtime_error &e, std::string(e.what()),
+        "Cannot merge DetectorInfo: scan intervals not defined");
     c.setScanInterval(0, {0, 1});
-    TS_ASSERT_THROWS(a.merge(c), std::runtime_error);
+    TS_ASSERT_THROWS_EQUALS(
+        a.merge(c), const std::runtime_error &e, std::string(e.what()),
+        "Cannot merge DetectorInfo: scan intervals not defined");
     a.setScanInterval(0, {0, 1});
-    TS_ASSERT_THROWS(a.merge(b), std::runtime_error);
+    TS_ASSERT_THROWS_EQUALS(
+        a.merge(b), const std::runtime_error &e, std::string(e.what()),
+        "Cannot merge DetectorInfo: scan intervals not defined");
   }
 
   void test_merge_fail_monitor_mismatch() {
@@ -306,7 +320,9 @@ public:
     a.setScanInterval(1, {0, 1});
     b.setScanInterval(0, {0, 1});
     b.setScanInterval(1, {0, 1});
-    TS_ASSERT_THROWS(a.merge(b), std::runtime_error);
+    TS_ASSERT_THROWS_EQUALS(
+        a.merge(b), const std::runtime_error &e, std::string(e.what()),
+        "Cannot merge DetectorInfo: monitor flags mismatch");
   }
 
   void test_merge_identical_interval_failures() {
@@ -326,19 +342,28 @@ public:
 
     b = a;
     b.setMasked(0, false);
-    TS_ASSERT_THROWS(b.merge(a), std::runtime_error);
+    TS_ASSERT_THROWS_EQUALS(b.merge(a), const std::runtime_error &e,
+                            std::string(e.what()), "Cannot merge DetectorInfo: "
+                                                   "matching scan interval but "
+                                                   "mask flags differ");
     b.setMasked(0, true);
     TS_ASSERT_THROWS_NOTHING(b.merge(a));
 
     b = a;
     b.setPosition(0, pos2);
-    TS_ASSERT_THROWS(b.merge(a), std::runtime_error);
+    TS_ASSERT_THROWS_EQUALS(b.merge(a), const std::runtime_error &e,
+                            std::string(e.what()), "Cannot merge DetectorInfo: "
+                                                   "matching scan interval but "
+                                                   "positions differ");
     b.setPosition(0, pos1);
     TS_ASSERT_THROWS_NOTHING(b.merge(a));
 
     b = a;
     b.setRotation(0, rot2);
-    TS_ASSERT_THROWS(b.merge(a), std::runtime_error);
+    TS_ASSERT_THROWS_EQUALS(b.merge(a), const std::runtime_error &e,
+                            std::string(e.what()), "Cannot merge DetectorInfo: "
+                                                   "matching scan interval but "
+                                                   "rotations differ");
     b.setRotation(0, rot1);
     TS_ASSERT_THROWS_NOTHING(b.merge(a));
   }
@@ -368,11 +393,17 @@ public:
     TS_ASSERT_THROWS_NOTHING(b.merge(a));
     b = a;
     b.setScanInterval(1, {-1, 5});
-    TS_ASSERT_THROWS(b.merge(a), std::runtime_error);
+    TS_ASSERT_THROWS_EQUALS(
+        b.merge(a), const std::runtime_error &e, std::string(e.what()),
+        "Cannot merge DetectorInfo: scan intervals overlap but not identical");
     b.setScanInterval(1, {1, 5});
-    TS_ASSERT_THROWS(b.merge(a), std::runtime_error);
+    TS_ASSERT_THROWS_EQUALS(
+        b.merge(a), const std::runtime_error &e, std::string(e.what()),
+        "Cannot merge DetectorInfo: scan intervals overlap but not identical");
     b.setScanInterval(1, {1, 11});
-    TS_ASSERT_THROWS(b.merge(a), std::runtime_error);
+    TS_ASSERT_THROWS_EQUALS(
+        b.merge(a), const std::runtime_error &e, std::string(e.what()),
+        "Cannot merge DetectorInfo: scan intervals overlap but not identical");
   }
 
   void test_merge() {
-- 
GitLab