Better test assertions for exceptions.
authorTeemu Murtola <teemu.murtola@gmail.com>
Fri, 8 Mar 2013 11:49:12 +0000 (13:49 +0200)
committerTeemu Murtola <teemu.murtola@gmail.com>
Fri, 8 Mar 2013 12:00:00 +0000 (14:00 +0200)
Google Test assertions (ASSERT|EXPECT)(_NO)?_THROW only print
"Actual: it throws." or similar when the assertion fails.  Added
Gromacs-specific exception assertions to improve output in these cases.
The new assertions have a _GMX suffix, and are used the same as the
Google Test ones.

The only real code changes are in src/testutils/testasserts.h and in
src/gromacs/utility/exceptions.*; all the other changes are mechanical
replacement of existing macros.

Change-Id: Iadcf08a0148fdcb6228e0abccea89c33d817a018

18 files changed:
src/gromacs/analysisdata/tests/analysisdata.cpp
src/gromacs/analysisdata/tests/arraydata.cpp
src/gromacs/analysisdata/tests/average.cpp
src/gromacs/analysisdata/tests/histogram.cpp
src/gromacs/commandline/tests/cmdlinemodulemanager.cpp
src/gromacs/commandline/tests/cmdlineparser.cpp
src/gromacs/onlinehelp/tests/helpmanager.cpp
src/gromacs/options/tests/abstractoptionstorage.cpp
src/gromacs/options/tests/filenameoption.cpp
src/gromacs/options/tests/option.cpp
src/gromacs/options/tests/timeunitmanager.cpp
src/gromacs/selection/tests/selectioncollection.cpp
src/gromacs/selection/tests/selectionoption.cpp
src/gromacs/trajectoryanalysis/tests/moduletest.cpp
src/gromacs/utility/exceptions.cpp
src/gromacs/utility/exceptions.h
src/testutils/mock_datamodule.cpp
src/testutils/testasserts.h [new file with mode: 0644]

index 056fef918cd45cd27cbc0e9b917252f391ec3198..9a1a5685b32a2553f4d420f4fc5bae4d52f17619 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * This file is part of the GROMACS molecular simulation package.
  *
- * Copyright (c) 2011,2012, by the GROMACS development team, led by
+ * Copyright (c) 2011,2012,2013, by the GROMACS development team, led by
  * David van der Spoel, Berk Hess, Erik Lindahl, and including many
  * others, as listed in the AUTHORS file in the top-level source
  * directory and at http://www.gromacs.org.
@@ -54,6 +54,7 @@
 
 #include "testutils/datatest.h"
 #include "testutils/mock_datamodule.h"
+#include "testutils/testasserts.h"
 
 using gmx::test::MockAnalysisDataModule;
 using gmx::test::MockAnalysisDataModulePointer;
@@ -99,11 +100,11 @@ TEST(AnalysisDataInitializationTest, ChecksMultiColumnModules)
     data.setColumnCount(2);
 
     MockAnalysisDataModulePointer mod1(new MockAnalysisDataModule(0));
-    EXPECT_THROW(data.addModule(mod1), gmx::APIError);
+    EXPECT_THROW_GMX(data.addModule(mod1), gmx::APIError);
 
     MockAnalysisDataModulePointer mod2(
             new MockAnalysisDataModule(gmx::AnalysisDataModuleInterface::efAllowMulticolumn));
