Test behavior of GetArg functions when string, integer, and boolean types are specified in the settings.json file. GetArg functions are convenience functions. The GetSetting method can always be used instead of GetArg methods to retrieve original values, and there's not always an objective answer to what GetArg behavior is best in every case. This test makes sure there's test coverage for whatever
| 51 | // there's test coverage for whatever the current behavior is, so it's not |
| 52 | // broken or changed unintentionally. |
| 53 | BOOST_AUTO_TEST_CASE(setting_args) |
| 54 | { |
| 55 | ArgsManager args; |
| 56 | SetupArgs(args, {{"-foo", ArgsManager::ALLOW_ANY}}); |
| 57 | |
| 58 | auto set_foo = [&](const util::SettingsValue& value) { |
| 59 | args.LockSettings([&](util::Settings& settings) { |
| 60 | settings.rw_settings["foo"] = value; |
| 61 | }); |
| 62 | }; |
| 63 | |
| 64 | set_foo("str"); |
| 65 | BOOST_CHECK_EQUAL(args.GetSetting("foo").write(), "\"str\""); |
| 66 | BOOST_CHECK_EQUAL(args.GetArg("foo", "default"), "str"); |
| 67 | BOOST_CHECK_EQUAL(args.GetIntArg("foo", 100), 0); |
| 68 | BOOST_CHECK_EQUAL(args.GetBoolArg("foo", true), false); |
| 69 | BOOST_CHECK_EQUAL(args.GetBoolArg("foo", false), false); |
| 70 | |
| 71 | set_foo("99"); |
| 72 | BOOST_CHECK_EQUAL(args.GetSetting("foo").write(), "\"99\""); |
| 73 | BOOST_CHECK_EQUAL(args.GetArg("foo", "default"), "99"); |
| 74 | BOOST_CHECK_EQUAL(args.GetIntArg("foo", 100), 99); |
| 75 | BOOST_CHECK_EQUAL(args.GetBoolArg("foo", true), true); |
| 76 | BOOST_CHECK_EQUAL(args.GetBoolArg("foo", false), true); |
| 77 | |
| 78 | set_foo("3.25"); |
| 79 | BOOST_CHECK_EQUAL(args.GetSetting("foo").write(), "\"3.25\""); |
| 80 | BOOST_CHECK_EQUAL(args.GetArg("foo", "default"), "3.25"); |
| 81 | BOOST_CHECK_EQUAL(args.GetIntArg("foo", 100), 3); |
| 82 | BOOST_CHECK_EQUAL(args.GetBoolArg("foo", true), true); |
| 83 | BOOST_CHECK_EQUAL(args.GetBoolArg("foo", false), true); |
| 84 | |
| 85 | set_foo("0"); |
| 86 | BOOST_CHECK_EQUAL(args.GetSetting("foo").write(), "\"0\""); |
| 87 | BOOST_CHECK_EQUAL(args.GetArg("foo", "default"), "0"); |
| 88 | BOOST_CHECK_EQUAL(args.GetIntArg("foo", 100), 0); |
| 89 | BOOST_CHECK_EQUAL(args.GetBoolArg("foo", true), false); |
| 90 | BOOST_CHECK_EQUAL(args.GetBoolArg("foo", false), false); |
| 91 | |
| 92 | set_foo(""); |
| 93 | BOOST_CHECK_EQUAL(args.GetSetting("foo").write(), "\"\""); |
| 94 | BOOST_CHECK_EQUAL(args.GetArg("foo", "default"), ""); |
| 95 | BOOST_CHECK_EQUAL(args.GetIntArg("foo", 100), 0); |
| 96 | BOOST_CHECK_EQUAL(args.GetBoolArg("foo", true), true); |
| 97 | BOOST_CHECK_EQUAL(args.GetBoolArg("foo", false), true); |
| 98 | |
| 99 | set_foo(99); |
| 100 | BOOST_CHECK_EQUAL(args.GetSetting("foo").write(), "99"); |
| 101 | BOOST_CHECK_EQUAL(args.GetArg("foo", "default"), "99"); |
| 102 | BOOST_CHECK_EQUAL(args.GetIntArg("foo", 100), 99); |
| 103 | BOOST_CHECK_THROW(args.GetBoolArg("foo", true), std::runtime_error); |
| 104 | BOOST_CHECK_THROW(args.GetBoolArg("foo", false), std::runtime_error); |
| 105 | |
| 106 | set_foo(3.25); |
| 107 | BOOST_CHECK_EQUAL(args.GetSetting("foo").write(), "3.25"); |
| 108 | BOOST_CHECK_EQUAL(args.GetArg("foo", "default"), "3.25"); |
| 109 | BOOST_CHECK_THROW(args.GetIntArg("foo", 100), std::runtime_error); |
| 110 | BOOST_CHECK_THROW(args.GetBoolArg("foo", true), std::runtime_error); |
nothing calls this directly
no test coverage detected