From 10a5f4c1192f1b5e7aa59ed4962f7e2d7d5d4c24 Mon Sep 17 00:00:00 2001 From: Teemu Murtola Date: Thu, 9 Jul 2015 17:21:15 +0300 Subject: [PATCH 1/1] Fix -deffnm -multi[dir] 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 | 7 +++--- .../options/tests/filenameoptionmanager.cpp | 23 +++++++++++++++++++ 2 files changed, 26 insertions(+), 4 deletions(-) diff --git a/src/gromacs/options/filenameoptionmanager.cpp b/src/gromacs/options/filenameoptionmanager.cpp index 4f0767895b..e33443b8b1 100644 --- a/src/gromacs/options/filenameoptionmanager.cpp +++ b/src/gromacs/options/filenameoptionmanager.cpp @@ -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(); } diff --git a/src/gromacs/options/tests/filenameoptionmanager.cpp b/src/gromacs/options/tests/filenameoptionmanager.cpp index 30b6697e2f..6a21188185 100644 --- a/src/gromacs/options/tests/filenameoptionmanager.cpp +++ b/src/gromacs/options/tests/filenameoptionmanager.cpp @@ -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 -- 2.22.0