Fix -deffnm -multi[dir]
authorTeemu Murtola <teemu.murtola@gmail.com>
Thu, 9 Jul 2015 14:21:15 +0000 (17:21 +0300)
committerTeemu Murtola <teemu.murtola@gmail.com>
Thu, 9 Jul 2015 14:21:15 +0000 (17:21 +0300)
Make -deffnm work even when all other functionality in
FileNameOptionManager is disabled (which happens with -multi and
-multidir).  Add a test for the broken case.

Fixes #1769.

Change-Id: I0f729eaa1ab6e9a4a25d1d121cbfe5b5b2673e4b

src/gromacs/options/filenameoptionmanager.cpp
src/gromacs/options/tests/filenameoptionmanager.cpp

index 4f0767895be9a098fbc822e51808e2b3b130bed1..e33443b8b1e54c4a1f65d8325cac3295f07fb5bf 100644 (file)
@@ -268,15 +268,14 @@ std::string FileNameOptionManager::completeFileName(
 std::string FileNameOptionManager::completeDefaultFileName(
         const std::string &prefix, const FileNameOptionInfo &option)
 {
-    if (option.isDirectoryOption() || impl_->bInputCheckingDisabled_)
+    if (option.isDirectoryOption())
     {
         return std::string();
     }
     const bool        bInput = option.isInputFile() || option.isInputOutputFile();
     const std::string realPrefix
         = !impl_->defaultFileName_.empty() ? impl_->defaultFileName_ : prefix;
-    const bool        bAllowMissing = option.allowMissing();
-    if (bInput)
+    if (bInput && !impl_->bInputCheckingDisabled_)
     {
         const std::string completedName
             = findExistingExtension(realPrefix, option, impl_->redirector_);
@@ -284,7 +283,7 @@ std::string FileNameOptionManager::completeDefaultFileName(
         {
             return completedName;
         }
-        if (bAllowMissing)
+        if (option.allowMissing())
         {
             return realPrefix + option.defaultExtension();
         }
index 30b6697e2f5ac260b7d410ec622782718a040294..6a2118818528391e4274806ac03a0cc26e196e55 100644 (file)
@@ -358,4 +358,27 @@ TEST_F(FileNameOptionManagerTest,
     EXPECT_EQ("testfile.trr", value);
 }
 
+TEST_F(FileNameOptionManagerTest, DefaultNameOptionWorksWithoutInputChecking)
+{
+    std::string value;
+    ASSERT_NO_THROW_GMX(manager_.disableInputOptionChecking(true));
+    ASSERT_NO_THROW_GMX(options_.addOption(
+                                FileNameOption("f").store(&value).required()
+                                    .filetype(gmx::eftIndex).inputFile()
+                                    .defaultBasename("default")
+                                    .allowMissing()));
+    ASSERT_NO_THROW_GMX(manager_.addDefaultFileNameOption(&options_, "deffnm"));
+    EXPECT_EQ("default.ndx", value);
+
+    gmx::OptionsAssigner assigner(&options_);
+    EXPECT_NO_THROW_GMX(assigner.start());
+    EXPECT_NO_THROW_GMX(assigner.startOption("deffnm"));
+    EXPECT_NO_THROW_GMX(assigner.appendValue("missing"));
+    EXPECT_NO_THROW_GMX(assigner.finishOption());
+    EXPECT_NO_THROW_GMX(assigner.finish());
+    EXPECT_NO_THROW_GMX(options_.finish());
+
+    EXPECT_EQ("missing.ndx", value);
+}
+
 } // namespace