-    EXPECT_NO_THROW(data.addModule(mod2));
+    EXPECT_NO_THROW_GMX(data.addModule(mod2));
 }
 
 /*
@@ -117,11 +118,11 @@ TEST(AnalysisDataInitializationTest, ChecksMultiPointModules)
     data.setMultipoint(true);
 
     MockAnalysisDataModulePointer mod1(new MockAnalysisDataModule(0));
-    EXPECT_THROW(data.addModule(mod1), gmx::APIError);
+    EXPECT_THROW_GMX(data.addModule(mod1), gmx::APIError);
 
     MockAnalysisDataModulePointer mod2(
             new MockAnalysisDataModule(gmx::AnalysisDataModuleInterface::efAllowMultipoint));
-    EXPECT_NO_THROW(data.addModule(mod2));
+    EXPECT_NO_THROW_GMX(data.addModule(mod2));
 }
 
 
@@ -147,9 +148,9 @@ TEST_F(AnalysisDataTest, CallsModuleCorrectly)
     gmx::AnalysisData                data;
     data.setColumnCount(input.columnCount());
 
-    ASSERT_NO_THROW(addStaticCheckerModule(input, &data));
-    ASSERT_NO_THROW(addStaticCheckerModule(input, &data));
-    ASSERT_NO_THROW(presentAllData(input, &data));
+    ASSERT_NO_THROW_GMX(addStaticCheckerModule(input, &data));
+    ASSERT_NO_THROW_GMX(addStaticCheckerModule(input, &data));
+    ASSERT_NO_THROW_GMX(presentAllData(input, &data));
 }
 
 /*
@@ -163,9 +164,9 @@ TEST_F(AnalysisDataTest, CallsColumnModuleCorrectly)
     gmx::AnalysisData                data;
     data.setColumnCount(input.columnCount());
 
-    ASSERT_NO_THROW(addStaticColumnCheckerModule(input, 0, 2, &data));
-    ASSERT_NO_THROW(addStaticColumnCheckerModule(input, 2, 1, &data));
-    ASSERT_NO_THROW(presentAllData(input, &data));
+    ASSERT_NO_THROW_GMX(addStaticColumnCheckerModule(input, 0, 2, &data));
+    ASSERT_NO_THROW_GMX(addStaticColumnCheckerModule(input, 2, 1, &data));
+    ASSERT_NO_THROW_GMX(presentAllData(input, &data));
 }
 
 /*
@@ -178,18 +179,18 @@ TEST_F(AnalysisDataTest, CallsModuleCorrectlyWithOutOfOrderFrames)
     gmx::AnalysisData                data;
     data.setColumnCount(input.columnCount());
 
-    ASSERT_NO_THROW(addStaticCheckerModule(input, &data));
-    ASSERT_NO_THROW(addStaticColumnCheckerModule(input, 1, 2, &data));
+    ASSERT_NO_THROW_GMX(addStaticCheckerModule(input, &data));
+    ASSERT_NO_THROW_GMX(addStaticColumnCheckerModule(input, 1, 2, &data));
     gmx::AnalysisDataHandle          handle1;
     gmx::AnalysisDataHandle          handle2;
     gmx::AnalysisDataParallelOptions options(2);
-    ASSERT_NO_THROW(handle1 = data.startData(options));
-    ASSERT_NO_THROW(handle2 = data.startData(options));
-    ASSERT_NO_THROW(presentDataFrame(input, 1, handle1));
-    ASSERT_NO_THROW(presentDataFrame(input, 0, handle2));
-    ASSERT_NO_THROW(presentDataFrame(input, 2, handle1));
-    ASSERT_NO_THROW(handle1.finishData());
-    ASSERT_NO_THROW(handle2.finishData());
+    ASSERT_NO_THROW_GMX(handle1 = data.startData(options));
+    ASSERT_NO_THROW_GMX(handle2 = data.startData(options));
+    ASSERT_NO_THROW_GMX(presentDataFrame(input, 1, handle1));
+    ASSERT_NO_THROW_GMX(presentDataFrame(input, 0, handle2));
+    ASSERT_NO_THROW_GMX(presentDataFrame(input, 2, handle1));
+    ASSERT_NO_THROW_GMX(handle1.finishData());
+    ASSERT_NO_THROW_GMX(handle2.finishData());
 }
 
 /*
@@ -202,8 +203,8 @@ TEST_F(AnalysisDataTest, FullStorageWorks)
     gmx::AnalysisData                data;
     data.setColumnCount(input.columnCount());
 
-    ASSERT_NO_THROW(addStaticStorageCheckerModule(input, -1, &data));
-    ASSERT_NO_THROW(presentAllData(input, &data));
+    ASSERT_NO_THROW_GMX(addStaticStorageCheckerModule(input, -1, &data));
+    ASSERT_NO_THROW_GMX(presentAllData(input, &data));
 }
 
 /*
@@ -217,8 +218,8 @@ TEST_F(AnalysisDataTest, CanAddModuleAfterStoredData)
     data.setColumnCount(input.columnCount());
     ASSERT_TRUE(data.requestStorage(-1));
 
-    ASSERT_NO_THROW(presentAllData(input, &data));
-    ASSERT_NO_THROW(addStaticCheckerModule(input, &data));
+    ASSERT_NO_THROW_GMX(presentAllData(input, &data));
+    ASSERT_NO_THROW_GMX(addStaticCheckerModule(input, &data));
 }
 
 /*
@@ -231,8 +232,8 @@ TEST_F(AnalysisDataTest, LimitedStorageWorks)
     gmx::AnalysisData                data;
     data.setColumnCount(input.columnCount());
 
-    ASSERT_NO_THROW(addStaticStorageCheckerModule(input, 1, &data));
-    ASSERT_NO_THROW(presentAllData(input, &data));
+    ASSERT_NO_THROW_GMX(addStaticStorageCheckerModule(input, 1, &data));
+    ASSERT_NO_THROW_GMX(presentAllData(input, &data));
 }
 
 //! Input data for multipoint gmx::AnalysisData tests.
@@ -253,9 +254,9 @@ TEST_F(AnalysisDataTest, MultipointCallsModuleCorrectly)
     data.setColumnCount(input.columnCount());
     data.setMultipoint(true);
 
-    ASSERT_NO_THROW(addStaticCheckerModule(input, &data));
-    ASSERT_NO_THROW(addStaticCheckerModule(input, &data));
-    ASSERT_NO_THROW(presentAllData(input, &data));
+    ASSERT_NO_THROW_GMX(addStaticCheckerModule(input, &data));
+    ASSERT_NO_THROW_GMX(addStaticCheckerModule(input, &data));
+    ASSERT_NO_THROW_GMX(presentAllData(input, &data));
 }
 
 /*
@@ -270,9 +271,9 @@ TEST_F(AnalysisDataTest, MultipointCallsColumnModuleCorrectly)
     data.setColumnCount(input.columnCount());
     data.setMultipoint(true);
 
-    ASSERT_NO_THROW(addStaticColumnCheckerModule(input, 0, 2, &data));
-    ASSERT_NO_THROW(addStaticColumnCheckerModule(input, 2, 1, &data));
-    ASSERT_NO_THROW(presentAllData(input, &data));
+    ASSERT_NO_THROW_GMX(addStaticColumnCheckerModule(input, 0, 2, &data));
+    ASSERT_NO_THROW_GMX(addStaticColumnCheckerModule(input, 2, 1, &data));
+    ASSERT_NO_THROW_GMX(presentAllData(input, &data));
 }
 
 } // namespace
index b933185bcf2d8f2c39da995c698729c7176678c6..8baf800b6443cbea7d12065973fdda5e61c14949 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * This file is part of the GROMACS molecular simulation package.
  *
- * Copyright (c) 2012, by the GROMACS development team, led by
+ * Copyright (c) 2012,2013, by the GROMACS development team, led by
  * David van der Spoel, Berk Hess, Erik Lindahl, and including many
  * others, as listed in the AUTHORS file in the top-level source
  * directory and at http://www.gromacs.org.
@@ -49,6 +49,7 @@
 #include "gromacs/analysisdata/arraydata.h"
 
 #include "testutils/datatest.h"
+#include "testutils/testasserts.h"
 
 namespace
 {
@@ -76,9 +77,9 @@ TEST_F(AnalysisArrayDataTest, CallsModuleCorrectly)
     data.setXAxis(1.0, 1.0);
     setupArrayData(input, &data);
 
-    ASSERT_NO_THROW(addStaticCheckerModule(input, &data));
-    ASSERT_NO_THROW(addStaticCheckerModule(input, &data));
-    ASSERT_NO_THROW(data.valuesReady());
+    ASSERT_NO_THROW_GMX(addStaticCheckerModule(input, &data));
+    ASSERT_NO_THROW_GMX(addStaticCheckerModule(input, &data));
+    ASSERT_NO_THROW_GMX(data.valuesReady());
 }
 
 TEST_F(AnalysisArrayDataTest, StorageWorks)
@@ -88,8 +89,8 @@ TEST_F(AnalysisArrayDataTest, StorageWorks)
     data.setXAxis(1.0, 1.0);
     setupArrayData(input, &data);
 
-    ASSERT_NO_THROW(addStaticStorageCheckerModule(input, -1, &data));
-    ASSERT_NO_THROW(data.valuesReady());
+    ASSERT_NO_THROW_GMX(addStaticStorageCheckerModule(input, -1, &data));
+    ASSERT_NO_THROW_GMX(data.valuesReady());
 }
 
 } // namespace
index 56cb76d37a1e6275dc470644e972c05ff42df290..078570bb2234cd0f33413d750145a4de8665ac29 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * This file is part of the GROMACS molecular simulation package.
  *
- * Copyright (c) 2012, by the GROMACS development team, led by
+ * Copyright (c) 2012,2013, by the GROMACS development team, led by
  * David van der Spoel, Berk Hess, Erik Lindahl, and including many
  * others, as listed in the AUTHORS file in the top-level source
  * directory and at http://www.gromacs.org.
@@ -52,6 +52,7 @@
 #include "gromacs/analysisdata/modules/average.h"
 
 #include "testutils/datatest.h"
+#include "testutils/testasserts.h"
 
 namespace
 {
@@ -93,10 +94,10 @@ TEST_F(AverageModuleTest, BasicTest)
             new gmx::AnalysisDataAverageModule);
     data.addModule(module);
 
-    ASSERT_NO_THROW(addStaticCheckerModule(input, &data));
-    ASSERT_NO_THROW(addReferenceCheckerModule("InputData", &data));
-    ASSERT_NO_THROW(addReferenceCheckerModule("Average", module.get()));
-    ASSERT_NO_THROW(presentAllData(input, &data));
+    ASSERT_NO_THROW_GMX(addStaticCheckerModule(input, &data));
+    ASSERT_NO_THROW_GMX(addReferenceCheckerModule("InputData", &data));
+    ASSERT_NO_THROW_GMX(addReferenceCheckerModule("Average", module.get()));
+    ASSERT_NO_THROW_GMX(presentAllData(input, &data));
 }
 
 TEST_F(AverageModuleTest, HandlesMultipointData)
@@ -109,10 +110,10 @@ TEST_F(AverageModuleTest, HandlesMultipointData)
             new gmx::AnalysisDataAverageModule);
     data.addModule(module);
 
-    ASSERT_NO_THROW(addStaticCheckerModule(input, &data));
-    ASSERT_NO_THROW(addReferenceCheckerModule("InputData", &data));
-    ASSERT_NO_THROW(addReferenceCheckerModule("Average", module.get()));
-    ASSERT_NO_THROW(presentAllData(input, &data));
+    ASSERT_NO_THROW_GMX(addStaticCheckerModule(input, &data));
+    ASSERT_NO_THROW_GMX(addReferenceCheckerModule("InputData", &data));
+    ASSERT_NO_THROW_GMX(addReferenceCheckerModule("Average", module.get()));
+    ASSERT_NO_THROW_GMX(presentAllData(input, &data));
 }
 
 TEST_F(AverageModuleTest, CanCustomizeXAxis)
@@ -124,10 +125,10 @@ TEST_F(AverageModuleTest, CanCustomizeXAxis)
     data.addModule(module);
     module->setXAxis(0.5, 0.5);
 
-    ASSERT_NO_THROW(addStaticCheckerModule(input, &data));
-    ASSERT_NO_THROW(addReferenceCheckerModule("InputData", &data));
-    ASSERT_NO_THROW(addReferenceCheckerModule("Average", module.get()));
-    ASSERT_NO_THROW(presentAllData(input, &data));
+    ASSERT_NO_THROW_GMX(addStaticCheckerModule(input, &data));
+    ASSERT_NO_THROW_GMX(addReferenceCheckerModule("InputData", &data));
+    ASSERT_NO_THROW_GMX(addReferenceCheckerModule("Average", module.get()));
+    ASSERT_NO_THROW_GMX(presentAllData(input, &data));
 }
 
 /********************************************************************
@@ -146,10 +147,10 @@ TEST_F(FrameAverageModuleTest, BasicTest)
             new gmx::AnalysisDataFrameAverageModule);
     data.addModule(module);
 
-    ASSERT_NO_THROW(addStaticCheckerModule(input, &data));
-    ASSERT_NO_THROW(addReferenceCheckerModule("InputData", &data));
-    ASSERT_NO_THROW(addReferenceCheckerModule("FrameAverage", module.get()));
-    ASSERT_NO_THROW(presentAllData(input, &data));
+    ASSERT_NO_THROW_GMX(addStaticCheckerModule(input, &data));
+    ASSERT_NO_THROW_GMX(addReferenceCheckerModule("InputData", &data));
+    ASSERT_NO_THROW_GMX(addReferenceCheckerModule("FrameAverage", module.get()));
+    ASSERT_NO_THROW_GMX(presentAllData(input, &data));
 }
 
 } // namespace
index ad699e54c9f6db5185b43c8b8e1803a3ddd0b22c..ed392cd863514ff7e334d3aea3e67502a9ecbbad 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * This file is part of the GROMACS molecular simulation package.
  *
- * Copyright (c) 2012, by the GROMACS development team, led by
+ * Copyright (c) 2012,2013, by the GROMACS development team, led by
  * David van der Spoel, Berk Hess, Erik Lindahl, and including many
  * others, as listed in the AUTHORS file in the top-level source
  * directory and at http://www.gromacs.org.
@@ -52,6 +52,7 @@
 #include "gromacs/analysisdata/modules/histogram.h"
 
 #include "testutils/datatest.h"
+#include "testutils/testasserts.h"
 
 namespace
 {
@@ -168,13 +169,13 @@ TEST_F(SimpleHistogramModuleTest, ComputesCorrectly)
                     gmx::histogramFromRange(1.0, 3.0).binCount(4)));
     data.addModule(module);
 
-    ASSERT_NO_THROW(addStaticCheckerModule(input, &data));
-    ASSERT_NO_THROW(addReferenceCheckerModule("InputData", &data));
-    ASSERT_NO_THROW(addReferenceCheckerModule("Histogram", module.get()));
-    ASSERT_NO_THROW(addReferenceCheckerModule("HistogramAverage",
-                                              &module->averager()));
-    ASSERT_NO_THROW(presentAllData(input, &data));
-    ASSERT_NO_THROW(module->averager().done());
+    ASSERT_NO_THROW_GMX(addStaticCheckerModule(input, &data));
+    ASSERT_NO_THROW_GMX(addReferenceCheckerModule("InputData", &data));
+    ASSERT_NO_THROW_GMX(addReferenceCheckerModule("Histogram", module.get()));
+    ASSERT_NO_THROW_GMX(addReferenceCheckerModule("HistogramAverage",
+                                                  &module->averager()));
+    ASSERT_NO_THROW_GMX(presentAllData(input, &data));
+    ASSERT_NO_THROW_GMX(module->averager().done());
 }
 
 
@@ -189,13 +190,13 @@ TEST_F(SimpleHistogramModuleTest, ComputesCorrectlyWithAll)
                     gmx::histogramFromRange(1.0, 3.0).binCount(4).includeAll()));
     data.addModule(module);
 
-    ASSERT_NO_THROW(addStaticCheckerModule(input, &data));
-    ASSERT_NO_THROW(addReferenceCheckerModule("InputData", &data));
-    ASSERT_NO_THROW(addReferenceCheckerModule("Histogram", module.get()));
-    ASSERT_NO_THROW(addReferenceCheckerModule("HistogramAverage",
-                                              &module->averager()));
-    ASSERT_NO_THROW(presentAllData(input, &data));
-    ASSERT_NO_THROW(module->averager().done());
+    ASSERT_NO_THROW_GMX(addStaticCheckerModule(input, &data));
+    ASSERT_NO_THROW_GMX(addReferenceCheckerModule("InputData", &data));
+    ASSERT_NO_THROW_GMX(addReferenceCheckerModule("Histogram", module.get()));
+    ASSERT_NO_THROW_GMX(addReferenceCheckerModule("HistogramAverage",
+                                                  &module->averager()));
+    ASSERT_NO_THROW_GMX(presentAllData(input, &data));
+    ASSERT_NO_THROW_GMX(module->averager().done());
 }
 
 
@@ -224,13 +225,13 @@ TEST_F(WeightedHistogramModuleTest, ComputesCorrectly)
                     gmx::histogramFromRange(1.0, 3.0).binCount(4)));
     data.addModule(module);
 
-    ASSERT_NO_THROW(addStaticCheckerModule(input, &data));
-    ASSERT_NO_THROW(addReferenceCheckerModule("InputData", &data));
-    ASSERT_NO_THROW(addReferenceCheckerModule("Histogram", module.get()));
-    ASSERT_NO_THROW(addReferenceCheckerModule("HistogramAverage",
-                                              &module->averager()));
-    ASSERT_NO_THROW(presentAllData(input, &data));
-    ASSERT_NO_THROW(module->averager().done());
+    ASSERT_NO_THROW_GMX(addStaticCheckerModule(input, &data));
+    ASSERT_NO_THROW_GMX(addReferenceCheckerModule("InputData", &data));
+    ASSERT_NO_THROW_GMX(addReferenceCheckerModule("Histogram", module.get()));
+    ASSERT_NO_THROW_GMX(addReferenceCheckerModule("HistogramAverage",
+                                                  &module->averager()));
+    ASSERT_NO_THROW_GMX(presentAllData(input, &data));
+    ASSERT_NO_THROW_GMX(module->averager().done());
 }
 
 
@@ -245,13 +246,13 @@ TEST_F(WeightedHistogramModuleTest, ComputesCorrectlyWithAll)
                     gmx::histogramFromRange(1.0, 3.0).binCount(4).includeAll()));
     data.addModule(module);
 
-    ASSERT_NO_THROW(addStaticCheckerModule(input, &data));
-    ASSERT_NO_THROW(addReferenceCheckerModule("InputData", &data));
-    ASSERT_NO_THROW(addReferenceCheckerModule("Histogram", module.get()));
-    ASSERT_NO_THROW(addReferenceCheckerModule("HistogramAverage",
-                                              &module->averager()));
-    ASSERT_NO_THROW(presentAllData(input, &data));
-    ASSERT_NO_THROW(module->averager().done());
+    ASSERT_NO_THROW_GMX(addStaticCheckerModule(input, &data));
+    ASSERT_NO_THROW_GMX(addReferenceCheckerModule("InputData", &data));
+    ASSERT_NO_THROW_GMX(addReferenceCheckerModule("Histogram", module.get()));
+    ASSERT_NO_THROW_GMX(addReferenceCheckerModule("HistogramAverage",
+                                                  &module->averager()));
+    ASSERT_NO_THROW_GMX(presentAllData(input, &data));
+    ASSERT_NO_THROW_GMX(module->averager().done());
 }
 
 
@@ -273,10 +274,10 @@ TEST_F(BinAverageModuleTest, ComputesCorrectly)
                     gmx::histogramFromRange(1.0, 3.0).binCount(4)));
     data.addModule(module);
 
-    ASSERT_NO_THROW(addStaticCheckerModule(input, &data));
-    ASSERT_NO_THROW(addReferenceCheckerModule("InputData", &data));
-    ASSERT_NO_THROW(addReferenceCheckerModule("HistogramAverage", module.get()));
-    ASSERT_NO_THROW(presentAllData(input, &data));
+    ASSERT_NO_THROW_GMX(addStaticCheckerModule(input, &data));
+    ASSERT_NO_THROW_GMX(addReferenceCheckerModule("InputData", &data));
+    ASSERT_NO_THROW_GMX(addReferenceCheckerModule("HistogramAverage", module.get()));
+    ASSERT_NO_THROW_GMX(presentAllData(input, &data));
 }
 
 
@@ -291,10 +292,10 @@ TEST_F(BinAverageModuleTest, ComputesCorrectlyWithAll)
                     gmx::histogramFromRange(1.0, 3.0).binCount(4).includeAll()));
     data.addModule(module);
 
-    ASSERT_NO_THROW(addStaticCheckerModule(input, &data));
-    ASSERT_NO_THROW(addReferenceCheckerModule("InputData", &data));
-    ASSERT_NO_THROW(addReferenceCheckerModule("HistogramAverage", module.get()));
-    ASSERT_NO_THROW(presentAllData(input, &data));
+    ASSERT_NO_THROW_GMX(addStaticCheckerModule(input, &data));
+    ASSERT_NO_THROW_GMX(addReferenceCheckerModule("InputData", &data));
+    ASSERT_NO_THROW_GMX(addReferenceCheckerModule("HistogramAverage", module.get()));
+    ASSERT_NO_THROW_GMX(presentAllData(input, &data));
 }
 
 
@@ -350,14 +351,14 @@ TEST_F(AbstractAverageHistogramTest, ClonesCorrectly)
             gmx::histogramFromBins(1.0, input.frameCount(), 0.5).integerBins());
     setupArrayData(input, &data);
 
-    ASSERT_NO_THROW(addStaticCheckerModule(input, &data));
+    ASSERT_NO_THROW_GMX(addStaticCheckerModule(input, &data));
     gmx::AverageHistogramPointer copy(data.clone());
-    ASSERT_NO_THROW(addStaticCheckerModule(input, copy.get()));
-    ASSERT_NO_THROW(copy->done());
-    ASSERT_NO_THROW(data.done());
+    ASSERT_NO_THROW_GMX(addStaticCheckerModule(input, copy.get()));
+    ASSERT_NO_THROW_GMX(copy->done());
+    ASSERT_NO_THROW_GMX(data.done());
     gmx::AverageHistogramPointer copy2(data.clone());
-    ASSERT_NO_THROW(addStaticCheckerModule(input, copy2.get()));
-    ASSERT_NO_THROW(copy2->done());
+    ASSERT_NO_THROW_GMX(addStaticCheckerModule(input, copy2.get()));
+    ASSERT_NO_THROW_GMX(copy2->done());
 }
 
 
@@ -368,12 +369,12 @@ TEST_F(AbstractAverageHistogramTest, ResamplesAtDoubleBinWidth)
             gmx::histogramFromBins(1.0, input.frameCount(), 0.5).integerBins());
     setupArrayData(input, &data);
 
-    ASSERT_NO_THROW(addStaticCheckerModule(input, &data));
-    ASSERT_NO_THROW(addReferenceCheckerModule("InputData", &data));
+    ASSERT_NO_THROW_GMX(addStaticCheckerModule(input, &data));
+    ASSERT_NO_THROW_GMX(addReferenceCheckerModule("InputData", &data));
     gmx::AverageHistogramPointer resampled(data.resampleDoubleBinWidth(false));
-    ASSERT_NO_THROW(addReferenceCheckerModule("ResampledHistogram", resampled.get()));
-    ASSERT_NO_THROW(data.done());
-    ASSERT_NO_THROW(resampled->done());
+    ASSERT_NO_THROW_GMX(addReferenceCheckerModule("ResampledHistogram", resampled.get()));
+    ASSERT_NO_THROW_GMX(data.done());
+    ASSERT_NO_THROW_GMX(resampled->done());
 }
 
 
@@ -384,12 +385,12 @@ TEST_F(AbstractAverageHistogramTest, ResamplesAtDoubleBinWidthWithIntegerBins)
             gmx::histogramFromBins(1.0, input.frameCount(), 0.5).integerBins());
     setupArrayData(input, &data);
 
-    ASSERT_NO_THROW(addStaticCheckerModule(input, &data));
-    ASSERT_NO_THROW(addReferenceCheckerModule("InputData", &data));
+    ASSERT_NO_THROW_GMX(addStaticCheckerModule(input, &data));
+    ASSERT_NO_THROW_GMX(addReferenceCheckerModule("InputData", &data));
     gmx::AverageHistogramPointer resampled(data.resampleDoubleBinWidth(true));
-    ASSERT_NO_THROW(addReferenceCheckerModule("ResampledHistogram", resampled.get()));
-    ASSERT_NO_THROW(data.done());
-    ASSERT_NO_THROW(resampled->done());
+    ASSERT_NO_THROW_GMX(addReferenceCheckerModule("ResampledHistogram", resampled.get()));
+    ASSERT_NO_THROW_GMX(data.done());
+    ASSERT_NO_THROW_GMX(resampled->done());
 }
 
 } // namespace
index 5469ba99ff8a6f0abe9d52c2a3fededd89335388..594910425198cbc2a04046c43e1738ccdfa0b0a0 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * This file is part of the GROMACS molecular simulation package.
  *
- * Copyright (c) 2012, by the GROMACS development team, led by
+ * Copyright (c) 2012,2013, by the GROMACS development team, led by
  * David van der Spoel, Berk Hess, Erik Lindahl, and including many
  * others, as listed in the AUTHORS file in the top-level source
  * directory and at http://www.gromacs.org.
@@ -54,6 +54,7 @@
 
 #include "testutils/cmdlinetest.h"
 #include "testutils/mock_helptopic.h"
+#include "testutils/testasserts.h"
 
 namespace
 {
@@ -152,7 +153,7 @@ TEST_F(CommandLineModuleManagerTest, RunsModule)
     EXPECT_CALL(mod1, run(_, _))
         .With(Args<1, 0>(ElementsAreArray(args.argv() + 1, args.argc() - 1)));
     int rc = 0;
-    ASSERT_NO_THROW(rc = manager().run(args.argc(), args.argv()));
+    ASSERT_NO_THROW_GMX(rc = manager().run(args.argc(), args.argv()));
     ASSERT_EQ(0, rc);
 }
 
@@ -168,7 +169,7 @@ TEST_F(CommandLineModuleManagerTest, RunsModuleHelp)
     using ::testing::_;
     EXPECT_CALL(mod1, writeHelp(_));
     int rc = 0;
-    ASSERT_NO_THROW(rc = manager().run(args.argc(), args.argv()));
+    ASSERT_NO_THROW_GMX(rc = manager().run(args.argc(), args.argv()));
     ASSERT_EQ(0, rc);
 }
 
@@ -184,7 +185,7 @@ TEST_F(CommandLineModuleManagerTest, PrintsHelpOnTopic)
     using ::testing::_;
     EXPECT_CALL(topic, writeHelp(_));
     int rc = 0;
-    ASSERT_NO_THROW(rc = manager().run(args.argc(), args.argv()));
+    ASSERT_NO_THROW_GMX(rc = manager().run(args.argc(), args.argv()));
     ASSERT_EQ(0, rc);
 }
 
@@ -203,7 +204,7 @@ TEST_F(CommandLineModuleManagerTest, RunsModuleBasedOnBinaryName)
     EXPECT_CALL(mod1, run(_, _))
         .With(Args<1, 0>(ElementsAreArray(args.argv(), args.argc())));
     int rc = 0;
-    ASSERT_NO_THROW(rc = manager().run(args.argc(), args.argv()));
+    ASSERT_NO_THROW_GMX(rc = manager().run(args.argc(), args.argv()));
     ASSERT_EQ(0, rc);
 }
 
@@ -222,7 +223,7 @@ TEST_F(CommandLineModuleManagerTest, RunsModuleBasedOnBinaryNameWithPathAndSuffi
     EXPECT_CALL(mod1, run(_, _))
         .With(Args<1, 0>(ElementsAreArray(args.argv(), args.argc())));
     int rc = 0;
-    ASSERT_NO_THROW(rc = manager().run(args.argc(), args.argv()));
+    ASSERT_NO_THROW_GMX(rc = manager().run(args.argc(), args.argv()));
     ASSERT_EQ(0, rc);
 }
 
@@ -241,7 +242,7 @@ TEST_F(CommandLineModuleManagerTest, HandlesConflictingBinaryAndModuleNames)
     EXPECT_CALL(mod1, run(_, _))
         .With(Args<1, 0>(ElementsAreArray(args.argv() + 1, args.argc() - 1)));
     int rc = 0;
-    ASSERT_NO_THROW(rc = manager().run(args.argc(), args.argv()));
+    ASSERT_NO_THROW_GMX(rc = manager().run(args.argc(), args.argv()));
     ASSERT_EQ(0, rc);
 }
 
index 6b1a8cba621355487cd6bf11741f85759fc7fe19..d443acc2601c47487f0f8d4dd7d351c16c6c90a9 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * This file is part of the GROMACS molecular simulation package.
  *
- * Copyright (c) 2010,2011,2012, by the GROMACS development team, led by
+ * Copyright (c) 2010,2011,2012,2013, by the GROMACS development team, led by
  * David van der Spoel, Berk Hess, Erik Lindahl, and including many
  * others, as listed in the AUTHORS file in the top-level source
  * directory and at http://www.gromacs.org.
@@ -51,6 +51,7 @@
 #include "gromacs/options/options.h"
 
 #include "testutils/cmdlinetest.h"
+#include "testutils/testasserts.h"
 
 namespace
 {
@@ -87,8 +88,8 @@ TEST_F(CommandLineParserTest, HandlesSingleValues)
         "test", "-flag", "yes", "-mvi", "2", "-mvd", "2.7"
     };
     CommandLine       args(CommandLine::create(cmdline));
-    ASSERT_NO_THROW(parser_.parse(&args.argc(), args.argv()));
-    ASSERT_NO_THROW(options_.finish());
+    ASSERT_NO_THROW_GMX(parser_.parse(&args.argc(), args.argv()));
+    ASSERT_NO_THROW_GMX(options_.finish());
 
     EXPECT_TRUE(flag_);
     ASSERT_EQ(1U, ivalues_.size());
@@ -103,8 +104,8 @@ TEST_F(CommandLineParserTest, HandlesNegativeNumbers)
         "test", "-mvi", "1", "-2", "-mvd", "-2.7"
     };
     CommandLine       args(CommandLine::create(cmdline));
-    ASSERT_NO_THROW(parser_.parse(&args.argc(), args.argv()));
-    ASSERT_NO_THROW(options_.finish());
+    ASSERT_NO_THROW_GMX(parser_.parse(&args.argc(), args.argv()));
+    ASSERT_NO_THROW_GMX(options_.finish());
 
     ASSERT_EQ(2U, ivalues_.size());
     EXPECT_EQ(1, ivalues_[0]);
index b1cfd1d5eaa3a5067a37184205ca8820255400e7..6a0506317e43ecd6b481c49b1ab35889ae58bc3a 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * This file is part of the GROMACS molecular simulation package.
  *
- * Copyright (c) 2012, by the GROMACS development team, led by
+ * Copyright (c) 2012,2013, by the GROMACS development team, led by
  * David van der Spoel, Berk Hess, Erik Lindahl, and including many
  * others, as listed in the AUTHORS file in the top-level source
  * directory and at http://www.gromacs.org.
@@ -53,6 +53,7 @@
 
 #include "testutils/mock_helptopic.h"
 #include "testutils/stringtest.h"
+#include "testutils/testasserts.h"
 #include "testutils/testfilemanager.h"
 
 namespace
@@ -106,8 +107,8 @@ TEST_F(HelpManagerTest, HandlesSubTopics)
 
     using ::testing::_;
     EXPECT_CALL(firstSub, writeHelp(_));
-    ASSERT_NO_THROW(manager_.enterTopic("first"));
-    ASSERT_NO_THROW(manager_.enterTopic("firstsub"));
+    ASSERT_NO_THROW_GMX(manager_.enterTopic("first"));
+    ASSERT_NO_THROW_GMX(manager_.enterTopic("firstsub"));
     manager_.writeCurrentTopic();
 }
 
@@ -118,11 +119,11 @@ TEST_F(HelpManagerTest, HandlesInvalidTopics)
     first.addSubTopic("firstsub", "First subtopic", "First subtopic text");
     rootTopic_.addSubTopic("second", "Second topic", "Second topic text");
 
-    ASSERT_THROW(manager_.enterTopic("unknown"), gmx::InvalidInputError);
-    ASSERT_NO_THROW(manager_.enterTopic("first"));
-    ASSERT_THROW(manager_.enterTopic("unknown"), gmx::InvalidInputError);
-    ASSERT_THROW(manager_.enterTopic("second"), gmx::InvalidInputError);
-    ASSERT_NO_THROW(manager_.enterTopic("firstsub"));
+    ASSERT_THROW_GMX(manager_.enterTopic("unknown"), gmx::InvalidInputError);
+    ASSERT_NO_THROW_GMX(manager_.enterTopic("first"));
+    ASSERT_THROW_GMX(manager_.enterTopic("unknown"), gmx::InvalidInputError);
+    ASSERT_THROW_GMX(manager_.enterTopic("second"), gmx::InvalidInputError);
+    ASSERT_NO_THROW_GMX(manager_.enterTopic("firstsub"));
 }
 
 /********************************************************************
@@ -151,8 +152,8 @@ class HelpTopicFormattingTest : public HelpTestBase
 
 void HelpTopicFormattingTest::checkHelpFormatting()
 {
-    ASSERT_NO_THROW(manager_.enterTopic("testtopic"));
-    ASSERT_NO_THROW(manager_.writeCurrentTopic());
+    ASSERT_NO_THROW_GMX(manager_.enterTopic("testtopic"));
+    ASSERT_NO_THROW_GMX(manager_.writeCurrentTopic());
     helpFile_.close();
 
     checkFileContents(filename_, "HelpText");
index 2876b35dd917ad13ee650da68afbd73550abb8af..60b39afc28fa4f474c36c32d9b2c2edfda05d1fb 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * This file is part of the GROMACS molecular simulation package.
  *
- * Copyright (c) 2010,2011,2012, by the GROMACS development team, led by
+ * Copyright (c) 2010,2011,2012,2013, by the GROMACS development team, led by
  * David van der Spoel, Berk Hess, Erik Lindahl, and including many
  * others, as listed in the AUTHORS file in the top-level source
  * directory and at http://www.gromacs.org.
@@ -53,6 +53,8 @@
 #include "gromacs/options/optionstoragetemplate.h"
 #include "gromacs/options/optionsassigner.h"
 #include "gromacs/utility/exceptions.h"
+
+#include "testutils/testasserts.h"
 #include "testutils/testexceptions.h"
 
 namespace
@@ -194,9 +196,9 @@ TEST(AbstractOptionStorageTest, HandlesSetInFinish)
     }
 
     gmx::OptionsAssigner assigner(&options);
-    EXPECT_NO_THROW(assigner.start());
-    EXPECT_NO_THROW(assigner.finish());
-    EXPECT_NO_THROW(options.finish());
+    EXPECT_NO_THROW_GMX(assigner.start());
+    EXPECT_NO_THROW_GMX(assigner.finish());
+    EXPECT_NO_THROW_GMX(options.finish());
 
     ASSERT_EQ(1U, values.size());
     EXPECT_EQ("dummy", values[0]);
@@ -227,14 +229,14 @@ TEST(AbstractOptionStorageTest, HandlesValueRemoval)
     }
 
     gmx::OptionsAssigner assigner(&options);
-    EXPECT_NO_THROW(assigner.start());
-    ASSERT_NO_THROW(assigner.startOption("name"));
-    EXPECT_NO_THROW(assigner.appendValue("a"));
-    EXPECT_NO_THROW(assigner.appendValue("b"));
-    EXPECT_NO_THROW(assigner.appendValue("c"));
-    EXPECT_NO_THROW(assigner.finishOption());
-    EXPECT_NO_THROW(assigner.finish());
-    EXPECT_NO_THROW(options.finish());
+    EXPECT_NO_THROW_GMX(assigner.start());
+    ASSERT_NO_THROW_GMX(assigner.startOption("name"));
+    EXPECT_NO_THROW_GMX(assigner.appendValue("a"));
+    EXPECT_NO_THROW_GMX(assigner.appendValue("b"));
+    EXPECT_NO_THROW_GMX(assigner.appendValue("c"));
+    EXPECT_NO_THROW_GMX(assigner.finishOption());
+    EXPECT_NO_THROW_GMX(assigner.finish());
+    EXPECT_NO_THROW_GMX(options.finish());
 
     ASSERT_EQ(2U, values.size());
     EXPECT_EQ("a", values[0]);
@@ -267,13 +269,13 @@ TEST(AbstractOptionStorageTest, HandlesValueAddition)
     }
 
     gmx::OptionsAssigner assigner(&options);
-    EXPECT_NO_THROW(assigner.start());
-    ASSERT_NO_THROW(assigner.startOption("name"));
-    EXPECT_NO_THROW(assigner.appendValue("a"));
-    EXPECT_NO_THROW(assigner.appendValue("b"));
-    EXPECT_NO_THROW(assigner.finishOption());
-    EXPECT_NO_THROW(assigner.finish());
-    EXPECT_NO_THROW(options.finish());
+    EXPECT_NO_THROW_GMX(assigner.start());
+    ASSERT_NO_THROW_GMX(assigner.startOption("name"));
+    EXPECT_NO_THROW_GMX(assigner.appendValue("a"));
+    EXPECT_NO_THROW_GMX(assigner.appendValue("b"));
+    EXPECT_NO_THROW_GMX(assigner.finishOption());
+    EXPECT_NO_THROW_GMX(assigner.finish());
+    EXPECT_NO_THROW_GMX(options.finish());
 
     ASSERT_EQ(3U, values.size());
     EXPECT_EQ("a", values[0]);
@@ -306,13 +308,13 @@ TEST(AbstractOptionStorageTest, HandlesTooManyValueAddition)
     }
 
     gmx::OptionsAssigner assigner(&options);
-    EXPECT_NO_THROW(assigner.start());
-    ASSERT_NO_THROW(assigner.startOption("name"));
-    EXPECT_NO_THROW(assigner.appendValue("a"));
-    EXPECT_THROW(assigner.appendValue("b"), gmx::InvalidInputError);
-    EXPECT_NO_THROW(assigner.finishOption());
-    EXPECT_NO_THROW(assigner.finish());
-    EXPECT_NO_THROW(options.finish());
+    EXPECT_NO_THROW_GMX(assigner.start());
+    ASSERT_NO_THROW_GMX(assigner.startOption("name"));
+    EXPECT_NO_THROW_GMX(assigner.appendValue("a"));
+    EXPECT_THROW_GMX(assigner.appendValue("b"), gmx::InvalidInputError);
+    EXPECT_NO_THROW_GMX(assigner.finishOption());
+    EXPECT_NO_THROW_GMX(assigner.finish());
+    EXPECT_NO_THROW_GMX(options.finish());
 
     ASSERT_TRUE(values.empty());
 }
@@ -341,12 +343,12 @@ TEST(AbstractOptionStorageTest, AllowsEmptyValues)
     }
 
     gmx::OptionsAssigner assigner(&options);
-    EXPECT_NO_THROW(assigner.start());
-    EXPECT_NO_THROW(assigner.startOption("name"));
-    EXPECT_NO_THROW(assigner.appendValue("a"));
-    EXPECT_NO_THROW(assigner.finishOption());
-    EXPECT_NO_THROW(assigner.finish());
-    EXPECT_NO_THROW(options.finish());
+    EXPECT_NO_THROW_GMX(assigner.start());
+    EXPECT_NO_THROW_GMX(assigner.startOption("name"));
+    EXPECT_NO_THROW_GMX(assigner.appendValue("a"));
+    EXPECT_NO_THROW_GMX(assigner.finishOption());
+    EXPECT_NO_THROW_GMX(assigner.finish());
+    EXPECT_NO_THROW_GMX(options.finish());
 
     ASSERT_EQ(0U, values.size());
 }
index d7ac26ec86d45081db3460f8a4bfd26e380d0295..e626853a77cc70bd11a5ea816cd5fd66b47188e4 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * This file is part of the GROMACS molecular simulation package.
  *
- * Copyright (c) 2012, by the GROMACS development team, led by
+ * Copyright (c) 2012,2013, by the GROMACS development team, led by
  * David van der Spoel, Berk Hess, Erik Lindahl, and including many
  * others, as listed in the AUTHORS file in the top-level source
  * directory and at http://www.gromacs.org.
@@ -49,6 +49,7 @@
 #include "gromacs/utility/exceptions.h"
 #include "gromacs/utility/file.h"
 
+#include "testutils/testasserts.h"
 #include "testutils/testfilemanager.h"
 
 namespace
@@ -61,17 +62,17 @@ TEST(FileNameOptionTest, AddsMissingExtension)
 {
     gmx::Options           options(NULL, NULL);
     std::string            value;
-    ASSERT_NO_THROW(options.addOption(
-                            FileNameOption("f").store(&value)
-                                .filetype(gmx::eftTrajectory).outputFile()));
+    ASSERT_NO_THROW_GMX(options.addOption(
+                                FileNameOption("f").store(&value)
+                                    .filetype(gmx::eftTrajectory).outputFile()));
 
     gmx::OptionsAssigner assigner(&options);
-    EXPECT_NO_THROW(assigner.start());
-    EXPECT_NO_THROW(assigner.startOption("f"));
-    EXPECT_NO_THROW(assigner.appendValue("testfile"));
-    EXPECT_NO_THROW(assigner.finishOption());
-    EXPECT_NO_THROW(assigner.finish());
-    EXPECT_NO_THROW(options.finish());
+    EXPECT_NO_THROW_GMX(assigner.start());
+    EXPECT_NO_THROW_GMX(assigner.startOption("f"));
+    EXPECT_NO_THROW_GMX(assigner.appendValue("testfile"));
+    EXPECT_NO_THROW_GMX(assigner.finishOption());
+    EXPECT_NO_THROW_GMX(assigner.finish());
+    EXPECT_NO_THROW_GMX(options.finish());
 
     EXPECT_EQ("testfile.xtc", value);
 }
@@ -80,16 +81,16 @@ TEST(FileNameOptionTest, HandlesRequiredDefaultValueWithoutExtension)
 {
     gmx::Options           options(NULL, NULL);
     std::string            value;
-    ASSERT_NO_THROW(options.addOption(
-                            FileNameOption("f").store(&value).required()
-                                .filetype(gmx::eftGenericData).outputFile()
-                                .defaultBasename("testfile")));
+    ASSERT_NO_THROW_GMX(options.addOption(
+                                FileNameOption("f").store(&value).required()
+                                    .filetype(gmx::eftGenericData).outputFile()
+                                    .defaultBasename("testfile")));
     EXPECT_EQ("testfile.dat", value);
 
     gmx::OptionsAssigner assigner(&options);
-    EXPECT_NO_THROW(assigner.start());
-    EXPECT_NO_THROW(assigner.finish());
-    EXPECT_NO_THROW(options.finish());
+    EXPECT_NO_THROW_GMX(assigner.start());
+    EXPECT_NO_THROW_GMX(assigner.finish());
+    EXPECT_NO_THROW_GMX(options.finish());
 
     EXPECT_EQ("testfile.dat", value);
 }
@@ -98,18 +99,18 @@ TEST(FileNameOptionTest, HandlesOptionalDefaultValueWithoutExtension)
 {
     gmx::Options           options(NULL, NULL);
     std::string            value;
-    ASSERT_NO_THROW(options.addOption(
-                            FileNameOption("f").store(&value)
-                                .filetype(gmx::eftIndex).outputFile()
-                                .defaultBasename("testfile")));
+    ASSERT_NO_THROW_GMX(options.addOption(
+                                FileNameOption("f").store(&value)
+                                    .filetype(gmx::eftIndex).outputFile()
+                                    .defaultBasename("testfile")));
     EXPECT_TRUE(value.empty());
 
     gmx::OptionsAssigner assigner(&options);
-    EXPECT_NO_THROW(assigner.start());
-    EXPECT_NO_THROW(assigner.startOption("f"));
-    EXPECT_NO_THROW(assigner.finishOption());
-    EXPECT_NO_THROW(assigner.finish());
-    EXPECT_NO_THROW(options.finish());
+    EXPECT_NO_THROW_GMX(assigner.start());
+    EXPECT_NO_THROW_GMX(assigner.startOption("f"));
+    EXPECT_NO_THROW_GMX(assigner.finishOption());
+    EXPECT_NO_THROW_GMX(assigner.finish());
+    EXPECT_NO_THROW_GMX(options.finish());
 
     EXPECT_EQ("testfile.ndx", value);
 }
@@ -118,21 +119,21 @@ TEST(FileNameOptionTest, AddsMissingExtensionBasedOnExistingFile)
 {
     gmx::Options           options(NULL, NULL);
     std::string            value;
-    ASSERT_NO_THROW(options.addOption(
-                            FileNameOption("f").store(&value)
-                                .filetype(gmx::eftTrajectory).inputFile()));
+    ASSERT_NO_THROW_GMX(options.addOption(
+                                FileNameOption("f").store(&value)
+                                    .filetype(gmx::eftTrajectory).inputFile()));
     TestFileManager      tempFiles;
     std::string          filename(tempFiles.getTemporaryFilePath(".trr"));
     gmx::File::writeFileFromString(filename, "Dummy trajectory file");
     std::string          inputValue(filename.substr(0, filename.length() - 4));
 
     gmx::OptionsAssigner assigner(&options);
-    EXPECT_NO_THROW(assigner.start());
-    EXPECT_NO_THROW(assigner.startOption("f"));
-    EXPECT_NO_THROW(assigner.appendValue(inputValue));
-    EXPECT_NO_THROW(assigner.finishOption());
-    EXPECT_NO_THROW(assigner.finish());
-    EXPECT_NO_THROW(options.finish());
+    EXPECT_NO_THROW_GMX(assigner.start());
+    EXPECT_NO_THROW_GMX(assigner.startOption("f"));
+    EXPECT_NO_THROW_GMX(assigner.appendValue(inputValue));
+    EXPECT_NO_THROW_GMX(assigner.finishOption());
+    EXPECT_NO_THROW_GMX(assigner.finish());
+    EXPECT_NO_THROW_GMX(options.finish());
 
     EXPECT_EQ(filename, value);
 }
index bd0a3f927da795782b641cbf17707962cdb68f8f..2681f3d905892b71388377eb2016daccfe844572 100644 (file)
@@ -51,6 +51,8 @@
 #include "gromacs/options/options.h"
 #include "gromacs/utility/exceptions.h"
 
+#include "testutils/testasserts.h"
+
 namespace
 {
 
@@ -59,9 +61,9 @@ TEST(OptionsTest, FailsOnNonsafeStorage)
     gmx::Options options(NULL, NULL);
     int          value = -1;
     using gmx::IntegerOption;
-    ASSERT_THROW(options.addOption(IntegerOption("name").store(&value)
-                                       .multiValue()),
-                 gmx::APIError);
+    ASSERT_THROW_GMX(options.addOption(IntegerOption("name").store(&value)
+                                           .multiValue()),
+                     gmx::APIError);
 }
 
 TEST(OptionsTest, FailsOnIncorrectEnumDefaultValue)
@@ -70,10 +72,10 @@ TEST(OptionsTest, FailsOnIncorrectEnumDefaultValue)
     std::string                 value;
     const char * const          allowed[] = { "none", "test", "value" };
     using gmx::StringOption;
-    ASSERT_THROW(options.addOption(StringOption("name").store(&value)
-                                       .enumValue(allowed)
-                                       .defaultValue("unknown")),
-                 gmx::APIError);
+    ASSERT_THROW_GMX(options.addOption(StringOption("name").store(&value)
+                                           .enumValue(allowed)
+                                           .defaultValue("unknown")),
+                     gmx::APIError);
 }
 
 } // namespace
index 5fdb1e920d21a6a9d6b174766c0b2eccd5bb43c8..5428731eb94d358f3b76de252bece6137ca206f4 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * This file is part of the GROMACS molecular simulation package.
  *
- * Copyright (c) 2012, by the GROMACS development team, led by
+ * Copyright (c) 2012,2013, by the GROMACS development team, led by
  * David van der Spoel, Berk Hess, Erik Lindahl, and including many
  * others, as listed in the AUTHORS file in the top-level source
  * directory and at http://www.gromacs.org.
@@ -48,6 +48,8 @@
 #include "gromacs/options/optionsassigner.h"
 #include "gromacs/options/timeunitmanager.h"
 
+#include "testutils/testasserts.h"
+
 namespace
 {
 
@@ -69,21 +71,21 @@ TEST(TimeUnitManagerTest, ScalesAssignedOptionValue)
     gmx::Options         options(NULL, NULL);
     double               value = 0.0;
     using gmx::DoubleOption;
-    ASSERT_NO_THROW(options.addOption(DoubleOption("p").store(&value).timeValue()));
+    ASSERT_NO_THROW_GMX(options.addOption(DoubleOption("p").store(&value).timeValue()));
 
     gmx::OptionsAssigner assigner(&options);
-    EXPECT_NO_THROW(assigner.start());
-    ASSERT_NO_THROW(assigner.startOption("p"));
-    ASSERT_NO_THROW(assigner.appendValue("1.5"));
-    EXPECT_NO_THROW(assigner.finishOption());
-    EXPECT_NO_THROW(assigner.finish());
+    EXPECT_NO_THROW_GMX(assigner.start());
+    ASSERT_NO_THROW_GMX(assigner.startOption("p"));
+    ASSERT_NO_THROW_GMX(assigner.appendValue("1.5"));
+    EXPECT_NO_THROW_GMX(assigner.finishOption());
+    EXPECT_NO_THROW_GMX(assigner.finish());
 
     EXPECT_DOUBLE_EQ(1.5, value);
     manager.setTimeUnit(gmx::eTimeUnit_ns);
     manager.scaleTimeOptions(&options);
     EXPECT_DOUBLE_EQ(1500, value);
 
-    EXPECT_NO_THROW(options.finish());
+    EXPECT_NO_THROW_GMX(options.finish());
 
     manager.setTimeUnit(gmx::eTimeUnit_us);
     manager.scaleTimeOptions(&options);
@@ -105,16 +107,16 @@ TEST(TimeUnitManagerTest, DoesNotScaleDefaultValues)
     gmx::Options         options(NULL, NULL);
     double               value = 1.5, value2 = 0.0;
     using gmx::DoubleOption;
-    ASSERT_NO_THROW(options.addOption(DoubleOption("p").store(&value).timeValue()));
-    ASSERT_NO_THROW(options.addOption(DoubleOption("q").store(&value2).timeValue()
-                                          .defaultValueIfSet(2.5)));
+    ASSERT_NO_THROW_GMX(options.addOption(DoubleOption("p").store(&value).timeValue()));
+    ASSERT_NO_THROW_GMX(options.addOption(DoubleOption("q").store(&value2).timeValue()
+                                              .defaultValueIfSet(2.5)));
 
     gmx::OptionsAssigner assigner(&options);
-    EXPECT_NO_THROW(assigner.start());
-    ASSERT_NO_THROW(assigner.startOption("q"));
-    EXPECT_NO_THROW(assigner.finishOption());
-    EXPECT_NO_THROW(assigner.finish());
-    EXPECT_NO_THROW(options.finish());
+    EXPECT_NO_THROW_GMX(assigner.start());
+    ASSERT_NO_THROW_GMX(assigner.startOption("q"));
+    EXPECT_NO_THROW_GMX(assigner.finishOption());
+    EXPECT_NO_THROW_GMX(assigner.finish());
+    EXPECT_NO_THROW_GMX(options.finish());
 
     EXPECT_DOUBLE_EQ(2.5, value2);
     manager.setTimeUnit(gmx::eTimeUnit_ns);
@@ -130,18 +132,18 @@ TEST(TimeUnitManagerTest, ScalesUserInputWithMultipleSources)
     gmx::Options         options(NULL, NULL);
     double               value = 0.0;
     using gmx::DoubleOption;
-    ASSERT_NO_THROW(options.addOption(DoubleOption("p").store(&value).timeValue()));
+    ASSERT_NO_THROW_GMX(options.addOption(DoubleOption("p").store(&value).timeValue()));
 
     gmx::OptionsAssigner assigner(&options);
-    EXPECT_NO_THROW(assigner.start());
-    ASSERT_NO_THROW(assigner.startOption("p"));
-    ASSERT_NO_THROW(assigner.appendValue("1.5"));
-    EXPECT_NO_THROW(assigner.finishOption());
-    EXPECT_NO_THROW(assigner.finish());
+    EXPECT_NO_THROW_GMX(assigner.start());
+    ASSERT_NO_THROW_GMX(assigner.startOption("p"));
+    ASSERT_NO_THROW_GMX(assigner.appendValue("1.5"));
+    EXPECT_NO_THROW_GMX(assigner.finishOption());
+    EXPECT_NO_THROW_GMX(assigner.finish());
     gmx::OptionsAssigner assigner2(&options);
-    EXPECT_NO_THROW(assigner2.start());
-    EXPECT_NO_THROW(assigner2.finish());
-    EXPECT_NO_THROW(options.finish());
+    EXPECT_NO_THROW_GMX(assigner2.start());
+    EXPECT_NO_THROW_GMX(assigner2.finish());
+    EXPECT_NO_THROW_GMX(options.finish());
 
     EXPECT_DOUBLE_EQ(1.5, value);
     manager.setTimeUnit(gmx::eTimeUnit_ns);
@@ -156,25 +158,25 @@ TEST(TimeUnitManagerTest, TimeUnitOptionWorks)
     gmx::Options         options(NULL, NULL);
     double               value = 0.0;
     using gmx::DoubleOption;
-    ASSERT_NO_THROW(options.addOption(DoubleOption("p").store(&value).timeValue()));
-    ASSERT_NO_THROW(manager.addTimeUnitOption(&options, "tu"));
+    ASSERT_NO_THROW_GMX(options.addOption(DoubleOption("p").store(&value).timeValue()));
+    ASSERT_NO_THROW_GMX(manager.addTimeUnitOption(&options, "tu"));
 
     gmx::OptionsAssigner assigner(&options);
-    EXPECT_NO_THROW(assigner.start());
-    ASSERT_NO_THROW(assigner.startOption("p"));
-    ASSERT_NO_THROW(assigner.appendValue("1.5"));
-    EXPECT_NO_THROW(assigner.finishOption());
-    ASSERT_NO_THROW(assigner.startOption("tu"));
-    ASSERT_NO_THROW(assigner.appendValue("ns"));
-    EXPECT_NO_THROW(assigner.finishOption());
-    EXPECT_NO_THROW(assigner.finish());
+    EXPECT_NO_THROW_GMX(assigner.start());
+    ASSERT_NO_THROW_GMX(assigner.startOption("p"));
+    ASSERT_NO_THROW_GMX(assigner.appendValue("1.5"));
+    EXPECT_NO_THROW_GMX(assigner.finishOption());
+    ASSERT_NO_THROW_GMX(assigner.startOption("tu"));
+    ASSERT_NO_THROW_GMX(assigner.appendValue("ns"));
+    EXPECT_NO_THROW_GMX(assigner.finishOption());
+    EXPECT_NO_THROW_GMX(assigner.finish());
 
     EXPECT_DOUBLE_EQ(1.5, value);
     EXPECT_EQ(gmx::eTimeUnit_ns, manager.timeUnit());
     manager.scaleTimeOptions(&options);
     EXPECT_DOUBLE_EQ(1500, value);
 
-    EXPECT_NO_THROW(options.finish());
+    EXPECT_NO_THROW_GMX(options.finish());
 }
 
 } // namespace
index 6f558b164a94c432c127561f0c5318e003836e03..95b6b507ef31f0b4f2fa05d62a32336d828e27e2 100644 (file)
@@ -56,6 +56,7 @@
 #include "gromacs/utility/stringutil.h"
 
 #include "testutils/refdata.h"
+#include "testutils/testasserts.h"
 #include "testutils/testfilemanager.h"
 #include "testutils/testoptions.h"
 
@@ -78,7 +79,7 @@ class SelectionCollectionTest : public ::testing::Test
 
         void setAtomCount(int natoms)
         {
-            ASSERT_NO_THROW(sc_.setTopology(NULL, natoms));
+            ASSERT_NO_THROW_GMX(sc_.setTopology(NULL, natoms));
         }
         void loadTopology(const char *filename);
 
@@ -147,7 +148,7 @@ SelectionCollectionTest::loadTopology(const char *filename)
 
     sfree(xtop);
 
-    ASSERT_NO_THROW(sc_.setTopology(top_, -1));
+    ASSERT_NO_THROW_GMX(sc_.setTopology(top_, -1));
 }
 
 
@@ -281,7 +282,7 @@ SelectionCollectionDataTest::runParser(const char *const *selections,
         SCOPED_TRACE(std::string("Parsing selection \"")
                      + selections[i] + "\"");
         gmx::SelectionList result;
-        ASSERT_NO_THROW(result = sc_.parseFromString(selections[i]));
+        ASSERT_NO_THROW_GMX(result = sc_.parseFromString(selections[i]));
         sel_.insert(sel_.end(), result.begin(), result.end());
         if (sel_.size() == count_)
         {
@@ -309,7 +310,7 @@ SelectionCollectionDataTest::runParser(const char *const *selections,
 void
 SelectionCollectionDataTest::runCompiler()
 {
-    ASSERT_NO_THROW(sc_.compile());
+    ASSERT_NO_THROW_GMX(sc_.compile());
     ASSERT_EQ(count_, sel_.size());
     checkCompiled();
 }
@@ -343,7 +344,7 @@ SelectionCollectionDataTest::runEvaluate()
     using gmx::test::TestReferenceChecker;
 
     ++framenr_;
-    ASSERT_NO_THROW(sc_.evaluate(frame_, NULL));
+    ASSERT_NO_THROW_GMX(sc_.evaluate(frame_, NULL));
     std::string          frame = gmx::formatString("Frame%d", framenr_);
     TestReferenceChecker compound(
             checker_.checkCompound("EvaluatedSelections", frame.c_str()));
@@ -362,7 +363,7 @@ SelectionCollectionDataTest::runEvaluate()
 void
 SelectionCollectionDataTest::runEvaluateFinal()
 {
-    ASSERT_NO_THROW(sc_.evaluateFinal(framenr_));
+    ASSERT_NO_THROW_GMX(sc_.evaluateFinal(framenr_));
     if (!checker_.isWriteMode())
     {
         checkCompiled();
@@ -403,19 +404,19 @@ SelectionCollectionDataTest::runTest(const char         *filename,
 TEST_F(SelectionCollectionTest, HandlesNoSelections)
 {
     EXPECT_FALSE(sc_.requiresTopology());
-    EXPECT_NO_THROW(sc_.compile());
+    EXPECT_NO_THROW_GMX(sc_.compile());
 }
 
 TEST_F(SelectionCollectionTest, HandlesVelocityAndForceRequests)
 {
-    ASSERT_NO_THROW(sel_ = sc_.parseFromString("atomnr 1 to 10; none"));
+    ASSERT_NO_THROW_GMX(sel_ = sc_.parseFromString("atomnr 1 to 10; none"));
     ASSERT_NO_FATAL_FAILURE(setAtomCount(10));
     ASSERT_EQ(2U, sel_.size());
-    ASSERT_NO_THROW(sel_[0].setEvaluateVelocities(true));
-    ASSERT_NO_THROW(sel_[1].setEvaluateVelocities(true));
-    ASSERT_NO_THROW(sel_[0].setEvaluateForces(true));
-    ASSERT_NO_THROW(sel_[1].setEvaluateForces(true));
-    ASSERT_NO_THROW(sc_.compile());
+    ASSERT_NO_THROW_GMX(sel_[0].setEvaluateVelocities(true));
+    ASSERT_NO_THROW_GMX(sel_[1].setEvaluateVelocities(true));
+    ASSERT_NO_THROW_GMX(sel_[0].setEvaluateForces(true));
+    ASSERT_NO_THROW_GMX(sel_[1].setEvaluateForces(true));
+    ASSERT_NO_THROW_GMX(sc_.compile());
     EXPECT_TRUE(sel_[0].hasVelocities());
     EXPECT_TRUE(sel_[1].hasVelocities());
     EXPECT_TRUE(sel_[0].hasForces());
@@ -424,8 +425,8 @@ TEST_F(SelectionCollectionTest, HandlesVelocityAndForceRequests)
 
 TEST_F(SelectionCollectionTest, ParsesSelectionsFromFile)
 {
-    ASSERT_NO_THROW(sel_ = sc_.parseFromFile(
-                                gmx::test::TestFileManager::getInputFilePath("selfile.dat")));
+    ASSERT_NO_THROW_GMX(sel_ = sc_.parseFromFile(
+                                    gmx::test::TestFileManager::getInputFilePath("selfile.dat")));
     // These should match the contents of selfile.dat
     ASSERT_EQ(2U, sel_.size());
     EXPECT_STREQ("resname RA RB", sel_[0].selectionText());
@@ -435,10 +436,10 @@ TEST_F(SelectionCollectionTest, ParsesSelectionsFromFile)
 TEST_F(SelectionCollectionTest, HandlesInvalidRegularExpressions)
 {
     ASSERT_NO_FATAL_FAILURE(loadTopology("simple.gro"));
-    EXPECT_THROW({
-                     sc_.parseFromString("resname ~ \"R[A\"");
-                     sc_.compile();
-                 }, gmx::InvalidInputError);
+    EXPECT_THROW_GMX({
+                         sc_.parseFromString("resname ~ \"R[A\"");
+                         sc_.compile();
+                     }, gmx::InvalidInputError);
 }
 
 TEST_F(SelectionCollectionTest, HandlesUnsupportedRegularExpressions)
@@ -446,88 +447,88 @@ TEST_F(SelectionCollectionTest, HandlesUnsupportedRegularExpressions)
     if (!gmx::Regex::isSupported())
     {
         ASSERT_NO_FATAL_FAILURE(loadTopology("simple.gro"));
-        EXPECT_THROW({
-                         sc_.parseFromString("resname \"R[AD]\"");
-                         sc_.compile();
-                     }, gmx::InvalidInputError);
+        EXPECT_THROW_GMX({
+                             sc_.parseFromString("resname \"R[AD]\"");
+                             sc_.compile();
+                         }, gmx::InvalidInputError);
     }
 }
 
 TEST_F(SelectionCollectionTest, HandlesMissingMethodParamValue)
 {
-    EXPECT_THROW(sc_.parseFromString("mindist from atomnr 1 cutoff"),
-                 gmx::InvalidInputError);
+    EXPECT_THROW_GMX(sc_.parseFromString("mindist from atomnr 1 cutoff"),
+                     gmx::InvalidInputError);
 }
 
 TEST_F(SelectionCollectionTest, HandlesMissingMethodParamValue2)
 {
-    EXPECT_THROW(sc_.parseFromString("within 1 of"),
-                 gmx::InvalidInputError);
+    EXPECT_THROW_GMX(sc_.parseFromString("within 1 of"),
+                     gmx::InvalidInputError);
 }
 
 TEST_F(SelectionCollectionTest, HandlesMissingMethodParamValue3)
 {
-    EXPECT_THROW(sc_.parseFromString("within of atomnr 1"),
-                 gmx::InvalidInputError);
+    EXPECT_THROW_GMX(sc_.parseFromString("within of atomnr 1"),
+                     gmx::InvalidInputError);
 }
 
 TEST_F(SelectionCollectionTest, HandlesHelpKeywordInInvalidContext)
 {
-    EXPECT_THROW(sc_.parseFromString("resname help"),
-                 gmx::InvalidInputError);
+    EXPECT_THROW_GMX(sc_.parseFromString("resname help"),
+                     gmx::InvalidInputError);
 }
 
 // TODO: Tests for more parser errors
 
 TEST_F(SelectionCollectionTest, RecoversFromUnknownGroupReference)
 {
-    ASSERT_NO_THROW(sc_.parseFromString("group \"foo\""));
+    ASSERT_NO_THROW_GMX(sc_.parseFromString("group \"foo\""));
     ASSERT_NO_FATAL_FAILURE(setAtomCount(10));
-    EXPECT_THROW(sc_.setIndexGroups(NULL), gmx::InvalidInputError);
-    EXPECT_THROW(sc_.compile(), gmx::APIError);
+    EXPECT_THROW_GMX(sc_.setIndexGroups(NULL), gmx::InvalidInputError);
+    EXPECT_THROW_GMX(sc_.compile(), gmx::APIError);
 }
 
 TEST_F(SelectionCollectionTest, RecoversFromMissingMoleculeInfo)
 {
-    ASSERT_NO_THROW(sc_.parseFromString("molindex 1 to 5"));
+    ASSERT_NO_THROW_GMX(sc_.parseFromString("molindex 1 to 5"));
     ASSERT_NO_FATAL_FAILURE(loadTopology("simple.gro"));
-    EXPECT_THROW(sc_.compile(), gmx::InconsistentInputError);
+    EXPECT_THROW_GMX(sc_.compile(), gmx::InconsistentInputError);
 }
 
 TEST_F(SelectionCollectionTest, RecoversFromMissingAtomTypes)
 {
-    ASSERT_NO_THROW(sc_.parseFromString("type CA"));
+    ASSERT_NO_THROW_GMX(sc_.parseFromString("type CA"));
     ASSERT_NO_FATAL_FAILURE(loadTopology("simple.gro"));
-    EXPECT_THROW(sc_.compile(), gmx::InconsistentInputError);
+    EXPECT_THROW_GMX(sc_.compile(), gmx::InconsistentInputError);
 }
 
 TEST_F(SelectionCollectionTest, RecoversFromMissingPDBInfo)
 {
-    ASSERT_NO_THROW(sc_.parseFromString("altloc A"));
+    ASSERT_NO_THROW_GMX(sc_.parseFromString("altloc A"));
     ASSERT_NO_FATAL_FAILURE(loadTopology("simple.gro"));
-    EXPECT_THROW(sc_.compile(), gmx::InconsistentInputError);
+    EXPECT_THROW_GMX(sc_.compile(), gmx::InconsistentInputError);
 }
 
 TEST_F(SelectionCollectionTest, RecoversFromInvalidPermutation)
 {
-    ASSERT_NO_THROW(sc_.parseFromString("all permute 1 1"));
+    ASSERT_NO_THROW_GMX(sc_.parseFromString("all permute 1 1"));
     ASSERT_NO_FATAL_FAILURE(setAtomCount(10));
-    EXPECT_THROW(sc_.compile(), gmx::InvalidInputError);
+    EXPECT_THROW_GMX(sc_.compile(), gmx::InvalidInputError);
 }
 
 TEST_F(SelectionCollectionTest, RecoversFromInvalidPermutation2)
 {
-    ASSERT_NO_THROW(sc_.parseFromString("all permute 3 2 1"));
+    ASSERT_NO_THROW_GMX(sc_.parseFromString("all permute 3 2 1"));
     ASSERT_NO_FATAL_FAILURE(setAtomCount(10));
-    EXPECT_THROW(sc_.compile(), gmx::InconsistentInputError);
+    EXPECT_THROW_GMX(sc_.compile(), gmx::InconsistentInputError);
 }
 
 TEST_F(SelectionCollectionTest, RecoversFromInvalidPermutation3)
 {
-    ASSERT_NO_THROW(sc_.parseFromString("x < 1.5 permute 3 2 1"));
+    ASSERT_NO_THROW_GMX(sc_.parseFromString("x < 1.5 permute 3 2 1"));
     ASSERT_NO_FATAL_FAILURE(loadTopology("simple.gro"));
-    ASSERT_NO_THROW(sc_.compile());
-    EXPECT_THROW(sc_.evaluate(frame_, NULL), gmx::InconsistentInputError);
+    ASSERT_NO_THROW_GMX(sc_.compile());
+    EXPECT_THROW_GMX(sc_.evaluate(frame_, NULL), gmx::InconsistentInputError);
 }
 
 // TODO: Tests for evaluation errors
index 6a2e782442f3e3a565c1a7f867038d5032de57f4..7fc687126f03c348ccf089db77c3624725c63dfb 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * This file is part of the GROMACS molecular simulation package.
  *
- * Copyright (c) 2010,2011,2012, by the GROMACS development team, led by
+ * Copyright (c) 2010,2011,2012,2013, by the GROMACS development team, led by
  * David van der Spoel, Berk Hess, Erik Lindahl, and including many
  * others, as listed in the AUTHORS file in the top-level source
  * directory and at http://www.gromacs.org.
@@ -50,6 +50,7 @@
 #include "gromacs/selection/selectionoptionmanager.h"
 #include "gromacs/utility/exceptions.h"
 
+#include "testutils/testasserts.h"
 #include "testutils/testfilemanager.h"
 
 using gmx::test::TestFileManager;
@@ -97,16 +98,16 @@ TEST_F(SelectionOptionTest, ParsesSimpleSelection)
 {
     gmx::Selection sel;
     using gmx::SelectionOption;
-    ASSERT_NO_THROW(options_.addOption(SelectionOption("sel").store(&sel)));
+    ASSERT_NO_THROW_GMX(options_.addOption(SelectionOption("sel").store(&sel)));
     setManager();
 
     gmx::OptionsAssigner assigner(&options_);
-    EXPECT_NO_THROW(assigner.start());
-    ASSERT_NO_THROW(assigner.startOption("sel"));
-    EXPECT_NO_THROW(assigner.appendValue("resname RA RB"));
-    EXPECT_NO_THROW(assigner.finishOption());
-    EXPECT_NO_THROW(assigner.finish());
-    EXPECT_NO_THROW(options_.finish());
+    EXPECT_NO_THROW_GMX(assigner.start());
+    ASSERT_NO_THROW_GMX(assigner.startOption("sel"));
+    EXPECT_NO_THROW_GMX(assigner.appendValue("resname RA RB"));
+    EXPECT_NO_THROW_GMX(assigner.finishOption());
+    EXPECT_NO_THROW_GMX(assigner.finish());
+    EXPECT_NO_THROW_GMX(options_.finish());
 }
 
 
@@ -114,17 +115,17 @@ TEST_F(SelectionOptionTest, HandlesDynamicSelectionWhenStaticRequired)
 {
     gmx::Selection sel;
     using gmx::SelectionOption;
-    ASSERT_NO_THROW(options_.addOption(
-                            SelectionOption("sel").store(&sel).onlyStatic()));
+    ASSERT_NO_THROW_GMX(options_.addOption(
+                                SelectionOption("sel").store(&sel).onlyStatic()));
     setManager();
 
     gmx::OptionsAssigner assigner(&options_);
-    EXPECT_NO_THROW(assigner.start());
-    ASSERT_NO_THROW(assigner.startOption("sel"));
-    EXPECT_THROW(assigner.appendValue("resname RA RB and x < 5"), gmx::InvalidInputError);
-    EXPECT_NO_THROW(assigner.finishOption());
-    EXPECT_NO_THROW(assigner.finish());
-    EXPECT_NO_THROW(options_.finish());
+    EXPECT_NO_THROW_GMX(assigner.start());
+    ASSERT_NO_THROW_GMX(assigner.startOption("sel"));
+    EXPECT_THROW_GMX(assigner.appendValue("resname RA RB and x < 5"), gmx::InvalidInputError);
+    EXPECT_NO_THROW_GMX(assigner.finishOption());
+    EXPECT_NO_THROW_GMX(assigner.finish());
+    EXPECT_NO_THROW_GMX(options_.finish());
 }
 
 
@@ -132,17 +133,17 @@ TEST_F(SelectionOptionTest, HandlesTooManySelections)
 {
     gmx::Selection sel;
     using gmx::SelectionOption;
-    ASSERT_NO_THROW(options_.addOption(SelectionOption("sel").store(&sel)));
+    ASSERT_NO_THROW_GMX(options_.addOption(SelectionOption("sel").store(&sel)));
     setManager();
 
     gmx::OptionsAssigner assigner(&options_);
-    EXPECT_NO_THROW(assigner.start());
-    ASSERT_NO_THROW(assigner.startOption("sel"));
-    EXPECT_NO_THROW(assigner.appendValue("resname RA RB"));
-    EXPECT_THROW(assigner.appendValue("resname RB RC"), gmx::InvalidInputError);
-    EXPECT_NO_THROW(assigner.finishOption());
-    EXPECT_NO_THROW(assigner.finish());
-    EXPECT_NO_THROW(options_.finish());
+    EXPECT_NO_THROW_GMX(assigner.start());
+    ASSERT_NO_THROW_GMX(assigner.startOption("sel"));
+    EXPECT_NO_THROW_GMX(assigner.appendValue("resname RA RB"));
+    EXPECT_THROW_GMX(assigner.appendValue("resname RB RC"), gmx::InvalidInputError);
+    EXPECT_NO_THROW_GMX(assigner.finishOption());
+    EXPECT_NO_THROW_GMX(assigner.finish());
+    EXPECT_NO_THROW_GMX(options_.finish());
 }
 
 
@@ -150,17 +151,17 @@ TEST_F(SelectionOptionTest, HandlesTooFewSelections)
 {
     gmx::Selection sel[2];
     using gmx::SelectionOption;
-    ASSERT_NO_THROW(options_.addOption(
-                            SelectionOption("sel").store(sel).valueCount(2)));
+    ASSERT_NO_THROW_GMX(options_.addOption(
+                                SelectionOption("sel").store(sel).valueCount(2)));
     setManager();
 
     gmx::OptionsAssigner assigner(&options_);
-    EXPECT_NO_THROW(assigner.start());
-    ASSERT_NO_THROW(assigner.startOption("sel"));
-    EXPECT_NO_THROW(assigner.appendValue("resname RA RB"));
-    EXPECT_THROW(assigner.finishOption(), gmx::InvalidInputError);
-    EXPECT_NO_THROW(assigner.finish());
-    EXPECT_NO_THROW(options_.finish());
+    EXPECT_NO_THROW_GMX(assigner.start());
+    ASSERT_NO_THROW_GMX(assigner.startOption("sel"));
+    EXPECT_NO_THROW_GMX(assigner.appendValue("resname RA RB"));
+    EXPECT_THROW_GMX(assigner.finishOption(), gmx::InvalidInputError);
+    EXPECT_NO_THROW_GMX(assigner.finish());
+    EXPECT_NO_THROW_GMX(options_.finish());
 }
 
 
@@ -173,14 +174,14 @@ TEST_F(SelectionOptionTest, HandlesAdjuster)
     setManager();
 
     gmx::OptionsAssigner assigner(&options_);
-    EXPECT_NO_THROW(assigner.start());
-    ASSERT_NO_THROW(assigner.startOption("sel"));
-    EXPECT_NO_THROW(assigner.appendValue("resname RA RB"));
-    EXPECT_NO_THROW(assigner.appendValue("resname RB RC"));
-    EXPECT_NO_THROW(assigner.finishOption());
-    EXPECT_NO_THROW(assigner.finish());
-    EXPECT_NO_THROW(options_.finish());
-    EXPECT_NO_THROW(info->setValueCount(2));
+    EXPECT_NO_THROW_GMX(assigner.start());
+    ASSERT_NO_THROW_GMX(assigner.startOption("sel"));
+    EXPECT_NO_THROW_GMX(assigner.appendValue("resname RA RB"));
+    EXPECT_NO_THROW_GMX(assigner.appendValue("resname RB RC"));
+    EXPECT_NO_THROW_GMX(assigner.finishOption());
+    EXPECT_NO_THROW_GMX(assigner.finish());
+    EXPECT_NO_THROW_GMX(options_.finish());
+    EXPECT_NO_THROW_GMX(info->setValueCount(2));
 }
 
 
@@ -193,13 +194,13 @@ TEST_F(SelectionOptionTest, HandlesDynamicWhenStaticRequiredWithAdjuster)
     setManager();
 
     gmx::OptionsAssigner assigner(&options_);
-    EXPECT_NO_THROW(assigner.start());
-    ASSERT_NO_THROW(assigner.startOption("sel"));
-    EXPECT_NO_THROW(assigner.appendValue("x < 5"));
-    EXPECT_NO_THROW(assigner.finishOption());
-    EXPECT_NO_THROW(assigner.finish());
-    EXPECT_NO_THROW(options_.finish());
-    EXPECT_THROW(info->setOnlyStatic(true), gmx::InvalidInputError);
+    EXPECT_NO_THROW_GMX(assigner.start());
+    ASSERT_NO_THROW_GMX(assigner.startOption("sel"));
+    EXPECT_NO_THROW_GMX(assigner.appendValue("x < 5"));
+    EXPECT_NO_THROW_GMX(assigner.finishOption());
+    EXPECT_NO_THROW_GMX(assigner.finish());
+    EXPECT_NO_THROW_GMX(options_.finish());
+    EXPECT_THROW_GMX(info->setOnlyStatic(true), gmx::InvalidInputError);
 }
 
 
@@ -212,14 +213,14 @@ TEST_F(SelectionOptionTest, HandlesTooManySelectionsWithAdjuster)
     setManager();
 
     gmx::OptionsAssigner assigner(&options_);
-    EXPECT_NO_THROW(assigner.start());
-    ASSERT_NO_THROW(assigner.startOption("sel"));
-    EXPECT_NO_THROW(assigner.appendValue("resname RA RB"));
-    EXPECT_NO_THROW(assigner.appendValue("resname RB RC"));
-    EXPECT_NO_THROW(assigner.finishOption());
-    EXPECT_NO_THROW(assigner.finish());
-    EXPECT_NO_THROW(options_.finish());
-    EXPECT_THROW(info->setValueCount(1), gmx::InvalidInputError);
+    EXPECT_NO_THROW_GMX(assigner.start());
+    ASSERT_NO_THROW_GMX(assigner.startOption("sel"));
+    EXPECT_NO_THROW_GMX(assigner.appendValue("resname RA RB"));
+    EXPECT_NO_THROW_GMX(assigner.appendValue("resname RB RC"));
+    EXPECT_NO_THROW_GMX(assigner.finishOption());
+    EXPECT_NO_THROW_GMX(assigner.finish());
+    EXPECT_NO_THROW_GMX(options_.finish());
+    EXPECT_THROW_GMX(info->setValueCount(1), gmx::InvalidInputError);
 }
 
 
@@ -232,13 +233,13 @@ TEST_F(SelectionOptionTest, HandlesTooFewSelectionsWithAdjuster)
     setManager();
 
     gmx::OptionsAssigner assigner(&options_);
-    EXPECT_NO_THROW(assigner.start());
-    ASSERT_NO_THROW(assigner.startOption("sel"));
-    EXPECT_NO_THROW(assigner.appendValue("resname RA RB"));
-    EXPECT_NO_THROW(assigner.finishOption());
-    EXPECT_NO_THROW(assigner.finish());
-    EXPECT_NO_THROW(options_.finish());
-    EXPECT_THROW(info->setValueCount(2), gmx::InvalidInputError);
+    EXPECT_NO_THROW_GMX(assigner.start());
+    ASSERT_NO_THROW_GMX(assigner.startOption("sel"));
+    EXPECT_NO_THROW_GMX(assigner.appendValue("resname RA RB"));
+    EXPECT_NO_THROW_GMX(assigner.finishOption());
+    EXPECT_NO_THROW_GMX(assigner.finish());
+    EXPECT_NO_THROW_GMX(options_.finish());
+    EXPECT_THROW_GMX(info->setValueCount(2), gmx::InvalidInputError);
 }
 
 
@@ -246,15 +247,15 @@ TEST_F(SelectionOptionTest, HandlesDelayedRequiredSelection)
 {
     gmx::Selection sel;
     using gmx::SelectionOption;
-    ASSERT_NO_THROW(options_.addOption(
-                            SelectionOption("sel").store(&sel).required()));
+    ASSERT_NO_THROW_GMX(options_.addOption(
+                                SelectionOption("sel").store(&sel).required()));
     setManager();
 
     gmx::OptionsAssigner assigner(&options_);
-    EXPECT_NO_THROW(assigner.start());
-    EXPECT_NO_THROW(assigner.finish());
-    EXPECT_NO_THROW(options_.finish());
-    ASSERT_NO_THROW(manager_.parseRequestedFromString("resname RA RB"));
+    EXPECT_NO_THROW_GMX(assigner.start());
+    EXPECT_NO_THROW_GMX(assigner.finish());
+    EXPECT_NO_THROW_GMX(options_.finish());
+    ASSERT_NO_THROW_GMX(manager_.parseRequestedFromString("resname RA RB"));
     ASSERT_STREQ("resname RA RB", sel.selectionText());
 }
 
@@ -263,16 +264,16 @@ TEST_F(SelectionOptionTest, HandlesTooFewDelayedRequiredSelections)
 {
     gmx::Selection sel[2];
     using gmx::SelectionOption;
-    ASSERT_NO_THROW(options_.addOption(
-                            SelectionOption("sel").store(sel).required()
-                                .valueCount(2)));
+    ASSERT_NO_THROW_GMX(options_.addOption(
+                                SelectionOption("sel").store(sel).required()
+                                    .valueCount(2)));
     setManager();
 
     gmx::OptionsAssigner assigner(&options_);
-    EXPECT_NO_THROW(assigner.start());
-    EXPECT_NO_THROW(assigner.finish());
-    EXPECT_NO_THROW(options_.finish());
-    EXPECT_THROW(manager_.parseRequestedFromString("resname RA RB"), gmx::InvalidInputError);
+    EXPECT_NO_THROW_GMX(assigner.start());
+    EXPECT_NO_THROW_GMX(assigner.finish());
+    EXPECT_NO_THROW_GMX(options_.finish());
+    EXPECT_THROW_GMX(manager_.parseRequestedFromString("resname RA RB"), gmx::InvalidInputError);
 }
 
 
@@ -280,16 +281,16 @@ TEST_F(SelectionOptionTest, HandlesDelayedOptionalSelection)
 {
     gmx::Selection sel;
     using gmx::SelectionOption;
-    ASSERT_NO_THROW(options_.addOption(SelectionOption("sel").store(&sel)));
+    ASSERT_NO_THROW_GMX(options_.addOption(SelectionOption("sel").store(&sel)));
     setManager();
 
     gmx::OptionsAssigner assigner(&options_);
-    EXPECT_NO_THROW(assigner.start());
-    ASSERT_NO_THROW(assigner.startOption("sel"));
-    EXPECT_NO_THROW(assigner.finishOption());
-    EXPECT_NO_THROW(assigner.finish());
-    EXPECT_NO_THROW(options_.finish());
-    ASSERT_NO_THROW(manager_.parseRequestedFromString("resname RA RB"));
+    EXPECT_NO_THROW_GMX(assigner.start());
+    ASSERT_NO_THROW_GMX(assigner.startOption("sel"));
+    EXPECT_NO_THROW_GMX(assigner.finishOption());
+    EXPECT_NO_THROW_GMX(assigner.finish());
+    EXPECT_NO_THROW_GMX(options_.finish());
+    ASSERT_NO_THROW_GMX(manager_.parseRequestedFromString("resname RA RB"));
     ASSERT_STREQ("resname RA RB", sel.selectionText());
 }
 
@@ -303,13 +304,13 @@ TEST_F(SelectionOptionTest, HandlesDelayedSelectionWithAdjuster)
     setManager();
 
     gmx::OptionsAssigner assigner(&options_);
-    EXPECT_NO_THROW(assigner.start());
-    ASSERT_NO_THROW(assigner.startOption("sel"));
-    EXPECT_NO_THROW(assigner.finishOption());
-    EXPECT_NO_THROW(assigner.finish());
-    EXPECT_NO_THROW(options_.finish());
-    EXPECT_NO_THROW(info->setValueCount(2));
-    EXPECT_NO_THROW(manager_.parseRequestedFromString("resname RA RB; resname RB RC"));
+    EXPECT_NO_THROW_GMX(assigner.start());
+    ASSERT_NO_THROW_GMX(assigner.startOption("sel"));
+    EXPECT_NO_THROW_GMX(assigner.finishOption());
+    EXPECT_NO_THROW_GMX(assigner.finish());
+    EXPECT_NO_THROW_GMX(options_.finish());
+    EXPECT_NO_THROW_GMX(info->setValueCount(2));
+    EXPECT_NO_THROW_GMX(manager_.parseRequestedFromString("resname RA RB; resname RB RC"));
 }
 
 
@@ -334,22 +335,22 @@ TEST_F(SelectionFileOptionTest, HandlesSingleSelectionOptionFromFile)
     gmx::SelectionList sel;
     gmx::SelectionList reqsel;
     using gmx::SelectionOption;
-    ASSERT_NO_THROW(options_.addOption(
-                            SelectionOption("sel").storeVector(&sel).multiValue()));
-    ASSERT_NO_THROW(options_.addOption(
-                            SelectionOption("reqsel").storeVector(&reqsel)
-                                .multiValue().required()));
+    ASSERT_NO_THROW_GMX(options_.addOption(
+                                SelectionOption("sel").storeVector(&sel).multiValue()));
+    ASSERT_NO_THROW_GMX(options_.addOption(
+                                SelectionOption("reqsel").storeVector(&reqsel)
+                                    .multiValue().required()));
     setManager();
 
     gmx::OptionsAssigner assigner(&options_);
-    EXPECT_NO_THROW(assigner.start());
-    ASSERT_NO_THROW(assigner.startOption("sel"));
-    EXPECT_NO_THROW(assigner.finishOption());
-    ASSERT_NO_THROW(assigner.startOption("sf"));
-    EXPECT_NO_THROW(assigner.appendValue(TestFileManager::getInputFilePath("selfile.dat")));
-    EXPECT_NO_THROW(assigner.finishOption());
-    EXPECT_NO_THROW(assigner.finish());
-    EXPECT_NO_THROW(options_.finish());
+    EXPECT_NO_THROW_GMX(assigner.start());
+    ASSERT_NO_THROW_GMX(assigner.startOption("sel"));
+    EXPECT_NO_THROW_GMX(assigner.finishOption());
+    ASSERT_NO_THROW_GMX(assigner.startOption("sf"));
+    EXPECT_NO_THROW_GMX(assigner.appendValue(TestFileManager::getInputFilePath("selfile.dat")));
+    EXPECT_NO_THROW_GMX(assigner.finishOption());
+    EXPECT_NO_THROW_GMX(assigner.finish());
+    EXPECT_NO_THROW_GMX(options_.finish());
 
     // These should match the contents of selfile.dat
     ASSERT_EQ(2U, sel.size());
@@ -364,27 +365,27 @@ TEST_F(SelectionFileOptionTest, HandlesTwoSeparateSelectionOptions)
     gmx::SelectionList sel1;
     gmx::SelectionList sel2;
     using gmx::SelectionOption;
-    ASSERT_NO_THROW(options_.addOption(
-                            SelectionOption("sel1").storeVector(&sel1).multiValue()));
-    ASSERT_NO_THROW(options_.addOption(
-                            SelectionOption("sel2").storeVector(&sel2).multiValue()));
+    ASSERT_NO_THROW_GMX(options_.addOption(
+                                SelectionOption("sel1").storeVector(&sel1).multiValue()));
+    ASSERT_NO_THROW_GMX(options_.addOption(
+                                SelectionOption("sel2").storeVector(&sel2).multiValue()));
     setManager();
 
     gmx::OptionsAssigner assigner(&options_);
     std::string          value(TestFileManager::getInputFilePath("selfile.dat"));
-    EXPECT_NO_THROW(assigner.start());
-    ASSERT_NO_THROW(assigner.startOption("sel1"));
-    EXPECT_NO_THROW(assigner.finishOption());
-    ASSERT_NO_THROW(assigner.startOption("sf"));
-    EXPECT_NO_THROW(assigner.appendValue(value));
-    EXPECT_NO_THROW(assigner.finishOption());
-    ASSERT_NO_THROW(assigner.startOption("sel2"));
-    EXPECT_NO_THROW(assigner.finishOption());
-    ASSERT_NO_THROW(assigner.startOption("sf"));
-    EXPECT_NO_THROW(assigner.appendValue(value));
-    EXPECT_NO_THROW(assigner.finishOption());
-    EXPECT_NO_THROW(assigner.finish());
-    EXPECT_NO_THROW(options_.finish());
+    EXPECT_NO_THROW_GMX(assigner.start());
+    ASSERT_NO_THROW_GMX(assigner.startOption("sel1"));
+    EXPECT_NO_THROW_GMX(assigner.finishOption());
+    ASSERT_NO_THROW_GMX(assigner.startOption("sf"));
+    EXPECT_NO_THROW_GMX(assigner.appendValue(value));
+    EXPECT_NO_THROW_GMX(assigner.finishOption());
+    ASSERT_NO_THROW_GMX(assigner.startOption("sel2"));
+    EXPECT_NO_THROW_GMX(assigner.finishOption());
+    ASSERT_NO_THROW_GMX(assigner.startOption("sf"));
+    EXPECT_NO_THROW_GMX(assigner.appendValue(value));
+    EXPECT_NO_THROW_GMX(assigner.finishOption());
+    EXPECT_NO_THROW_GMX(assigner.finish());
+    EXPECT_NO_THROW_GMX(options_.finish());
 
     // These should match the contents of selfile.dat
     ASSERT_EQ(2U, sel1.size());
@@ -401,24 +402,24 @@ TEST_F(SelectionFileOptionTest, HandlesTwoSelectionOptionsFromSingleFile)
     gmx::SelectionList sel1;
     gmx::SelectionList sel2;
     using gmx::SelectionOption;
-    ASSERT_NO_THROW(options_.addOption(
-                            SelectionOption("sel1").storeVector(&sel1)));
-    ASSERT_NO_THROW(options_.addOption(
-                            SelectionOption("sel2").storeVector(&sel2)));
+    ASSERT_NO_THROW_GMX(options_.addOption(
+                                SelectionOption("sel1").storeVector(&sel1)));
+    ASSERT_NO_THROW_GMX(options_.addOption(
+                                SelectionOption("sel2").storeVector(&sel2)));
     setManager();
 
     gmx::OptionsAssigner assigner(&options_);
     std::string          value(TestFileManager::getInputFilePath("selfile.dat"));
-    EXPECT_NO_THROW(assigner.start());
-    ASSERT_NO_THROW(assigner.startOption("sel1"));
-    EXPECT_NO_THROW(assigner.finishOption());
-    ASSERT_NO_THROW(assigner.startOption("sel2"));
-    EXPECT_NO_THROW(assigner.finishOption());
-    ASSERT_NO_THROW(assigner.startOption("sf"));
-    EXPECT_NO_THROW(assigner.appendValue(value));
-    EXPECT_NO_THROW(assigner.finishOption());
-    EXPECT_NO_THROW(assigner.finish());
-    EXPECT_NO_THROW(options_.finish());
+    EXPECT_NO_THROW_GMX(assigner.start());
+    ASSERT_NO_THROW_GMX(assigner.startOption("sel1"));
+    EXPECT_NO_THROW_GMX(assigner.finishOption());
+    ASSERT_NO_THROW_GMX(assigner.startOption("sel2"));
+    EXPECT_NO_THROW_GMX(assigner.finishOption());
+    ASSERT_NO_THROW_GMX(assigner.startOption("sf"));
+    EXPECT_NO_THROW_GMX(assigner.appendValue(value));
+    EXPECT_NO_THROW_GMX(assigner.finishOption());
+    EXPECT_NO_THROW_GMX(assigner.finish());
+    EXPECT_NO_THROW_GMX(options_.finish());
 
     // These should match the contents of selfile.dat
     ASSERT_EQ(1U, sel1.size());
@@ -433,24 +434,24 @@ TEST_F(SelectionFileOptionTest, HandlesRequiredOptionFromFile)
     gmx::SelectionList sel;
     gmx::SelectionList optsel;
     using gmx::SelectionOption;
-    ASSERT_NO_THROW(options_.addOption(
-                            SelectionOption("sel").storeVector(&sel)
-                                .multiValue().required()));
-    ASSERT_NO_THROW(options_.addOption(
-                            SelectionOption("optsel").storeVector(&optsel)
-                                .multiValue()));
+    ASSERT_NO_THROW_GMX(options_.addOption(
+                                SelectionOption("sel").storeVector(&sel)
+                                    .multiValue().required()));
+    ASSERT_NO_THROW_GMX(options_.addOption(
+                                SelectionOption("optsel").storeVector(&optsel)
+                                    .multiValue()));
     setManager();
 
     gmx::OptionsAssigner assigner(&options_);
-    EXPECT_NO_THROW(assigner.start());
-    ASSERT_NO_THROW(assigner.startOption("sf"));
-    EXPECT_NO_THROW(assigner.appendValue(TestFileManager::getInputFilePath("selfile.dat")));
-    EXPECT_NO_THROW(assigner.finishOption());
-    EXPECT_NO_THROW(assigner.startOption("optsel"));
-    EXPECT_NO_THROW(assigner.finishOption());
-    EXPECT_NO_THROW(assigner.finish());
-    EXPECT_NO_THROW(options_.finish());
-    EXPECT_NO_THROW(manager_.parseRequestedFromString("resname RC RD"));
+    EXPECT_NO_THROW_GMX(assigner.start());
+    ASSERT_NO_THROW_GMX(assigner.startOption("sf"));
+    EXPECT_NO_THROW_GMX(assigner.appendValue(TestFileManager::getInputFilePath("selfile.dat")));
+    EXPECT_NO_THROW_GMX(assigner.finishOption());
+    EXPECT_NO_THROW_GMX(assigner.startOption("optsel"));
+    EXPECT_NO_THROW_GMX(assigner.finishOption());
+    EXPECT_NO_THROW_GMX(assigner.finish());
+    EXPECT_NO_THROW_GMX(options_.finish());
+    EXPECT_NO_THROW_GMX(manager_.parseRequestedFromString("resname RC RD"));
 
     // These should match the contents of selfile.dat
     ASSERT_EQ(2U, sel.size());
@@ -467,24 +468,24 @@ TEST_F(SelectionFileOptionTest, HandlesRequiredOptionFromFileWithOtherOptionSet)
     gmx::SelectionList sel1;
     gmx::SelectionList sel2;
     using gmx::SelectionOption;
-    ASSERT_NO_THROW(options_.addOption(
-                            SelectionOption("sel1").storeVector(&sel1)
-                                .multiValue().required()));
-    ASSERT_NO_THROW(options_.addOption(
-                            SelectionOption("sel2").storeVector(&sel2)
-                                .multiValue().required()));
+    ASSERT_NO_THROW_GMX(options_.addOption(
+                                SelectionOption("sel1").storeVector(&sel1)
+                                    .multiValue().required()));
+    ASSERT_NO_THROW_GMX(options_.addOption(
+                                SelectionOption("sel2").storeVector(&sel2)
+                                    .multiValue().required()));
     setManager();
 
     gmx::OptionsAssigner assigner(&options_);
-    EXPECT_NO_THROW(assigner.start());
-    EXPECT_NO_THROW(assigner.startOption("sel1"));
-    EXPECT_NO_THROW(assigner.appendValue("resname RC RD"));
-    EXPECT_NO_THROW(assigner.finishOption());
-    ASSERT_NO_THROW(assigner.startOption("sf"));
-    EXPECT_NO_THROW(assigner.appendValue(TestFileManager::getInputFilePath("selfile.dat")));
-    EXPECT_NO_THROW(assigner.finishOption());
-    EXPECT_NO_THROW(assigner.finish());
-    EXPECT_NO_THROW(options_.finish());
+    EXPECT_NO_THROW_GMX(assigner.start());
+    EXPECT_NO_THROW_GMX(assigner.startOption("sel1"));
+    EXPECT_NO_THROW_GMX(assigner.appendValue("resname RC RD"));
+    EXPECT_NO_THROW_GMX(assigner.finishOption());
+    ASSERT_NO_THROW_GMX(assigner.startOption("sf"));
+    EXPECT_NO_THROW_GMX(assigner.appendValue(TestFileManager::getInputFilePath("selfile.dat")));
+    EXPECT_NO_THROW_GMX(assigner.finishOption());
+    EXPECT_NO_THROW_GMX(assigner.finish());
+    EXPECT_NO_THROW_GMX(options_.finish());
 
     // These should match the contents of selfile.dat
     ASSERT_EQ(2U, sel2.size());
@@ -500,20 +501,20 @@ TEST_F(SelectionFileOptionTest, HandlesTwoRequiredOptionsFromSingleFile)
     gmx::SelectionList sel1;
     gmx::SelectionList sel2;
     using gmx::SelectionOption;
-    ASSERT_NO_THROW(options_.addOption(
-                            SelectionOption("sel1").storeVector(&sel1).required()));
-    ASSERT_NO_THROW(options_.addOption(
-                            SelectionOption("sel2").storeVector(&sel2).required()));
+    ASSERT_NO_THROW_GMX(options_.addOption(
+                                SelectionOption("sel1").storeVector(&sel1).required()));
+    ASSERT_NO_THROW_GMX(options_.addOption(
+                                SelectionOption("sel2").storeVector(&sel2).required()));
     setManager();
 
     gmx::OptionsAssigner assigner(&options_);
     std::string          value(TestFileManager::getInputFilePath("selfile.dat"));
-    EXPECT_NO_THROW(assigner.start());
-    ASSERT_NO_THROW(assigner.startOption("sf"));
-    EXPECT_NO_THROW(assigner.appendValue(value));
-    EXPECT_NO_THROW(assigner.finishOption());
-    EXPECT_NO_THROW(assigner.finish());
-    EXPECT_NO_THROW(options_.finish());
+    EXPECT_NO_THROW_GMX(assigner.start());
+    ASSERT_NO_THROW_GMX(assigner.startOption("sf"));
+    EXPECT_NO_THROW_GMX(assigner.appendValue(value));
+    EXPECT_NO_THROW_GMX(assigner.finishOption());
+    EXPECT_NO_THROW_GMX(assigner.finish());
+    EXPECT_NO_THROW_GMX(options_.finish());
 
     // These should match the contents of selfile.dat
     ASSERT_EQ(1U, sel1.size());
@@ -527,18 +528,18 @@ TEST_F(SelectionFileOptionTest, GivesErrorWithNoFile)
 {
     gmx::SelectionList sel;
     using gmx::SelectionOption;
-    ASSERT_NO_THROW(options_.addOption(
-                            SelectionOption("sel").storeVector(&sel).multiValue()));
+    ASSERT_NO_THROW_GMX(options_.addOption(
+                                SelectionOption("sel").storeVector(&sel).multiValue()));
     setManager();
 
     gmx::OptionsAssigner assigner(&options_);
-    EXPECT_NO_THROW(assigner.start());
-    ASSERT_NO_THROW(assigner.startOption("sel"));
-    EXPECT_NO_THROW(assigner.finishOption());
-    ASSERT_NO_THROW(assigner.startOption("sf"));
-    EXPECT_THROW(assigner.finishOption(), gmx::InvalidInputError);
-    EXPECT_NO_THROW(assigner.finish());
-    EXPECT_NO_THROW(options_.finish());
+    EXPECT_NO_THROW_GMX(assigner.start());
+    ASSERT_NO_THROW_GMX(assigner.startOption("sel"));
+    EXPECT_NO_THROW_GMX(assigner.finishOption());
+    ASSERT_NO_THROW_GMX(assigner.startOption("sf"));
+    EXPECT_THROW_GMX(assigner.finishOption(), gmx::InvalidInputError);
+    EXPECT_NO_THROW_GMX(assigner.finish());
+    EXPECT_NO_THROW_GMX(options_.finish());
 }
 
 
@@ -546,22 +547,22 @@ TEST_F(SelectionFileOptionTest, GivesErrorWithNonExistentFile)
 {
     gmx::SelectionList sel;
     using gmx::SelectionOption;
-    ASSERT_NO_THROW(options_.addOption(
-                            SelectionOption("sel").storeVector(&sel).multiValue()));
+    ASSERT_NO_THROW_GMX(options_.addOption(
+                                SelectionOption("sel").storeVector(&sel).multiValue()));
     setManager();
 
     gmx::OptionsAssigner assigner(&options_);
-    EXPECT_NO_THROW(assigner.start());
-    ASSERT_NO_THROW(assigner.startOption("sel"));
-    EXPECT_NO_THROW(assigner.finishOption());
-    ASSERT_NO_THROW(assigner.startOption("sf"));
+    EXPECT_NO_THROW_GMX(assigner.start());
+    ASSERT_NO_THROW_GMX(assigner.startOption("sel"));
+    EXPECT_NO_THROW_GMX(assigner.finishOption());
+    ASSERT_NO_THROW_GMX(assigner.startOption("sf"));
     // TODO: Should this be changed to an InvalidInputError?
-    EXPECT_THROW(assigner.appendValue("nonexistentfile"), gmx::FileIOError);
-    EXPECT_THROW(assigner.appendValue(TestFileManager::getInputFilePath("selfile.dat")),
-                 gmx::InvalidInputError);
-    EXPECT_NO_THROW(assigner.finishOption());
-    EXPECT_NO_THROW(assigner.finish());
-    EXPECT_NO_THROW(options_.finish());
+    EXPECT_THROW_GMX(assigner.appendValue("nonexistentfile"), gmx::FileIOError);
+    EXPECT_THROW_GMX(assigner.appendValue(TestFileManager::getInputFilePath("selfile.dat")),
+                     gmx::InvalidInputError);
+    EXPECT_NO_THROW_GMX(assigner.finishOption());
+    EXPECT_NO_THROW_GMX(assigner.finish());
+    EXPECT_NO_THROW_GMX(options_.finish());
 }
 
 
@@ -569,20 +570,20 @@ TEST_F(SelectionFileOptionTest, GivesErrorWithMultipleFiles)
 {
     gmx::SelectionList sel;
     using gmx::SelectionOption;
-    ASSERT_NO_THROW(options_.addOption(
-                            SelectionOption("sel").storeVector(&sel).multiValue()));
+    ASSERT_NO_THROW_GMX(options_.addOption(
+                                SelectionOption("sel").storeVector(&sel).multiValue()));
     setManager();
 
     gmx::OptionsAssigner assigner(&options_);
-    EXPECT_NO_THROW(assigner.start());
-    ASSERT_NO_THROW(assigner.startOption("sel"));
-    EXPECT_NO_THROW(assigner.finishOption());
-    ASSERT_NO_THROW(assigner.startOption("sf"));
-    EXPECT_NO_THROW(assigner.appendValue(TestFileManager::getInputFilePath("selfile.dat")));
-    EXPECT_THROW(assigner.appendValue("nonexistentfile"), gmx::InvalidInputError);
-    EXPECT_NO_THROW(assigner.finishOption());
-    EXPECT_NO_THROW(assigner.finish());
-    EXPECT_NO_THROW(options_.finish());
+    EXPECT_NO_THROW_GMX(assigner.start());
+    ASSERT_NO_THROW_GMX(assigner.startOption("sel"));
+    EXPECT_NO_THROW_GMX(assigner.finishOption());
+    ASSERT_NO_THROW_GMX(assigner.startOption("sf"));
+    EXPECT_NO_THROW_GMX(assigner.appendValue(TestFileManager::getInputFilePath("selfile.dat")));
+    EXPECT_THROW_GMX(assigner.appendValue("nonexistentfile"), gmx::InvalidInputError);
+    EXPECT_NO_THROW_GMX(assigner.finishOption());
+    EXPECT_NO_THROW_GMX(assigner.finish());
+    EXPECT_NO_THROW_GMX(options_.finish());
 }
 
 } // namespace
index c8de60fa5262d39d64b35871bbe840be5fb915dc..59e4ccdb997e674f5970d06b1d489c8fad8bba67 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * This file is part of the GROMACS molecular simulation package.
  *
- * Copyright (c) 2012, by the GROMACS development team, led by
+ * Copyright (c) 2012,2013, by the GROMACS development team, led by
  * David van der Spoel, Berk Hess, Erik Lindahl, and including many
  * others, as listed in the AUTHORS file in the top-level source
  * directory and at http://www.gromacs.org.
@@ -52,6 +52,7 @@
 #include "testutils/cmdlinetest.h"
 #include "testutils/datatest.h"
 #include "testutils/refdata.h"
+#include "testutils/testasserts.h"
 #include "testutils/testfilemanager.h"
 
 namespace gmx
@@ -216,7 +217,7 @@ AbstractTrajectoryAnalysisModuleTestFixture::runTest(const CommandLine &args)
     TrajectoryAnalysisCommandLineRunner runner(&module);
     runner.setPrintCopyright(false);
     int rc = 0;
-    EXPECT_NO_THROW(rc = runner.run(impl_->cmdline_.argc(), impl_->cmdline_.argv()));
+    EXPECT_NO_THROW_GMX(rc = runner.run(impl_->cmdline_.argc(), impl_->cmdline_.argv()));
     EXPECT_EQ(0, rc);
 
     if (!impl_->outputFiles_.empty())
index 91976aad85ababb710f1fdab17da498ae1f01cf1..8c229a60541a0078596229df17b11e896c32f670 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * This file is part of the GROMACS molecular simulation package.
  *
- * Copyright (c) 2011,2012, by the GROMACS development team, led by
+ * Copyright (c) 2011,2012,2013, by the GROMACS development team, led by
  * David van der Spoel, Berk Hess, Erik Lindahl, and including many
  * others, as listed in the AUTHORS file in the top-level source
  * directory and at http://www.gromacs.org.
@@ -53,6 +53,7 @@
 #include "gromacs/legacyheaders/thread_mpi/system_error.h"
 #include "gromacs/utility/errorcodes.h"
 #include "gromacs/utility/gmxassert.h"
+#include "gromacs/utility/stringutil.h"
 
 #include "errorformat.h"
 
@@ -356,4 +357,96 @@ void printFatalErrorMessage(FILE *fp, const std::exception &ex)
     internal::printFatalErrorFooter(fp);
 }
 
+std::string formatException(const std::exception &ex)
+{
+    // TODO: It would be nicer to not duplicate the logic from
+    // printExceptionMessage().
+    const boost::exception *boostEx = dynamic_cast<const boost::exception *>(&ex);
+    if (boostEx != NULL)
+    {
+        const char *const *funcPtr =
+            boost::get_error_info<boost::throw_function>(*boostEx);
+        const char *const *filePtr =
+            boost::get_error_info<boost::throw_file>(*boostEx);
+        const int         *linePtr =
+            boost::get_error_info<boost::throw_line>(*boostEx);
+
+        std::string        result;
+        if (filePtr != NULL && linePtr != NULL)
+        {
+            result = formatString("%s:%d: %s\n", *filePtr, *linePtr,
+                                  funcPtr != NULL ? *funcPtr : "");
+        }
+
+        // TODO: Remove duplicate context if present in multiple nested exceptions.
+        const ErrorMessage *msg =
+            boost::get_error_info<errinfo_message>(*boostEx);
+        if (msg != NULL)
+        {
+            while (msg != NULL && msg->isContext())
+            {
+                result.append(msg->text());
+                result.append("\n");
+                msg = &msg->child();
+            }
+            if (msg != NULL && !msg->text().empty())
+            {
+                result.append(msg->text());
+                result.append("\n");
+            }
+        }
+        else
+        {
+            result.append(ex.what());
+            result.append("\n");
+        }
+
+        const int *errorNumber
+            = boost::get_error_info<boost::errinfo_errno>(*boostEx);
+        if (errorNumber != NULL)
+        {
+            result.append(formatString("Reason: %s\n",
+                                       std::strerror(*errorNumber)));
+            const char * const *funcName
+                = boost::get_error_info<boost::errinfo_api_function>(*boostEx);
+            if (funcName != NULL)
+            {
+                result.append(formatString("(call to %s() returned error code %d)\n",
+                                           *funcName, *errorNumber));
+            }
+        }
+
+        // TODO: Treat also boost::nested_exception (not currently used, though)
+
+        const internal::NestedExceptionList *nested
+            = boost::get_error_info<errinfo_nested_exceptions>(*boostEx);
+        if (nested != NULL)
+        {
+            internal::NestedExceptionList::const_iterator ni;
+            for (ni = nested->begin(); ni != nested->end(); ++ni)
+            {
+                try
+                {
+                    rethrow_exception(*ni);
+                }
+                catch (const std::exception &nestedEx)
+                {
+                    result.append(formatException(nestedEx));
+                    result.append("\n");
+                }
+            }
+        }
+        // Remove terminating line feed.
+        if (result.size() > 0U)
+        {
+            result.erase(result.size() - 1);
+        }
+        return result;
+    }
+    else
+    {
+        return ex.what();
+    }
+}
+
 } // namespace gmx
index 9716449a89db2eea62626b09fa957a722766273f..d6826e0c749a12ab7ddb1bf6a88cffadd2d59ea2 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * This file is part of the GROMACS molecular simulation package.
  *
- * Copyright (c) 2011,2012, by the GROMACS development team, led by
+ * Copyright (c) 2011,2012,2013, by the GROMACS development team, led by
  * David van der Spoel, Berk Hess, Erik Lindahl, and including many
  * others, as listed in the AUTHORS file in the top-level source
  * directory and at http://www.gromacs.org.
@@ -386,6 +386,9 @@ class NotImplementedError : public APIError
 /*! \brief
  * Formats a standard fatal error message for reporting an exception.
  *
+ * \param[in] fp  File to format the message to.
+ * \param[in] ex  Exception to format.
+ *
  * Does not throw.  If memory allocation fails or some other error occurs
  * while formatting the error, tries to print a reasonable alternative message.
  *
@@ -408,6 +411,18 @@ class NotImplementedError : public APIError
  * \endcode
  */
 void printFatalErrorMessage(FILE *fp, const std::exception &ex);
