From: Teemu Murtola Date: Thu, 9 Jul 2015 14:21:15 +0000 (+0300) Subject: Fix -deffnm -multi[dir] X-Git-Url: http://biod.pnpi.spb.ru/gitweb/?a=commitdiff_plain;h=10a5f4c1192f1b5e7aa59ed4962f7e2d7d5d4c24;hp=90e5c7b64e42dba60be8119a0b1d2e5356673854;p=alexxy%2Fgromacs.git 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 --- 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