Fixes issue #1086.
In the default_val enums of uint8_t would read in as a string as they
could be converted to a string. This worked ok for normal values, but
when a check was added for specific strings, it caused an error when the
default_val was added. This PR fixes the issue.
The builder for coverage was updated to CMake 3.31 (by github), this
triggered an error in the coverage tool script. This led to updating
that script, which led to uncovering some missing coverage, which led to
additional tests, which led to some issues around single element tuples
support from #1081, which led to a few other issues that came up in the
to_string operation and templates.
---------
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Add modifier for subcommands to restrict subcommands falling through to
parent.
This will resolve#1022
---------
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Adds support for building with Bazel. If merged, I can push this to
https://registry.bazel.build/ when a new release is cut :)
---------
Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>
Co-authored-by: Caleb Zulawski <caleb.zulawski@caci.com>
Co-authored-by: Henry Schreiner <henryschreineriii@gmail.com>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
See https://github.com/CLIUtils/CLI11/pull/1025.
---------
Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Fix https://github.com/CLIUtils/CLI11/issues/999.
This looks like about what we have to do. This test seems to be missing
from Meson, so don't have a workaround there yet.
Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>
This adds a round trip test for config file generation to the fuzzer.
(the next step after this PR will be a fuzzer that verifies that the
round trip actually matches the results.
This change ended up requiring quite a few minor changes to fix the
ambiguities between the config file generation and config file reader.
1). There was a number of potential conflicts between positional names
and regular option names that could be triggered in config files, this
required a number of additional checks on the positional naming to
ensure no conflicts.
2). flag options with disable flag override can produce output results
that are not valid by themselves, resolving this required flag input to
be able to handle an array and output the original value set of results.
3). strings with non-printable characters could cause all sorts of chaos
in the config files. This was resolved by generating a binary string
conversion format and handling multiline comments and characters, and
handling escaped characters. Note; I think a better solution is to move
to fully supporting string formatting and escaping along with the binary
strings from TOML now that TOML 1.0 is finalized. That will not be this
PR though, maybe the next one.
4). Lot of ambiguities and edge cases in the string splitter, this was
reworked
5). handling of comments was not done well, especially comment characters in the
name of the option which is allowed.
6). non printable characters in the option naming. This would be weird
in practice but it also cause some big holes in the config file
generation, so the restricted character set for option naming was
expanded. (don't allow spaces or control characters).
---------
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Fixes#845 as discussed.
Comparing the two approaches of getting `argv`:
1. The "old" way, through `CLI::argv()`:
✔️ Works automatically and almost everywhere
❌ Small abstraction overhead on macOS
❌ Does not work in weird edge-cases such as missing `/proc`
2. This PR, through `app.ensure_utf8`:
✔️ True zero-overhead abstraction: you don't pay for what you don't use
✔️ Less moving parts than the "old" approach, probably can't be broken
❌ Requires extra code to be written by the user (which is sad because
ideally everyone should use this by default)
---------
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
add tests that exercise the CMake module and pkg-config files
---------
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
* Add the beginnings of a fuzzing system for CLI11. This commit adds the fuzzing code, a simple test, and two fixes to issues(seg faults) found by the initial round of fuzzing. It also adds a few tests and coverage issues uncovered in the process of developing the fuzz tests. As a side effect adjusts some of the azure tests to specify the vmImage which was being changed on azure.
* update license to match rest of code base
---------
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
* update the sanitizers cmake tag reference and the dependabot.yml to specify branch and update time
* style: pre-commit.ci fixes
---------
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
* Add unicode support tests
* Add unicode parse tests
* Implement #14
* Slim down Windows.h
* Fix documentation comments
* Fix clang-tidy and cpplint
* Update README
* Fix clang-tidy
* Fix to_path not being available on linux
* Add roundtrip encoding tests
* style: pre-commit.ci fixes
* Fix pre-commit.ci
* Fix codacy
* Exclude parse_unicode which should not contain a newline from pre-commit
* Remove a test which breaks CI
* Fix build in CI
* Replace broken execute_with tests
* Fix wide string conversions on all systems
* Fix system args on apple
* style: pre-commit.ci fixes
* Fix some includes
* Fix wrong size calculation and comments
* Add guards around codecvt
* Fix _Pragma not recognized on MSVC
* Fix bad macro check
* Fix include
* Fix narrow and widen when codecvt is missing
* Fix some weird bug in old MSVC
* Add dependent applications to meson-build
* Fix precompilation
* Fix lint
* Fix coverage
* Update README
* style: pre-commit.ci fixes
* Fix lint
* Fix coverage
* Fix optional braces offending clang
* Remove copied comments from Windows.h
* Suppress flawfinder detects
* Fix cmake config tests failing because of a missing lib
* chore: update copyright on new files to 2023
Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>
* style: pre-commit.ci fixes
Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Henry Schreiner <henryschreineriii@gmail.com>
update conan and azure-pipelines to fix gcc 4.8 issue
make the CLI11 target sources only for newer CMake
Change the cmake to use subdirectory and move the library generation and warnings to separate files.
* Update options.md book chapter and the readme to better reflect current usage and the modifications to the add_options templates.
add support in add_option for wrapper types, such as std::optional, boost::optional or other types with a value_type trait. Add support for generalized containers beyond vector, add support for nested tuples and vectors, and complex numbers directly in add_option. This includes several new type traits and object categories.
Upgrade the google test version to better support templated tests.
add support for vector argument separator `%%`
* update formatting to match recent changes
* Apply suggestions from code review
Co-authored-by: Henry Schreiner <HenrySchreinerIII@gmail.com>
Refactor some of the configuration file handling code. Make it easier to get the actual file that was processed, and allow extras in the config file to be ignored (default now), captured or errored.
fix std::error reference and formatting
add test for required but no default and fix a shadow warning on 'required' from gcc 4.8
Test correctness of config write-read loop
fix config generation for flag definitions
make the config output conform with toml
continue work on the config file interpretation and construction
get all the ini tests working again with the cleaned up features.
update formatting
rename IniTest to ConfigFileTest to better reflect actual tests and add a few more test of the configTOML
disambiguate enable/disable by default to an enumeration, and to make room for a configurable option to allow subcommands to be triggered by a config file.
add a ConfigBase class to generally reflect a broader class of configuration files formats of similar nature to INI files
add configurable to app and allow it to trigger subcommands
add test of ini formatting
add section support to the config files so sections can be opened and closed and the callbacks triggered as appropriate.
add handling of option groups to the config file output
add subcommand and option group configuration to config file output
subsubcom test on config files
fix a few sign comparison warnings and formatting
start working on the book edits for configuration and a few more tests
more test to check for subcommand close in config files
more tests for coverage
generalize section opening and closing
add more tests and some fixes for different configurations
yet more tests of different situations related to configuration files
test more paths for configuration file sections
remove some unused code and fix some codacy warnings
update readme with updates from configuration files
more book edits and README formatting
remove extra space
Apply suggestions from code review
Co-Authored-By: Henry Schreiner <HenrySchreinerIII@gmail.com>
fix some comments and documentation
fix spacing
Rename size_t -> std::size_t
Fix compiler warnings with -Wsign-conversion
Fix new warnings with -Wsign-conversion in PR
* Fixing some warnings
* Make gtest a system library
* Fixing format
* Adding better method for adding warnings
* Nicer Windows deprecated test
* JSON update and drop testing timer
* Warnings as errors everywhere
* add transform and checkedTransform tests
add Transformer and CheckedTransformer validators
* Eliminate the Validator description string, some code cleanup
add tests
Make Validators a full Object and remove friend, move to descriptions instead of overriding type name.
update validators to actually merge the type strings and use all validators in the type outputs
rework join so it works without the start variable, allow some forwarding references in the validator types, some tests for non-copyable maps, and transforms
merge the search function and enable use of member search function, make the pair adapters forwarding instead of copying
* add a few more tests and documentation
fix some gcc 4.7 issues and add a few more test cases and more parts of the README
Work on ReadMe and add Bound validator to clamp values
* updates to README.md
* Add some more in TOC of README and fix style in Option.hpp
* change the move function to _move_option and add an additional test
add a validation check on min options to make sure it is even possible to succeed.
add some additional tests to cover code paths and potential errors.
add a number of additional tests and checks and fix some issues with the add function in option_groups
clean up example and help formatting
add option_groups example to play with
move create_option_group to a member function using a dummy template
add some optionGroup tests
add min and max options calls and an associated Error call
* add ranges example, add excludes to app for options and subcommands.
* add some tests on ranges, and some subcommand tests with exclusion
* add tests in optionGroups for some invalid inputs
* add required option to subcommands and option_groups
* add disabled flag
* add disable option to subcommands and some more tests
* start work on ReadMe modifications
* update the readme with descriptions of function and methods added for option_groups
* clear up gcc 4.7 warnings
* some update to the Readme and a few more warnings fixed
* Minor readme touchup
* Adding first draft of Sets
Use IsMember now
Using IsMember as backend for Set
Non-const validator backend
Move set tests to set
Clearer inits
* Drop shortcut
Tighten up classes a bit for MSVC
Check with GCC 4.8 too
* Simpler templates, but more of them
Dropping more type safety for older compilers
Shortcut string set
* Adding shortcut init
Making g++ 4.7 docker image happy
Fix Clang tidy issue with last commit
Adding one more shortcut, adding a couple of tests
* Dropping dual pointer versions of code
* Smarter shortcut syntax
* Adding slighly faster choices
* Cleanup to make InMember simpler
* Drop choices for now, adding some tests
* ValidationError is now always the error from a validator
* Support for other types of initializer lists, including enums
* Factor out type utilities, single version of IsMember code
* Adding a few tests for #224
* Minor cleanup for Validation Error
* Adding tests, moved deprecated tests
* Docs updates
* add Tests and ability to handle program file inclusion in the single string.
add the ability to deal with a single string in the parse command and handle quoted string appropriately
* Add extra test cases for full coverage, clear up escape quote sequencing and handling of extra spaces
in progress: formatters
Getting closer
Working on apps
One test actually runs
All builds, added filter functions
Reverting a few behavours as needed
Repairs
All tests pass
Fixing error with adding help flag
Labels are simpler mappings, normalized setters
Adding help_all
Adding a few more tests
One more line tested
Adding one more check
Adding to readme
Simplify naming
Adding default constructors
Fixing spacing issues with subcommand all printout
Adding a couple of tests