+/*! \brief
+ * Formats an error message for reporting an exception.
+ *
+ * \param[in] ex  Exception to format.
+ * \returns   Formatted string containing details of \p ex.
+ * \throws    std::bad_alloc if out of memory.
+ *
+ * Currently, the output format is useful mainly for tests and debugging
+ * purposes; additional flags for controlling the format can be added if other
+ * uses for the function arise.
+ */
+std::string formatException(const std::exception &ex);
 
 /*! \brief
  * Converts an exception into a return code.
index 37d5905ef527a1ddcf3472b4aa3f35d60b0e6721..8266ec3ec1d3f226caf1451167da8cde9bf50163 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * This file is part of the GROMACS molecular simulation package.
  *
- * Copyright (c) 2011,2012, by the GROMACS development team, led by
+ * Copyright (c) 2011,2012,2013, by the GROMACS development team, led by
  * David van der Spoel, Berk Hess, Erik Lindahl, and including many
  * others, as listed in the AUTHORS file in the top-level source
  * directory and at http://www.gromacs.org.
@@ -51,6 +51,7 @@
 
 #include "testutils/datatest.h"
 #include "testutils/refdata.h"
+#include "testutils/testasserts.h"
 
 namespace gmx
 {
@@ -420,11 +421,11 @@ class StaticDataPointsStorageChecker
             {
                 int   index = frameIndex_ - past;
                 SCOPED_TRACE(formatString("Checking storage of frame %d", index));
-                ASSERT_NO_THROW({
-                                    AnalysisDataFrameRef frame = source_->getDataFrame(index);
-                                    ASSERT_TRUE(frame.isValid());
-                                    checkFrame(frame, data_->frame(index));
-                                });
+                ASSERT_NO_THROW_GMX({
+                                        AnalysisDataFrameRef frame = source_->getDataFrame(index);
+                                        ASSERT_TRUE(frame.isValid());
+                                        checkFrame(frame, data_->frame(index));
+                                    });
             }
         }
 
diff --git a/src/testutils/testasserts.h b/src/testutils/testasserts.h
new file mode 100644 (file)
index 0000000..57e8afe
--- /dev/null
@@ -0,0 +1,172 @@
+/*
+ * This file is part of the GROMACS molecular simulation package.
+ *
+ * Copyright (c) 2013, by the GROMACS development team, led by
+ * David van der Spoel, Berk Hess, Erik Lindahl, and including many
+ * others, as listed in the AUTHORS file in the top-level source
+ * directory and at http://www.gromacs.org.
+ *
+ * GROMACS is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * GROMACS is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with GROMACS; if not, see
+ * http://www.gnu.org/licenses, or write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA.
+ *
+ * If you want to redistribute modifications to GROMACS, please
+ * consider that scientific software is very special. Version
+ * control is crucial - bugs must be traceable. We will be happy to
+ * consider code for inclusion in the official distribution, but
+ * derived work must not be called official GROMACS. Details are found
+ * in the README & COPYING files - if they are missing, get the
+ * official version at http://www.gromacs.org.
+ *
+ * To help us fund GROMACS development, we humbly ask that you cite
+ * the research papers on the package. Check out http://www.gromacs.org.
+ */
+/*! \libinternal \file
+ * \brief
+ * Improved exception assertions for unit tests.
+ *
+ * This file provides assert macros to replace (ASSERT|EXPECT)(_NO)?_THROW
+ * from Google Test.  They behave otherwise the same as the Google Test ones,
+ * but also print details of any unexpected exceptions.  This makes it much
+ * easier to see at one glance what went wrong.
+ *
+ * \if internal
+ * \todo
+ * The implementation is somewhat ugly, and accesses some Google Test
+ * internals.  Could be nice to clean it up a bit.
+ * \endif
+ *
+ * \author Teemu Murtola <teemu.murtola@gmail.com>
+ * \inlibraryapi
+ * \ingroup module_testutils
+ */
+#ifndef GMX_TESTUTILS_TESTASSERTS_H
+#define GMX_TESTUTILS_TESTASSERTS_H
+
+#include <gtest/gtest.h>
+
+#include "gromacs/utility/exceptions.h"
+
+/*! \cond internal */
+/*! \internal
+ * \brief
+ * Internal implementation macro for exception assertations.
+ *
+ * \param statement          Statements to execute.
+ * \param expected_exception Exception type that \p statement should throw.
+ * \param fail               Function/macro to call on failure.
+ *
+ * The implementation is copied and adjusted from
+ * include/gtest/internal/gtest-internal.h in Google Test 1.6.0.
+ */
+#define GMX_TEST_THROW_(statement, expected_exception, fail) \
+    GTEST_AMBIGUOUS_ELSE_BLOCKER_ \
+    if (::testing::AssertionResult gmx_ar = ::testing::AssertionSuccess()) { \
+        bool gmx_caught_expected = false; \
+        try { \
+            GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \
+        } \
+        catch (expected_exception const &) { \
+            gmx_caught_expected = true; \
+        } \
+        catch (std::exception const &ex) { \
+            gmx_ar << "Expected: " #statement " throws an exception of type " \
+            << #expected_exception ".\n  Actual: it throws a different type.\n" \
+            << "Exception details:\n" << ::gmx::formatException(ex); \
+            goto GTEST_CONCAT_TOKEN_(gmx_label_testthrow_, __LINE__); \
+        } \
+        catch (...) { \
+            gmx_ar << "Expected: " #statement " throws an exception of type " \
+            << #expected_exception ".\n  Actual: it throws a different type."; \
+            goto GTEST_CONCAT_TOKEN_(gmx_label_testthrow_, __LINE__); \
+        } \
+        if (!gmx_caught_expected) { \
+            gmx_ar << "Expected: " #statement " throws an exception of type " \
+            << #expected_exception ".\n  Actual: it throws nothing."; \
+            goto GTEST_CONCAT_TOKEN_(gmx_label_testthrow_, __LINE__); \
+        } \
+    } else \
+        GTEST_CONCAT_TOKEN_(gmx_label_testthrow_, __LINE__) : \
+            fail(gmx_ar.message())
+
+/*! \internal
+ * \brief
+ * Internal implementation macro for exception assertations.
+ *
+ * \param statement          Statements to execute.
+ * \param fail               Function/macro to call on failure.
+ *
+ * The implementation is copied and adjusted from
+ * include/gtest/internal/gtest-internal.h in Google Test 1.6.0.
+ */
+#define GMX_TEST_NO_THROW_(statement, fail) \
+    GTEST_AMBIGUOUS_ELSE_BLOCKER_ \
+    if (::testing::AssertionResult gmx_ar = ::testing::AssertionSuccess()) { \
+        try { \
+            GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \
+        } \
+        catch (std::exception const &ex) { \
+            gmx_ar << "Expected: " #statement " doesn't throw an exception.\n" \
+            << "  Actual: it throws.\n" \
+            << "Exception details:\n" << ::gmx::formatException(ex); \
+            goto GTEST_CONCAT_TOKEN_(gmx_label_testnothrow_, __LINE__); \
+        } \
+        catch (...) { \
+            gmx_ar << "Expected: " #statement " doesn't throw an exception.\n" \
+            << "  Actual: it throws."; \
+            goto GTEST_CONCAT_TOKEN_(gmx_label_testnothrow_, __LINE__); \
+        } \
+    } else \
+        GTEST_CONCAT_TOKEN_(gmx_label_testnothrow_, __LINE__) : \
+            fail(gmx_ar.message())
+//! \endcond
+
+/*! \brief
+ * Asserts that a statement throws a given exception.
+ *
+ * See Google Test documentation on EXPECT_THROW.
+ * This macro works the same, but additionally prints details of unexpected
+ * exceptions.
+ */
+#define EXPECT_THROW_GMX(statement, expected_exception) \
+    GMX_TEST_THROW_(statement, expected_exception, GTEST_NONFATAL_FAILURE_)
+/*! \brief
+ * Asserts that a statement does not throw.
+ *
+ * See Google Test documentation on EXPECT_NO_THROW.
+ * This macro works the same, but additionally prints details of unexpected
+ * exceptions.
+ */
+#define EXPECT_NO_THROW_GMX(statement) \
+    GMX_TEST_NO_THROW_(statement, GTEST_NONFATAL_FAILURE_)
+/*! \brief
+ * Asserts that a statement throws a given exception.
+ *
+ * See Google Test documentation on ASSERT_THROW.
+ * This macro works the same, but additionally prints details of unexpected
+ * exceptions.
+ */
+#define ASSERT_THROW_GMX(statement, expected_exception) \
+    GMX_TEST_THROW_(statement, expected_exception, GTEST_FATAL_FAILURE_)
+/*! \brief
+ * Asserts that a statement does not throw.
+ *
+ * See Google Test documentation on ASSERT_NO_THROW.
+ * This macro works the same, but additionally prints details of unexpected
+ * exceptions.
+ */
+#define ASSERT_NO_THROW_GMX(statement) \
+    GMX_TEST_NO_THROW_(statement, GTEST_FATAL_FAILURE_)
+
+#endif