Commit 4e69e9794d4f8a91ef860c69bf046a1f484d7041

Authored by Henry Fredrick Schreiner
1 parent 15c6ee5f

Adding ini print and simple tests

CHANGELOG.md
@@ -2,7 +2,9 @@ @@ -2,7 +2,9 @@
2 2
3 * Updates to help print 3 * Updates to help print
4 * Removed `run`, please use `parse` unless you subclass and add it 4 * Removed `run`, please use `parse` unless you subclass and add it
5 -* Supports ini files mixed with command line 5 +* Supports ini files mixed with command line, tested
  6 +* Added Range for further Plumbum compatibility
  7 +* Added function to print out ini file
6 8
7 ## Version 0.3 9 ## Version 0.3
8 10
include/CLI/App.hpp
@@ -100,6 +100,15 @@ public: @@ -100,6 +100,15 @@ public:
100 return ini_setting; 100 return ini_setting;
101 } 101 }
102 102
  103 + /// Produce a string that could be read in as a config of the current values of the App
  104 + std::string config_to_str() const {
  105 + std::stringstream out;
  106 + for(const Option_p &opt : options) {
  107 + if(opt->lnames.size() > 0 && opt->count() > 0)
  108 + out << opt->lnames[0] << "=" << detail::join(opt->flatten_results()) << std::endl;
  109 + }
  110 + return out.str();
  111 + }
103 112
104 /// Add a subcommand. Like the constructor, you can override the help message addition by setting help=false 113 /// Add a subcommand. Like the constructor, you can override the help message addition by setting help=false
105 App* add_subcommand(std::string name, std::string description="", bool help=true) { 114 App* add_subcommand(std::string name, std::string description="", bool help=true) {
tests/IniTest.cpp
@@ -2,6 +2,9 @@ @@ -2,6 +2,9 @@
2 2
3 #include <cstdio> 3 #include <cstdio>
4 #include <sstream> 4 #include <sstream>
  5 +#include "gmock/gmock.h"
  6 +
  7 +using ::testing::HasSubstr;
5 8
6 TEST(StringBased, First) { 9 TEST(StringBased, First) {
7 std::stringstream ofile; 10 std::stringstream ofile;
@@ -134,3 +137,34 @@ TEST_F(TApp, IniRequired) { @@ -134,3 +137,34 @@ TEST_F(TApp, IniRequired) {
134 EXPECT_THROW(run(), CLI::RequiredError); 137 EXPECT_THROW(run(), CLI::RequiredError);
135 138
136 } 139 }
  140 +
  141 +TEST_F(TApp, IniOutputSimple) {
  142 +
  143 + int v;
  144 + app.add_option("--simple", v);
  145 +
  146 + args = {"--simple=3"};
  147 +
  148 + run();
  149 +
  150 + std::string str = app.config_to_str();
  151 + EXPECT_EQ("simple=3\n", str);
  152 +
  153 +}
  154 +
  155 +
  156 +TEST_F(TApp, IniOutputFlag) {
  157 +
  158 + int v;
  159 + app.add_option("--simple", v);
  160 + app.add_flag("--nothing");
  161 +
  162 + args = {"--simple=3", "--nothing"};
  163 +
  164 + run();
  165 +
  166 + std::string str = app.config_to_str();
  167 + EXPECT_THAT(str, HasSubstr("simple=3"));
  168 + EXPECT_THAT(str, HasSubstr("nothing="));
  169 +
  170 +}