diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml deleted file mode 100644 index c1c954e..0000000 --- a/.github/FUNDING.yml +++ /dev/null @@ -1 +0,0 @@ -github: marzer diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md deleted file mode 100644 index 6b2709c..0000000 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ /dev/null @@ -1,98 +0,0 @@ ---- -name: Bug report -about: Regular ol' bugs. -title: '' -labels: [ "bug" ] -assignees: marzer - ---- - - - - - -## Environment -**toml++ version and/or commit hash:** - - - -**Compiler:** - - - - -**C++ standard mode:** - - - - -**Target arch:** - - - - -**Library configuration overrides:** - - - - -**Relevant compilation flags:** - - - - -## Describe the bug - - - - -## Steps to reproduce (or a small repro code sample) - - - - -## Additional information - diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml deleted file mode 100644 index 3ba13e0..0000000 --- a/.github/ISSUE_TEMPLATE/config.yml +++ /dev/null @@ -1 +0,0 @@ -blank_issues_enabled: false diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md deleted file mode 100644 index 76688cd..0000000 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ /dev/null @@ -1,38 +0,0 @@ ---- -name: Feature request -about: Want to see something added or improved? Tell me all about it. -title: '' -labels: feature -assignees: marzer - ---- - - - - - -**Is your feature request related to a problem? Please describe.** - - - - -**Describe the solution you'd like** - - - - - -**Additional context** - diff --git a/.github/ISSUE_TEMPLATE/spec_bug_report.md b/.github/ISSUE_TEMPLATE/spec_bug_report.md deleted file mode 100644 index fbb3aea..0000000 --- a/.github/ISSUE_TEMPLATE/spec_bug_report.md +++ /dev/null @@ -1,55 +0,0 @@ ---- -name: TOML spec conformance bug -about: Bugs relating to the library's TOML spec conformance (or lack thereof). -title: '' -labels: [ "bug", "TOML spec" ] -assignees: marzer - ---- - - - - -## The non-conforming TOML snippet -```toml - -# your TOML here - -``` - - -## What you expected - - - -## What you got - - - -## Environment -**toml++ version and/or commit hash:** - - -**Any other useful information:** - diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md deleted file mode 100644 index 4632299..0000000 --- a/.github/pull_request_template.md +++ /dev/null @@ -1,38 +0,0 @@ - - -**What does this change do?** - - - -**Is it related to an exisiting bug report or feature request?** - - - -**Pre-merge checklist** - - - -- [ ] I've read [CONTRIBUTING.md] -- [ ] I've rebased my changes against the current HEAD of `origin/master` (if necessary) -- [ ] I've added new test cases to verify my change -- [ ] I've regenerated toml.hpp ([how-to]) -- [ ] I've updated any affected documentation -- [ ] I've rebuilt and run the tests with at least one of: - - [ ] Clang 8 or higher - - [ ] GCC 8 or higher - - [ ] MSVC 19.20 (Visual Studio 2019) or higher -- [ ] I've added my name to the list of contributors in [README.md](https://github.com/marzer/tomlplusplus/blob/master/README.md) - -[CONTRIBUTING.md]: https://github.com/marzer/tomlplusplus/blob/master/CONTRIBUTING.md -[how-to]: https://github.com/marzer/tomlplusplus/blob/master/CONTRIBUTING.md#regenerating-tomlhpp -[README.md]: https://github.com/marzer/tomlplusplus/blob/master/README.md diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml deleted file mode 100644 index 0469c07..0000000 --- a/.github/workflows/ci.yaml +++ /dev/null @@ -1,191 +0,0 @@ -name: ci - -on: - push: - branches-ignore: - - "gh-pages" - paths: - - "**.h" - - "**.hpp" - - "**.cpp" - - "**.inl" - - "**.py" - - "**/meson.build" - - "**/workflows/**.yaml" - pull_request: - branches-ignore: - - "gh-pages" - paths: - - "**.h" - - "**.hpp" - - "**.cpp" - - "**.inl" - - "**.py" - - "**/meson.build" - - "**/workflows/**.yaml" - workflow_dispatch: - -concurrency: - group: ${{ github.workflow }}-${{ github.ref }} - cancel-in-progress: true - -env: - clang_version: "14" - gcc_version: "11" - -jobs: - linux: - strategy: - fail-fast: false - matrix: - compiler: - - "clang" - - "gcc" - linker: - - "lld" - type: - - "debug" - - "release" - - runs-on: ubuntu-latest - - defaults: - run: - shell: bash - - steps: - - name: Install base dependencies - run: | - sudo apt -y update - sudo apt -y install --no-install-recommends git python3 python3-pip ninja-build libstdc++-${{ env.gcc_version }}-dev locales-all - - - uses: actions/checkout@v3 - - - name: Install python dependencies - run: | - sudo -H pip3 install --no-cache-dir --upgrade meson - sudo -H pip3 install --no-cache-dir --upgrade -r tools/requirements.txt - - - name: Check toml.hpp - run: | - cd tools - python3 ci_single_header_check.py - - - name: Install lld - if: ${{ startsWith(matrix.linker, 'lld') }} - run: | - sudo apt -y install --no-install-recommends lld-${{ env.clang_version }} - sudo update-alternatives --install /usr/bin/ld.lld ld.lld /usr/bin/ld.lld-${{ env.clang_version }} 1000 - - - name: Install clang - if: ${{ startsWith(matrix.compiler, 'clang') }} - run: | - sudo apt -y install --no-install-recommends clang-${{ env.clang_version }} - sudo update-alternatives --install /usr/bin/c++ c++ /usr/bin/clang++-${{ env.clang_version }} 1000 - sudo update-alternatives --install /usr/bin/cc cc /usr/bin/clang-${{ env.clang_version }} 1000 - - - name: Install gcc - if: ${{ startsWith(matrix.compiler, 'gcc') }} - run: | - sudo apt -y install --no-install-recommends gcc-${{ env.gcc_version }} g++-${{ env.gcc_version }} - sudo update-alternatives --install /usr/bin/c++ c++ /usr/bin/g++-${{ env.gcc_version }} 1000 - sudo update-alternatives --install /usr/bin/cc cc /usr/bin/gcc-${{ env.gcc_version }} 1000 - - - name: Configure locales - run: | - sudo locale-gen 'en_US.utf8' 'ja_JP.utf8' 'de_DE.utf8' 'it_IT.utf8' 'tr_TR.utf8' 'fi_FI.utf8' 'fr_FR.utf8' 'zh_CN.utf8' - - - name: Configure Meson - run: | - CXX=c++ CXX_LD=${{ matrix.linker }} meson setup build --buildtype=${{ matrix.type }} -Ddevel=true -Db_lto=false - - - name: Build - run: meson compile -C build - - - name: Test - run: meson test -C build --verbose - - windows: - strategy: - fail-fast: false - matrix: - type: - - "debug" - - "release" - - runs-on: windows-2022 - - defaults: - run: - shell: cmd - - steps: - - name: Install dependencies - run: | - python3 -m pip install -U pip - pip3 install meson ninja - - - uses: actions/checkout@v3 - - - uses: ilammy/msvc-dev-cmd@v1 - - - name: Configure Meson - run: meson setup build --vsenv --buildtype=${{ matrix.type }} -Ddevel=true -Db_lto=false - - - name: Build - run: meson compile -C build - - - name: Test - run: meson test -C build --verbose -# tipi-build-linux: -# name: tipi.build project build and dependency resolution -# runs-on: ubuntu-latest -# if: github.ref == 'refs/heads/master' -# container: tipibuild/tipi-ubuntu -# -# env: -# HOME: /root -# -# steps: -# - uses: actions/checkout@v3 -# - run: mkdir -p ~/.tipi -# -# # checking if the tomlplusplus project builds and passes tests -# - name: Build as project target linux-cxx17 (run tests 'odr_test_1' and 'main') -# run: tipi . --dont-upgrade --verbose -t linux-cxx17 --test "odr_test_1|main" -# -# - name: Build as project target linux-cxx20 (run tests 'odr_test_1' and 'main') -# run: tipi . --dont-upgrade --verbose -t linux-cxx20 --test "odr_test_1|main" -# -# - name: Cleanup project builds -# run: rm -r ./build -# -# - name: "Get branch name and save to env" -# env: -# IS_PR: ${{ github.EVENT_NAME == 'pull_request' }} -# run: | -# if ${IS_PR}; then -# BRANCH_NAME="${GITHUB_HEAD_REF}" -# else -# BRANCH_NAME="${GITHUB_REF##*/}" -# fi -# echo "BRANCH_NAME=${BRANCH_NAME}" >> $GITHUB_ENV -# -# # trying if pulling the dependency with tipi works properly -# - name: Build as dependency -# run: | -# cd examples/ -# -# # create test directory and copy the simple_parser.cpp in there -# mkdir test-as-dep -# cp examples.h test-as-dep/. -# cp simple_parser.cpp test-as-dep/. -# cd test-as-dep/ -# -# # create a deps file referencing the commit that triggered this build as dependency -# mkdir .tipi -# echo '{ "requires": { "${{ github.event.repository.full_name }}": { "@": "${{ env.BRANCH_NAME }}" } } }' > .tipi/deps -# -# # build -# tipi . --dont-upgrade --verbose -t linux-cxx17 -# ./build/linux-cxx17/bin/simple_parser ../example.toml diff --git a/.github/workflows/cifuzz.yml b/.github/workflows/cifuzz.yml deleted file mode 100644 index eea8fb7..0000000 --- a/.github/workflows/cifuzz.yml +++ /dev/null @@ -1,39 +0,0 @@ -name: CIFuzz -on: - push: - branches: - - master - pull_request: -permissions: {} -jobs: - Fuzzing: - runs-on: ubuntu-latest - permissions: - security-events: write - steps: - - name: Build Fuzzers - id: build - uses: google/oss-fuzz/infra/cifuzz/actions/build_fuzzers@master - with: - oss-fuzz-project-name: 'tomlplusplus' - language: c++ - - name: Run Fuzzers - uses: google/oss-fuzz/infra/cifuzz/actions/run_fuzzers@master - with: - oss-fuzz-project-name: 'tomlplusplus' - language: c++ - fuzz-seconds: 800 - output-sarif: true - - name: Upload Crash - uses: actions/upload-artifact@v3 - if: failure() && steps.build.outcome == 'success' - with: - name: artifacts - path: ./out/artifacts - - name: Upload Sarif - if: always() && steps.build.outcome == 'success' - uses: github/codeql-action/upload-sarif@v2 - with: - # Path to SARIF file relative to the root of the repository - sarif_file: cifuzz-sarif/results.sarif - checkout_path: cifuzz-sarif diff --git a/.github/workflows/gh-pages.yaml b/.github/workflows/gh-pages.yaml deleted file mode 100644 index 8359133..0000000 --- a/.github/workflows/gh-pages.yaml +++ /dev/null @@ -1,42 +0,0 @@ -name: gh-pages - -on: - push: - branches: - - master - paths: - - "**.h" - - "**.hpp" - - "**.dox" - - "**.md" - - "docs/**" - - "**/gh-pages.yaml" - workflow_dispatch: - -jobs: - gh-pages: - runs-on: ubuntu-latest - - defaults: - run: - shell: bash - - steps: - - uses: actions/checkout@v3 - - - name: Install dependencies - run: | - sudo apt -y update - sudo apt -y install --no-install-recommends git python3 python3-pip doxygen - sudo -H pip3 install --upgrade poxy - - - name: Generate docs - run: | - cd docs - poxy --verbose - - - name: Deploy - uses: peaceiris/actions-gh-pages@v3 - with: - github_token: ${{ secrets.GITHUB_TOKEN }} - publish_dir: ./docs/html diff --git a/.runsettings b/.runsettings deleted file mode 100644 index aa59652..0000000 --- a/.runsettings +++ /dev/null @@ -1,20 +0,0 @@ - - - - - 0 - build\TestResults - 60000 - - - - - --verbosity high --list-tests * - 500 - (?i:test) - Solution - tests\ - AdditionalInfo - - - diff --git a/.tipi/deps b/.tipi/deps deleted file mode 100644 index 3944afa..0000000 --- a/.tipi/deps +++ /dev/null @@ -1,3 +0,0 @@ -{ - "requires": {} -} diff --git a/Aurora.json b/Aurora.json new file mode 100644 index 0000000..c04fa3a --- /dev/null +++ b/Aurora.json @@ -0,0 +1,11 @@ +{ + "name": "tomlplusplus", + "type": "generic", + "sourcePaths": "src", + "include": "include", + "noLink": true, + "defines": [ + "TOML_HEADER_ONLY=1", + "TOML_OPTIONAL_TYPE=AuOptional" + ] +} \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt deleted file mode 100644 index a913cdc..0000000 --- a/CMakeLists.txt +++ /dev/null @@ -1,44 +0,0 @@ -cmake_minimum_required(VERSION 3.14) - -project( - tomlplusplus - VERSION 3.4.0 - DESCRIPTION "Header-only TOML config file parser and serializer for C++17" - HOMEPAGE_URL "https://marzer.github.io/tomlplusplus/" - LANGUAGES CXX -) - -include(cmake/project-is-top-level.cmake) -include(cmake/variables.cmake) - -# ---- Declare library ---- - -add_library(tomlplusplus_tomlplusplus INTERFACE) -add_library(tomlplusplus::tomlplusplus ALIAS tomlplusplus_tomlplusplus) - -set_property( - TARGET tomlplusplus_tomlplusplus PROPERTY - EXPORT_NAME tomlplusplus -) - -target_include_directories( - tomlplusplus_tomlplusplus - ${tomlplusplus_warning_guard} # unquoted for list expansion - INTERFACE - "$" -) - -target_compile_features(tomlplusplus_tomlplusplus INTERFACE cxx_std_17) - -# ---- Install rules, examples, and fuzzing ---- -if(PROJECT_IS_TOP_LEVEL) - include(cmake/install-rules.cmake) - option(BUILD_EXAMPLES "Build examples tree." OFF) - option(BUILD_FUZZER "Build fuzzer." OFF) - if(BUILD_EXAMPLES) - add_subdirectory(examples) - endif() - if(BUILD_FUZZER AND DEFINED ENV{LIB_FUZZING_ENGINE}) - add_subdirectory(fuzzing) - endif() -endif() diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md deleted file mode 100644 index 8f30d26..0000000 --- a/CODE_OF_CONDUCT.md +++ /dev/null @@ -1,76 +0,0 @@ -# Contributor Covenant Code of Conduct - -## Our Pledge - -In the interest of fostering an open and welcoming environment, we as -contributors and maintainers pledge to making participation in our project and -our community a harassment-free experience for everyone, regardless of age, body -size, disability, ethnicity, sex characteristics, gender identity and expression, -level of experience, education, socio-economic status, nationality, personal -appearance, race, religion, or sexual identity and orientation. - -## Our Standards - -Examples of behavior that contributes to creating a positive environment -include: - -* Using welcoming and inclusive language -* Being respectful of differing viewpoints and experiences -* Gracefully accepting constructive criticism -* Focusing on what is best for the community -* Showing empathy towards other community members - -Examples of unacceptable behavior by participants include: - -* The use of sexualized language or imagery and unwelcome sexual attention or - advances -* Trolling, insulting/derogatory comments, and personal or political attacks -* Public or private harassment -* Publishing others' private information, such as a physical or electronic - address, without explicit permission -* Other conduct which could reasonably be considered inappropriate in a - professional setting - -## Our Responsibilities - -Project maintainers are responsible for clarifying the standards of acceptable -behavior and are expected to take appropriate and fair corrective action in -response to any instances of unacceptable behavior. - -Project maintainers have the right and responsibility to remove, edit, or -reject comments, commits, code, wiki edits, issues, and other contributions -that are not aligned to this Code of Conduct, or to ban temporarily or -permanently any contributor for other behaviors that they deem inappropriate, -threatening, offensive, or harmful. - -## Scope - -This Code of Conduct applies both within project spaces and in public spaces -when an individual is representing the project or its community. Examples of -representing a project or community include using an official project e-mail -address, posting via an official social media account, or acting as an appointed -representative at an online or offline event. Representation of a project may be -further defined and clarified by project maintainers. - -## Enforcement - -Instances of abusive, harassing, or otherwise unacceptable behavior may be -reported by contacting the project team at mark.gillard@outlook.com.au. All -complaints will be reviewed and investigated and will result in a response that -is deemed necessary and appropriate to the circumstances. The project team is -obligated to maintain confidentiality with regard to the reporter of an incident. -Further details of specific enforcement policies may be posted separately. - -Project maintainers who do not follow or enforce the Code of Conduct in good -faith may face temporary or permanent repercussions as determined by other -members of the project's leadership. - -## Attribution - -This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, -available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html - -[homepage]: https://www.contributor-covenant.org - -For answers to common questions about this code of conduct, see -https://www.contributor-covenant.org/faq diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md deleted file mode 100644 index 552880b..0000000 --- a/CONTRIBUTING.md +++ /dev/null @@ -1,80 +0,0 @@ -# Contributing to toml++ - -Contributions are very welcome! Either by [reporting issues] or submitting pull requests. -If you wish to submit a PR, please be aware that: - -- The single-header `toml.hpp` at the repository root is generated by a script, so don't change it directly; make your - changes in the files in `include`. -- Your changes should compile warning-free on at least one of: - - GCC 8 or higher - - Clang 8 or higher - - MSVC 19.2X (Visual Studio 2019) or higher -- You should regenerate the single-header version of `toml.hpp` as part of your PR (a CI check will fail if you don't). - -
- -## Regenerating the single-header toml.hpp - -1. Make your changes as necessary - - If you've added a new header file that isn't going to be transitively included by one of the - others, add an include directive to `include/toml++/toml.hpp` -2. Install the prerequisite python packages: `pip3 install -r tools/requirements.txt` -3. Run `tools/generate_single_header.py` - -
- -## Building and running the tests - -Testing is done using [Catch2]. - -### Testing on Windows with Visual Studio - -Install [Visual Studio] and [Test Adapter for Catch2], then open `toml++.sln` and build the -projects in the `tests` solution folder. Visual Studio's Test Explorer should pick these up and -allow you to run the tests directly. - -If test discovery fails you can usually fix it by enabling -`Auto Detect runsettings Files` (settings gear icon > `Configure Run Settings`). - -### Testing on Linux (and WSL) - -```bash -# install ninja, meson, locales (first time only) -sudo apt update && sudo apt install -y locales python3 python3-pip ninja-build -sudo pip3 install meson -sudo locale-gen 'en_US.utf8' \ - 'ja_JP.utf8' \ - 'de_DE.utf8' \ - 'it_IT.utf8' \ - 'tr_TR.utf8' \ - 'fi_FI.utf8' \ - 'fr_FR.utf8' \ - 'zh_CN.utf8' - -# create the build configs (first time only) -meson setup build-debug --buildtype=debug -Ddevel=true -meson setup build-release --buildtype=release -Ddevel=true - -# run the tests -cd build-debug && ninja && ninja test \ - && cd ../build-release && ninja && ninja test \ - && cd .. -``` - -> ℹ️ Pass `-Duse_vendored_libs=false` to Meson if you wish to use the system-installed version -> of Catch2 rather than the vendored one. - -
- -## Testing with the [toml-test] suite - -As an optional extra you may wish to test against the official test TOML test suite, [toml-test]. See the -instructions at [toml-test/README](./toml-test/README.md). Note that the toml++ tests already consume tests from the -offical suite via a C++ code-generation script so you are not expected to take this extra step as part of contributing -to the library. - -[visual studio]: https://visualstudio.microsoft.com/vs/ -[test adapter for catch2]: https://marketplace.visualstudio.com/items?itemName=JohnnyHendriks.ext01 -[reporting issues]: https://github.com/marzer/tomlplusplus/issues -[catch2]: https://github.com/catchorg/Catch2 -[toml-test]: https://github.com/toml-lang/toml-test diff --git a/cmake/install-rules.cmake b/cmake/install-rules.cmake deleted file mode 100644 index 2218025..0000000 --- a/cmake/install-rules.cmake +++ /dev/null @@ -1,52 +0,0 @@ -include(CMakePackageConfigHelpers) -include(GNUInstallDirs) - -install( - FILES "${PROJECT_SOURCE_DIR}/toml++.natvis" "${PROJECT_SOURCE_DIR}/cpp.hint" - DESTINATION "${CMAKE_INSTALL_DATADIR}/tomlplusplus" - COMPONENT tomlplusplus_Development -) - -install( - DIRECTORY "${PROJECT_SOURCE_DIR}/include/" - DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}" - COMPONENT tomlplusplus_Development -) - -install( - TARGETS tomlplusplus_tomlplusplus - EXPORT tomlplusplusTargets - INCLUDES DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}" -) - -write_basic_package_version_file( - tomlplusplusConfigVersion.cmake - COMPATIBILITY SameMajorVersion - ARCH_INDEPENDENT -) - -set( - tomlplusplus_INSTALL_CMAKEDIR "${CMAKE_INSTALL_LIBDIR}/cmake/tomlplusplus" - CACHE STRING "CMake package config location relative to the install prefix" -) - -mark_as_advanced(tomlplusplus_INSTALL_CMAKEDIR) - -install( - FILES - "${PROJECT_SOURCE_DIR}/cmake/tomlplusplusConfig.cmake" - "${PROJECT_BINARY_DIR}/tomlplusplusConfigVersion.cmake" - DESTINATION "${tomlplusplus_INSTALL_CMAKEDIR}" - COMPONENT tomlplusplus_Development -) - -install( - EXPORT tomlplusplusTargets - NAMESPACE tomlplusplus:: - DESTINATION "${tomlplusplus_INSTALL_CMAKEDIR}" - COMPONENT tomlplusplus_Development -) - -if(PROJECT_IS_TOP_LEVEL) - include(CPack) -endif() diff --git a/cmake/project-is-top-level.cmake b/cmake/project-is-top-level.cmake deleted file mode 100644 index 3435fc0..0000000 --- a/cmake/project-is-top-level.cmake +++ /dev/null @@ -1,6 +0,0 @@ -# This variable is set by project() in CMake 3.21+ -string( - COMPARE EQUAL - "${CMAKE_SOURCE_DIR}" "${PROJECT_SOURCE_DIR}" - PROJECT_IS_TOP_LEVEL -) diff --git a/cmake/tomlplusplusConfig.cmake b/cmake/tomlplusplusConfig.cmake deleted file mode 100644 index ec9f7a0..0000000 --- a/cmake/tomlplusplusConfig.cmake +++ /dev/null @@ -1 +0,0 @@ -include(${CMAKE_CURRENT_LIST_DIR}/tomlplusplusTargets.cmake) diff --git a/cmake/tomlplusplusConfig.cmake.meson.in b/cmake/tomlplusplusConfig.cmake.meson.in deleted file mode 100644 index b007b68..0000000 --- a/cmake/tomlplusplusConfig.cmake.meson.in +++ /dev/null @@ -1,29 +0,0 @@ -@PACKAGE_INIT@ - -# If tomlplusplus::tomlplusplus target is not defined it will be included -if(NOT TARGET tomlplusplus::tomlplusplus) - - if (@compile_library@) - set(imported_type UNKNOWN) - else() - set(imported_type INTERFACE) - endif() - - # Import tomlplusplus interface library - add_library(tomlplusplus::tomlplusplus ${imported_type} IMPORTED) - set_target_properties(tomlplusplus::tomlplusplus PROPERTIES - INTERFACE_INCLUDE_DIRECTORIES "${PACKAGE_PREFIX_DIR}/@includedir@") - - # Require C++17 - target_compile_features(tomlplusplus::tomlplusplus INTERFACE cxx_std_17) - - # Set the path to the installed library so that users can link to it - if (@compile_library@) - set_target_properties(tomlplusplus::tomlplusplus PROPERTIES - IMPORTED_LOCATION "${PACKAGE_PREFIX_DIR}/@libdir@/@lib_name@" - ) - # compile_options not quoted on purpose - target_compile_options(tomlplusplus::tomlplusplus INTERFACE @compile_options@) - endif() - -endif() diff --git a/cmake/tomlplusplusConfigVersion.cmake.meson.in b/cmake/tomlplusplusConfigVersion.cmake.meson.in deleted file mode 100644 index 16b9749..0000000 --- a/cmake/tomlplusplusConfigVersion.cmake.meson.in +++ /dev/null @@ -1,48 +0,0 @@ -# This is a basic version file for the Config-mode of find_package(). -# It is used by write_basic_package_version_file() as input file for configure_file() -# to create a version-file which can be installed along a config.cmake file. -# -# The created file sets PACKAGE_VERSION_EXACT if the current version string and -# the requested version string are exactly the same and it sets -# PACKAGE_VERSION_COMPATIBLE if the current version is >= requested version. -# The variable CVF_VERSION must be set before calling configure_file(). - -set(PACKAGE_VERSION "@version@") - -if (PACKAGE_FIND_VERSION_RANGE) - # Package version must be in the requested version range - if ((PACKAGE_FIND_VERSION_RANGE_MIN STREQUAL "INCLUDE" AND PACKAGE_VERSION VERSION_LESS PACKAGE_FIND_VERSION_MIN) - OR ((PACKAGE_FIND_VERSION_RANGE_MAX STREQUAL "INCLUDE" AND PACKAGE_VERSION VERSION_GREATER PACKAGE_FIND_VERSION_MAX) - OR (PACKAGE_FIND_VERSION_RANGE_MAX STREQUAL "EXCLUDE" AND PACKAGE_VERSION VERSION_GREATER_EQUAL PACKAGE_FIND_VERSION_MAX))) - set(PACKAGE_VERSION_COMPATIBLE FALSE) - else() - set(PACKAGE_VERSION_COMPATIBLE TRUE) - endif() -else() - if(PACKAGE_VERSION VERSION_LESS PACKAGE_FIND_VERSION) - set(PACKAGE_VERSION_COMPATIBLE FALSE) - else() - set(PACKAGE_VERSION_COMPATIBLE TRUE) - if(PACKAGE_FIND_VERSION STREQUAL PACKAGE_VERSION) - set(PACKAGE_VERSION_EXACT TRUE) - endif() - endif() -endif() - - -# if the installed project requested no architecture check, don't perform the check -if("True") - return() -endif() - -# if the installed or the using project don't have CMAKE_SIZEOF_VOID_P set, ignore it: -if("${CMAKE_SIZEOF_VOID_P}" STREQUAL "" OR "8" STREQUAL "") - return() -endif() - -# check that the installed version has the same 32/64bit-ness as the one which is currently searching: -if(NOT CMAKE_SIZEOF_VOID_P STREQUAL "8") - math(EXPR installedBits "8 * 8") - set(PACKAGE_VERSION "${PACKAGE_VERSION} (${installedBits}bit)") - set(PACKAGE_VERSION_UNSUITABLE TRUE) -endif() diff --git a/cmake/variables.cmake b/cmake/variables.cmake deleted file mode 100644 index 3660bfb..0000000 --- a/cmake/variables.cmake +++ /dev/null @@ -1,18 +0,0 @@ -# ---- Warning guard ---- - -# target_include_directories with the SYSTEM modifier will request the compiler -# to omit warnings from the provided paths, if the compiler supports that -# This is to provide a user experience similar to find_package when -# add_subdirectory or FetchContent is used to consume this project -set(tomlplusplus_warning_guard "") -if(NOT PROJECT_IS_TOP_LEVEL) - option( - tomlplusplus_INCLUDES_WITH_SYSTEM - "Use SYSTEM modifier for tomlplusplus's includes, disabling warnings" - ON - ) - mark_as_advanced(tomlplusplus_INCLUDES_WITH_SYSTEM) - if(tomlplusplus_INCLUDES_WITH_SYSTEM) - set(tomlplusplus_warning_guard SYSTEM) - endif() -endif() diff --git a/cpp.hint b/cpp.hint deleted file mode 100644 index 7dcca90..0000000 --- a/cpp.hint +++ /dev/null @@ -1,39 +0,0 @@ -#define TOML_ABI_NAMESPACE_BOOL(...) static_assert(true) -#define TOML_ABI_NAMESPACE_END static_assert(true) -#define TOML_ABSTRACT_INTERFACE -#define TOML_ALWAYS_INLINE inline -#define TOML_ANON_NAMESPACE_END static_assert(true) -#define TOML_ANON_NAMESPACE_START namespace -#define TOML_API -#define TOML_ATTR(...) -#define TOML_CLOSED_ENUM -#define TOML_CLOSED_FLAGS_ENUM -#define TOML_CONST_GETTER -#define TOML_CONST_INLINE_GETTER inline -#define TOML_CONSTRAINED_TEMPLATE(cond, ...) template <__VA_ARGS__> -#define TOML_EMPTY_BASES -#define TOML_EXPORTED_CLASS -#define TOML_EXPORTED_FREE_FUNCTION -#define TOML_EXPORTED_MEMBER_FUNCTION -#define TOML_EXPORTED_STATIC_FUNCTION -#define TOML_EXTERNAL_LINKAGE -#define TOML_FLAGS_ENUM -#define TOML_HIDDEN_CONSTRAINT(cond, ...) template <__VA_ARGS__> -#define TOML_IMPL_NAMESPACE_END static_assert(true) -#define TOML_IMPL_NAMESPACE_START namespace toml::impl -#define TOML_INTERNAL_LINKAGE static -#define TOML_LIKELY(...) (__VA_ARGS__) -#define TOML_LIKELY_CASE -#define TOML_NAMESPACE_END static_assert(true) -#define TOML_NAMESPACE_START namespace toml -#define TOML_NEVER_INLINE -#define TOML_NODISCARD -#define TOML_NODISCARD_CTOR -#define TOML_OPEN_ENUM -#define TOML_OPEN_FLAGS_ENUM -#define TOML_PURE_GETTER -#define TOML_PURE_INLINE_GETTER inline -#define TOML_RETURNS_BY_THROWING -#define TOML_TRIVIAL_ABI -#define TOML_UNLIKELY(...) (__VA_ARGS__) -#define TOML_UNLIKELY_CASE diff --git a/fuzzing/CMakeLists.txt b/fuzzing/CMakeLists.txt deleted file mode 100644 index 1e62a54..0000000 --- a/fuzzing/CMakeLists.txt +++ /dev/null @@ -1,31 +0,0 @@ -# Utilized by OSSFuzz to build the harness(es) for continuous fuzz-testing -# OSSFuzz defines the following environment variables, that this target relies upon: -# CXX, CFLAGS, LIB_FUZZING_ENGINE, OUT -cmake_minimum_required(VERSION 3.14) - -project(Fuzzer LANGUAGES CXX) - -include(../cmake/project-is-top-level.cmake) - -add_definitions(-DNDEBUG) # Do not want assertions - -if (DEFINED ENV{CFLAGS}) - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} $ENV{CFLAGS}") -endif () -if (DEFINED ENV{CXXFLAGS}) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} $ENV{CXXFLAGS}") -endif () - -if(PROJECT_IS_TOP_LEVEL) - find_package(tomlplusplus REQUIRED) -endif() - -add_executable(toml_fuzzer toml_fuzzer.cpp) -target_link_libraries(toml_fuzzer PRIVATE tomlplusplus::tomlplusplus $ENV{LIB_FUZZING_ENGINE}) -target_compile_features(toml_fuzzer PRIVATE cxx_std_17) - -if (DEFINED ENV{OUT}) - install(TARGETS toml_fuzzer DESTINATION $ENV{OUT}) -else () - message(WARNING "Cannot install if $OUT is not defined!") -endif () \ No newline at end of file diff --git a/fuzzing/build.sh b/fuzzing/build.sh deleted file mode 100755 index cec2086..0000000 --- a/fuzzing/build.sh +++ /dev/null @@ -1,8 +0,0 @@ -cd $SRC/tomlplusplus -mkdir -p build -cmake -S . -B build -DBUILD_FUZZER=ON && cmake --build build --target install - -# Build the corpus using the existing toml files in the source -mkdir -p corpus -find $SRC/tomlplusplus -name "*.toml" -exec cp {} corpus \; -zip -q $OUT/toml_fuzzer_seed_corpus.zip corpus/* diff --git a/fuzzing/toml_fuzzer.cpp b/fuzzing/toml_fuzzer.cpp deleted file mode 100644 index 2b657f0..0000000 --- a/fuzzing/toml_fuzzer.cpp +++ /dev/null @@ -1,41 +0,0 @@ -#include -#include - -#include - -enum class SerializationTest -{ - NONE = 0, - JSON, - YAML, - TOML, - kMaxValue = TOML -}; - -extern "C" int LLVMFuzzerTestOneInput(const std::uint8_t* data, const std::size_t size) -{ - FuzzedDataProvider fdp{data, size}; - try - { - const toml::table tbl = toml::parse(fdp.ConsumeRandomLengthString()); - - switch (fdp.ConsumeEnum()) - { - case SerializationTest::JSON: - static_cast(toml::json_formatter{tbl}); - break; - case SerializationTest::YAML: - static_cast(toml::yaml_formatter{tbl}); - break; - case SerializationTest::TOML: - static_cast(toml::toml_formatter{tbl}); - default: - break; - } - } - catch (const toml::parse_error&) - { - return -1; - } - return 0; -} diff --git a/include/meson.build b/include/meson.build deleted file mode 100644 index 206dc6f..0000000 --- a/include/meson.build +++ /dev/null @@ -1,52 +0,0 @@ -# This file is a part of toml++ and is subject to the the terms of the MIT license. -# Copyright (c) Mark Gillard -# See https://github.com/marzer/tomlplusplus/blob/master/LICENSE for the full license text. -# SPDX-License-Identifier: MIT - -include_dir = include_directories('.') - -if not is_subproject - install_subdir('toml++', install_dir: get_option('includedir')) -endif - -if not build_lib # header-only mode - - tomlplusplus_dep = declare_dependency(include_directories: include_dir) - - if not is_subproject - import('pkgconfig').generate( - name: meson.project_name(), - description: 'Header-only TOML config file parser and serializer for C++', - install_dir: get_option('datadir')/'pkgconfig', - url: 'https://marzer.github.io/tomlplusplus' - ) - endif - - # cmake - if get_option('generate_cmake_config') and not is_subproject and not is_devel - cmake = import('cmake') - # Can't use until Meson 0.62.0, see https://github.com/mesonbuild/meson/pull/9916 - # and https://github.com/marzer/tomlplusplus/issues/140 - #cmake.write_basic_package_version_file( - # name: meson.project_name(), - # version: meson.project_version(), - # install_dir: get_option('datadir')/'cmake'/meson.project_name(), - # arch_independent: true - #) - # In the meantime, install a pre-generated Package Version file - configure_file( - configuration: {'version': meson.project_version()}, - input: '..'/'cmake'/'tomlplusplusConfigVersion.cmake.meson.in', - output: 'tomlplusplusConfigVersion.cmake', - install_dir: get_option('datadir')/'cmake'/meson.project_name() - ) - - cmake.configure_package_config_file( - name: meson.project_name(), - input: '..'/'cmake'/'tomlplusplusConfig.cmake.meson.in', - configuration: configuration_data({'includedir': get_option('includedir')}), - install_dir: get_option('datadir')/'cmake'/meson.project_name(), - ) - endif - -endif diff --git a/meson.build b/meson.build deleted file mode 100644 index 46e46c6..0000000 --- a/meson.build +++ /dev/null @@ -1,207 +0,0 @@ -# This file is a part of toml++ and is subject to the the terms of the MIT license. -# Copyright (c) Mark Gillard -# See https://github.com/marzer/tomlplusplus/blob/master/LICENSE for the full license text. -# SPDX-License-Identifier: MIT - -project( - 'tomlplusplus', - 'cpp', - license: 'MIT', - version: '3.4.0', - meson_version: '>=0.61.0', - default_options: [ - # https://mesonbuild.com/Builtin-options.html - # core options - 'buildtype=release', - 'default_library=shared', - # base options - 'b_lto=false', - 'b_ndebug=if-release', - # compiler options - 'cpp_std=c++17' - ] -) - -#----------------------------------------------------------------------------------------------------------------------- -# global vars + imports -#----------------------------------------------------------------------------------------------------------------------- - -compiler = meson.get_compiler('cpp') -message('target cpu_family: @0@'.format(host_machine.cpu_family())) -message('target cpu: @0@'.format(host_machine.cpu())) -message('target system: @0@'.format(host_machine.system())) -message('target endian: @0@'.format(host_machine.endian())) - -is_devel = get_option('devel') -is_debug = get_option('debug') -is_release = not is_debug -is_pedantic = get_option('pedantic') or is_devel -is_windows = host_machine.system() == 'windows' -is_x64 = host_machine.cpu_family() == 'x86_64' -is_subproject = meson.is_subproject() - -cpp = meson.get_compiler('cpp') -is_gcc = cpp.get_id() == 'gcc' -is_clang = cpp.get_id() == 'clang' -is_msvc = cpp.get_id() == 'msvc' -is_icc_cl = cpp.get_id() == 'intel-cl' -is_icc = is_icc_cl or cpp.get_id() == 'intel' -is_lld = cpp.get_linker_id() == 'ld.lld' -has_exceptions = get_option('cpp_eh') != 'none' -unreleased_features = get_option('unreleased_features') - -build_tests = (get_option('build_tests') or is_devel) and not is_subproject -build_examples = (get_option('build_examples') or is_devel) and not is_subproject -build_tt = (get_option('build_tt') or is_devel) and not is_subproject and has_exceptions and not unreleased_features -build_lib = get_option('build_lib') or get_option('compile_library') or build_tests or build_examples or build_tt - -#----------------------------------------------------------------------------------------------------------------------- -# global_args -# -# these are the arguments common to everything in the project -# *** they are not forwarded to dependents when using this as a submodule. *** -#----------------------------------------------------------------------------------------------------------------------- - -global_args = cpp.get_supported_arguments( - # clang/gcc - '-ferror-limit=5', - '-fmax-errors=5', - '-Wno-unused-command-line-argument', - '-Wno-reserved-macro-identifier', - '-Wno-init-list-lifetime', - '-fchar8_t', - # msvc - '/bigobj', - '/Gy', # function-level linking - '/GF', # string pooling - '/openmp-', - '/permissive-', - '/utf-8', - '/volatile:iso', - '/Zc:__cplusplus', - '/Zc:inline', - '/Zc:externConstexpr', - '/Zc:preprocessor' -) -if has_exceptions - global_args += cpp.get_supported_arguments('/Zc:throwingNew', '-D_HAS_EXCEPTIONS=1') -else - global_args += cpp.get_supported_arguments('-D_HAS_EXCEPTIONS=0') -endif -if is_pedantic - global_args += cpp.get_supported_arguments( - # clang - '-Weverything', - # gcc - '-Wcast-align', - '-Wcast-qual', - '-Wctor-dtor-privacy', - '-Wdisabled-optimization', - '-Wfloat-equal', - '-Wimport', - '-Winit-self', - '-Wlogical-op', - '-Wmissing-declarations', - '-Wmissing-field-initializers', - '-Wmissing-format-attribute', - '-Wmissing-include-dirs', - '-Wmissing-noreturn', - '-Wold-style-cast', - '-Woverloaded-virtual', - '-Wpacked', - '-Wpointer-arith', - '-Wredundant-decls', - '-Wshadow', - '-Wsign-conversion', - '-Wsign-promo', - '-Wstack-protector', - '-Wstrict-null-sentinel', - '-Wswitch-default', - '-Wswitch-enum', - '-Wundef', - '-Wunreachable-code', - '-Wunused', - '-Wunused-parameter', - '-Wuseless-cast', - '-Wvariadic-macros', - '-Wwrite-strings', - '-Wmissing-noreturn' - ) -endif -# unnecessary pedantry: -global_args += cpp.get_supported_arguments( - '-Wno-c++98-compat', - '-Wno-c++98-compat-pedantic', - '-Wno-documentation', - '-Wno-documentation-unknown-command', - '-Wno-switch-enum', - '-Wno-covered-switch-default', - '-Wno-padded', - '-Wno-float-equal' -) -if get_option('time_trace') - global_args += cpp.get_supported_arguments('-ftime-trace') -endif - -#----------------------------------------------------------------------------------------------------------------------- -# global_link_args -# -# these are the linker arguments common to everything in the projectwhen compiling shared libraries and executables. -# *** they are not forwarded to dependents when using this as a submodule. *** -#----------------------------------------------------------------------------------------------------------------------- - -global_link_args = [] - -if is_release - global_link_args += cpp.get_supported_link_arguments( - # msvc - '/OPT:REF,ICF=3', - '/INCREMENTAL:NO', - ) -endif - -#----------------------------------------------------------------------------------------------------------------------- -# global_overrides -# -# these are the meson overrides common to everything in the project -# *** they are not forwarded to dependents when using this as a submodule. *** -#----------------------------------------------------------------------------------------------------------------------- - -global_overrides = [ ] -if is_pedantic - global_overrides += [ - 'warning_level=3', - 'werror=true', - ] -endif - -#----------------------------------------------------------------------------------------------------------------------- -# subdirectories + files -#----------------------------------------------------------------------------------------------------------------------- - -public_headers = [] -internal_headers = [] - -# Empty dependency that will be filled either in src/ or include/ -tomlplusplus_dep = dependency('', required: false) - -subdir('include') - -if build_lib - subdir('src') -endif - -if build_tests - subdir('tests') -endif - -if build_examples - subdir('examples') -endif - -if build_tt - subdir('toml-test') -endif - -# Allow subproject usage -meson.override_dependency(meson.project_name(), tomlplusplus_dep) diff --git a/meson_options.txt b/meson_options.txt deleted file mode 100644 index 817b874..0000000 --- a/meson_options.txt +++ /dev/null @@ -1,14 +0,0 @@ -option('devel', type: 'boolean', value: false, description: 'Tell meson whether or not it is a development build. (default: false)') -option('build_lib', type: 'boolean', value: false, description: 'Compile the library, rather than consuming it in header-only mode. (default: false) (implied by devel)') -option('build_examples', type: 'boolean', value: false, description: 'Build the examples (default: false) (implied by devel)') -option('build_tests', type: 'boolean', value: false, description: 'Build tests (default: false) (implied by devel)') -option('build_tt', type: 'boolean', value: false, description: 'Enable to build the toml-test encoder and decoder. (default: false) (implied by devel) (disabled by unreleased_features)') -option('pedantic', type: 'boolean', value: false, description: 'Enable as many compiler warnings as possible (default: false) (implied by devel)') -option('time_trace', type: 'boolean', value: false, description: 'Enable the -ftime-trace option (Clang only)') -option('unreleased_features', type: 'boolean', value: false, description: 'Enable TOML_UNRELEASED_FEATURES=1 (default: false) (only relevant when compiling the library)') - -option('generate_cmake_config', type: 'boolean', value: true, description: 'Generate a cmake package config file (default: true - no effect when included as a subproject)') -option('use_vendored_libs', type: 'boolean', value: true, description: 'Use the libs from the vendor dir when building tests.') - -option('compile_library', type: 'boolean', deprecated: true) -option('float16', type: 'boolean', deprecated: true) diff --git a/src/meson.build b/src/meson.build deleted file mode 100644 index 3b3b537..0000000 --- a/src/meson.build +++ /dev/null @@ -1,88 +0,0 @@ -# This file is a part of toml++ and is subject to the the terms of the MIT license. -# Copyright (c) Mark Gillard -# See https://github.com/marzer/tomlplusplus/blob/master/LICENSE for the full license text. -# SPDX-License-Identifier: MIT - -assert(build_lib) # not header-only mode - -# These are the arguments needed to compile and consume the library, and -# are exposed to users with the `compile_args` kwarg of declare_dependency() -lib_args = cpp.get_supported_arguments('-DTOML_HEADER_ONLY=0') -if get_option('default_library') != 'static' - lib_args += cpp.get_supported_arguments('-DTOML_SHARED_LIB=1') -endif -if unreleased_features - lib_args += cpp.get_supported_arguments('-DTOML_ENABLE_UNRELEASED_FEATURES=1') -endif - -# these are the _internal_ args, just for compiling the lib -lib_internal_args = [] -lib_internal_args += global_args -lib_internal_args += lib_args -if is_pedantic and is_release - lib_internal_args += cpp.get_supported_arguments( - '-Wsuggest-attribute=const', - '-Wsuggest-attribute=pure' - ) -endif - -tomlplusplus_lib = library( - meson.project_name(), - files('toml.cpp'), - cpp_args: lib_internal_args, - gnu_symbol_visibility: get_option('default_library') == 'static' ? '' : 'hidden', - include_directories: include_dir, - install: not is_subproject, - version: meson.project_version(), - override_options: global_overrides -) - -tomlplusplus_dep = declare_dependency( - compile_args: lib_args, - include_directories: include_dir, - link_with: tomlplusplus_lib -) - -if not is_subproject - import('pkgconfig').generate( - tomlplusplus_lib, - description: 'TOML config file parser and serializer for C++', - extra_cflags: lib_args, - url: 'https://marzer.github.io/tomlplusplus' - ) -endif - -# cmake -if get_option('generate_cmake_config') and not is_subproject and not is_devel - cmake = import('cmake') - cmake.write_basic_package_version_file( - name: meson.project_name(), - version: meson.project_version(), - ) - - # This gets the full path of the library, then considers just the last - # component (i.e. the actual file name), and finally removes the - # version suffix from it, because users _should_ link against the .so - # file, as opposed to the .so.x.y.z one. - lib_name = tomlplusplus_lib.full_path().split('/')[-1] - lib_name = lib_name.replace('.' + meson.project_version(), '') - - # CMake needs space-separated values since it doesn't have types - cmake_compile_options = '' - foreach arg : lib_args - cmake_compile_options += arg + ' ' - endforeach - cmake_compile_options = cmake_compile_options.strip() - - cmake.configure_package_config_file( - name: meson.project_name(), - input: '..'/'cmake'/'tomlplusplusConfig.cmake.meson.in', - configuration: configuration_data({ - 'compile_library': true, - 'compile_options': cmake_compile_options, - 'includedir': get_option('includedir'), - 'libdir': get_option('libdir'), - 'lib_name': lib_name - }) - ) -endif diff --git a/src/toml.cpp b/src/toml.cpp deleted file mode 100644 index 8cc1877..0000000 --- a/src/toml.cpp +++ /dev/null @@ -1,13 +0,0 @@ -// This file is a part of toml++ and is subject to the the terms of the MIT license. -// Copyright (c) Mark Gillard -// See https://github.com/marzer/tomlplusplus/blob/master/LICENSE for the full license text. -// SPDX-License-Identifier: MIT - -#ifndef TOML_IMPLEMENTATION -#define TOML_IMPLEMENTATION -#endif -#ifndef TOML_HEADER_ONLY -#define TOML_HEADER_ONLY 0 -#endif - -#include diff --git a/tests/at_path.cpp b/tests/at_path.cpp deleted file mode 100644 index 9d9d851..0000000 --- a/tests/at_path.cpp +++ /dev/null @@ -1,119 +0,0 @@ -// This file is a part of toml++ and is subject to the the terms of the MIT license. -// Copyright (c) Mark Gillard -// See https://github.com/marzer/tomlplusplus/blob/master/LICENSE for the full license text. -// SPDX-License-Identifier: MIT - -#include "tests.hpp" -TOML_DISABLE_SPAM_WARNINGS; - -TEST_CASE("at_path") -{ - // clang-format off - - const auto tbl = table - { - { ""sv, 0 }, // blank key - { "a"sv, 1 }, - { - "b"sv, - array - { - 2, - array{ 3 }, - table { { "c", 4 } } - }, - }, - { "d", table{ {"e", 5, }, {""sv, -1 } } } - }; - - // clang-format on - - /* - - # equivalent to the following TOML: - - "" = 0 - a = 1 - b = [ - 2, - [ 3 ], - { "c" = 4 } - ] - d = { "e" = 5, "" = -1 } - - */ - - SECTION("table") - { - // this section uses the free function version of at_path - - CHECK(tbl[""]); - CHECK(tbl[""] == at_path(tbl, "")); - - CHECK(tbl["a"]); - CHECK(tbl["a"] == at_path(tbl, "a")); - CHECK(tbl["a"] != at_path(tbl, ".a")); // equivalent to ""."a" - CHECK(!at_path(tbl, ".a")); - - CHECK(tbl["b"]); - CHECK(tbl["b"] == at_path(tbl, "b")); - - CHECK(tbl["b"][0]); - CHECK(tbl["b"][0] == at_path(tbl, "b[0]")); - CHECK(tbl["b"][0] == at_path(tbl, "b[0] ")); - CHECK(tbl["b"][0] == at_path(tbl, "b[ 0\t]")); // whitespace is allowed inside indexer - - CHECK(tbl["b"][1]); - CHECK(tbl["b"][1] != tbl["b"][0]); - CHECK(tbl["b"][1] == at_path(tbl, "b[1]")); - - CHECK(tbl["b"][1][0]); - CHECK(tbl["b"][1][0] == at_path(tbl, "b[1][0]")); - CHECK(tbl["b"][1][0] == at_path(tbl, "b[1] \t [0]")); // whitespace is allowed after indexers - - CHECK(tbl["b"][2]["c"]); - CHECK(tbl["b"][2]["c"] == at_path(tbl, "b[2].c")); - CHECK(tbl["b"][2]["c"] == at_path(tbl, "b[2] \t.c")); // whitespace is allowed after indexers - - // permissivity checks for missing trailing ']' - // (this permissivity is undocumented but serves to reduce error paths in user code) - CHECK(tbl["b"][1][0] == at_path(tbl, "b[1[0]")); - CHECK(tbl["b"][1][0] == at_path(tbl, "b[1[0")); - CHECK(tbl["b"][2]["c"] == at_path(tbl, "b[2.c")); - - CHECK(tbl["d"]); - CHECK(tbl["d"] == at_path(tbl, "d")); - - CHECK(tbl["d"]["e"]); - CHECK(tbl["d"]["e"] == at_path(tbl, "d.e")); - CHECK(tbl["d"]["e"] != at_path(tbl, "d. e")); // equivalent to "d"." e" - CHECK(!at_path(tbl, "d. e")); - - CHECK(tbl["d"][""]); - CHECK(tbl["d"][""] == at_path(tbl, "d.")); - } - - SECTION("array") - { - // this section uses the node_view member function version of at_path - - auto arr = tbl["b"]; - - CHECK(tbl["b"][0]); - CHECK(tbl["b"][0] == arr.at_path("[0]")); - CHECK(tbl["b"][0] == arr.at_path("[0] ")); - CHECK(tbl["b"][0] == arr.at_path("[ 0\t]")); // whitespace is allowed inside indexer - - CHECK(tbl["b"][1]); - CHECK(tbl["b"][1].node() != arr[0].node()); - CHECK(tbl["b"][1] == arr.at_path("[1]")); - - CHECK(tbl["b"][1][0]); - CHECK(tbl["b"][1][0] == arr.at_path("[1][0]")); - CHECK(tbl["b"][1][0] == arr.at_path("[1] \t [0]")); // whitespace is allowed after indexers - - CHECK(tbl["b"][2]["c"]); - CHECK(tbl["b"][2]["c"] == arr.at_path("[2].c")); - CHECK(tbl["b"][2]["c"] == arr.at_path("[2] \t.c")); // whitespace is allowed after indexers - } -} diff --git a/tests/conformance_burntsushi_invalid.cpp b/tests/conformance_burntsushi_invalid.cpp deleted file mode 100644 index 974a873..0000000 --- a/tests/conformance_burntsushi_invalid.cpp +++ /dev/null @@ -1,2022 +0,0 @@ -// This file is a part of toml++ and is subject to the the terms of the MIT license. -// Copyright (c) Mark Gillard -// See https://github.com/marzer/tomlplusplus/blob/master/LICENSE for the full license text. -// SPDX-License-Identifier: MIT -//----- -// this file was generated by generate_conformance_tests.py - do not modify it directly - -#include "tests.hpp" - -namespace -{ - static constexpr auto array_double_comma_1 = R"(array = [1,,2])"sv; - static constexpr auto array_double_comma_2 = R"(array = [1,2,,])"sv; - static constexpr auto array_extending_table = R"(a = [{ b = 1 }] - -# Cannot extend tables within static arrays -# https://github.com/toml-lang/toml/issues/908 -[a.c] -foo = 1)"sv; - static constexpr auto array_missing_separator = R"(wrong = [ 1 2 3 ])"sv; - static constexpr auto array_no_close_2 = R"(x = [42 #)"sv; - static constexpr auto array_no_close_table_2 = R"(x = [{ key = 42 #)"sv; - static constexpr auto array_no_close_table = R"(x = [{ key = 42)"sv; - static constexpr auto array_no_close = R"(long_array = [ 1, 2, 3)"sv; - static constexpr auto array_tables_1 = R"(# INVALID TOML DOC -fruit = [] - -[[fruit]] # Not allowed)"sv; - static constexpr auto array_tables_2 = R"(# INVALID TOML DOC -[[fruit]] - name = "apple" - - [[fruit.variety]] - name = "red delicious" - - # This table conflicts with the previous table - [fruit.variety] - name = "granny smith")"sv; - static constexpr auto array_text_after_array_entries = R"(array = [ - "Is there life after an array separator?", No - "Entry" -])"sv; - static constexpr auto array_text_before_array_separator = R"(array = [ - "Is there life before an array separator?" No, - "Entry" -])"sv; - static constexpr auto array_text_in_array = R"(array = [ - "Entry 1", - I don't belong, - "Entry 2", -])"sv; - - static constexpr auto bool_almost_false_with_extra = R"(a = falsify)"sv; - static constexpr auto bool_almost_false = R"(a = fals)"sv; - static constexpr auto bool_almost_true_with_extra = R"(a = truthy)"sv; - static constexpr auto bool_almost_true = R"(a = tru)"sv; - static constexpr auto bool_just_f = R"(a = f)"sv; - static constexpr auto bool_just_t = R"(a = t)"sv; - static constexpr auto bool_mixed_case = R"(valid = False)"sv; - static constexpr auto bool_starting_same_false = R"(a = falsey)"sv; - static constexpr auto bool_starting_same_true = R"(a = truer)"sv; - static constexpr auto bool_wrong_case_false = R"(b = FALSE)"sv; - static constexpr auto bool_wrong_case_true = R"(a = TRUE)"sv; - - static constexpr auto control_bare_cr = - "# The following line contains a single carriage return control character\r\n" - "\r"sv; - static constexpr auto control_bare_formfeed = "bare-formfeed = \f"sv; - static constexpr auto control_bare_null = "bare-null = \"some value\" \x00"sv; - static constexpr auto control_bare_vertical_tab = "bare-vertical-tab = \v"sv; - static constexpr auto control_comment_cr = "comment-cr = \"Carriage return in comment\" # \ra=1"sv; - static constexpr auto control_comment_del = "comment-del = \"0x7f\" # \x7F"sv; - static constexpr auto control_comment_lf = "comment-lf = \"ctrl-P\" # \x10"sv; - static constexpr auto control_comment_null = "comment-null = \"null\" # \x00"sv; - static constexpr auto control_comment_us = "comment-us = \"ctrl-_\" # \x1F"sv; - static constexpr auto control_multi_del = "multi-del = \"\"\"null\x7F\"\"\""sv; - static constexpr auto control_multi_lf = "multi-lf = \"\"\"null\x10\"\"\""sv; - static constexpr auto control_multi_null = "multi-null = \"\"\"null\x00\"\"\""sv; - static constexpr auto control_multi_us = "multi-us = \"\"\"null\x1F\"\"\""sv; - static constexpr auto control_rawmulti_del = "rawmulti-del = '''null\x7F'''"sv; - static constexpr auto control_rawmulti_lf = "rawmulti-lf = '''null\x10'''"sv; - static constexpr auto control_rawmulti_null = "rawmulti-null = '''null\x00'''"sv; - static constexpr auto control_rawmulti_us = "rawmulti-us = '''null\x1F'''"sv; - static constexpr auto control_rawstring_del = "rawstring-del = 'null\x7F'"sv; - static constexpr auto control_rawstring_lf = "rawstring-lf = 'null\x10'"sv; - static constexpr auto control_rawstring_null = "rawstring-null = 'null\x00'"sv; - static constexpr auto control_rawstring_us = "rawstring-us = 'null\x1F'"sv; - static constexpr auto control_string_bs = "string-bs = \"backspace\x08\""sv; - static constexpr auto control_string_del = "string-del = \"null\x7F\""sv; - static constexpr auto control_string_lf = "string-lf = \"null\x10\""sv; - static constexpr auto control_string_null = "string-null = \"null\x00\""sv; - static constexpr auto control_string_us = "string-us = \"null\x1F\""sv; - - static constexpr auto datetime_hour_over = R"(# time-hour = 2DIGIT ; 00-23 -d = 2006-01-01T24:00:00-00:00)"sv; - static constexpr auto datetime_mday_over = R"(# date-mday = 2DIGIT ; 01-28, 01-29, 01-30, 01-31 based on -# ; month/year -d = 2006-01-32T00:00:00-00:00)"sv; - static constexpr auto datetime_mday_under = R"(# date-mday = 2DIGIT ; 01-28, 01-29, 01-30, 01-31 based on -# ; month/year -d = 2006-01-00T00:00:00-00:00)"sv; - static constexpr auto datetime_minute_over = R"(# time-minute = 2DIGIT ; 00-59 -d = 2006-01-01T00:60:00-00:00)"sv; - static constexpr auto datetime_month_over = R"(# date-month = 2DIGIT ; 01-12 -d = 2006-13-01T00:00:00-00:00)"sv; - static constexpr auto datetime_month_under = R"(# date-month = 2DIGIT ; 01-12 -d = 2007-00-01T00:00:00-00:00)"sv; - static constexpr auto datetime_no_leads_month = R"(# Month "7" instead of "07"; the leading zero is required. -no-leads = 1987-7-05T17:45:00Z)"sv; - static constexpr auto datetime_no_leads_with_milli = R"(# Day "5" instead of "05"; the leading zero is required. -with-milli = 1987-07-5T17:45:00.12Z)"sv; - static constexpr auto datetime_no_leads = R"(# Month "7" instead of "07"; the leading zero is required. -no-leads = 1987-7-05T17:45:00Z)"sv; - static constexpr auto datetime_no_t = R"(# No "t" or "T" between the date and time. -no-t = 1987-07-0517:45:00Z)"sv; - static constexpr auto datetime_second_over = - R"(# time-second = 2DIGIT ; 00-58, 00-59, 00-60 based on leap second -# ; rules -d = 2006-01-01T00:00:61-00:00)"sv; - static constexpr auto datetime_time_no_leads = R"(# Leading 0 is always required. -d = 2023-10-01T1:32:00Z)"sv; - -#if !TOML_LANG_UNRELEASED - - static constexpr auto datetime_no_secs = R"(# No seconds in time. -no-secs = 1987-07-05T17:45Z)"sv; - -#endif // !TOML_LANG_UNRELEASED - - static constexpr auto encoding_bad_codepoint = - "\x23\x20\x49\x6E\x76\x61\x6C\x69\x64\x20\x63\x6F\x64\x65\x70\x6F\x69\x6E\x74\x20\x55\x2B\x44\x38\x30" - "\x30\x20\x3A\x20\xED\xA0\x80\x0A"sv; - static constexpr auto encoding_bad_utf8_at_end = - "\x23\x20\x54\x68\x65\x72\x65\x20\x69\x73\x20\x61\x20\x30\x78\x64\x61\x20\x61\x74\x20\x61\x66\x74\x65" - "\x72\x20\x74\x68\x65\x20\x71\x75\x6F\x74\x65\x73\x2C\x20\x61\x6E\x64\x20\x6E\x6F\x20\x45\x4F\x4C\x20" - "\x61\x74\x20\x74\x68\x65\x20\x65\x6E\x64\x20\x6F\x66\x20\x74\x68\x65\x20\x66\x69\x6C\x65\x2E\x0A\x23" - "\x0A\x23\x20\x54\x68\x69\x73\x20\x69\x73\x20\x61\x20\x62\x69\x74\x20\x6F\x66\x20\x61\x6E\x20\x65\x64" - "\x67\x65\x20\x63\x61\x73\x65\x3A\x20\x54\x68\x69\x73\x20\x69\x6E\x64\x69\x63\x61\x74\x65\x73\x20\x74" - "\x68\x65\x72\x65\x20\x73\x68\x6F\x75\x6C\x64\x20\x62\x65\x20\x74\x77\x6F\x20\x62\x79\x74\x65\x73\x0A" - "\x23\x20\x28\x30\x62\x31\x31\x30\x31\x5F\x31\x30\x31\x30\x29\x20\x62\x75\x74\x20\x74\x68\x65\x72\x65" - "\x20\x69\x73\x20\x6E\x6F\x20\x62\x79\x74\x65\x20\x74\x6F\x20\x66\x6F\x6C\x6C\x6F\x77\x20\x62\x65\x63" - "\x61\x75\x73\x65\x20\x69\x74\x27\x73\x20\x74\x68\x65\x20\x65\x6E\x64\x20\x6F\x66\x20\x74\x68\x65\x20" - "\x66\x69\x6C\x65\x2E\x0A\x78\x20\x3D\x20\x22\x22\x22\x22\x22\x22\xDA"sv; - static constexpr auto encoding_bad_utf8_in_comment = "\x23\x20\xC3\x0A"sv; - static constexpr auto encoding_bad_utf8_in_multiline_literal = - "\x23\x20\x54\x68\x65\x20\x66\x6F\x6C\x6C\x6F\x77\x69\x6E\x67\x20\x6C\x69\x6E\x65\x20\x63\x6F\x6E\x74" - "\x61\x69\x6E\x73\x20\x61\x6E\x20\x69\x6E\x76\x61\x6C\x69\x64\x20\x55\x54\x46\x2D\x38\x20\x73\x65\x71" - "\x75\x65\x6E\x63\x65\x2E\x0A\x62\x61\x64\x20\x3D\x20\x27\x27\x27\xC3\x27\x27\x27\x0A"sv; - static constexpr auto encoding_bad_utf8_in_multiline = - "\x23\x20\x54\x68\x65\x20\x66\x6F\x6C\x6C\x6F\x77\x69\x6E\x67\x20\x6C\x69\x6E\x65\x20\x63\x6F\x6E\x74" - "\x61\x69\x6E\x73\x20\x61\x6E\x20\x69\x6E\x76\x61\x6C\x69\x64\x20\x55\x54\x46\x2D\x38\x20\x73\x65\x71" - "\x75\x65\x6E\x63\x65\x2E\x0A\x62\x61\x64\x20\x3D\x20\x22\x22\x22\xC3\x22\x22\x22\x0A"sv; - static constexpr auto encoding_bad_utf8_in_string_literal = - "\x23\x20\x54\x68\x65\x20\x66\x6F\x6C\x6C\x6F\x77\x69\x6E\x67\x20\x6C\x69\x6E\x65\x20\x63\x6F\x6E\x74" - "\x61\x69\x6E\x73\x20\x61\x6E\x20\x69\x6E\x76\x61\x6C\x69\x64\x20\x55\x54\x46\x2D\x38\x20\x73\x65\x71" - "\x75\x65\x6E\x63\x65\x2E\x0A\x62\x61\x64\x20\x3D\x20\x27\xC3\x27\x0A"sv; - static constexpr auto encoding_bad_utf8_in_string = - "\x23\x20\x54\x68\x65\x20\x66\x6F\x6C\x6C\x6F\x77\x69\x6E\x67\x20\x6C\x69\x6E\x65\x20\x63\x6F\x6E\x74" - "\x61\x69\x6E\x73\x20\x61\x6E\x20\x69\x6E\x76\x61\x6C\x69\x64\x20\x55\x54\x46\x2D\x38\x20\x73\x65\x71" - "\x75\x65\x6E\x63\x65\x2E\x0A\x62\x61\x64\x20\x3D\x20\x22\xC3\x22\x0A"sv; - static constexpr auto encoding_bom_not_at_start_1 = - "\x62\x6F\x6D\x2D\x6E\x6F\x74\x2D\x61\x74\x2D\x73\x74\x61\x72\x74\x20\xFF\xFD\x0A"sv; - static constexpr auto encoding_bom_not_at_start_2 = - "\x62\x6F\x6D\x2D\x6E\x6F\x74\x2D\x61\x74\x2D\x73\x74\x61\x72\x74\x3D\x20\xFF\xFD\x0A"sv; - static constexpr auto encoding_utf16_bom = - "\xFE\xFF\x00\x23\x00\x20\x00\x55\x00\x54\x00\x46\x00\x2D\x00\x31\x00\x36\x00\x20\x00\x77\x00\x69\x00" - "\x74\x00\x68\x00\x20\x00\x42\x00\x4F\x00\x4D\x00\x0A"sv; - static constexpr auto encoding_utf16 = - "\x00#\x00 \x00U\x00T\x00F\x00-\x001\x006\x00 \x00w\x00i\x00t\x00h\x00o\x00u\x00t\x00 \x00B\x00O\x00M\x00"sv; - - static constexpr auto float_double_point_1 = R"(double-point-1 = 0..1)"sv; - static constexpr auto float_double_point_2 = R"(double-point-2 = 0.1.2)"sv; - static constexpr auto float_exp_double_e_1 = R"(exp-double-e-1 = 1ee2)"sv; - static constexpr auto float_exp_double_e_2 = R"(exp-double-e-2 = 1e2e3)"sv; - static constexpr auto float_exp_double_us = R"(exp-double-us = 1e__23)"sv; - static constexpr auto float_exp_leading_us = R"(exp-leading-us = 1e_23)"sv; - static constexpr auto float_exp_point_1 = R"(exp-point-1 = 1e2.3)"sv; - static constexpr auto float_exp_point_2 = R"(exp-point-2 = 1.e2)"sv; - static constexpr auto float_exp_trailing_us = R"(exp-trailing-us = 1e23_)"sv; - static constexpr auto float_inf_capital = R"(v = Inf)"sv; - static constexpr auto float_inf_incomplete_1 = R"(inf-incomplete-1 = in)"sv; - static constexpr auto float_inf_incomplete_2 = R"(inf-incomplete-2 = +in)"sv; - static constexpr auto float_inf_incomplete_3 = R"(inf-incomplete-3 = -in)"sv; - static constexpr auto float_inf_underscore = R"(inf_underscore = in_f)"sv; - static constexpr auto float_leading_point_neg = R"(leading-point-neg = -.12345)"sv; - static constexpr auto float_leading_point_plus = R"(leading-point-plus = +.12345)"sv; - static constexpr auto float_leading_point = R"(leading-point = .12345)"sv; - static constexpr auto float_leading_us = R"(leading-us = _1.2)"sv; - static constexpr auto float_leading_zero_neg = R"(leading-zero-neg = -03.14)"sv; - static constexpr auto float_leading_zero_plus = R"(leading-zero-plus = +03.14)"sv; - static constexpr auto float_leading_zero = R"(leading-zero = 03.14)"sv; - static constexpr auto float_nan_capital = R"(v = NaN)"sv; - static constexpr auto float_nan_incomplete_1 = R"(nan-incomplete-1 = na)"sv; - static constexpr auto float_nan_incomplete_2 = R"(nan-incomplete-2 = +na)"sv; - static constexpr auto float_nan_incomplete_3 = R"(nan-incomplete-3 = -na)"sv; - static constexpr auto float_nan_underscore = R"(nan_underscore = na_n)"sv; - static constexpr auto float_trailing_point_min = R"(trailing-point-min = -1.)"sv; - static constexpr auto float_trailing_point_plus = R"(trailing-point-plus = +1.)"sv; - static constexpr auto float_trailing_point = R"(trailing-point = 1.)"sv; - static constexpr auto float_trailing_us_exp_1 = R"(trailing-us-exp-1 = 1_e2)"sv; - static constexpr auto float_trailing_us_exp_2 = R"(trailing-us-exp-2 = 1.2_e2)"sv; - static constexpr auto float_trailing_us = R"(trailing-us = 1.2_)"sv; - static constexpr auto float_us_after_point = R"(us-after-point = 1._2)"sv; - static constexpr auto float_us_before_point = R"(us-before-point = 1_.2)"sv; - - static constexpr auto inline_table_add = R"(a={} -# Inline tables are immutable and can't be extended -[a.b])"sv; - static constexpr auto inline_table_bad_key_syntax = R"(tbl = { a = 1, [b] })"sv; - static constexpr auto inline_table_dotted_key_conflict = R"(tbl = { a.b = "a_b", a.b.c = "a_b_c" })"sv; - static constexpr auto inline_table_double_comma = R"(t = {x=3,,y=4})"sv; - static constexpr auto inline_table_duplicate_key = R"(# Duplicate keys within an inline table are invalid -a={b=1, b=2})"sv; - static constexpr auto inline_table_empty = R"(t = {,})"sv; - static constexpr auto inline_table_nested_key_conflict = - R"(tbl = { fruit = { apple.color = "red" }, fruit.apple.texture = { smooth = true } })"sv; - static constexpr auto inline_table_no_comma = R"(t = {x = 3 y = 4})"sv; - static constexpr auto inline_table_overwrite = R"(a.b=0 -# Since table "a" is already defined, it can't be replaced by an inline table. -a={})"sv; - -#if !TOML_LANG_UNRELEASED - - static constexpr auto inline_table_linebreak_1 = - R"(# No newlines are allowed between the curly braces unless they are valid within -# a value. -simple = { a = 1 -})"sv; - static constexpr auto inline_table_linebreak_2 = R"(t = {a=1, -b=2})"sv; - static constexpr auto inline_table_linebreak_3 = R"(t = {a=1 -,b=2})"sv; - static constexpr auto inline_table_linebreak_4 = R"(json_like = { - first = "Tom", - last = "Preston-Werner" -})"sv; - static constexpr auto inline_table_trailing_comma = - R"(# A terminating comma (also called trailing comma) is not permitted after the -# last key/value pair in an inline table -abc = { abc = 123, })"sv; - -#endif // !TOML_LANG_UNRELEASED - - static constexpr auto integer_capital_bin = R"(capital-bin = 0B0)"sv; - static constexpr auto integer_capital_hex = R"(capital-hex = 0X1)"sv; - static constexpr auto integer_capital_oct = R"(capital-oct = 0O0)"sv; - static constexpr auto integer_double_sign_nex = R"(double-sign-nex = --99)"sv; - static constexpr auto integer_double_sign_plus = R"(double-sign-plus = ++99)"sv; - static constexpr auto integer_double_us = R"(double-us = 1__23)"sv; - static constexpr auto integer_incomplete_bin = R"(incomplete-bin = 0b)"sv; - static constexpr auto integer_incomplete_hex = R"(incomplete-hex = 0x)"sv; - static constexpr auto integer_incomplete_oct = R"(incomplete-oct = 0o)"sv; - static constexpr auto integer_invalid_bin = R"(invalid-bin = 0b0012)"sv; - static constexpr auto integer_invalid_hex = R"(invalid-hex = 0xaafz)"sv; - static constexpr auto integer_invalid_oct = R"(invalid-oct = 0o778)"sv; - static constexpr auto integer_leading_us_bin = R"(leading-us-bin = _0o1)"sv; - static constexpr auto integer_leading_us_hex = R"(leading-us-hex = _0o1)"sv; - static constexpr auto integer_leading_us_oct = R"(leading-us-oct = _0o1)"sv; - static constexpr auto integer_leading_us = R"(leading-us = _123)"sv; - static constexpr auto integer_leading_zero_1 = R"(leading-zero-1 = 01)"sv; - static constexpr auto integer_leading_zero_2 = R"(leading-zero-2 = 00)"sv; - static constexpr auto integer_leading_zero_3 = R"(leading-zero-3 = 0_0)"sv; - static constexpr auto integer_leading_zero_sign_1 = R"(leading-zero-sign-1 = -01)"sv; - static constexpr auto integer_leading_zero_sign_2 = R"(leading-zero-sign-2 = +01)"sv; - static constexpr auto integer_leading_zero_sign_3 = R"(leading-zero-sign-3 = +0_1)"sv; - static constexpr auto integer_negative_bin = R"(negative-bin = -0b11010110)"sv; - static constexpr auto integer_negative_hex = R"(negative-hex = -0xff)"sv; - static constexpr auto integer_negative_oct = R"(negative-oct = -0o99)"sv; - static constexpr auto integer_positive_bin = R"(positive-bin = +0b11010110)"sv; - static constexpr auto integer_positive_hex = R"(positive-hex = +0xff)"sv; - static constexpr auto integer_positive_oct = R"(positive-oct = +0o99)"sv; - static constexpr auto integer_text_after_integer = R"(answer = 42 the ultimate answer?)"sv; - static constexpr auto integer_trailing_us_bin = R"(trailing-us-bin = 0b1_)"sv; - static constexpr auto integer_trailing_us_hex = R"(trailing-us-hex = 0x1_)"sv; - static constexpr auto integer_trailing_us_oct = R"(trailing-us-oct = 0o1_)"sv; - static constexpr auto integer_trailing_us = R"(trailing-us = 123_)"sv; - static constexpr auto integer_us_after_bin = R"(us-after-bin = 0b_1)"sv; - static constexpr auto integer_us_after_hex = R"(us-after-hex = 0x_1)"sv; - static constexpr auto integer_us_after_oct = R"(us-after-oct = 0o_1)"sv; - - static constexpr auto key_after_array = R"([[agencies]] owner = "S Cjelli")"sv; - static constexpr auto key_after_table = R"([error] this = "should not be here")"sv; - static constexpr auto key_after_value = R"(first = "Tom" last = "Preston-Werner" # INVALID)"sv; - static constexpr auto key_bare_invalid_character = R"(bare!key = 123)"sv; - static constexpr auto key_dotted_redefine_table = R"(# Defined a.b as int -a.b = 1 -# Tries to access it as table: error -a.b.c = 2)"sv; - static constexpr auto key_duplicate_keys = R"(dupe = false -dupe = true)"sv; - static constexpr auto key_duplicate = R"(# DO NOT DO THIS -name = "Tom" -name = "Pradyun")"sv; - static constexpr auto key_empty = R"( = 1)"sv; - static constexpr auto key_escape = R"(\u00c0 = "latin capital letter A with grave")"sv; - static constexpr auto key_hash = R"(a# = 1)"sv; - static constexpr auto key_multiline = R"("""long -key""" = 1)"sv; - static constexpr auto key_newline = R"(barekey - = 123)"sv; - static constexpr auto key_no_eol = R"(a = 1 b = 2)"sv; - static constexpr auto key_open_bracket = R"([abc = 1)"sv; - static constexpr auto key_partial_quoted = R"(partial"quoted" = 5)"sv; - static constexpr auto key_quoted_unclosed_1 = R"("key = x)"sv; - static constexpr auto key_quoted_unclosed_2 = R"("key)"sv; - static constexpr auto key_single_open_bracket = R"([)"sv; - static constexpr auto key_space = R"(a b = 1)"sv; - static constexpr auto key_start_bracket = R"([a] -[xyz = 5 -[b])"sv; - static constexpr auto key_start_dot = R"(.key = 1)"sv; - static constexpr auto key_two_equals = R"(key= = 1)"sv; - static constexpr auto key_two_equals2 = R"(a==1)"sv; - static constexpr auto key_two_equals3 = R"(a=b=1)"sv; - static constexpr auto key_without_value_1 = R"(key)"sv; - static constexpr auto key_without_value_2 = R"(key = )"sv; - static constexpr auto key_without_value_3 = R"("key")"sv; - static constexpr auto key_without_value_4 = R"("key" = )"sv; - -#if !TOML_LANG_UNRELEASED && UNICODE_LITERALS_OK - - static constexpr auto key_special_character = R"(μ = "greek small letter mu")"sv; - -#endif // !TOML_LANG_UNRELEASED && UNICODE_LITERALS_OK - - static constexpr auto local_date_mday_over = R"(# date-mday = 2DIGIT ; 01-28, 01-29, 01-30, 01-31 based on -# ; month/year -d = 2006-01-32)"sv; - static constexpr auto local_date_mday_under = R"(# date-mday = 2DIGIT ; 01-28, 01-29, 01-30, 01-31 based on -# ; month/year -d = 2006-01-00)"sv; - static constexpr auto local_date_month_over = R"(# date-month = 2DIGIT ; 01-12 -d = 2006-13-01)"sv; - static constexpr auto local_date_month_under = R"(# date-month = 2DIGIT ; 01-12 -d = 2007-00-01)"sv; - static constexpr auto local_date_no_leads_with_milli = R"(# Day "5" instead of "05"; the leading zero is required. -with-milli = 1987-07-5)"sv; - static constexpr auto local_date_no_leads = R"(# Month "7" instead of "07"; the leading zero is required. -no-leads = 1987-7-05)"sv; - static constexpr auto local_date_trailing_t = R"(# Date cannot end with trailing T -d = 2006-01-30T)"sv; - static constexpr auto local_datetime_hour_over = R"(# time-hour = 2DIGIT ; 00-23 -d = 2006-01-01T24:00:00)"sv; - static constexpr auto local_datetime_mday_over = - R"(# date-mday = 2DIGIT ; 01-28, 01-29, 01-30, 01-31 based on -# ; month/year -d = 2006-01-32T00:00:00)"sv; - static constexpr auto local_datetime_mday_under = - R"(# date-mday = 2DIGIT ; 01-28, 01-29, 01-30, 01-31 based on -# ; month/year -d = 2006-01-00T00:00:00)"sv; - static constexpr auto local_datetime_minute_over = R"(# time-minute = 2DIGIT ; 00-59 -d = 2006-01-01T00:60:00)"sv; - static constexpr auto local_datetime_month_over = R"(# date-month = 2DIGIT ; 01-12 -d = 2006-13-01T00:00:00)"sv; - static constexpr auto local_datetime_month_under = R"(# date-month = 2DIGIT ; 01-12 -d = 2007-00-01T00:00:00)"sv; - static constexpr auto local_datetime_no_leads_with_milli = - R"(# Day "5" instead of "05"; the leading zero is required. -with-milli = 1987-07-5T17:45:00.12)"sv; - static constexpr auto local_datetime_no_leads = R"(# Month "7" instead of "07"; the leading zero is required. -no-leads = 1987-7-05T17:45:00)"sv; - static constexpr auto local_datetime_no_secs = R"(# No seconds in time. -no-secs = 1987-07-05T17:45)"sv; - static constexpr auto local_datetime_no_t = R"(# No "t" or "T" between the date and time. -no-t = 1987-07-0517:45:00)"sv; - static constexpr auto local_datetime_second_over = - R"(# time-second = 2DIGIT ; 00-58, 00-59, 00-60 based on leap second -# ; rules -d = 2006-01-01T00:00:61)"sv; - static constexpr auto local_datetime_time_no_leads = R"(# Leading 0 is always required. -d = 2023-10-01T1:32:00Z)"sv; - static constexpr auto local_time_hour_over = R"(# time-hour = 2DIGIT ; 00-23 -d = 24:00:00)"sv; - static constexpr auto local_time_minute_over = R"(# time-minute = 2DIGIT ; 00-59 -d = 00:60:00)"sv; - static constexpr auto local_time_no_secs = R"(# No seconds in time. -no-secs = 17:45)"sv; - static constexpr auto local_time_second_over = - R"(# time-second = 2DIGIT ; 00-58, 00-59, 00-60 based on leap second -# ; rules -d = 00:00:61)"sv; - static constexpr auto local_time_time_no_leads_2 = R"(# Leading 0 is always required. -d = 01:32:0)"sv; - static constexpr auto local_time_time_no_leads = R"(# Leading 0 is always required. -d = 1:32:00)"sv; - - static constexpr auto spec_inline_table_2_0 = R"([product] -type = { name = "Nail" } -type.edible = false # INVALID)"sv; - static constexpr auto spec_inline_table_3_0 = R"([product] -type.name = "Nail" -type = { edible = false } # INVALID)"sv; - static constexpr auto spec_key_value_pair_1 = R"(key = # INVALID)"sv; - static constexpr auto spec_keys_2 = R"(= "no key name" # INVALID -"" = "blank" # VALID but discouraged -'' = 'blank' # VALID but discouraged)"sv; - static constexpr auto spec_string_4_0 = R"(str4 = """Here are two quotation marks: "". Simple enough.""" -str5 = """Here are three quotation marks: """.""" # INVALID -str5 = """Here are three quotation marks: ""\".""" -str6 = """Here are fifteen quotation marks: ""\"""\"""\"""\"""\".""" - -# "This," she said, "is just a pointless statement." -str7 = """"This," she said, "is just a pointless statement."""")"sv; - static constexpr auto spec_string_7_0 = R"(quot15 = '''Here are fifteen quotation marks: """""""""""""""''' - -apos15 = '''Here are fifteen apostrophes: '''''''''''''''''' # INVALID -apos15 = "Here are fifteen apostrophes: '''''''''''''''" - -# 'That,' she said, 'is still pointless.' -str = ''''That,' she said, 'is still pointless.'''')"sv; - static constexpr auto spec_table_9_0 = R"([fruit] -apple.color = "red" -apple.taste.sweet = true - -[fruit.apple] # INVALID -# [fruit.apple.taste] # INVALID - -[fruit.apple.texture] # you can add sub-tables -smooth = true)"sv; - static constexpr auto spec_table_9_1 = R"([fruit] -apple.color = "red" -apple.taste.sweet = true - -# [fruit.apple] # INVALID -[fruit.apple.taste] # INVALID - -[fruit.apple.texture] # you can add sub-tables -smooth = true)"sv; - - static constexpr auto string_bad_byte_escape = R"(naughty = "\xAg")"sv; - static constexpr auto string_bad_codepoint = - R"(invalid-codepoint = "This string contains a non scalar unicode codepoint \uD801")"sv; - static constexpr auto string_bad_concat = R"(no_concat = "first" "second")"sv; - static constexpr auto string_bad_escape_1 = R"(invalid-escape = "This string has a bad \a escape character.")"sv; - static constexpr auto string_bad_escape_2 = R"(invalid-escape = "This string has a bad \ escape character.")"sv; - static constexpr auto string_bad_hex_esc_1 = R"(bad-hex-esc-1 = "\x0g")"sv; - static constexpr auto string_bad_hex_esc_2 = R"(bad-hex-esc-2 = "\xG0")"sv; - static constexpr auto string_bad_hex_esc_3 = R"(bad-hex-esc-3 = "\x")"sv; - static constexpr auto string_bad_hex_esc_4 = R"(bad-hex-esc-4 = "\x 50")"sv; - static constexpr auto string_bad_hex_esc_5 = R"(bad-hex-esc-5 = "\x 50")"sv; - static constexpr auto string_bad_multiline = R"(multi = "first line -second line")"sv; - static constexpr auto string_bad_slash_escape = - R"(invalid-escape = "This string has a bad \/ escape character.")"sv; - static constexpr auto string_bad_uni_esc_1 = R"(str = "val\ue")"sv; - static constexpr auto string_bad_uni_esc_2 = R"(str = "val\Ux")"sv; - static constexpr auto string_bad_uni_esc_3 = R"(str = "val\U0000000")"sv; - static constexpr auto string_bad_uni_esc_4 = R"(str = "val\U0000")"sv; - static constexpr auto string_bad_uni_esc_5 = R"(str = "val\Ugggggggg")"sv; - static constexpr auto string_basic_multiline_out_of_range_unicode_escape_1 = R"(a = """\UFFFFFFFF""")"sv; - static constexpr auto string_basic_multiline_out_of_range_unicode_escape_2 = R"(a = """\U00D80000""")"sv; - static constexpr auto string_basic_multiline_quotes = R"(str5 = """Here are three quotation marks: """.""")"sv; - static constexpr auto string_basic_multiline_unknown_escape = R"(a = """\@""")"sv; - static constexpr auto string_basic_out_of_range_unicode_escape_1 = R"(a = "\UFFFFFFFF")"sv; - static constexpr auto string_basic_out_of_range_unicode_escape_2 = R"(a = "\U00D80000")"sv; - static constexpr auto string_basic_unknown_escape = R"(a = "\@")"sv; - static constexpr auto string_literal_multiline_quotes_1 = R"(a = '''6 apostrophes: '''''')"sv; - static constexpr auto string_literal_multiline_quotes_2 = R"(a = '''15 apostrophes: '''''''''''''''''')"sv; - static constexpr auto string_missing_quotes = R"(name = value)"sv; - static constexpr auto string_multiline_bad_escape_1 = R"(k = """t\a""")"sv; - static constexpr auto string_multiline_bad_escape_2 = R"(# \ is not a valid escape. -k = """t\ t""")"sv; - static constexpr auto string_multiline_bad_escape_3 = R"(# \ is not a valid escape. -k = """t\ """)"sv; - static constexpr auto string_multiline_escape_space = R"(a = """ - foo \ \n - bar""")"sv; - static constexpr auto string_multiline_no_close_2 = R"(x=""")"sv; - static constexpr auto string_multiline_no_close = R"(invalid = """ - this will fail)"sv; - static constexpr auto string_multiline_quotes_1 = R"(a = """6 quotes: """""")"sv; - static constexpr auto string_no_close = R"(no-ending-quote = "One time, at band camp)"sv; - static constexpr auto string_text_after_string = R"(string = "Is there life after strings?" No.)"sv; - static constexpr auto string_wrong_close = R"(bad-ending-quote = "double and single')"sv; - -#if !TOML_LANG_UNRELEASED - - static constexpr auto string_basic_byte_escapes = R"(answer = "\x33")"sv; - -#endif // !TOML_LANG_UNRELEASED - - static constexpr auto table_append_to_array_with_dotted_keys = R"([[a.b]] - -[a] -b.y = 2)"sv; - static constexpr auto table_append_with_dotted_keys_1 = R"(# First a.b.c defines a table: a.b.c = {z=9} -# -# Then we define a.b.c.t = "str" to add a str to the above table, making it: -# -# a.b.c = {z=9, t="..."} -# -# While this makes sense, logically, it was decided this is not valid TOML as -# it's too confusing/convoluted. -# -# See: https://github.com/toml-lang/toml/issues/846 -# https://github.com/toml-lang/toml/pull/859 - -[a.b.c] - z = 9 - -[a] - b.c.t = "Using dotted keys to add to [a.b.c] after explicitly defining it above is not allowed")"sv; - static constexpr auto table_append_with_dotted_keys_2 = - R"(# This is the same issue as in injection-1.toml, except that nests one level -# deeper. See that file for a more complete description. - -[a.b.c.d] - z = 9 - -[a] - b.c.d.k.t = "Using dotted keys to add to [a.b.c.d] after explicitly defining it above is not allowed")"sv; - static constexpr auto table_array_empty = R"([[]] -name = "Born to Run")"sv; - static constexpr auto table_array_implicit = - R"(# This test is a bit tricky. It should fail because the first use of -# `[[albums.songs]]` without first declaring `albums` implies that `albums` -# must be a table. The alternative would be quite weird. Namely, it wouldn't -# comply with the TOML spec: "Each double-bracketed sub-table will belong to -# the most *recently* defined table element *above* it." -# -# This is in contrast to the *valid* test, table-array-implicit where -# `[[albums.songs]]` works by itself, so long as `[[albums]]` isn't declared -# later. (Although, `[albums]` could be.) -[[albums.songs]] -name = "Glory Days" - -[[albums]] -name = "Born in the USA")"sv; - static constexpr auto table_array_missing_bracket = R"([[albums] -name = "Born to Run")"sv; - static constexpr auto table_duplicate_key_dotted_array = R"([fruit] -apple.color = "red" - -[[fruit.apple]])"sv; - static constexpr auto table_duplicate_key_dotted_table = R"([fruit] -apple.color = "red" - -[fruit.apple] # INVALID)"sv; - static constexpr auto table_duplicate_key_dotted_table2 = R"([fruit] -apple.taste.sweet = true - -[fruit.apple.taste] # INVALID)"sv; - static constexpr auto table_duplicate_key_table = R"([fruit] -type = "apple" - -[fruit.type] -apple = "yes")"sv; - static constexpr auto table_duplicate_table_array = R"([tbl] -[[tbl]])"sv; - static constexpr auto table_duplicate_table_array2 = R"([[tbl]] -[tbl])"sv; - static constexpr auto table_duplicate = R"([a] -b = 1 - -[a] -c = 2)"sv; - static constexpr auto table_empty_implicit_table = R"([naughty..naughty])"sv; - static constexpr auto table_empty = R"([])"sv; - static constexpr auto table_equals_sign = R"([name=bad])"sv; - static constexpr auto table_llbrace = R"([ [table]])"sv; - static constexpr auto table_nested_brackets_close = R"([a]b] -zyx = 42)"sv; - static constexpr auto table_nested_brackets_open = R"([a[b] -zyx = 42)"sv; - static constexpr auto table_quoted_no_close = R"(["where will it end] -name = value)"sv; - static constexpr auto table_redefine = R"(# Define b as int, and try to use it as a table: error -[a] -b = 1 - -[a.b] -c = 2)"sv; - static constexpr auto table_rrbrace = R"([[table] ])"sv; - static constexpr auto table_text_after_table = R"([error] this shouldn't be here)"sv; - static constexpr auto table_whitespace = R"([invalid key])"sv; - static constexpr auto table_with_pound = R"([key#group] -answer = 42)"sv; -} - -TEST_CASE("conformance - burntsushi/invalid") -{ - SECTION("array-double-comma-1") - { - parsing_should_fail(FILE_LINE_ARGS, array_double_comma_1); // array-double-comma-1 - } - - SECTION("array-double-comma-2") - { - parsing_should_fail(FILE_LINE_ARGS, array_double_comma_2); // array-double-comma-2 - } - - SECTION("array-extending-table") - { - parsing_should_fail(FILE_LINE_ARGS, array_extending_table); // array-extending-table - } - - SECTION("array-missing-separator") - { - parsing_should_fail(FILE_LINE_ARGS, array_missing_separator); // array-missing-separator - } - - SECTION("array-no-close-2") - { - parsing_should_fail(FILE_LINE_ARGS, array_no_close_2); // array-no-close-2 - } - - SECTION("array-no-close-table-2") - { - parsing_should_fail(FILE_LINE_ARGS, array_no_close_table_2); // array-no-close-table-2 - } - - SECTION("array-no-close-table") - { - parsing_should_fail(FILE_LINE_ARGS, array_no_close_table); // array-no-close-table - } - - SECTION("array-no-close") - { - parsing_should_fail(FILE_LINE_ARGS, array_no_close); // array-no-close - } - - SECTION("array-tables-1") - { - parsing_should_fail(FILE_LINE_ARGS, array_tables_1); // array-tables-1 - } - - SECTION("array-tables-2") - { - parsing_should_fail(FILE_LINE_ARGS, array_tables_2); // array-tables-2 - } - - SECTION("array-text-after-array-entries") - { - parsing_should_fail(FILE_LINE_ARGS, array_text_after_array_entries); // array-text-after-array-entries - } - - SECTION("array-text-before-array-separator") - { - parsing_should_fail(FILE_LINE_ARGS, array_text_before_array_separator); // array-text-before-array-separator - } - - SECTION("array-text-in-array") - { - parsing_should_fail(FILE_LINE_ARGS, array_text_in_array); // array-text-in-array - } - - SECTION("bool-almost-false-with-extra") - { - parsing_should_fail(FILE_LINE_ARGS, bool_almost_false_with_extra); // bool-almost-false-with-extra - } - - SECTION("bool-almost-false") - { - parsing_should_fail(FILE_LINE_ARGS, bool_almost_false); // bool-almost-false - } - - SECTION("bool-almost-true-with-extra") - { - parsing_should_fail(FILE_LINE_ARGS, bool_almost_true_with_extra); // bool-almost-true-with-extra - } - - SECTION("bool-almost-true") - { - parsing_should_fail(FILE_LINE_ARGS, bool_almost_true); // bool-almost-true - } - - SECTION("bool-just-f") - { - parsing_should_fail(FILE_LINE_ARGS, bool_just_f); // bool-just-f - } - - SECTION("bool-just-t") - { - parsing_should_fail(FILE_LINE_ARGS, bool_just_t); // bool-just-t - } - - SECTION("bool-mixed-case") - { - parsing_should_fail(FILE_LINE_ARGS, bool_mixed_case); // bool-mixed-case - } - - SECTION("bool-starting-same-false") - { - parsing_should_fail(FILE_LINE_ARGS, bool_starting_same_false); // bool-starting-same-false - } - - SECTION("bool-starting-same-true") - { - parsing_should_fail(FILE_LINE_ARGS, bool_starting_same_true); // bool-starting-same-true - } - - SECTION("bool-wrong-case-false") - { - parsing_should_fail(FILE_LINE_ARGS, bool_wrong_case_false); // bool-wrong-case-false - } - - SECTION("bool-wrong-case-true") - { - parsing_should_fail(FILE_LINE_ARGS, bool_wrong_case_true); // bool-wrong-case-true - } - - SECTION("control-bare-cr") - { - parsing_should_fail(FILE_LINE_ARGS, control_bare_cr); // control-bare-cr - } - - SECTION("control-bare-formfeed") - { - parsing_should_fail(FILE_LINE_ARGS, control_bare_formfeed); // control-bare-formfeed - } - - SECTION("control-bare-null") - { - parsing_should_fail(FILE_LINE_ARGS, control_bare_null); // control-bare-null - } - - SECTION("control-bare-vertical-tab") - { - parsing_should_fail(FILE_LINE_ARGS, control_bare_vertical_tab); // control-bare-vertical-tab - } - - SECTION("control-comment-cr") - { - parsing_should_fail(FILE_LINE_ARGS, control_comment_cr); // control-comment-cr - } - - SECTION("control-comment-del") - { - parsing_should_fail(FILE_LINE_ARGS, control_comment_del); // control-comment-del - } - - SECTION("control-comment-lf") - { - parsing_should_fail(FILE_LINE_ARGS, control_comment_lf); // control-comment-lf - } - - SECTION("control-comment-null") - { - parsing_should_fail(FILE_LINE_ARGS, control_comment_null); // control-comment-null - } - - SECTION("control-comment-us") - { - parsing_should_fail(FILE_LINE_ARGS, control_comment_us); // control-comment-us - } - - SECTION("control-multi-del") - { - parsing_should_fail(FILE_LINE_ARGS, control_multi_del); // control-multi-del - } - - SECTION("control-multi-lf") - { - parsing_should_fail(FILE_LINE_ARGS, control_multi_lf); // control-multi-lf - } - - SECTION("control-multi-null") - { - parsing_should_fail(FILE_LINE_ARGS, control_multi_null); // control-multi-null - } - - SECTION("control-multi-us") - { - parsing_should_fail(FILE_LINE_ARGS, control_multi_us); // control-multi-us - } - - SECTION("control-rawmulti-del") - { - parsing_should_fail(FILE_LINE_ARGS, control_rawmulti_del); // control-rawmulti-del - } - - SECTION("control-rawmulti-lf") - { - parsing_should_fail(FILE_LINE_ARGS, control_rawmulti_lf); // control-rawmulti-lf - } - - SECTION("control-rawmulti-null") - { - parsing_should_fail(FILE_LINE_ARGS, control_rawmulti_null); // control-rawmulti-null - } - - SECTION("control-rawmulti-us") - { - parsing_should_fail(FILE_LINE_ARGS, control_rawmulti_us); // control-rawmulti-us - } - - SECTION("control-rawstring-del") - { - parsing_should_fail(FILE_LINE_ARGS, control_rawstring_del); // control-rawstring-del - } - - SECTION("control-rawstring-lf") - { - parsing_should_fail(FILE_LINE_ARGS, control_rawstring_lf); // control-rawstring-lf - } - - SECTION("control-rawstring-null") - { - parsing_should_fail(FILE_LINE_ARGS, control_rawstring_null); // control-rawstring-null - } - - SECTION("control-rawstring-us") - { - parsing_should_fail(FILE_LINE_ARGS, control_rawstring_us); // control-rawstring-us - } - - SECTION("control-string-bs") - { - parsing_should_fail(FILE_LINE_ARGS, control_string_bs); // control-string-bs - } - - SECTION("control-string-del") - { - parsing_should_fail(FILE_LINE_ARGS, control_string_del); // control-string-del - } - - SECTION("control-string-lf") - { - parsing_should_fail(FILE_LINE_ARGS, control_string_lf); // control-string-lf - } - - SECTION("control-string-null") - { - parsing_should_fail(FILE_LINE_ARGS, control_string_null); // control-string-null - } - - SECTION("control-string-us") - { - parsing_should_fail(FILE_LINE_ARGS, control_string_us); // control-string-us - } - - SECTION("datetime-hour-over") - { - parsing_should_fail(FILE_LINE_ARGS, datetime_hour_over); // datetime-hour-over - } - - SECTION("datetime-mday-over") - { - parsing_should_fail(FILE_LINE_ARGS, datetime_mday_over); // datetime-mday-over - } - - SECTION("datetime-mday-under") - { - parsing_should_fail(FILE_LINE_ARGS, datetime_mday_under); // datetime-mday-under - } - - SECTION("datetime-minute-over") - { - parsing_should_fail(FILE_LINE_ARGS, datetime_minute_over); // datetime-minute-over - } - - SECTION("datetime-month-over") - { - parsing_should_fail(FILE_LINE_ARGS, datetime_month_over); // datetime-month-over - } - - SECTION("datetime-month-under") - { - parsing_should_fail(FILE_LINE_ARGS, datetime_month_under); // datetime-month-under - } - - SECTION("datetime-no-leads-month") - { - parsing_should_fail(FILE_LINE_ARGS, datetime_no_leads_month); // datetime-no-leads-month - } - - SECTION("datetime-no-leads-with-milli") - { - parsing_should_fail(FILE_LINE_ARGS, datetime_no_leads_with_milli); // datetime-no-leads-with-milli - } - - SECTION("datetime-no-leads") - { - parsing_should_fail(FILE_LINE_ARGS, datetime_no_leads); // datetime-no-leads - } - - SECTION("datetime-no-t") - { - parsing_should_fail(FILE_LINE_ARGS, datetime_no_t); // datetime-no-t - } - - SECTION("datetime-second-over") - { - parsing_should_fail(FILE_LINE_ARGS, datetime_second_over); // datetime-second-over - } - - SECTION("datetime-time-no-leads") - { - parsing_should_fail(FILE_LINE_ARGS, datetime_time_no_leads); // datetime-time-no-leads - } - -#if !TOML_LANG_UNRELEASED - - SECTION("datetime-no-secs") - { - parsing_should_fail(FILE_LINE_ARGS, datetime_no_secs); // datetime-no-secs - } - -#endif // !TOML_LANG_UNRELEASED - - SECTION("encoding-bad-codepoint") - { - parsing_should_fail(FILE_LINE_ARGS, encoding_bad_codepoint); // encoding-bad-codepoint - } - - SECTION("encoding-bad-utf8-at-end") - { - parsing_should_fail(FILE_LINE_ARGS, encoding_bad_utf8_at_end); // encoding-bad-utf8-at-end - } - - SECTION("encoding-bad-utf8-in-comment") - { - parsing_should_fail(FILE_LINE_ARGS, encoding_bad_utf8_in_comment); // encoding-bad-utf8-in-comment - } - - SECTION("encoding-bad-utf8-in-multiline-literal") - { - parsing_should_fail(FILE_LINE_ARGS, - encoding_bad_utf8_in_multiline_literal); // encoding-bad-utf8-in-multiline-literal - } - - SECTION("encoding-bad-utf8-in-multiline") - { - parsing_should_fail(FILE_LINE_ARGS, encoding_bad_utf8_in_multiline); // encoding-bad-utf8-in-multiline - } - - SECTION("encoding-bad-utf8-in-string-literal") - { - parsing_should_fail(FILE_LINE_ARGS, encoding_bad_utf8_in_string_literal); // encoding-bad-utf8-in-string-literal - } - - SECTION("encoding-bad-utf8-in-string") - { - parsing_should_fail(FILE_LINE_ARGS, encoding_bad_utf8_in_string); // encoding-bad-utf8-in-string - } - - SECTION("encoding-bom-not-at-start-1") - { - parsing_should_fail(FILE_LINE_ARGS, encoding_bom_not_at_start_1); // encoding-bom-not-at-start-1 - } - - SECTION("encoding-bom-not-at-start-2") - { - parsing_should_fail(FILE_LINE_ARGS, encoding_bom_not_at_start_2); // encoding-bom-not-at-start-2 - } - - SECTION("encoding-utf16-bom") - { - parsing_should_fail(FILE_LINE_ARGS, encoding_utf16_bom); // encoding-utf16-bom - } - - SECTION("encoding-utf16") - { - parsing_should_fail(FILE_LINE_ARGS, encoding_utf16); // encoding-utf16 - } - - SECTION("float-double-point-1") - { - parsing_should_fail(FILE_LINE_ARGS, float_double_point_1); // float-double-point-1 - } - - SECTION("float-double-point-2") - { - parsing_should_fail(FILE_LINE_ARGS, float_double_point_2); // float-double-point-2 - } - - SECTION("float-exp-double-e-1") - { - parsing_should_fail(FILE_LINE_ARGS, float_exp_double_e_1); // float-exp-double-e-1 - } - - SECTION("float-exp-double-e-2") - { - parsing_should_fail(FILE_LINE_ARGS, float_exp_double_e_2); // float-exp-double-e-2 - } - - SECTION("float-exp-double-us") - { - parsing_should_fail(FILE_LINE_ARGS, float_exp_double_us); // float-exp-double-us - } - - SECTION("float-exp-leading-us") - { - parsing_should_fail(FILE_LINE_ARGS, float_exp_leading_us); // float-exp-leading-us - } - - SECTION("float-exp-point-1") - { - parsing_should_fail(FILE_LINE_ARGS, float_exp_point_1); // float-exp-point-1 - } - - SECTION("float-exp-point-2") - { - parsing_should_fail(FILE_LINE_ARGS, float_exp_point_2); // float-exp-point-2 - } - - SECTION("float-exp-trailing-us") - { - parsing_should_fail(FILE_LINE_ARGS, float_exp_trailing_us); // float-exp-trailing-us - } - - SECTION("float-inf-capital") - { - parsing_should_fail(FILE_LINE_ARGS, float_inf_capital); // float-inf-capital - } - - SECTION("float-inf-incomplete-1") - { - parsing_should_fail(FILE_LINE_ARGS, float_inf_incomplete_1); // float-inf-incomplete-1 - } - - SECTION("float-inf-incomplete-2") - { - parsing_should_fail(FILE_LINE_ARGS, float_inf_incomplete_2); // float-inf-incomplete-2 - } - - SECTION("float-inf-incomplete-3") - { - parsing_should_fail(FILE_LINE_ARGS, float_inf_incomplete_3); // float-inf-incomplete-3 - } - - SECTION("float-inf_underscore") - { - parsing_should_fail(FILE_LINE_ARGS, float_inf_underscore); // float-inf_underscore - } - - SECTION("float-leading-point-neg") - { - parsing_should_fail(FILE_LINE_ARGS, float_leading_point_neg); // float-leading-point-neg - } - - SECTION("float-leading-point-plus") - { - parsing_should_fail(FILE_LINE_ARGS, float_leading_point_plus); // float-leading-point-plus - } - - SECTION("float-leading-point") - { - parsing_should_fail(FILE_LINE_ARGS, float_leading_point); // float-leading-point - } - - SECTION("float-leading-us") - { - parsing_should_fail(FILE_LINE_ARGS, float_leading_us); // float-leading-us - } - - SECTION("float-leading-zero-neg") - { - parsing_should_fail(FILE_LINE_ARGS, float_leading_zero_neg); // float-leading-zero-neg - } - - SECTION("float-leading-zero-plus") - { - parsing_should_fail(FILE_LINE_ARGS, float_leading_zero_plus); // float-leading-zero-plus - } - - SECTION("float-leading-zero") - { - parsing_should_fail(FILE_LINE_ARGS, float_leading_zero); // float-leading-zero - } - - SECTION("float-nan-capital") - { - parsing_should_fail(FILE_LINE_ARGS, float_nan_capital); // float-nan-capital - } - - SECTION("float-nan-incomplete-1") - { - parsing_should_fail(FILE_LINE_ARGS, float_nan_incomplete_1); // float-nan-incomplete-1 - } - - SECTION("float-nan-incomplete-2") - { - parsing_should_fail(FILE_LINE_ARGS, float_nan_incomplete_2); // float-nan-incomplete-2 - } - - SECTION("float-nan-incomplete-3") - { - parsing_should_fail(FILE_LINE_ARGS, float_nan_incomplete_3); // float-nan-incomplete-3 - } - - SECTION("float-nan_underscore") - { - parsing_should_fail(FILE_LINE_ARGS, float_nan_underscore); // float-nan_underscore - } - - SECTION("float-trailing-point-min") - { - parsing_should_fail(FILE_LINE_ARGS, float_trailing_point_min); // float-trailing-point-min - } - - SECTION("float-trailing-point-plus") - { - parsing_should_fail(FILE_LINE_ARGS, float_trailing_point_plus); // float-trailing-point-plus - } - - SECTION("float-trailing-point") - { - parsing_should_fail(FILE_LINE_ARGS, float_trailing_point); // float-trailing-point - } - - SECTION("float-trailing-us-exp-1") - { - parsing_should_fail(FILE_LINE_ARGS, float_trailing_us_exp_1); // float-trailing-us-exp-1 - } - - SECTION("float-trailing-us-exp-2") - { - parsing_should_fail(FILE_LINE_ARGS, float_trailing_us_exp_2); // float-trailing-us-exp-2 - } - - SECTION("float-trailing-us") - { - parsing_should_fail(FILE_LINE_ARGS, float_trailing_us); // float-trailing-us - } - - SECTION("float-us-after-point") - { - parsing_should_fail(FILE_LINE_ARGS, float_us_after_point); // float-us-after-point - } - - SECTION("float-us-before-point") - { - parsing_should_fail(FILE_LINE_ARGS, float_us_before_point); // float-us-before-point - } - - SECTION("inline-table-add") - { - parsing_should_fail(FILE_LINE_ARGS, inline_table_add); // inline-table-add - } - - SECTION("inline-table-bad-key-syntax") - { - parsing_should_fail(FILE_LINE_ARGS, inline_table_bad_key_syntax); // inline-table-bad-key-syntax - } - - SECTION("inline-table-dotted-key-conflict") - { - parsing_should_fail(FILE_LINE_ARGS, inline_table_dotted_key_conflict); // inline-table-dotted-key-conflict - } - - SECTION("inline-table-double-comma") - { - parsing_should_fail(FILE_LINE_ARGS, inline_table_double_comma); // inline-table-double-comma - } - - SECTION("inline-table-duplicate-key") - { - parsing_should_fail(FILE_LINE_ARGS, inline_table_duplicate_key); // inline-table-duplicate-key - } - - SECTION("inline-table-empty") - { - parsing_should_fail(FILE_LINE_ARGS, inline_table_empty); // inline-table-empty - } - - SECTION("inline-table-nested_key_conflict") - { - parsing_should_fail(FILE_LINE_ARGS, inline_table_nested_key_conflict); // inline-table-nested_key_conflict - } - - SECTION("inline-table-no-comma") - { - parsing_should_fail(FILE_LINE_ARGS, inline_table_no_comma); // inline-table-no-comma - } - - SECTION("inline-table-overwrite") - { - parsing_should_fail(FILE_LINE_ARGS, inline_table_overwrite); // inline-table-overwrite - } - -#if !TOML_LANG_UNRELEASED - - SECTION("inline-table-linebreak-1") - { - parsing_should_fail(FILE_LINE_ARGS, inline_table_linebreak_1); // inline-table-linebreak-1 - } - - SECTION("inline-table-linebreak-2") - { - parsing_should_fail(FILE_LINE_ARGS, inline_table_linebreak_2); // inline-table-linebreak-2 - } - - SECTION("inline-table-linebreak-3") - { - parsing_should_fail(FILE_LINE_ARGS, inline_table_linebreak_3); // inline-table-linebreak-3 - } - - SECTION("inline-table-linebreak-4") - { - parsing_should_fail(FILE_LINE_ARGS, inline_table_linebreak_4); // inline-table-linebreak-4 - } - - SECTION("inline-table-trailing-comma") - { - parsing_should_fail(FILE_LINE_ARGS, inline_table_trailing_comma); // inline-table-trailing-comma - } - -#endif // !TOML_LANG_UNRELEASED - - SECTION("integer-capital-bin") - { - parsing_should_fail(FILE_LINE_ARGS, integer_capital_bin); // integer-capital-bin - } - - SECTION("integer-capital-hex") - { - parsing_should_fail(FILE_LINE_ARGS, integer_capital_hex); // integer-capital-hex - } - - SECTION("integer-capital-oct") - { - parsing_should_fail(FILE_LINE_ARGS, integer_capital_oct); // integer-capital-oct - } - - SECTION("integer-double-sign-nex") - { - parsing_should_fail(FILE_LINE_ARGS, integer_double_sign_nex); // integer-double-sign-nex - } - - SECTION("integer-double-sign-plus") - { - parsing_should_fail(FILE_LINE_ARGS, integer_double_sign_plus); // integer-double-sign-plus - } - - SECTION("integer-double-us") - { - parsing_should_fail(FILE_LINE_ARGS, integer_double_us); // integer-double-us - } - - SECTION("integer-incomplete-bin") - { - parsing_should_fail(FILE_LINE_ARGS, integer_incomplete_bin); // integer-incomplete-bin - } - - SECTION("integer-incomplete-hex") - { - parsing_should_fail(FILE_LINE_ARGS, integer_incomplete_hex); // integer-incomplete-hex - } - - SECTION("integer-incomplete-oct") - { - parsing_should_fail(FILE_LINE_ARGS, integer_incomplete_oct); // integer-incomplete-oct - } - - SECTION("integer-invalid-bin") - { - parsing_should_fail(FILE_LINE_ARGS, integer_invalid_bin); // integer-invalid-bin - } - - SECTION("integer-invalid-hex") - { - parsing_should_fail(FILE_LINE_ARGS, integer_invalid_hex); // integer-invalid-hex - } - - SECTION("integer-invalid-oct") - { - parsing_should_fail(FILE_LINE_ARGS, integer_invalid_oct); // integer-invalid-oct - } - - SECTION("integer-leading-us-bin") - { - parsing_should_fail(FILE_LINE_ARGS, integer_leading_us_bin); // integer-leading-us-bin - } - - SECTION("integer-leading-us-hex") - { - parsing_should_fail(FILE_LINE_ARGS, integer_leading_us_hex); // integer-leading-us-hex - } - - SECTION("integer-leading-us-oct") - { - parsing_should_fail(FILE_LINE_ARGS, integer_leading_us_oct); // integer-leading-us-oct - } - - SECTION("integer-leading-us") - { - parsing_should_fail(FILE_LINE_ARGS, integer_leading_us); // integer-leading-us - } - - SECTION("integer-leading-zero-1") - { - parsing_should_fail(FILE_LINE_ARGS, integer_leading_zero_1); // integer-leading-zero-1 - } - - SECTION("integer-leading-zero-2") - { - parsing_should_fail(FILE_LINE_ARGS, integer_leading_zero_2); // integer-leading-zero-2 - } - - SECTION("integer-leading-zero-3") - { - parsing_should_fail(FILE_LINE_ARGS, integer_leading_zero_3); // integer-leading-zero-3 - } - - SECTION("integer-leading-zero-sign-1") - { - parsing_should_fail(FILE_LINE_ARGS, integer_leading_zero_sign_1); // integer-leading-zero-sign-1 - } - - SECTION("integer-leading-zero-sign-2") - { - parsing_should_fail(FILE_LINE_ARGS, integer_leading_zero_sign_2); // integer-leading-zero-sign-2 - } - - SECTION("integer-leading-zero-sign-3") - { - parsing_should_fail(FILE_LINE_ARGS, integer_leading_zero_sign_3); // integer-leading-zero-sign-3 - } - - SECTION("integer-negative-bin") - { - parsing_should_fail(FILE_LINE_ARGS, integer_negative_bin); // integer-negative-bin - } - - SECTION("integer-negative-hex") - { - parsing_should_fail(FILE_LINE_ARGS, integer_negative_hex); // integer-negative-hex - } - - SECTION("integer-negative-oct") - { - parsing_should_fail(FILE_LINE_ARGS, integer_negative_oct); // integer-negative-oct - } - - SECTION("integer-positive-bin") - { - parsing_should_fail(FILE_LINE_ARGS, integer_positive_bin); // integer-positive-bin - } - - SECTION("integer-positive-hex") - { - parsing_should_fail(FILE_LINE_ARGS, integer_positive_hex); // integer-positive-hex - } - - SECTION("integer-positive-oct") - { - parsing_should_fail(FILE_LINE_ARGS, integer_positive_oct); // integer-positive-oct - } - - SECTION("integer-text-after-integer") - { - parsing_should_fail(FILE_LINE_ARGS, integer_text_after_integer); // integer-text-after-integer - } - - SECTION("integer-trailing-us-bin") - { - parsing_should_fail(FILE_LINE_ARGS, integer_trailing_us_bin); // integer-trailing-us-bin - } - - SECTION("integer-trailing-us-hex") - { - parsing_should_fail(FILE_LINE_ARGS, integer_trailing_us_hex); // integer-trailing-us-hex - } - - SECTION("integer-trailing-us-oct") - { - parsing_should_fail(FILE_LINE_ARGS, integer_trailing_us_oct); // integer-trailing-us-oct - } - - SECTION("integer-trailing-us") - { - parsing_should_fail(FILE_LINE_ARGS, integer_trailing_us); // integer-trailing-us - } - - SECTION("integer-us-after-bin") - { - parsing_should_fail(FILE_LINE_ARGS, integer_us_after_bin); // integer-us-after-bin - } - - SECTION("integer-us-after-hex") - { - parsing_should_fail(FILE_LINE_ARGS, integer_us_after_hex); // integer-us-after-hex - } - - SECTION("integer-us-after-oct") - { - parsing_should_fail(FILE_LINE_ARGS, integer_us_after_oct); // integer-us-after-oct - } - - SECTION("key-after-array") - { - parsing_should_fail(FILE_LINE_ARGS, key_after_array); // key-after-array - } - - SECTION("key-after-table") - { - parsing_should_fail(FILE_LINE_ARGS, key_after_table); // key-after-table - } - - SECTION("key-after-value") - { - parsing_should_fail(FILE_LINE_ARGS, key_after_value); // key-after-value - } - - SECTION("key-bare-invalid-character") - { - parsing_should_fail(FILE_LINE_ARGS, key_bare_invalid_character); // key-bare-invalid-character - } - - SECTION("key-dotted-redefine-table") - { - parsing_should_fail(FILE_LINE_ARGS, key_dotted_redefine_table); // key-dotted-redefine-table - } - - SECTION("key-duplicate-keys") - { - parsing_should_fail(FILE_LINE_ARGS, key_duplicate_keys); // key-duplicate-keys - } - - SECTION("key-duplicate") - { - parsing_should_fail(FILE_LINE_ARGS, key_duplicate); // key-duplicate - } - - SECTION("key-empty") - { - parsing_should_fail(FILE_LINE_ARGS, key_empty); // key-empty - } - - SECTION("key-escape") - { - parsing_should_fail(FILE_LINE_ARGS, key_escape); // key-escape - } - - SECTION("key-hash") - { - parsing_should_fail(FILE_LINE_ARGS, key_hash); // key-hash - } - - SECTION("key-multiline") - { - parsing_should_fail(FILE_LINE_ARGS, key_multiline); // key-multiline - } - - SECTION("key-newline") - { - parsing_should_fail(FILE_LINE_ARGS, key_newline); // key-newline - } - - SECTION("key-no-eol") - { - parsing_should_fail(FILE_LINE_ARGS, key_no_eol); // key-no-eol - } - - SECTION("key-open-bracket") - { - parsing_should_fail(FILE_LINE_ARGS, key_open_bracket); // key-open-bracket - } - - SECTION("key-partial-quoted") - { - parsing_should_fail(FILE_LINE_ARGS, key_partial_quoted); // key-partial-quoted - } - - SECTION("key-quoted-unclosed-1") - { - parsing_should_fail(FILE_LINE_ARGS, key_quoted_unclosed_1); // key-quoted-unclosed-1 - } - - SECTION("key-quoted-unclosed-2") - { - parsing_should_fail(FILE_LINE_ARGS, key_quoted_unclosed_2); // key-quoted-unclosed-2 - } - - SECTION("key-single-open-bracket") - { - parsing_should_fail(FILE_LINE_ARGS, key_single_open_bracket); // key-single-open-bracket - } - - SECTION("key-space") - { - parsing_should_fail(FILE_LINE_ARGS, key_space); // key-space - } - - SECTION("key-start-bracket") - { - parsing_should_fail(FILE_LINE_ARGS, key_start_bracket); // key-start-bracket - } - - SECTION("key-start-dot") - { - parsing_should_fail(FILE_LINE_ARGS, key_start_dot); // key-start-dot - } - - SECTION("key-two-equals") - { - parsing_should_fail(FILE_LINE_ARGS, key_two_equals); // key-two-equals - } - - SECTION("key-two-equals2") - { - parsing_should_fail(FILE_LINE_ARGS, key_two_equals2); // key-two-equals2 - } - - SECTION("key-two-equals3") - { - parsing_should_fail(FILE_LINE_ARGS, key_two_equals3); // key-two-equals3 - } - - SECTION("key-without-value-1") - { - parsing_should_fail(FILE_LINE_ARGS, key_without_value_1); // key-without-value-1 - } - - SECTION("key-without-value-2") - { - parsing_should_fail(FILE_LINE_ARGS, key_without_value_2); // key-without-value-2 - } - - SECTION("key-without-value-3") - { - parsing_should_fail(FILE_LINE_ARGS, key_without_value_3); // key-without-value-3 - } - - SECTION("key-without-value-4") - { - parsing_should_fail(FILE_LINE_ARGS, key_without_value_4); // key-without-value-4 - } - -#if !TOML_LANG_UNRELEASED && UNICODE_LITERALS_OK - - SECTION("key-special-character") - { - parsing_should_fail(FILE_LINE_ARGS, key_special_character); // key-special-character - } - -#endif // !TOML_LANG_UNRELEASED && UNICODE_LITERALS_OK - - SECTION("local-date-mday-over") - { - parsing_should_fail(FILE_LINE_ARGS, local_date_mday_over); // local-date-mday-over - } - - SECTION("local-date-mday-under") - { - parsing_should_fail(FILE_LINE_ARGS, local_date_mday_under); // local-date-mday-under - } - - SECTION("local-date-month-over") - { - parsing_should_fail(FILE_LINE_ARGS, local_date_month_over); // local-date-month-over - } - - SECTION("local-date-month-under") - { - parsing_should_fail(FILE_LINE_ARGS, local_date_month_under); // local-date-month-under - } - - SECTION("local-date-no-leads-with-milli") - { - parsing_should_fail(FILE_LINE_ARGS, local_date_no_leads_with_milli); // local-date-no-leads-with-milli - } - - SECTION("local-date-no-leads") - { - parsing_should_fail(FILE_LINE_ARGS, local_date_no_leads); // local-date-no-leads - } - - SECTION("local-date-trailing-t") - { - parsing_should_fail(FILE_LINE_ARGS, local_date_trailing_t); // local-date-trailing-t - } - - SECTION("local-datetime-hour-over") - { - parsing_should_fail(FILE_LINE_ARGS, local_datetime_hour_over); // local-datetime-hour-over - } - - SECTION("local-datetime-mday-over") - { - parsing_should_fail(FILE_LINE_ARGS, local_datetime_mday_over); // local-datetime-mday-over - } - - SECTION("local-datetime-mday-under") - { - parsing_should_fail(FILE_LINE_ARGS, local_datetime_mday_under); // local-datetime-mday-under - } - - SECTION("local-datetime-minute-over") - { - parsing_should_fail(FILE_LINE_ARGS, local_datetime_minute_over); // local-datetime-minute-over - } - - SECTION("local-datetime-month-over") - { - parsing_should_fail(FILE_LINE_ARGS, local_datetime_month_over); // local-datetime-month-over - } - - SECTION("local-datetime-month-under") - { - parsing_should_fail(FILE_LINE_ARGS, local_datetime_month_under); // local-datetime-month-under - } - - SECTION("local-datetime-no-leads-with-milli") - { - parsing_should_fail(FILE_LINE_ARGS, local_datetime_no_leads_with_milli); // local-datetime-no-leads-with-milli - } - - SECTION("local-datetime-no-leads") - { - parsing_should_fail(FILE_LINE_ARGS, local_datetime_no_leads); // local-datetime-no-leads - } - - SECTION("local-datetime-no-secs") - { - parsing_should_fail(FILE_LINE_ARGS, local_datetime_no_secs); // local-datetime-no-secs - } - - SECTION("local-datetime-no-t") - { - parsing_should_fail(FILE_LINE_ARGS, local_datetime_no_t); // local-datetime-no-t - } - - SECTION("local-datetime-second-over") - { - parsing_should_fail(FILE_LINE_ARGS, local_datetime_second_over); // local-datetime-second-over - } - - SECTION("local-datetime-time-no-leads") - { - parsing_should_fail(FILE_LINE_ARGS, local_datetime_time_no_leads); // local-datetime-time-no-leads - } - - SECTION("local-time-hour-over") - { - parsing_should_fail(FILE_LINE_ARGS, local_time_hour_over); // local-time-hour-over - } - - SECTION("local-time-minute-over") - { - parsing_should_fail(FILE_LINE_ARGS, local_time_minute_over); // local-time-minute-over - } - - SECTION("local-time-no-secs") - { - parsing_should_fail(FILE_LINE_ARGS, local_time_no_secs); // local-time-no-secs - } - - SECTION("local-time-second-over") - { - parsing_should_fail(FILE_LINE_ARGS, local_time_second_over); // local-time-second-over - } - - SECTION("local-time-time-no-leads-2") - { - parsing_should_fail(FILE_LINE_ARGS, local_time_time_no_leads_2); // local-time-time-no-leads-2 - } - - SECTION("local-time-time-no-leads") - { - parsing_should_fail(FILE_LINE_ARGS, local_time_time_no_leads); // local-time-time-no-leads - } - - SECTION("spec-inline-table-2-0") - { - parsing_should_fail(FILE_LINE_ARGS, spec_inline_table_2_0); // spec-inline-table-2-0 - } - - SECTION("spec-inline-table-3-0") - { - parsing_should_fail(FILE_LINE_ARGS, spec_inline_table_3_0); // spec-inline-table-3-0 - } - - SECTION("spec-key-value-pair-1") - { - parsing_should_fail(FILE_LINE_ARGS, spec_key_value_pair_1); // spec-key-value-pair-1 - } - - SECTION("spec-keys-2") - { - parsing_should_fail(FILE_LINE_ARGS, spec_keys_2); // spec-keys-2 - } - - SECTION("spec-string-4-0") - { - parsing_should_fail(FILE_LINE_ARGS, spec_string_4_0); // spec-string-4-0 - } - - SECTION("spec-string-7-0") - { - parsing_should_fail(FILE_LINE_ARGS, spec_string_7_0); // spec-string-7-0 - } - - SECTION("spec-table-9-0") - { - parsing_should_fail(FILE_LINE_ARGS, spec_table_9_0); // spec-table-9-0 - } - - SECTION("spec-table-9-1") - { - parsing_should_fail(FILE_LINE_ARGS, spec_table_9_1); // spec-table-9-1 - } - - SECTION("string-bad-byte-escape") - { - parsing_should_fail(FILE_LINE_ARGS, string_bad_byte_escape); // string-bad-byte-escape - } - - SECTION("string-bad-codepoint") - { - parsing_should_fail(FILE_LINE_ARGS, string_bad_codepoint); // string-bad-codepoint - } - - SECTION("string-bad-concat") - { - parsing_should_fail(FILE_LINE_ARGS, string_bad_concat); // string-bad-concat - } - - SECTION("string-bad-escape-1") - { - parsing_should_fail(FILE_LINE_ARGS, string_bad_escape_1); // string-bad-escape-1 - } - - SECTION("string-bad-escape-2") - { - parsing_should_fail(FILE_LINE_ARGS, string_bad_escape_2); // string-bad-escape-2 - } - - SECTION("string-bad-hex-esc-1") - { - parsing_should_fail(FILE_LINE_ARGS, string_bad_hex_esc_1); // string-bad-hex-esc-1 - } - - SECTION("string-bad-hex-esc-2") - { - parsing_should_fail(FILE_LINE_ARGS, string_bad_hex_esc_2); // string-bad-hex-esc-2 - } - - SECTION("string-bad-hex-esc-3") - { - parsing_should_fail(FILE_LINE_ARGS, string_bad_hex_esc_3); // string-bad-hex-esc-3 - } - - SECTION("string-bad-hex-esc-4") - { - parsing_should_fail(FILE_LINE_ARGS, string_bad_hex_esc_4); // string-bad-hex-esc-4 - } - - SECTION("string-bad-hex-esc-5") - { - parsing_should_fail(FILE_LINE_ARGS, string_bad_hex_esc_5); // string-bad-hex-esc-5 - } - - SECTION("string-bad-multiline") - { - parsing_should_fail(FILE_LINE_ARGS, string_bad_multiline); // string-bad-multiline - } - - SECTION("string-bad-slash-escape") - { - parsing_should_fail(FILE_LINE_ARGS, string_bad_slash_escape); // string-bad-slash-escape - } - - SECTION("string-bad-uni-esc-1") - { - parsing_should_fail(FILE_LINE_ARGS, string_bad_uni_esc_1); // string-bad-uni-esc-1 - } - - SECTION("string-bad-uni-esc-2") - { - parsing_should_fail(FILE_LINE_ARGS, string_bad_uni_esc_2); // string-bad-uni-esc-2 - } - - SECTION("string-bad-uni-esc-3") - { - parsing_should_fail(FILE_LINE_ARGS, string_bad_uni_esc_3); // string-bad-uni-esc-3 - } - - SECTION("string-bad-uni-esc-4") - { - parsing_should_fail(FILE_LINE_ARGS, string_bad_uni_esc_4); // string-bad-uni-esc-4 - } - - SECTION("string-bad-uni-esc-5") - { - parsing_should_fail(FILE_LINE_ARGS, string_bad_uni_esc_5); // string-bad-uni-esc-5 - } - - SECTION("string-basic-multiline-out-of-range-unicode-escape-1") - { - parsing_should_fail( - FILE_LINE_ARGS, - string_basic_multiline_out_of_range_unicode_escape_1); // string-basic-multiline-out-of-range-unicode-escape-1 - } - - SECTION("string-basic-multiline-out-of-range-unicode-escape-2") - { - parsing_should_fail( - FILE_LINE_ARGS, - string_basic_multiline_out_of_range_unicode_escape_2); // string-basic-multiline-out-of-range-unicode-escape-2 - } - - SECTION("string-basic-multiline-quotes") - { - parsing_should_fail(FILE_LINE_ARGS, string_basic_multiline_quotes); // string-basic-multiline-quotes - } - - SECTION("string-basic-multiline-unknown-escape") - { - parsing_should_fail(FILE_LINE_ARGS, - string_basic_multiline_unknown_escape); // string-basic-multiline-unknown-escape - } - - SECTION("string-basic-out-of-range-unicode-escape-1") - { - parsing_should_fail(FILE_LINE_ARGS, - string_basic_out_of_range_unicode_escape_1); // string-basic-out-of-range-unicode-escape-1 - } - - SECTION("string-basic-out-of-range-unicode-escape-2") - { - parsing_should_fail(FILE_LINE_ARGS, - string_basic_out_of_range_unicode_escape_2); // string-basic-out-of-range-unicode-escape-2 - } - - SECTION("string-basic-unknown-escape") - { - parsing_should_fail(FILE_LINE_ARGS, string_basic_unknown_escape); // string-basic-unknown-escape - } - - SECTION("string-literal-multiline-quotes-1") - { - parsing_should_fail(FILE_LINE_ARGS, string_literal_multiline_quotes_1); // string-literal-multiline-quotes-1 - } - - SECTION("string-literal-multiline-quotes-2") - { - parsing_should_fail(FILE_LINE_ARGS, string_literal_multiline_quotes_2); // string-literal-multiline-quotes-2 - } - - SECTION("string-missing-quotes") - { - parsing_should_fail(FILE_LINE_ARGS, string_missing_quotes); // string-missing-quotes - } - - SECTION("string-multiline-bad-escape-1") - { - parsing_should_fail(FILE_LINE_ARGS, string_multiline_bad_escape_1); // string-multiline-bad-escape-1 - } - - SECTION("string-multiline-bad-escape-2") - { - parsing_should_fail(FILE_LINE_ARGS, string_multiline_bad_escape_2); // string-multiline-bad-escape-2 - } - - SECTION("string-multiline-bad-escape-3") - { - parsing_should_fail(FILE_LINE_ARGS, string_multiline_bad_escape_3); // string-multiline-bad-escape-3 - } - - SECTION("string-multiline-escape-space") - { - parsing_should_fail(FILE_LINE_ARGS, string_multiline_escape_space); // string-multiline-escape-space - } - - SECTION("string-multiline-no-close-2") - { - parsing_should_fail(FILE_LINE_ARGS, string_multiline_no_close_2); // string-multiline-no-close-2 - } - - SECTION("string-multiline-no-close") - { - parsing_should_fail(FILE_LINE_ARGS, string_multiline_no_close); // string-multiline-no-close - } - - SECTION("string-multiline-quotes-1") - { - parsing_should_fail(FILE_LINE_ARGS, string_multiline_quotes_1); // string-multiline-quotes-1 - } - - SECTION("string-no-close") - { - parsing_should_fail(FILE_LINE_ARGS, string_no_close); // string-no-close - } - - SECTION("string-text-after-string") - { - parsing_should_fail(FILE_LINE_ARGS, string_text_after_string); // string-text-after-string - } - - SECTION("string-wrong-close") - { - parsing_should_fail(FILE_LINE_ARGS, string_wrong_close); // string-wrong-close - } - -#if !TOML_LANG_UNRELEASED - - SECTION("string-basic-byte-escapes") - { - parsing_should_fail(FILE_LINE_ARGS, string_basic_byte_escapes); // string-basic-byte-escapes - } - -#endif // !TOML_LANG_UNRELEASED - - SECTION("table-append-to-array-with-dotted-keys") - { - parsing_should_fail(FILE_LINE_ARGS, - table_append_to_array_with_dotted_keys); // table-append-to-array-with-dotted-keys - } - - SECTION("table-append-with-dotted-keys-1") - { - parsing_should_fail(FILE_LINE_ARGS, table_append_with_dotted_keys_1); // table-append-with-dotted-keys-1 - } - - SECTION("table-append-with-dotted-keys-2") - { - parsing_should_fail(FILE_LINE_ARGS, table_append_with_dotted_keys_2); // table-append-with-dotted-keys-2 - } - - SECTION("table-array-empty") - { - parsing_should_fail(FILE_LINE_ARGS, table_array_empty); // table-array-empty - } - - SECTION("table-array-implicit") - { - parsing_should_fail(FILE_LINE_ARGS, table_array_implicit); // table-array-implicit - } - - SECTION("table-array-missing-bracket") - { - parsing_should_fail(FILE_LINE_ARGS, table_array_missing_bracket); // table-array-missing-bracket - } - - SECTION("table-duplicate-key-dotted-array") - { - parsing_should_fail(FILE_LINE_ARGS, table_duplicate_key_dotted_array); // table-duplicate-key-dotted-array - } - - SECTION("table-duplicate-key-dotted-table") - { - parsing_should_fail(FILE_LINE_ARGS, table_duplicate_key_dotted_table); // table-duplicate-key-dotted-table - } - - SECTION("table-duplicate-key-dotted-table2") - { - parsing_should_fail(FILE_LINE_ARGS, table_duplicate_key_dotted_table2); // table-duplicate-key-dotted-table2 - } - - SECTION("table-duplicate-key-table") - { - parsing_should_fail(FILE_LINE_ARGS, table_duplicate_key_table); // table-duplicate-key-table - } - - SECTION("table-duplicate-table-array") - { - parsing_should_fail(FILE_LINE_ARGS, table_duplicate_table_array); // table-duplicate-table-array - } - - SECTION("table-duplicate-table-array2") - { - parsing_should_fail(FILE_LINE_ARGS, table_duplicate_table_array2); // table-duplicate-table-array2 - } - - SECTION("table-duplicate") - { - parsing_should_fail(FILE_LINE_ARGS, table_duplicate); // table-duplicate - } - - SECTION("table-empty-implicit-table") - { - parsing_should_fail(FILE_LINE_ARGS, table_empty_implicit_table); // table-empty-implicit-table - } - - SECTION("table-empty") - { - parsing_should_fail(FILE_LINE_ARGS, table_empty); // table-empty - } - - SECTION("table-equals-sign") - { - parsing_should_fail(FILE_LINE_ARGS, table_equals_sign); // table-equals-sign - } - - SECTION("table-llbrace") - { - parsing_should_fail(FILE_LINE_ARGS, table_llbrace); // table-llbrace - } - - SECTION("table-nested-brackets-close") - { - parsing_should_fail(FILE_LINE_ARGS, table_nested_brackets_close); // table-nested-brackets-close - } - - SECTION("table-nested-brackets-open") - { - parsing_should_fail(FILE_LINE_ARGS, table_nested_brackets_open); // table-nested-brackets-open - } - - SECTION("table-quoted-no-close") - { - parsing_should_fail(FILE_LINE_ARGS, table_quoted_no_close); // table-quoted-no-close - } - - SECTION("table-redefine") - { - parsing_should_fail(FILE_LINE_ARGS, table_redefine); // table-redefine - } - - SECTION("table-rrbrace") - { - parsing_should_fail(FILE_LINE_ARGS, table_rrbrace); // table-rrbrace - } - - SECTION("table-text-after-table") - { - parsing_should_fail(FILE_LINE_ARGS, table_text_after_table); // table-text-after-table - } - - SECTION("table-whitespace") - { - parsing_should_fail(FILE_LINE_ARGS, table_whitespace); // table-whitespace - } - - SECTION("table-with-pound") - { - parsing_should_fail(FILE_LINE_ARGS, table_with_pound); // table-with-pound - } -} diff --git a/tests/conformance_burntsushi_valid.cpp b/tests/conformance_burntsushi_valid.cpp deleted file mode 100644 index 14520d6..0000000 --- a/tests/conformance_burntsushi_valid.cpp +++ /dev/null @@ -1,4734 +0,0 @@ -// This file is a part of toml++ and is subject to the the terms of the MIT license. -// Copyright (c) Mark Gillard -// See https://github.com/marzer/tomlplusplus/blob/master/LICENSE for the full license text. -// SPDX-License-Identifier: MIT -//----- -// this file was generated by generate_conformance_tests.py - do not modify it directly - -#include "tests.hpp" - -namespace -{ - static constexpr auto array_array = R"(ints = [1, 2, 3, ] -floats = [1.1, 2.1, 3.1] -strings = ["a", "b", "c"] -dates = [ - 1987-07-05T17:45:00Z, - 1979-05-27T07:32:00Z, - 2006-06-01T11:00:00Z, -] -comments = [ - 1, - 2, #this is ok -])"sv; - static constexpr auto array_bool = R"(a = [true, false])"sv; - static constexpr auto array_empty = R"(thevoid = [[[[[]]]]])"sv; - static constexpr auto array_hetergeneous = R"(mixed = [[1, 2], ["a", "b"], [1.1, 2.1]])"sv; - static constexpr auto array_mixed_int_array = R"(arrays-and-ints = [1, ["Arrays are not integers."]])"sv; - static constexpr auto array_mixed_int_float = R"(ints-and-floats = [1, 1.1])"sv; - static constexpr auto array_mixed_int_string = R"(strings-and-ints = ["hi", 42])"sv; - static constexpr auto array_mixed_string_table = R"(contributors = [ - "Foo Bar ", - { name = "Baz Qux", email = "bazqux@example.com", url = "https://example.com/bazqux" } -] - -# Start with a table as the first element. This tests a case that some libraries -# might have where they will check if the first entry is a table/map/hash/assoc -# array and then encode it as a table array. This was a reasonable thing to do -# before TOML 1.0 since arrays could only contain one type, but now it's no -# longer. -mixed = [{k="a"}, "b", 1])"sv; - static constexpr auto array_nested_double = R"(nest = [ - [ - ["a"], - [1, 2, [3]] - ] -])"sv; - static constexpr auto array_nested_inline_table = R"(a = [ { b = {} } ])"sv; - static constexpr auto array_nested = R"(nest = [["a"], ["b"]])"sv; - static constexpr auto array_nospaces = R"(ints = [1,2,3])"sv; - static constexpr auto array_string_quote_comma_2 = R"(title = [ " \", ",])"sv; - static constexpr auto array_string_quote_comma = R"(title = [ -"Client: \"XXXX\", Job: XXXX", -"Code: XXXX" -])"sv; - static constexpr auto array_string_with_comma_2 = R"(title = [ -"""Client: XXXX, -Job: XXXX""", -"Code: XXXX" -])"sv; - static constexpr auto array_string_with_comma = R"(title = [ -"Client: XXXX, Job: XXXX", -"Code: XXXX" -])"sv; - static constexpr auto array_strings = R"(string_array = [ "all", 'strings', """are the same""", '''type'''])"sv; - static constexpr auto array_table_array_string_backslash = R"(foo = [ { bar="\"{{baz}}\""} ])"sv; - - static constexpr auto bool_bool = R"(t = true -f = false)"sv; - - static constexpr auto comment_after_literal_no_ws = R"(inf=inf#infinity -nan=nan#not a number -true=true#true -false=false#false)"sv; - static constexpr auto comment_at_eof = R"(# This is a full-line comment -key = "value" # This is a comment at the end of a line)"sv; - static constexpr auto comment_at_eof2 = R"(# This is a full-line comment -key = "value" # This is a comment at the end of a line)"sv; - static constexpr auto comment_everywhere = R"(# Top comment. - # Top comment. -# Top comment. - -# [no-extraneous-groups-please] - -[group] # Comment -answer = 42 # Comment -# no-extraneous-keys-please = 999 -# Inbetween comment. -more = [ # Comment - # What about multiple # comments? - # Can you handle it? - # - # Evil. -# Evil. - 42, 42, # Comments within arrays are fun. - # What about multiple # comments? - # Can you handle it? - # - # Evil. -# Evil. -# ] Did I fool you? -] # Hopefully not. - -# Make sure the space between the datetime and "#" isn't lexed. -dt = 1979-05-27T07:32:12-07:00 # c -d = 1979-05-27 # Comment)"sv; - static constexpr auto comment_noeol = R"(# single comment without any eol characters)"sv; - static constexpr auto comment_tricky = R"([section]#attached comment -#[notsection] -one = "11"#cmt -two = "22#" -three = '#' - -four = """# no comment -# nor this -#also not comment"""#is_comment - -five = 5.5#66 -six = 6#7 -8 = "eight" -#nine = 99 -ten = 10e2#1 -eleven = 1.11e1#23 - -["hash#tag"] -"#!" = "hash bang" -arr3 = [ "#", '#', """###""" ] -arr4 = [ 1,# 9, 9, -2#,9 -,#9 -3#] -,4] -arr5 = [[[[#["#"], -["#"]]]]#] -] -tbl1 = { "#" = '}#'}#}})"sv; - -#if UNICODE_LITERALS_OK - - static constexpr auto comment_nonascii = R"(# ~ € ÿ ퟿  ￿ 𐀀 􏿿)"sv; - -#endif // UNICODE_LITERALS_OK - - static constexpr auto datetime_datetime = R"(space = 1987-07-05 17:45:00Z -lower = 1987-07-05t17:45:00z)"sv; - static constexpr auto datetime_local_date = R"(bestdayever = 1987-07-05)"sv; - static constexpr auto datetime_local_time = R"(besttimeever = 17:45:00 -milliseconds = 10:32:00.555)"sv; - static constexpr auto datetime_local = R"(local = 1987-07-05T17:45:00 -milli = 1977-12-21T10:32:00.555 -space = 1987-07-05 17:45:00)"sv; - static constexpr auto datetime_milliseconds = R"(utc1 = 1987-07-05T17:45:56.123Z -utc2 = 1987-07-05T17:45:56.6Z -wita1 = 1987-07-05T17:45:56.123+08:00 -wita2 = 1987-07-05T17:45:56.6+08:00)"sv; - static constexpr auto datetime_timezone = R"(utc = 1987-07-05T17:45:56Z -pdt = 1987-07-05T17:45:56-05:00 -nzst = 1987-07-05T17:45:56+12:00 -nzdt = 1987-07-05T17:45:56+13:00 # DST)"sv; - -#if TOML_LANG_UNRELEASED - - static constexpr auto datetime_no_seconds = R"(# Seconds are optional in date-time and time. -without-seconds-1 = 13:37 -without-seconds-2 = 1979-05-27 07:32Z -without-seconds-3 = 1979-05-27 07:32-07:00 -without-seconds-4 = 1979-05-27T07:32)"sv; - -#endif // TOML_LANG_UNRELEASED - - static constexpr auto empty_file = R"()"sv; - - static constexpr auto example = R"(best-day-ever = 1987-07-05T17:45:00Z - -[numtheory] -boring = false -perfection = [6, 28, 496])"sv; - - static constexpr auto float_exponent = R"(lower = 3e2 -upper = 3E2 -neg = 3e-2 -pos = 3E+2 -zero = 3e0 -pointlower = 3.1e2 -pointupper = 3.1E2 -minustenth = -1E-1)"sv; - static constexpr auto float_float = R"(pi = 3.14 -pospi = +3.14 -negpi = -3.14 -zero-intpart = 0.123)"sv; - static constexpr auto float_inf_and_nan = - R"(# We don't encode +nan and -nan back with the signs; many languages don't -# support a sign on NaN (it doesn't really make much sense). -nan = nan -nan_neg = -nan -nan_plus = +nan -infinity = inf -infinity_neg = -inf -infinity_plus = +inf)"sv; - static constexpr auto float_long = R"(longpi = 3.141592653589793 -neglongpi = -3.141592653589793)"sv; - static constexpr auto float_underscore = R"(before = 3_141.5927 -after = 3141.592_7 -exponent = 3e1_4)"sv; - static constexpr auto float_zero = R"(zero = 0.0 -signed-pos = +0.0 -signed-neg = -0.0 -exponent = 0e0 -exponent-two-0 = 0e00 -exponent-signed-pos = +0e0 -exponent-signed-neg = -0e0)"sv; - - static constexpr auto implicit_and_explicit_after = R"([a.b.c] -answer = 42 - -[a] -better = 43)"sv; - static constexpr auto implicit_and_explicit_before = R"([a] -better = 43 - -[a.b.c] -answer = 42)"sv; - static constexpr auto implicit_groups = R"([a.b.c] -answer = 42)"sv; - - static constexpr auto inline_table_array = R"(people = [{first_name = "Bruce", last_name = "Springsteen"}, - {first_name = "Eric", last_name = "Clapton"}, - {first_name = "Bob", last_name = "Seger"}])"sv; - static constexpr auto inline_table_bool = R"(a = {a = true, b = false})"sv; - static constexpr auto inline_table_empty = R"(empty1 = {} -empty2 = { } -empty_in_array = [ { not_empty = 1 }, {} ] -empty_in_array2 = [{},{not_empty=1}] -many_empty = [{},{},{}] -nested_empty = {"empty"={}})"sv; - static constexpr auto inline_table_end_in_bool = - R"(black = { python=">3.6", version=">=18.9b0", allow_prereleases=true })"sv; - static constexpr auto inline_table_inline_table = R"(name = { first = "Tom", last = "Preston-Werner" } -point = { x = 1, y = 2 } -simple = { a = 1 } -str-key = { "a" = 1 } -table-array = [{ "a" = 1 }, { "b" = 2 }])"sv; - static constexpr auto inline_table_multiline = R"(tbl_multiline = { a = 1, b = """ -multiline -""", c = """and yet -another line""", d = 4 })"sv; - static constexpr auto inline_table_nest = R"(tbl_tbl_empty = { tbl_0 = {} } -tbl_tbl_val = { tbl_1 = { one = 1 } } -tbl_arr_tbl = { arr_tbl = [ { one = 1 } ] } -arr_tbl_tbl = [ { tbl = { one = 1 } } ] - -# Array-of-array-of-table is interesting because it can only -# be represented in inline form. -arr_arr_tbl_empty = [ [ {} ] ] -arr_arr_tbl_val = [ [ { one = 1 } ] ] -arr_arr_tbls = [ [ { one = 1 }, { two = 2 } ] ])"sv; - -#if !TOML_MSVC - - static constexpr auto inline_table_key_dotted = R"(inline = {a.b = 42} - -many.dots.here.dot.dot.dot = {a.b.c = 1, a.b.d = 2} - -a = { a.b = 1 } -b = { "a"."b" = 1 } -c = { a . b = 1 } -d = { 'a' . "b" = 1 } -e = {a.b=1} - -[tbl] -a.b.c = {d.e=1} - -[tbl.x] -a.b.c = {d.e=1} - -[[arr]] -t = {a.b=1} -T = {a.b=1} - -[[arr]] -t = {a.b=2} -T = {a.b=2})"sv; - -#endif // !TOML_MSVC - -#if TOML_LANG_UNRELEASED - - static constexpr auto inline_table_newline = R"(# TOML 1.1 supports newlines in inline tables and trailing commas. - -trailing-comma-1 = { - c = 1, -} -trailing-comma-2 = { c = 1, } - -tbl-1 = { - hello = "world", - 1 = 2, - arr = [1, - 2, - 3, - ], - tbl = { - k = 1, - } -} - -tbl-2 = { - k = """ - Hello - """ -})"sv; - -#endif // TOML_LANG_UNRELEASED - - static constexpr auto integer_integer = R"(answer = 42 -posanswer = +42 -neganswer = -42 -zero = 0)"sv; - static constexpr auto integer_literals = R"(bin1 = 0b11010110 -bin2 = 0b1_0_1 - -oct1 = 0o01234567 -oct2 = 0o755 -oct3 = 0o7_6_5 - -hex1 = 0xDEADBEEF -hex2 = 0xdeadbeef -hex3 = 0xdead_beef -hex4 = 0x00987)"sv; - static constexpr auto integer_long = R"(int64-max = 9223372036854775807 -int64-max-neg = -9223372036854775808)"sv; - static constexpr auto integer_underscore = R"(kilo = 1_000 -x = 1_1_1_1)"sv; - static constexpr auto integer_zero = R"(d1 = 0 -d2 = +0 -d3 = -0 - -h1 = 0x0 -h2 = 0x00 -h3 = 0x00000 - -o1 = 0o0 -a2 = 0o00 -a3 = 0o00000 - -b1 = 0b0 -b2 = 0b00 -b3 = 0b00000)"sv; - -#if UNICODE_LITERALS_OK - - static constexpr auto key_case_sensitive = R"(sectioN = "NN" - -[section] -name = "lower" -NAME = "upper" -Name = "capitalized" - -[Section] -name = "different section!!" -"μ" = "greek small letter mu" -"Μ" = "greek capital letter MU" -M = "latin letter M")"sv; - static constexpr auto key_escapes = R"("\n" = "newline" -"\u00c0" = "latin capital letter A with grave" -"\"" = "just a quote" - -["backsp\b\b"] - -["\"quoted\""] -quote = true - -["a.b"."\u00c0"])"sv; - static constexpr auto key_quoted_unicode = R"( -"\u0000" = "null" -'\u0000' = "different key" -"\u0008 \u000c \U00000041 \u007f \u0080 \u00ff \ud7ff \ue000 \uffff \U00010000 \U0010ffff" = "escaped key" - -"~ € ÿ ퟿  ￿ 𐀀 􏿿" = "basic key" -'l ~ € ÿ ퟿  ￿ 𐀀 􏿿' = "literal key")"sv; - -#endif // UNICODE_LITERALS_OK - - static constexpr auto key_dotted_empty = R"(''.x = "empty.x" -x."" = "x.empty" -[a] -"".'' = "empty.empty")"sv; - static constexpr auto key_dotted = R"(# Note: this file contains literal tab characters. - -name.first = "Arthur" -"name".'last' = "Dent" - -many.dots.here.dot.dot.dot = 42 - -# Space are ignored, and key parts can be quoted. -count.a = 1 -count . b = 2 -"count"."c" = 3 -"count" . "d" = 4 -'count'.'e' = 5 -'count' . 'f' = 6 -"count".'g' = 7 -"count" . 'h' = 8 -count.'i' = 9 -count . 'j' = 10 -"count".k = 11 -"count" . l = 12 - -[tbl] -a.b.c = 42.666 - -[a.few.dots] -polka.dot = "again?" -polka.dance-with = "Dot" - -[[arr]] -a.b.c=1 -a.b.d=2 - -[[arr]] -a.b.c=3 -a.b.d=4)"sv; - static constexpr auto key_empty = R"("" = "blank")"sv; - static constexpr auto key_equals_nospace = R"(answer=42)"sv; - static constexpr auto key_numeric_dotted = R"(1.2 = 3)"sv; - static constexpr auto key_numeric = R"(1 = 1)"sv; - static constexpr auto key_quoted_dots = R"(plain = 1 -"with.dot" = 2 - -[plain_table] -plain = 3 -"with.dot" = 4 - -[table.withdot] -plain = 5 -"key.with.dots" = 6)"sv; - static constexpr auto key_space = R"(# Keep whitespace inside quotes keys at all positions. -"a b" = 1 -" c d " = 2 - -[ " tbl " ] -"\ttab\ttab\t" = "tab")"sv; - static constexpr auto key_special_chars = R"("=~!@$^&*()_+-`1234567890[]|/?><.,;:'=" = 1)"sv; - static constexpr auto key_special_word = R"(false = false -true = 1 -inf = 100000000 -nan = "ceci n'est pas un nombre")"sv; - -#if TOML_LANG_UNRELEASED && UNICODE_LITERALS_OK - - static constexpr auto key_unicode = R"(# TOML 1.1 supports Unicode for bare keys. - -€ = 'Euro' -😂 = "rofl" -a‍b = "zwj" -ÅÅ = "U+00C5 U+0041 U+030A" - -[中文] -中文 = {中文 = "Chinese language"} - -[[tiếng-Việt]] -tiəŋ˧˦.viət̚˧˨ʔ = "north" - -[[tiếng-Việt]] -tiəŋ˦˧˥.viək̚˨˩ʔ = "central")"sv; - -#endif // TOML_LANG_UNRELEASED && UNICODE_LITERALS_OK - - static constexpr auto newline_crlf = "os = \"DOS\"\r\n" - "newline = \"crlf\""sv; - static constexpr auto newline_lf = R"(os = "unix" -newline = "lf")"sv; - - static constexpr auto spec_array_0 = R"(integers = [ 1, 2, 3 ] -colors = [ "red", "yellow", "green" ] -nested_arrays_of_ints = [ [ 1, 2 ], [3, 4, 5] ] -nested_mixed_array = [ [ 1, 2 ], ["a", "b", "c"] ] -string_array = [ "all", 'strings', """are the same""", '''type''' ] - -# Mixed-type arrays are allowed -numbers = [ 0.1, 0.2, 0.5, 1, 2, 5 ] -contributors = [ - "Foo Bar ", - { name = "Baz Qux", email = "bazqux@example.com", url = "https://example.com/bazqux" } -])"sv; - static constexpr auto spec_array_1 = R"(integers2 = [ - 1, 2, 3 -] - -integers3 = [ - 1, - 2, # this is ok -])"sv; - static constexpr auto spec_array_of_tables_0 = R"([[products]] -name = "Hammer" -sku = 738594937 - -[[products]] # empty table within the array - -[[products]] -name = "Nail" -sku = 284758393 - -color = "gray")"sv; - static constexpr auto spec_array_of_tables_1 = R"([[fruits]] -name = "apple" - -[fruits.physical] # subtable -color = "red" -shape = "round" - -[[fruits.varieties]] # nested array of tables -name = "red delicious" - -[[fruits.varieties]] -name = "granny smith" - - -[[fruits]] -name = "banana" - -[[fruits.varieties]] -name = "plantain")"sv; - static constexpr auto spec_array_of_tables_2 = R"(points = [ { x = 1, y = 2, z = 3 }, - { x = 7, y = 8, z = 9 }, - { x = 2, y = 4, z = 8 } ])"sv; - static constexpr auto spec_boolean_0 = R"(bool1 = true -bool2 = false)"sv; - static constexpr auto spec_comment_0 = R"(# This is a full-line comment -key = "value" # This is a comment at the end of a line -another = "# This is not a comment")"sv; - static constexpr auto spec_float_0 = R"(# fractional -flt1 = +1.0 -flt2 = 3.1415 -flt3 = -0.01 - -# exponent -flt4 = 5e+22 -flt5 = 1e06 -flt6 = -2E-2 - -# both -flt7 = 6.626e-34)"sv; - static constexpr auto spec_float_1 = R"(flt8 = 224_617.445_991_228)"sv; - static constexpr auto spec_float_2 = R"(# infinity -sf1 = inf # positive infinity -sf2 = +inf # positive infinity -sf3 = -inf # negative infinity - -# not a number -sf4 = nan # actual sNaN/qNaN encoding is implementation-specific -sf5 = +nan # same as `nan` -sf6 = -nan # valid, actual encoding is implementation-specific)"sv; - static constexpr auto spec_inline_table_0 = R"(name = { first = "Tom", last = "Preston-Werner" } -point = { x = 1, y = 2 } -animal = { type.name = "pug" })"sv; - static constexpr auto spec_inline_table_1 = R"([name] -first = "Tom" -last = "Preston-Werner" - -[point] -x = 1 -y = 2 - -[animal] -type.name = "pug")"sv; - static constexpr auto spec_inline_table_2 = R"([product] -type = { name = "Nail" } -# type.edible = false # INVALID)"sv; - static constexpr auto spec_inline_table_3 = R"([product] -type.name = "Nail" -# type = { edible = false } # INVALID)"sv; - static constexpr auto spec_integer_0 = R"(int1 = +99 -int2 = 42 -int3 = 0 -int4 = -17)"sv; - static constexpr auto spec_integer_1 = R"(int5 = 1_000 -int6 = 5_349_221 -int7 = 53_49_221 # Indian number system grouping -int8 = 1_2_3_4_5 # VALID but discouraged)"sv; - static constexpr auto spec_integer_2 = R"(# hexadecimal with prefix `0x` -hex1 = 0xDEADBEEF -hex2 = 0xdeadbeef -hex3 = 0xdead_beef - -# octal with prefix `0o` -oct1 = 0o01234567 -oct2 = 0o755 # useful for Unix file permissions - -# binary with prefix `0b` -bin1 = 0b11010110)"sv; - static constexpr auto spec_key_value_pair_0 = R"(key = "value")"sv; - static constexpr auto spec_keys_0 = R"(key = "value" -bare_key = "value" -bare-key = "value" -1234 = "value")"sv; - static constexpr auto spec_keys_3 = R"(name = "Orange" -physical.color = "orange" -physical.shape = "round" -site."google.com" = true)"sv; - static constexpr auto spec_keys_4 = R"(fruit.name = "banana" # this is best practice -fruit. color = "yellow" # same as fruit.color -fruit . flavor = "banana" # same as fruit.flavor)"sv; - static constexpr auto spec_keys_5 = R"(# VALID BUT DISCOURAGED - -apple.type = "fruit" -orange.type = "fruit" - -apple.skin = "thin" -orange.skin = "thick" - -apple.color = "red" -orange.color = "orange")"sv; - static constexpr auto spec_keys_6 = R"(# RECOMMENDED - -apple.type = "fruit" -apple.skin = "thin" -apple.color = "red" - -orange.type = "fruit" -orange.skin = "thick" -orange.color = "orange")"sv; - static constexpr auto spec_keys_7 = R"(3.14159 = "pi")"sv; - static constexpr auto spec_local_date_0 = R"(ld1 = 1979-05-27)"sv; - static constexpr auto spec_local_date_time_0 = R"(ldt1 = 1979-05-27T07:32:00 -ldt2 = 1979-05-27T00:32:00.999999)"sv; - static constexpr auto spec_local_time_0 = R"(lt1 = 07:32:00 -lt2 = 00:32:00.999999)"sv; - static constexpr auto spec_offset_date_time_0 = R"(odt1 = 1979-05-27T07:32:00Z -odt2 = 1979-05-27T00:32:00-07:00 -odt3 = 1979-05-27T00:32:00.999999-07:00)"sv; - static constexpr auto spec_offset_date_time_1 = R"(odt4 = 1979-05-27 07:32:00Z)"sv; - static constexpr auto spec_string_1 = R"(str1 = """ -Roses are red -Violets are blue""")"sv; - static constexpr auto spec_string_2 = - R"(# On a Unix system, the above multi-line string will most likely be the same as: -str2 = "Roses are red\nViolets are blue" - -# On a Windows system, it will most likely be equivalent to: -str3 = "Roses are red\r\nViolets are blue")"sv; - static constexpr auto spec_string_3 = R"(# The following strings are byte-for-byte equivalent: -str1 = "The quick brown fox jumps over the lazy dog." - -str2 = """ -The quick brown \ - - - fox jumps over \ - the lazy dog.""" - -str3 = """\ - The quick brown \ - fox jumps over \ - the lazy dog.\ - """)"sv; - static constexpr auto spec_string_4 = R"(str4 = """Here are two quotation marks: "". Simple enough.""" -# str5 = """Here are three quotation marks: """.""" # INVALID -str5 = """Here are three quotation marks: ""\".""" -str6 = """Here are fifteen quotation marks: ""\"""\"""\"""\"""\".""" - -# "This," she said, "is just a pointless statement." -str7 = """"This," she said, "is just a pointless statement."""")"sv; - static constexpr auto spec_string_5 = R"(# What you see is what you get. -winpath = 'C:\Users\nodejs\templates' -winpath2 = '\\ServerX\admin$\system32\' -quoted = 'Tom "Dubs" Preston-Werner' -regex = '<\i\c*\s*>')"sv; - static constexpr auto spec_string_6 = R"(regex2 = '''I [dw]on't need \d{2} apples''' -lines = ''' -The first newline is -trimmed in raw strings. - All other whitespace - is preserved. -''')"sv; - static constexpr auto spec_string_7 = R"(quot15 = '''Here are fifteen quotation marks: """""""""""""""''' - -# apos15 = '''Here are fifteen apostrophes: '''''''''''''''''' # INVALID -apos15 = "Here are fifteen apostrophes: '''''''''''''''" - -# 'That,' she said, 'is still pointless.' -str = ''''That,' she said, 'is still pointless.'''')"sv; - static constexpr auto spec_table_0 = R"([table])"sv; - static constexpr auto spec_table_1 = R"([table-1] -key1 = "some string" -key2 = 123 - -[table-2] -key1 = "another string" -key2 = 456)"sv; - static constexpr auto spec_table_2 = R"([dog."tater.man"] -type.name = "pug")"sv; - static constexpr auto spec_table_4 = R"(# [x] you -# [x.y] don't -# [x.y.z] need these -[x.y.z.w] # for this to work - -[x] # defining a super-table afterward is ok)"sv; - static constexpr auto spec_table_5 = R"(# VALID BUT DISCOURAGED -[fruit.apple] -[animal] -[fruit.orange])"sv; - static constexpr auto spec_table_6 = R"(# RECOMMENDED -[fruit.apple] -[fruit.orange] -[animal])"sv; - static constexpr auto spec_table_7 = R"(# Top-level table begins. -name = "Fido" -breed = "pug" - -# Top-level table ends. -[owner] -name = "Regina Dogman" -member_since = 1999-08-04)"sv; - static constexpr auto spec_table_8 = R"(fruit.apple.color = "red" -# Defines a table named fruit -# Defines a table named fruit.apple - -fruit.apple.taste.sweet = true -# Defines a table named fruit.apple.taste -# fruit and fruit.apple were already created)"sv; - static constexpr auto spec_table_9 = R"([fruit] -apple.color = "red" -apple.taste.sweet = true - -# [fruit.apple] # INVALID -# [fruit.apple.taste] # INVALID - -[fruit.apple.texture] # you can add sub-tables -smooth = true)"sv; - static constexpr auto spec_example_1_compact = R"(#Useless spaces eliminated. -title="TOML Example" -[owner] -name="Lance Uppercut" -dob=1979-05-27T07:32:00-08:00#First class dates -[database] -server="192.168.1.1" -ports=[8001,8001,8002] -connection_max=5000 -enabled=true -[servers] -[servers.alpha] -ip="10.0.0.1" -dc="eqdc10" -[servers.beta] -ip="10.0.0.2" -dc="eqdc10" -[clients] -data=[["gamma","delta"],[1,2]] -hosts=[ -"alpha", -"omega" -])"sv; - static constexpr auto spec_example_1 = R"(# This is a TOML document. Boom. - -title = "TOML Example" - -[owner] -name = "Lance Uppercut" -dob = 1979-05-27T07:32:00-08:00 # First class dates? Why not? - -[database] -server = "192.168.1.1" -ports = [ 8001, 8001, 8002 ] -connection_max = 5000 -enabled = true - -[servers] - - # You can indent as you please. Tabs or spaces. TOML don't care. - [servers.alpha] - ip = "10.0.0.1" - dc = "eqdc10" - - [servers.beta] - ip = "10.0.0.2" - dc = "eqdc10" - -[clients] -data = [ ["gamma", "delta"], [1, 2] ] - -# Line breaks are OK when inside arrays -hosts = [ - "alpha", - "omega" -])"sv; - -#if UNICODE_LITERALS_OK - - static constexpr auto spec_keys_1 = R"("127.0.0.1" = "value" -"character encoding" = "value" -"ʎǝʞ" = "value" -'key2' = "value" -'quoted "value"' = "value")"sv; - static constexpr auto spec_string_0 = - R"(str = "I'm a string. \"You can quote me\". Name\tJos\u00E9\nLocation\tSF.")"sv; - static constexpr auto spec_table_3 = R"([a.b.c] # this is best practice -[ d.e.f ] # same as [d.e.f] -[ g . h . i ] # same as [g.h.i] -[ j . "ʞ" . 'l' ] # same as [j."ʞ".'l'])"sv; - -#endif // UNICODE_LITERALS_OK - - static constexpr auto string_double_quote_escape = R"(test = "\"one\"")"sv; - static constexpr auto string_empty = R"(answer = "")"sv; - static constexpr auto string_escaped_escape = R"(answer = "\\x64")"sv; - static constexpr auto string_escapes = R"(backspace = "This string has a \b backspace character." -tab = "This string has a \t tab character." -newline = "This string has a \n new line character." -formfeed = "This string has a \f form feed character." -carriage = "This string has a \r carriage return character." -quote = "This string has a \" quote character." -backslash = "This string has a \\ backslash character." -notunicode1 = "This string does not have a unicode \\u escape." -notunicode2 = "This string does not have a unicode \u005Cu escape." -notunicode3 = "This string does not have a unicode \\u0075 escape." -notunicode4 = "This string does not have a unicode \\\u0075 escape." -delete = "This string has a \u007F delete control code." -unitseparator = "This string has a \u001F unit separator control code.")"sv; - static constexpr auto string_multiline_escaped_crlf = - "# The following line should be an unescaped backslash followed by a Windows\r\n" - "# newline sequence (\"\\r\\n\")\r\n" - "0=\"\"\"\\\r\n" - "\"\"\""sv; - static constexpr auto string_multiline_quotes = - R"(# Make sure that quotes inside multiline strings are allowed, including right -# after the opening '''/""" and before the closing '''/""" - -lit_one = ''''one quote'''' -lit_two = '''''two quotes''''' -lit_one_space = ''' 'one quote' ''' -lit_two_space = ''' ''two quotes'' ''' - -one = """"one quote"""" -two = """""two quotes""""" -one_space = """ "one quote" """ -two_space = """ ""two quotes"" """ - -mismatch1 = """aaa'''bbb""" -mismatch2 = '''aaa"""bbb''' - -# Three opening """, then one escaped ", then two "" (allowed), and then three -# closing """ -escaped = """lol\"""""")"sv; - static constexpr auto string_multiline = - "# NOTE: this file includes some literal tab characters.\n" - "\n" - "multiline_empty_one = \"\"\"\"\"\"\n" - "\n" - "# A newline immediately following the opening delimiter will be trimmed.\n" - "multiline_empty_two = \"\"\"\n" - "\"\"\"\n" - "\n" - "# \\ at the end of line trims newlines as well; note that last \\ is followed by\n" - "# two spaces, which are ignored.\n" - "multiline_empty_three = \"\"\"\\\n" - " \"\"\"\n" - "multiline_empty_four = \"\"\"\\\n" - " \\\n" - " \\ \n" - " \"\"\"\n" - "\n" - "equivalent_one = \"The quick brown fox jumps over the lazy dog.\"\n" - "equivalent_two = \"\"\"\n" - "The quick brown \\\n" - "\n" - "\n" - " fox jumps over \\\n" - " the lazy dog.\"\"\"\n" - "\n" - "equivalent_three = \"\"\"\\\n" - " The quick brown \\\n" - " fox jumps over \\\n" - " the lazy dog.\\\n" - " \"\"\"\n" - "\n" - "whitespace-after-bs = \"\"\"\\\n" - " The quick brown \\\n" - " fox jumps over \\ \n" - " the lazy dog.\\ \n" - " \"\"\"\n" - "\n" - "no-space = \"\"\"a\\\n" - " b\"\"\"\n" - "\n" - "# Has tab character.\n" - "keep-ws-before = \"\"\"a \\\n" - " b\"\"\"\n" - "\n" - "escape-bs-1 = \"\"\"a \\\\\n" - "b\"\"\"\n" - "\n" - "escape-bs-2 = \"\"\"a \\\\\\\n" - "b\"\"\"\n" - "\n" - "escape-bs-3 = \"\"\"a \\\\\\\\\n" - " b\"\"\""sv; - static constexpr auto string_nl = R"(nl_mid = "val\nue" -nl_end = """value\n""" - -lit_nl_end = '''value\n''' -lit_nl_mid = 'val\nue' -lit_nl_uni = 'val\ue')"sv; - static constexpr auto string_raw_multiline = R"(# Single ' should be allowed. -oneline = '''This string has a ' quote character.''' - -# A newline immediately following the opening delimiter will be trimmed. -firstnl = ''' -This string has a ' quote character.''' - -# All other whitespace and newline characters remain intact. -multiline = ''' -This string -has ' a quote character -and more than -one newline -in it.''' - -# Tab character in literal string does not need to be escaped -multiline_with_tab = '''First line - Followed by a tab''')"sv; - static constexpr auto string_raw = R"(backspace = 'This string has a \b backspace character.' -tab = 'This string has a \t tab character.' -unescaped_tab = 'This string has an unescaped tab character.' -newline = 'This string has a \n new line character.' -formfeed = 'This string has a \f form feed character.' -carriage = 'This string has a \r carriage return character.' -slash = 'This string has a \/ slash character.' -backslash = 'This string has a \\ backslash character.')"sv; - static constexpr auto string_simple = R"(answer = "You are not drinking enough whisky.")"sv; - static constexpr auto string_with_pound = R"(pound = "We see no # comments here." -poundcomment = "But there are # some comments here." # Did I # mess you up?)"sv; - -#if TOML_LANG_UNRELEASED - - static constexpr auto string_escape_esc = R"(esc = "\e There is no escape! \e")"sv; - -#endif // TOML_LANG_UNRELEASED - -#if UNICODE_LITERALS_OK - - static constexpr auto string_escape_tricky = R"(end_esc = "String does not end here\" but ends here\\" -lit_end_esc = 'String ends here\' - -multiline_unicode = """ -\u00a0""" - -multiline_not_unicode = """ -\\u0041""" - -multiline_end_esc = """When will it end? \"""...""\" should be here\"""" - -lit_multiline_not_unicode = ''' -\u007f''' - -lit_multiline_end = '''There is no escape\''')"sv; - static constexpr auto string_quoted_unicode = R"( -escaped_string = "\u0000 \u0008 \u000c \U00000041 \u007f \u0080 \u00ff \ud7ff \ue000 \uffff \U00010000 \U0010ffff" -not_escaped_string = '\u0000 \u0008 \u000c \U00000041 \u007f \u0080 \u00ff \ud7ff \ue000 \uffff \U00010000 \U0010ffff' - -basic_string = "~ € ÿ ퟿  ￿ 𐀀 􏿿" -literal_string = '~ € ÿ ퟿  ￿ 𐀀 􏿿')"sv; - static constexpr auto string_unicode_escape = R"(answer4 = "\u03B4" -answer8 = "\U000003B4")"sv; - static constexpr auto string_unicode_literal = R"(answer = "δ")"sv; - -#endif // UNICODE_LITERALS_OK - -#if TOML_LANG_UNRELEASED && UNICODE_LITERALS_OK - - static constexpr auto string_hex_escape = R"(# \x for the first 255 codepoints - -whitespace = "\x20 \x09 \x1b \x0d\x0a" -bs = "\x7f" -nul = "\x00" -hello = "\x68\x65\x6c\x6c\x6f\x0a" -higher-than-127 = "S\xf8rmirb\xe6ren" - -multiline = """ -\x20 \x09 \x1b \x0d\x0a -\x7f -\x00 -\x68\x65\x6c\x6c\x6f\x0a -\x53\xF8\x72\x6D\x69\x72\x62\xE6\x72\x65\x6E -""" - -# Not inside literals. -literal = '\x20 \x09 \x0d\x0a' -multiline-literal = ''' -\x20 \x09 \x0d\x0a -''')"sv; - -#endif // TOML_LANG_UNRELEASED && UNICODE_LITERALS_OK - - static constexpr auto table_array_implicit_and_explicit_after = R"([[a.b]] -x = 1 - -[a] -y = 2)"sv; - static constexpr auto table_array_implicit = R"([[albums.songs]] -name = "Glory Days")"sv; - static constexpr auto table_array_many = R"([[people]] -first_name = "Bruce" -last_name = "Springsteen" - -[[people]] -first_name = "Eric" -last_name = "Clapton" - -[[people]] -first_name = "Bob" -last_name = "Seger")"sv; - static constexpr auto table_array_nest = R"([[albums]] -name = "Born to Run" - - [[albums.songs]] - name = "Jungleland" - - [[albums.songs]] - name = "Meeting Across the River" - -[[albums]] -name = "Born in the USA" - - [[albums.songs]] - name = "Glory Days" - - [[albums.songs]] - name = "Dancing in the Dark")"sv; - static constexpr auto table_array_one = R"([[people]] -first_name = "Bruce" -last_name = "Springsteen")"sv; - static constexpr auto table_array_table_array = R"([[a]] - [[a.b]] - [a.b.c] - d = "val0" - [[a.b]] - [a.b.c] - d = "val1")"sv; - static constexpr auto table_array_within_dotted = R"([fruit] -apple.color = "red" - -[[fruit.apple.seeds]] -size = 2)"sv; - static constexpr auto table_empty_name = R"([''] -x = 1 - -["".a] -x = 2 - -[a.''] -x = 3)"sv; - static constexpr auto table_empty = R"([a])"sv; - static constexpr auto table_keyword = R"([true] - -[false] - -[inf] - -[nan])"sv; - static constexpr auto table_no_eol = R"([table])"sv; - static constexpr auto table_sub_empty = R"([a] -[a.b])"sv; - static constexpr auto table_sub = R"([a] -key = 1 - -# a.extend is a key inside the "a" table. -[a.extend] -key = 2 - -[a.extend.more] -key = 3)"sv; - static constexpr auto table_whitespace = R"(["valid key"])"sv; - static constexpr auto table_with_literal_string = R"(['a'] -[a.'"b"'] -[a.'"b"'.c] -answer = 42 )"sv; - static constexpr auto table_with_pound = R"(["key#group"] -answer = 42)"sv; - static constexpr auto table_with_single_quotes = R"(['a'] -[a.'b'] -[a.'b'.c] -answer = 42 )"sv; - static constexpr auto table_without_super = R"(# [x] you -# [x.y] don't -# [x.y.z] need these -[x.y.z.w] # for this to work -[x] # defining a super-table afterwards is ok)"sv; - -#if UNICODE_LITERALS_OK - - static constexpr auto table_names = R"([a.b.c] -[a."b.c"] -[a.'d.e'] -[a.' x '] -[ d.e.f ] -[ g . h . i ] -[ j . "ʞ" . 'l' ] - -[x.1.2])"sv; - -#endif // UNICODE_LITERALS_OK -} - -TEST_CASE("conformance - burntsushi/valid") -{ - SECTION("array-array") - { - parsing_should_succeed(FILE_LINE_ARGS, - array_array, - [](toml::table&& tbl) // array-array - { - const auto expected = toml::table{ - { R"(comments)"sv, - toml::array{ - 1, - 2, - } }, - { R"(dates)"sv, - toml::array{ - toml::date_time{ { 1987, 7, 5 }, { 17, 45 }, { 0, 0 } }, - toml::date_time{ { 1979, 5, 27 }, { 7, 32 }, { 0, 0 } }, - toml::date_time{ { 2006, 6, 1 }, { 11, 0 }, { 0, 0 } }, - } }, - { R"(floats)"sv, - toml::array{ - 1.1, - 2.1, - 3.1, - } }, - { R"(ints)"sv, - toml::array{ - 1, - 2, - 3, - } }, - { R"(strings)"sv, - toml::array{ - R"(a)"sv, - R"(b)"sv, - R"(c)"sv, - } }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("array-bool") - { - parsing_should_succeed(FILE_LINE_ARGS, - array_bool, - [](toml::table&& tbl) // array-bool - { - const auto expected = toml::table{ - { R"(a)"sv, - toml::array{ - true, - false, - } }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("array-empty") - { - parsing_should_succeed(FILE_LINE_ARGS, - array_empty, - [](toml::table&& tbl) // array-empty - { - const auto expected = toml::table{ - { R"(thevoid)"sv, - toml::array{ - toml::inserter{ toml::array{ - toml::inserter{ toml::array{ - toml::inserter{ toml::array{ - toml::inserter{ toml::array{} }, - } }, - } }, - } }, - } }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("array-hetergeneous") - { - parsing_should_succeed(FILE_LINE_ARGS, - array_hetergeneous, - [](toml::table&& tbl) // array-hetergeneous - { - const auto expected = toml::table{ - { R"(mixed)"sv, - toml::array{ - toml::array{ - 1, - 2, - }, - toml::array{ - R"(a)"sv, - R"(b)"sv, - }, - toml::array{ - 1.1, - 2.1, - }, - } }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("array-mixed-int-array") - { - parsing_should_succeed(FILE_LINE_ARGS, - array_mixed_int_array, - [](toml::table&& tbl) // array-mixed-int-array - { - const auto expected = toml::table{ - { R"(arrays-and-ints)"sv, - toml::array{ - 1, - toml::array{ - R"(Arrays are not integers.)"sv, - }, - } }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("array-mixed-int-float") - { - parsing_should_succeed(FILE_LINE_ARGS, - array_mixed_int_float, - [](toml::table&& tbl) // array-mixed-int-float - { - const auto expected = toml::table{ - { R"(ints-and-floats)"sv, - toml::array{ - 1, - 1.1, - } }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("array-mixed-int-string") - { - parsing_should_succeed(FILE_LINE_ARGS, - array_mixed_int_string, - [](toml::table&& tbl) // array-mixed-int-string - { - const auto expected = toml::table{ - { R"(strings-and-ints)"sv, - toml::array{ - R"(hi)"sv, - 42, - } }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("array-mixed-string-table") - { - parsing_should_succeed(FILE_LINE_ARGS, - array_mixed_string_table, - [](toml::table&& tbl) // array-mixed-string-table - { - const auto expected = toml::table{ - { R"(contributors)"sv, - toml::array{ - R"(Foo Bar )"sv, - toml::table{ - { R"(email)"sv, R"(bazqux@example.com)"sv }, - { R"(name)"sv, R"(Baz Qux)"sv }, - { R"(url)"sv, R"(https://example.com/bazqux)"sv }, - }, - } }, - { R"(mixed)"sv, - toml::array{ - toml::table{ - { R"(k)"sv, R"(a)"sv }, - }, - R"(b)"sv, - 1, - } }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("array-nested-double") - { - parsing_should_succeed(FILE_LINE_ARGS, - array_nested_double, - [](toml::table&& tbl) // array-nested-double - { - const auto expected = toml::table{ - { R"(nest)"sv, - toml::array{ - toml::inserter{ toml::array{ - toml::array{ - R"(a)"sv, - }, - toml::array{ - 1, - 2, - toml::array{ - 3, - }, - }, - } }, - } }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("array-nested-inline-table") - { - parsing_should_succeed(FILE_LINE_ARGS, - array_nested_inline_table, - [](toml::table&& tbl) // array-nested-inline-table - { - const auto expected = toml::table{ - { R"(a)"sv, - toml::array{ - toml::table{ - { R"(b)"sv, toml::table{} }, - }, - } }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("array-nested") - { - parsing_should_succeed(FILE_LINE_ARGS, - array_nested, - [](toml::table&& tbl) // array-nested - { - const auto expected = toml::table{ - { R"(nest)"sv, - toml::array{ - toml::array{ - R"(a)"sv, - }, - toml::array{ - R"(b)"sv, - }, - } }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("array-nospaces") - { - parsing_should_succeed(FILE_LINE_ARGS, - array_nospaces, - [](toml::table&& tbl) // array-nospaces - { - const auto expected = toml::table{ - { R"(ints)"sv, - toml::array{ - 1, - 2, - 3, - } }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("array-string-quote-comma-2") - { - parsing_should_succeed(FILE_LINE_ARGS, - array_string_quote_comma_2, - [](toml::table&& tbl) // array-string-quote-comma-2 - { - const auto expected = toml::table{ - { R"(title)"sv, - toml::array{ - R"( ", )"sv, - } }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("array-string-quote-comma") - { - parsing_should_succeed(FILE_LINE_ARGS, - array_string_quote_comma, - [](toml::table&& tbl) // array-string-quote-comma - { - const auto expected = toml::table{ - { R"(title)"sv, - toml::array{ - R"(Client: "XXXX", Job: XXXX)"sv, - R"(Code: XXXX)"sv, - } }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("array-string-with-comma-2") - { - parsing_should_succeed(FILE_LINE_ARGS, - array_string_with_comma_2, - [](toml::table&& tbl) // array-string-with-comma-2 - { - const auto expected = toml::table{ - { R"(title)"sv, - toml::array{ - R"(Client: XXXX, -Job: XXXX)"sv, - R"(Code: XXXX)"sv, - } }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("array-string-with-comma") - { - parsing_should_succeed(FILE_LINE_ARGS, - array_string_with_comma, - [](toml::table&& tbl) // array-string-with-comma - { - const auto expected = toml::table{ - { R"(title)"sv, - toml::array{ - R"(Client: XXXX, Job: XXXX)"sv, - R"(Code: XXXX)"sv, - } }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("array-strings") - { - parsing_should_succeed(FILE_LINE_ARGS, - array_strings, - [](toml::table&& tbl) // array-strings - { - const auto expected = toml::table{ - { R"(string_array)"sv, - toml::array{ - R"(all)"sv, - R"(strings)"sv, - R"(are the same)"sv, - R"(type)"sv, - } }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("array-table-array-string-backslash") - { - parsing_should_succeed(FILE_LINE_ARGS, - array_table_array_string_backslash, - [](toml::table&& tbl) // array-table-array-string-backslash - { - const auto expected = toml::table{ - { R"(foo)"sv, - toml::array{ - toml::table{ - { R"(bar)"sv, R"("{{baz}}")"sv }, - }, - } }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("bool-bool") - { - parsing_should_succeed(FILE_LINE_ARGS, - bool_bool, - [](toml::table&& tbl) // bool-bool - { - const auto expected = toml::table{ - { R"(f)"sv, false }, - { R"(t)"sv, true }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("comment-after-literal-no-ws") - { - parsing_should_succeed(FILE_LINE_ARGS, - comment_after_literal_no_ws, - [](toml::table&& tbl) // comment-after-literal-no-ws - { - const auto expected = toml::table{ - { R"(false)"sv, false }, - { R"(inf)"sv, std::numeric_limits::infinity() }, - { R"(nan)"sv, std::numeric_limits::quiet_NaN() }, - { R"(true)"sv, true }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("comment-at-eof") - { - parsing_should_succeed(FILE_LINE_ARGS, - comment_at_eof, - [](toml::table&& tbl) // comment-at-eof - { - const auto expected = toml::table{ - { R"(key)"sv, R"(value)"sv }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("comment-at-eof2") - { - parsing_should_succeed(FILE_LINE_ARGS, - comment_at_eof2, - [](toml::table&& tbl) // comment-at-eof2 - { - const auto expected = toml::table{ - { R"(key)"sv, R"(value)"sv }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("comment-everywhere") - { - parsing_should_succeed( - FILE_LINE_ARGS, - comment_everywhere, - [](toml::table&& tbl) // comment-everywhere - { - const auto expected = toml::table{ - { R"(group)"sv, - toml::table{ - { R"(answer)"sv, 42 }, - { R"(d)"sv, toml::date{ 1979, 5, 27 } }, - { R"(dt)"sv, toml::date_time{ { 1979, 5, 27 }, { 7, 32, 12 }, { -7, 0 } } }, - { R"(more)"sv, - toml::array{ - 42, - 42, - } }, - } }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("comment-noeol") - { - parsing_should_succeed(FILE_LINE_ARGS, - comment_noeol, - [](toml::table&& tbl) // comment-noeol - { - const auto expected = toml::table{}; - REQUIRE(tbl == expected); - }); - } - - SECTION("comment-tricky") - { - parsing_should_succeed(FILE_LINE_ARGS, - comment_tricky, - [](toml::table&& tbl) // comment-tricky - { - const auto expected = toml::table{ - { R"(hash#tag)"sv, - toml::table{ - { R"(#!)"sv, R"(hash bang)"sv }, - { R"(arr3)"sv, - toml::array{ - R"(#)"sv, - R"(#)"sv, - R"(###)"sv, - } }, - { R"(arr4)"sv, - toml::array{ - 1, - 2, - 3, - 4, - } }, - { R"(arr5)"sv, - toml::array{ - toml::inserter{ toml::array{ - toml::inserter{ toml::array{ - toml::inserter{ toml::array{ - toml::inserter{ toml::array{ - R"(#)"sv, - } }, - } }, - } }, - } }, - } }, - { R"(tbl1)"sv, - toml::table{ - { R"(#)"sv, R"(}#)"sv }, - } }, - } }, - { R"(section)"sv, - toml::table{ - { R"(8)"sv, R"(eight)"sv }, - { R"(eleven)"sv, 11.1 }, - { R"(five)"sv, 5.5 }, - { R"(four)"sv, R"(# no comment -# nor this -#also not comment)"sv }, - { R"(one)"sv, R"(11)"sv }, - { R"(six)"sv, 6 }, - { R"(ten)"sv, 1000.0 }, - { R"(three)"sv, R"(#)"sv }, - { R"(two)"sv, R"(22#)"sv }, - } }, - }; - REQUIRE(tbl == expected); - }); - } - -#if UNICODE_LITERALS_OK - - SECTION("comment-nonascii") - { - parsing_should_succeed(FILE_LINE_ARGS, - comment_nonascii, - [](toml::table&& tbl) // comment-nonascii - { - const auto expected = toml::table{}; - REQUIRE(tbl == expected); - }); - } - -#endif // UNICODE_LITERALS_OK - - SECTION("datetime-datetime") - { - parsing_should_succeed(FILE_LINE_ARGS, - datetime_datetime, - [](toml::table&& tbl) // datetime-datetime - { - const auto expected = toml::table{ - { R"(lower)"sv, toml::date_time{ { 1987, 7, 5 }, { 17, 45 }, { 0, 0 } } }, - { R"(space)"sv, toml::date_time{ { 1987, 7, 5 }, { 17, 45 }, { 0, 0 } } }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("datetime-local-date") - { - parsing_should_succeed(FILE_LINE_ARGS, - datetime_local_date, - [](toml::table&& tbl) // datetime-local-date - { - const auto expected = toml::table{ - { R"(bestdayever)"sv, toml::date{ 1987, 7, 5 } }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("datetime-local-time") - { - parsing_should_succeed(FILE_LINE_ARGS, - datetime_local_time, - [](toml::table&& tbl) // datetime-local-time - { - const auto expected = toml::table{ - { R"(besttimeever)"sv, toml::time{ 17, 45 } }, - { R"(milliseconds)"sv, toml::time{ 10, 32, 0, 555000000 } }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("datetime-local") - { - parsing_should_succeed(FILE_LINE_ARGS, - datetime_local, - [](toml::table&& tbl) // datetime-local - { - const auto expected = toml::table{ - { R"(local)"sv, toml::date_time{ { 1987, 7, 5 }, { 17, 45 } } }, - { R"(milli)"sv, toml::date_time{ { 1977, 12, 21 }, { 10, 32, 0, 555000000 } } }, - { R"(space)"sv, toml::date_time{ { 1987, 7, 5 }, { 17, 45 } } }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("datetime-milliseconds") - { - parsing_should_succeed( - FILE_LINE_ARGS, - datetime_milliseconds, - [](toml::table&& tbl) // datetime-milliseconds - { - const auto expected = toml::table{ - { R"(utc1)"sv, toml::date_time{ { 1987, 7, 5 }, { 17, 45, 56, 123000000 }, { 0, 0 } } }, - { R"(utc2)"sv, toml::date_time{ { 1987, 7, 5 }, { 17, 45, 56, 600000000 }, { 0, 0 } } }, - { R"(wita1)"sv, toml::date_time{ { 1987, 7, 5 }, { 17, 45, 56, 123000000 }, { 8, 0 } } }, - { R"(wita2)"sv, toml::date_time{ { 1987, 7, 5 }, { 17, 45, 56, 600000000 }, { 8, 0 } } }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("datetime-timezone") - { - parsing_should_succeed(FILE_LINE_ARGS, - datetime_timezone, - [](toml::table&& tbl) // datetime-timezone - { - const auto expected = toml::table{ - { R"(nzdt)"sv, toml::date_time{ { 1987, 7, 5 }, { 17, 45, 56 }, { 13, 0 } } }, - { R"(nzst)"sv, toml::date_time{ { 1987, 7, 5 }, { 17, 45, 56 }, { 12, 0 } } }, - { R"(pdt)"sv, toml::date_time{ { 1987, 7, 5 }, { 17, 45, 56 }, { -5, 0 } } }, - { R"(utc)"sv, toml::date_time{ { 1987, 7, 5 }, { 17, 45, 56 }, { 0, 0 } } }, - }; - REQUIRE(tbl == expected); - }); - } - -#if TOML_LANG_UNRELEASED - - SECTION("datetime-no-seconds") - { - parsing_should_succeed( - FILE_LINE_ARGS, - datetime_no_seconds, - [](toml::table&& tbl) // datetime-no-seconds - { - const auto expected = toml::table{ - { R"(without-seconds-1)"sv, toml::time{ 13, 37 } }, - { R"(without-seconds-2)"sv, toml::date_time{ { 1979, 5, 27 }, { 7, 32 }, { 0, 0 } } }, - { R"(without-seconds-3)"sv, toml::date_time{ { 1979, 5, 27 }, { 7, 32 }, { -7, 0 } } }, - { R"(without-seconds-4)"sv, toml::date_time{ { 1979, 5, 27 }, { 7, 32 } } }, - }; - REQUIRE(tbl == expected); - }); - } - -#endif // TOML_LANG_UNRELEASED - - SECTION("empty-file") - { - parsing_should_succeed(FILE_LINE_ARGS, - empty_file, - [](toml::table&& tbl) // empty-file - { - const auto expected = toml::table{}; - REQUIRE(tbl == expected); - }); - } - - SECTION("example") - { - parsing_should_succeed( - FILE_LINE_ARGS, - example, - [](toml::table&& tbl) // example - { - const auto expected = toml::table{ - { R"(best-day-ever)"sv, toml::date_time{ { 1987, 7, 5 }, { 17, 45 }, { 0, 0 } } }, - { R"(numtheory)"sv, - toml::table{ - { R"(boring)"sv, false }, - { R"(perfection)"sv, - toml::array{ - 6, - 28, - 496, - } }, - } }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("float-exponent") - { - parsing_should_succeed(FILE_LINE_ARGS, - float_exponent, - [](toml::table&& tbl) // float-exponent - { - const auto expected = toml::table{ - { R"(lower)"sv, 300.0 }, { R"(minustenth)"sv, -0.1 }, - { R"(neg)"sv, 0.03 }, { R"(pointlower)"sv, 310.0 }, - { R"(pointupper)"sv, 310.0 }, { R"(pos)"sv, 300.0 }, - { R"(upper)"sv, 300.0 }, { R"(zero)"sv, 3.0 }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("float-float") - { - parsing_should_succeed(FILE_LINE_ARGS, - float_float, - [](toml::table&& tbl) // float-float - { - const auto expected = toml::table{ - { R"(negpi)"sv, -3.14 }, - { R"(pi)"sv, 3.14 }, - { R"(pospi)"sv, 3.14 }, - { R"(zero-intpart)"sv, 0.123 }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("float-inf-and-nan") - { - parsing_should_succeed(FILE_LINE_ARGS, - float_inf_and_nan, - [](toml::table&& tbl) // float-inf-and-nan - { - const auto expected = toml::table{ - { R"(infinity)"sv, std::numeric_limits::infinity() }, - { R"(infinity_neg)"sv, -std::numeric_limits::infinity() }, - { R"(infinity_plus)"sv, std::numeric_limits::infinity() }, - { R"(nan)"sv, std::numeric_limits::quiet_NaN() }, - { R"(nan_neg)"sv, std::numeric_limits::quiet_NaN() }, - { R"(nan_plus)"sv, std::numeric_limits::quiet_NaN() }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("float-long") - { - parsing_should_succeed(FILE_LINE_ARGS, - float_long, - [](toml::table&& tbl) // float-long - { - const auto expected = toml::table{ - { R"(longpi)"sv, 3.141592653589793 }, - { R"(neglongpi)"sv, -3.141592653589793 }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("float-underscore") - { - parsing_should_succeed(FILE_LINE_ARGS, - float_underscore, - [](toml::table&& tbl) // float-underscore - { - const auto expected = toml::table{ - { R"(after)"sv, 3141.5927 }, - { R"(before)"sv, 3141.5927 }, - { R"(exponent)"sv, 300000000000000.0 }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("float-zero") - { - parsing_should_succeed(FILE_LINE_ARGS, - float_zero, - [](toml::table&& tbl) // float-zero - { - const auto expected = toml::table{ - { R"(exponent)"sv, 0.0 }, - { R"(exponent-signed-neg)"sv, -0.0 }, - { R"(exponent-signed-pos)"sv, 0.0 }, - { R"(exponent-two-0)"sv, 0.0 }, - { R"(signed-neg)"sv, -0.0 }, - { R"(signed-pos)"sv, 0.0 }, - { R"(zero)"sv, 0.0 }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("implicit-and-explicit-after") - { - parsing_should_succeed(FILE_LINE_ARGS, - implicit_and_explicit_after, - [](toml::table&& tbl) // implicit-and-explicit-after - { - const auto expected = toml::table{ - { R"(a)"sv, - toml::table{ - { R"(b)"sv, - toml::table{ - { R"(c)"sv, - toml::table{ - { R"(answer)"sv, 42 }, - } }, - } }, - { R"(better)"sv, 43 }, - } }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("implicit-and-explicit-before") - { - parsing_should_succeed(FILE_LINE_ARGS, - implicit_and_explicit_before, - [](toml::table&& tbl) // implicit-and-explicit-before - { - const auto expected = toml::table{ - { R"(a)"sv, - toml::table{ - { R"(b)"sv, - toml::table{ - { R"(c)"sv, - toml::table{ - { R"(answer)"sv, 42 }, - } }, - } }, - { R"(better)"sv, 43 }, - } }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("implicit-groups") - { - parsing_should_succeed(FILE_LINE_ARGS, - implicit_groups, - [](toml::table&& tbl) // implicit-groups - { - const auto expected = toml::table{ - { R"(a)"sv, - toml::table{ - { R"(b)"sv, - toml::table{ - { R"(c)"sv, - toml::table{ - { R"(answer)"sv, 42 }, - } }, - } }, - } }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("inline-table-array") - { - parsing_should_succeed(FILE_LINE_ARGS, - inline_table_array, - [](toml::table&& tbl) // inline-table-array - { - const auto expected = toml::table{ - { R"(people)"sv, - toml::array{ - toml::table{ - { R"(first_name)"sv, R"(Bruce)"sv }, - { R"(last_name)"sv, R"(Springsteen)"sv }, - }, - toml::table{ - { R"(first_name)"sv, R"(Eric)"sv }, - { R"(last_name)"sv, R"(Clapton)"sv }, - }, - toml::table{ - { R"(first_name)"sv, R"(Bob)"sv }, - { R"(last_name)"sv, R"(Seger)"sv }, - }, - } }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("inline-table-bool") - { - parsing_should_succeed(FILE_LINE_ARGS, - inline_table_bool, - [](toml::table&& tbl) // inline-table-bool - { - const auto expected = toml::table{ - { R"(a)"sv, - toml::table{ - { R"(a)"sv, true }, - { R"(b)"sv, false }, - } }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("inline-table-empty") - { - parsing_should_succeed(FILE_LINE_ARGS, - inline_table_empty, - [](toml::table&& tbl) // inline-table-empty - { - const auto expected = toml::table{ - { R"(empty1)"sv, toml::table{} }, - { R"(empty2)"sv, toml::table{} }, - { R"(empty_in_array)"sv, - toml::array{ - toml::table{ - { R"(not_empty)"sv, 1 }, - }, - toml::table{}, - } }, - { R"(empty_in_array2)"sv, - toml::array{ - toml::table{}, - toml::table{ - { R"(not_empty)"sv, 1 }, - }, - } }, - { R"(many_empty)"sv, - toml::array{ - toml::table{}, - toml::table{}, - toml::table{}, - } }, - { R"(nested_empty)"sv, - toml::table{ - { R"(empty)"sv, toml::table{} }, - } }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("inline-table-end-in-bool") - { - parsing_should_succeed(FILE_LINE_ARGS, - inline_table_end_in_bool, - [](toml::table&& tbl) // inline-table-end-in-bool - { - const auto expected = toml::table{ - { R"(black)"sv, - toml::table{ - { R"(allow_prereleases)"sv, true }, - { R"(python)"sv, R"(>3.6)"sv }, - { R"(version)"sv, R"(>=18.9b0)"sv }, - } }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("inline-table-inline-table") - { - parsing_should_succeed(FILE_LINE_ARGS, - inline_table_inline_table, - [](toml::table&& tbl) // inline-table-inline-table - { - const auto expected = toml::table{ - { R"(name)"sv, - toml::table{ - { R"(first)"sv, R"(Tom)"sv }, - { R"(last)"sv, R"(Preston-Werner)"sv }, - } }, - { R"(point)"sv, - toml::table{ - { R"(x)"sv, 1 }, - { R"(y)"sv, 2 }, - } }, - { R"(simple)"sv, - toml::table{ - { R"(a)"sv, 1 }, - } }, - { R"(str-key)"sv, - toml::table{ - { R"(a)"sv, 1 }, - } }, - { R"(table-array)"sv, - toml::array{ - toml::table{ - { R"(a)"sv, 1 }, - }, - toml::table{ - { R"(b)"sv, 2 }, - }, - } }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("inline-table-multiline") - { - parsing_should_succeed(FILE_LINE_ARGS, - inline_table_multiline, - [](toml::table&& tbl) // inline-table-multiline - { - const auto expected = toml::table{ - { R"(tbl_multiline)"sv, - toml::table{ - { R"(a)"sv, 1 }, - { R"(b)"sv, R"(multiline -)"sv }, - { R"(c)"sv, R"(and yet -another line)"sv }, - { R"(d)"sv, 4 }, - } }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("inline-table-nest") - { - parsing_should_succeed(FILE_LINE_ARGS, - inline_table_nest, - [](toml::table&& tbl) // inline-table-nest - { - const auto expected = toml::table{ - { R"(arr_arr_tbl_empty)"sv, - toml::array{ - toml::inserter{ toml::array{ - toml::table{}, - } }, - } }, - { R"(arr_arr_tbl_val)"sv, - toml::array{ - toml::inserter{ toml::array{ - toml::table{ - { R"(one)"sv, 1 }, - }, - } }, - } }, - { R"(arr_arr_tbls)"sv, - toml::array{ - toml::inserter{ toml::array{ - toml::table{ - { R"(one)"sv, 1 }, - }, - toml::table{ - { R"(two)"sv, 2 }, - }, - } }, - } }, - { R"(arr_tbl_tbl)"sv, - toml::array{ - toml::table{ - { R"(tbl)"sv, - toml::table{ - { R"(one)"sv, 1 }, - } }, - }, - } }, - { R"(tbl_arr_tbl)"sv, - toml::table{ - { R"(arr_tbl)"sv, - toml::array{ - toml::table{ - { R"(one)"sv, 1 }, - }, - } }, - } }, - { R"(tbl_tbl_empty)"sv, - toml::table{ - { R"(tbl_0)"sv, toml::table{} }, - } }, - { R"(tbl_tbl_val)"sv, - toml::table{ - { R"(tbl_1)"sv, - toml::table{ - { R"(one)"sv, 1 }, - } }, - } }, - }; - REQUIRE(tbl == expected); - }); - } - -#if !TOML_MSVC - - SECTION("inline-table-key-dotted") - { - parsing_should_succeed(FILE_LINE_ARGS, - inline_table_key_dotted, - [](toml::table&& tbl) // inline-table-key-dotted - { - const auto expected = toml::table{ - { R"(a)"sv, - toml::table{ - { R"(a)"sv, - toml::table{ - { R"(b)"sv, 1 }, - } }, - } }, - { R"(arr)"sv, - toml::array{ - toml::table{ - { R"(T)"sv, - toml::table{ - { R"(a)"sv, - toml::table{ - { R"(b)"sv, 1 }, - } }, - } }, - { R"(t)"sv, - toml::table{ - { R"(a)"sv, - toml::table{ - { R"(b)"sv, 1 }, - } }, - } }, - }, - toml::table{ - { R"(T)"sv, - toml::table{ - { R"(a)"sv, - toml::table{ - { R"(b)"sv, 2 }, - } }, - } }, - { R"(t)"sv, - toml::table{ - { R"(a)"sv, - toml::table{ - { R"(b)"sv, 2 }, - } }, - } }, - }, - } }, - { R"(b)"sv, - toml::table{ - { R"(a)"sv, - toml::table{ - { R"(b)"sv, 1 }, - } }, - } }, - { R"(c)"sv, - toml::table{ - { R"(a)"sv, - toml::table{ - { R"(b)"sv, 1 }, - } }, - } }, - { R"(d)"sv, - toml::table{ - { R"(a)"sv, - toml::table{ - { R"(b)"sv, 1 }, - } }, - } }, - { R"(e)"sv, - toml::table{ - { R"(a)"sv, - toml::table{ - { R"(b)"sv, 1 }, - } }, - } }, - { R"(inline)"sv, - toml::table{ - { R"(a)"sv, - toml::table{ - { R"(b)"sv, 42 }, - } }, - } }, - { R"(many)"sv, - toml::table{ - { R"(dots)"sv, - toml::table{ - { R"(here)"sv, - toml::table{ - { R"(dot)"sv, - toml::table{ - { R"(dot)"sv, - toml::table{ - { R"(dot)"sv, - toml::table{ - { R"(a)"sv, - toml::table{ - { R"(b)"sv, - toml::table{ - { R"(c)"sv, 1 }, - { R"(d)"sv, 2 }, - } }, - } }, - } }, - } }, - } }, - } }, - } }, - } }, - { R"(tbl)"sv, - toml::table{ - { R"(a)"sv, - toml::table{ - { R"(b)"sv, - toml::table{ - { R"(c)"sv, - toml::table{ - { R"(d)"sv, - toml::table{ - { R"(e)"sv, 1 }, - } }, - } }, - } }, - } }, - { R"(x)"sv, - toml::table{ - { R"(a)"sv, - toml::table{ - { R"(b)"sv, - toml::table{ - { R"(c)"sv, - toml::table{ - { R"(d)"sv, - toml::table{ - { R"(e)"sv, 1 }, - } }, - } }, - } }, - } }, - } }, - } }, - }; - REQUIRE(tbl == expected); - }); - } - -#endif // !TOML_MSVC - -#if TOML_LANG_UNRELEASED - - SECTION("inline-table-newline") - { - parsing_should_succeed(FILE_LINE_ARGS, - inline_table_newline, - [](toml::table&& tbl) // inline-table-newline - { - const auto expected = toml::table{ - { R"(tbl-1)"sv, - toml::table{ - { R"(1)"sv, 2 }, - { R"(arr)"sv, - toml::array{ - 1, - 2, - 3, - } }, - { R"(hello)"sv, R"(world)"sv }, - { R"(tbl)"sv, - toml::table{ - { R"(k)"sv, 1 }, - } }, - } }, - { R"(tbl-2)"sv, - toml::table{ - { R"(k)"sv, R"( Hello - )"sv }, - } }, - { R"(trailing-comma-1)"sv, - toml::table{ - { R"(c)"sv, 1 }, - } }, - { R"(trailing-comma-2)"sv, - toml::table{ - { R"(c)"sv, 1 }, - } }, - }; - REQUIRE(tbl == expected); - }); - } - -#endif // TOML_LANG_UNRELEASED - - SECTION("integer-integer") - { - parsing_should_succeed(FILE_LINE_ARGS, - integer_integer, - [](toml::table&& tbl) // integer-integer - { - const auto expected = toml::table{ - { R"(answer)"sv, 42 }, - { R"(neganswer)"sv, -42 }, - { R"(posanswer)"sv, 42 }, - { R"(zero)"sv, 0 }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("integer-literals") - { - parsing_should_succeed( - FILE_LINE_ARGS, - integer_literals, - [](toml::table&& tbl) // integer-literals - { - const auto expected = toml::table{ - { R"(bin1)"sv, 214 }, { R"(bin2)"sv, 5 }, { R"(hex1)"sv, 3735928559 }, - { R"(hex2)"sv, 3735928559 }, { R"(hex3)"sv, 3735928559 }, { R"(hex4)"sv, 2439 }, - { R"(oct1)"sv, 342391 }, { R"(oct2)"sv, 493 }, { R"(oct3)"sv, 501 }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("integer-long") - { - parsing_should_succeed(FILE_LINE_ARGS, - integer_long, - [](toml::table&& tbl) // integer-long - { - const auto expected = toml::table{ - { R"(int64-max)"sv, std::numeric_limits::max() }, - { R"(int64-max-neg)"sv, std::numeric_limits::min() }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("integer-underscore") - { - parsing_should_succeed(FILE_LINE_ARGS, - integer_underscore, - [](toml::table&& tbl) // integer-underscore - { - const auto expected = toml::table{ - { R"(kilo)"sv, 1000 }, - { R"(x)"sv, 1111 }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("integer-zero") - { - parsing_should_succeed(FILE_LINE_ARGS, - integer_zero, - [](toml::table&& tbl) // integer-zero - { - const auto expected = toml::table{ - { R"(a2)"sv, 0 }, { R"(a3)"sv, 0 }, { R"(b1)"sv, 0 }, { R"(b2)"sv, 0 }, - { R"(b3)"sv, 0 }, { R"(d1)"sv, 0 }, { R"(d2)"sv, 0 }, { R"(d3)"sv, 0 }, - { R"(h1)"sv, 0 }, { R"(h2)"sv, 0 }, { R"(h3)"sv, 0 }, { R"(o1)"sv, 0 }, - }; - REQUIRE(tbl == expected); - }); - } - -#if UNICODE_LITERALS_OK - - SECTION("key-case-sensitive") - { - parsing_should_succeed(FILE_LINE_ARGS, - key_case_sensitive, - [](toml::table&& tbl) // key-case-sensitive - { - const auto expected = toml::table{ - { R"(Section)"sv, - toml::table{ - { R"(M)"sv, R"(latin letter M)"sv }, - { R"(name)"sv, R"(different section!!)"sv }, - { R"(Μ)"sv, R"(greek capital letter MU)"sv }, - { R"(μ)"sv, R"(greek small letter mu)"sv }, - } }, - { R"(sectioN)"sv, R"(NN)"sv }, - { R"(section)"sv, - toml::table{ - { R"(NAME)"sv, R"(upper)"sv }, - { R"(Name)"sv, R"(capitalized)"sv }, - { R"(name)"sv, R"(lower)"sv }, - } }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("key-escapes") - { - parsing_should_succeed(FILE_LINE_ARGS, - key_escapes, - [](toml::table&& tbl) // key-escapes - { - const auto expected = toml::table{ - { R"( -)"sv, - R"(newline)"sv }, - { R"(")"sv, R"(just a quote)"sv }, - { R"("quoted")"sv, - toml::table{ - { R"(quote)"sv, true }, - } }, - { R"(a.b)"sv, - toml::table{ - { R"(À)"sv, toml::table{} }, - } }, - { "backsp\x08\x08"sv, toml::table{} }, - { R"(À)"sv, R"(latin capital letter A with grave)"sv }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("key-quoted-unicode") - { - parsing_should_succeed(FILE_LINE_ARGS, - key_quoted_unicode, - [](toml::table&& tbl) // key-quoted-unicode - { - const auto expected = toml::table{ - { "\x00"sv, R"(null)"sv }, - { R"(\u0000)"sv, R"(different key)"sv }, - { "\x08 \f A \x7F € ÿ ퟿  ￿ 𐀀 􏿿"sv, R"(escaped key)"sv }, - { R"(~ € ÿ ퟿  ￿ 𐀀 􏿿)"sv, R"(basic key)"sv }, - { R"(l ~ € ÿ ퟿  ￿ 𐀀 􏿿)"sv, R"(literal key)"sv }, - }; - REQUIRE(tbl == expected); - }); - } - -#endif // UNICODE_LITERALS_OK - - SECTION("key-dotted-empty") - { - parsing_should_succeed(FILE_LINE_ARGS, - key_dotted_empty, - [](toml::table&& tbl) // key-dotted-empty - { - const auto expected = toml::table{ - { ""sv, - toml::table{ - { R"(x)"sv, R"(empty.x)"sv }, - } }, - { R"(a)"sv, - toml::table{ - { ""sv, - toml::table{ - { ""sv, R"(empty.empty)"sv }, - } }, - } }, - { R"(x)"sv, - toml::table{ - { ""sv, R"(x.empty)"sv }, - } }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("key-dotted") - { - parsing_should_succeed(FILE_LINE_ARGS, - key_dotted, - [](toml::table&& tbl) // key-dotted - { - const auto expected = toml::table{ - { R"(a)"sv, - toml::table{ - { R"(few)"sv, - toml::table{ - { R"(dots)"sv, - toml::table{ - { R"(polka)"sv, - toml::table{ - { R"(dance-with)"sv, R"(Dot)"sv }, - { R"(dot)"sv, R"(again?)"sv }, - } }, - } }, - } }, - } }, - { R"(arr)"sv, - toml::array{ - toml::table{ - { R"(a)"sv, - toml::table{ - { R"(b)"sv, - toml::table{ - { R"(c)"sv, 1 }, - { R"(d)"sv, 2 }, - } }, - } }, - }, - toml::table{ - { R"(a)"sv, - toml::table{ - { R"(b)"sv, - toml::table{ - { R"(c)"sv, 3 }, - { R"(d)"sv, 4 }, - } }, - } }, - }, - } }, - { R"(count)"sv, - toml::table{ - { R"(a)"sv, 1 }, - { R"(b)"sv, 2 }, - { R"(c)"sv, 3 }, - { R"(d)"sv, 4 }, - { R"(e)"sv, 5 }, - { R"(f)"sv, 6 }, - { R"(g)"sv, 7 }, - { R"(h)"sv, 8 }, - { R"(i)"sv, 9 }, - { R"(j)"sv, 10 }, - { R"(k)"sv, 11 }, - { R"(l)"sv, 12 }, - } }, - { R"(many)"sv, - toml::table{ - { R"(dots)"sv, - toml::table{ - { R"(here)"sv, - toml::table{ - { R"(dot)"sv, - toml::table{ - { R"(dot)"sv, - toml::table{ - { R"(dot)"sv, 42 }, - } }, - } }, - } }, - } }, - } }, - { R"(name)"sv, - toml::table{ - { R"(first)"sv, R"(Arthur)"sv }, - { R"(last)"sv, R"(Dent)"sv }, - } }, - { R"(tbl)"sv, - toml::table{ - { R"(a)"sv, - toml::table{ - { R"(b)"sv, - toml::table{ - { R"(c)"sv, 42.666 }, - } }, - } }, - } }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("key-empty") - { - parsing_should_succeed(FILE_LINE_ARGS, - key_empty, - [](toml::table&& tbl) // key-empty - { - const auto expected = toml::table{ - { ""sv, R"(blank)"sv }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("key-equals-nospace") - { - parsing_should_succeed(FILE_LINE_ARGS, - key_equals_nospace, - [](toml::table&& tbl) // key-equals-nospace - { - const auto expected = toml::table{ - { R"(answer)"sv, 42 }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("key-numeric-dotted") - { - parsing_should_succeed(FILE_LINE_ARGS, - key_numeric_dotted, - [](toml::table&& tbl) // key-numeric-dotted - { - const auto expected = toml::table{ - { R"(1)"sv, - toml::table{ - { R"(2)"sv, 3 }, - } }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("key-numeric") - { - parsing_should_succeed(FILE_LINE_ARGS, - key_numeric, - [](toml::table&& tbl) // key-numeric - { - const auto expected = toml::table{ - { R"(1)"sv, 1 }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("key-quoted-dots") - { - parsing_should_succeed(FILE_LINE_ARGS, - key_quoted_dots, - [](toml::table&& tbl) // key-quoted-dots - { - const auto expected = toml::table{ - { R"(plain)"sv, 1 }, - { R"(plain_table)"sv, - toml::table{ - { R"(plain)"sv, 3 }, - { R"(with.dot)"sv, 4 }, - } }, - { R"(table)"sv, - toml::table{ - { R"(withdot)"sv, - toml::table{ - { R"(key.with.dots)"sv, 6 }, - { R"(plain)"sv, 5 }, - } }, - } }, - { R"(with.dot)"sv, 2 }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("key-space") - { - parsing_should_succeed(FILE_LINE_ARGS, - key_space, - [](toml::table&& tbl) // key-space - { - const auto expected = toml::table{ - { R"( c d )"sv, 2 }, - { R"( tbl )"sv, - toml::table{ - { R"( tab tab )"sv, R"(tab)"sv }, - } }, - { R"(a b)"sv, 1 }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("key-special-chars") - { - parsing_should_succeed(FILE_LINE_ARGS, - key_special_chars, - [](toml::table&& tbl) // key-special-chars - { - const auto expected = toml::table{ - { R"(=~!@$^&*()_+-`1234567890[]|/?><.,;:'=)"sv, 1 }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("key-special-word") - { - parsing_should_succeed(FILE_LINE_ARGS, - key_special_word, - [](toml::table&& tbl) // key-special-word - { - const auto expected = toml::table{ - { R"(false)"sv, false }, - { R"(inf)"sv, 100000000 }, - { R"(nan)"sv, R"(ceci n'est pas un nombre)"sv }, - { R"(true)"sv, 1 }, - }; - REQUIRE(tbl == expected); - }); - } - -#if TOML_LANG_UNRELEASED && UNICODE_LITERALS_OK - - SECTION("key-unicode") - { - parsing_should_succeed(FILE_LINE_ARGS, - key_unicode, - [](toml::table&& tbl) // key-unicode - { - const auto expected = toml::table{ - { R"(a‍b)"sv, R"(zwj)"sv }, - { R"(tiếng-Việt)"sv, - toml::array{ - toml::table{ - { R"(tiəŋ˧˦)"sv, - toml::table{ - { R"(viət̚˧˨ʔ)"sv, R"(north)"sv }, - } }, - }, - toml::table{ - { R"(tiəŋ˦˧˥)"sv, - toml::table{ - { R"(viək̚˨˩ʔ)"sv, R"(central)"sv }, - } }, - }, - } }, - { R"(ÅÅ)"sv, R"(U+00C5 U+0041 U+030A)"sv }, - { R"(€)"sv, R"(Euro)"sv }, - { R"(中文)"sv, - toml::table{ - { R"(中文)"sv, - toml::table{ - { R"(中文)"sv, R"(Chinese language)"sv }, - } }, - } }, - { R"(😂)"sv, R"(rofl)"sv }, - }; - REQUIRE(tbl == expected); - }); - } - -#endif // TOML_LANG_UNRELEASED && UNICODE_LITERALS_OK - - SECTION("newline-crlf") - { - parsing_should_succeed(FILE_LINE_ARGS, - newline_crlf, - [](toml::table&& tbl) // newline-crlf - { - const auto expected = toml::table{ - { R"(newline)"sv, R"(crlf)"sv }, - { R"(os)"sv, R"(DOS)"sv }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("newline-lf") - { - parsing_should_succeed(FILE_LINE_ARGS, - newline_lf, - [](toml::table&& tbl) // newline-lf - { - const auto expected = toml::table{ - { R"(newline)"sv, R"(lf)"sv }, - { R"(os)"sv, R"(unix)"sv }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-array-0") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_array_0, - [](toml::table&& tbl) // spec-array-0 - { - const auto expected = toml::table{ - { R"(colors)"sv, - toml::array{ - R"(red)"sv, - R"(yellow)"sv, - R"(green)"sv, - } }, - { R"(contributors)"sv, - toml::array{ - R"(Foo Bar )"sv, - toml::table{ - { R"(email)"sv, R"(bazqux@example.com)"sv }, - { R"(name)"sv, R"(Baz Qux)"sv }, - { R"(url)"sv, R"(https://example.com/bazqux)"sv }, - }, - } }, - { R"(integers)"sv, - toml::array{ - 1, - 2, - 3, - } }, - { R"(nested_arrays_of_ints)"sv, - toml::array{ - toml::array{ - 1, - 2, - }, - toml::array{ - 3, - 4, - 5, - }, - } }, - { R"(nested_mixed_array)"sv, - toml::array{ - toml::array{ - 1, - 2, - }, - toml::array{ - R"(a)"sv, - R"(b)"sv, - R"(c)"sv, - }, - } }, - { R"(numbers)"sv, - toml::array{ - 0.1, - 0.2, - 0.5, - 1, - 2, - 5, - } }, - { R"(string_array)"sv, - toml::array{ - R"(all)"sv, - R"(strings)"sv, - R"(are the same)"sv, - R"(type)"sv, - } }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-array-1") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_array_1, - [](toml::table&& tbl) // spec-array-1 - { - const auto expected = toml::table{ - { R"(integers2)"sv, - toml::array{ - 1, - 2, - 3, - } }, - { R"(integers3)"sv, - toml::array{ - 1, - 2, - } }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-array-of-tables-0") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_array_of_tables_0, - [](toml::table&& tbl) // spec-array-of-tables-0 - { - const auto expected = toml::table{ - { R"(products)"sv, - toml::array{ - toml::table{ - { R"(name)"sv, R"(Hammer)"sv }, - { R"(sku)"sv, 738594937 }, - }, - toml::table{}, - toml::table{ - { R"(color)"sv, R"(gray)"sv }, - { R"(name)"sv, R"(Nail)"sv }, - { R"(sku)"sv, 284758393 }, - }, - } }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-array-of-tables-1") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_array_of_tables_1, - [](toml::table&& tbl) // spec-array-of-tables-1 - { - const auto expected = toml::table{ - { R"(fruits)"sv, - toml::array{ - toml::table{ - { R"(name)"sv, R"(apple)"sv }, - { R"(physical)"sv, - toml::table{ - { R"(color)"sv, R"(red)"sv }, - { R"(shape)"sv, R"(round)"sv }, - } }, - { R"(varieties)"sv, - toml::array{ - toml::table{ - { R"(name)"sv, R"(red delicious)"sv }, - }, - toml::table{ - { R"(name)"sv, R"(granny smith)"sv }, - }, - } }, - }, - toml::table{ - { R"(name)"sv, R"(banana)"sv }, - { R"(varieties)"sv, - toml::array{ - toml::table{ - { R"(name)"sv, R"(plantain)"sv }, - }, - } }, - }, - } }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-array-of-tables-2") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_array_of_tables_2, - [](toml::table&& tbl) // spec-array-of-tables-2 - { - const auto expected = toml::table{ - { R"(points)"sv, - toml::array{ - toml::table{ - { R"(x)"sv, 1 }, - { R"(y)"sv, 2 }, - { R"(z)"sv, 3 }, - }, - toml::table{ - { R"(x)"sv, 7 }, - { R"(y)"sv, 8 }, - { R"(z)"sv, 9 }, - }, - toml::table{ - { R"(x)"sv, 2 }, - { R"(y)"sv, 4 }, - { R"(z)"sv, 8 }, - }, - } }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-boolean-0") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_boolean_0, - [](toml::table&& tbl) // spec-boolean-0 - { - const auto expected = toml::table{ - { R"(bool1)"sv, true }, - { R"(bool2)"sv, false }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-comment-0") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_comment_0, - [](toml::table&& tbl) // spec-comment-0 - { - const auto expected = toml::table{ - { R"(another)"sv, R"(# This is not a comment)"sv }, - { R"(key)"sv, R"(value)"sv }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-float-0") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_float_0, - [](toml::table&& tbl) // spec-float-0 - { - const auto expected = toml::table{ - { R"(flt1)"sv, 1.0 }, { R"(flt2)"sv, 3.1415 }, { R"(flt3)"sv, -0.01 }, - { R"(flt4)"sv, 5e+22 }, { R"(flt5)"sv, 1000000.0 }, { R"(flt6)"sv, -0.02 }, - { R"(flt7)"sv, 6.626e-34 }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-float-1") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_float_1, - [](toml::table&& tbl) // spec-float-1 - { - const auto expected = toml::table{ - { R"(flt8)"sv, 224617.445991228 }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-float-2") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_float_2, - [](toml::table&& tbl) // spec-float-2 - { - const auto expected = toml::table{ - { R"(sf1)"sv, std::numeric_limits::infinity() }, - { R"(sf2)"sv, std::numeric_limits::infinity() }, - { R"(sf3)"sv, -std::numeric_limits::infinity() }, - { R"(sf4)"sv, std::numeric_limits::quiet_NaN() }, - { R"(sf5)"sv, std::numeric_limits::quiet_NaN() }, - { R"(sf6)"sv, std::numeric_limits::quiet_NaN() }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-inline-table-0") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_inline_table_0, - [](toml::table&& tbl) // spec-inline-table-0 - { - const auto expected = toml::table{ - { R"(animal)"sv, - toml::table{ - { R"(type)"sv, - toml::table{ - { R"(name)"sv, R"(pug)"sv }, - } }, - } }, - { R"(name)"sv, - toml::table{ - { R"(first)"sv, R"(Tom)"sv }, - { R"(last)"sv, R"(Preston-Werner)"sv }, - } }, - { R"(point)"sv, - toml::table{ - { R"(x)"sv, 1 }, - { R"(y)"sv, 2 }, - } }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-inline-table-1") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_inline_table_1, - [](toml::table&& tbl) // spec-inline-table-1 - { - const auto expected = toml::table{ - { R"(animal)"sv, - toml::table{ - { R"(type)"sv, - toml::table{ - { R"(name)"sv, R"(pug)"sv }, - } }, - } }, - { R"(name)"sv, - toml::table{ - { R"(first)"sv, R"(Tom)"sv }, - { R"(last)"sv, R"(Preston-Werner)"sv }, - } }, - { R"(point)"sv, - toml::table{ - { R"(x)"sv, 1 }, - { R"(y)"sv, 2 }, - } }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-inline-table-2") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_inline_table_2, - [](toml::table&& tbl) // spec-inline-table-2 - { - const auto expected = toml::table{ - { R"(product)"sv, - toml::table{ - { R"(type)"sv, - toml::table{ - { R"(name)"sv, R"(Nail)"sv }, - } }, - } }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-inline-table-3") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_inline_table_3, - [](toml::table&& tbl) // spec-inline-table-3 - { - const auto expected = toml::table{ - { R"(product)"sv, - toml::table{ - { R"(type)"sv, - toml::table{ - { R"(name)"sv, R"(Nail)"sv }, - } }, - } }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-integer-0") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_integer_0, - [](toml::table&& tbl) // spec-integer-0 - { - const auto expected = toml::table{ - { R"(int1)"sv, 99 }, - { R"(int2)"sv, 42 }, - { R"(int3)"sv, 0 }, - { R"(int4)"sv, -17 }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-integer-1") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_integer_1, - [](toml::table&& tbl) // spec-integer-1 - { - const auto expected = toml::table{ - { R"(int5)"sv, 1000 }, - { R"(int6)"sv, 5349221 }, - { R"(int7)"sv, 5349221 }, - { R"(int8)"sv, 12345 }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-integer-2") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_integer_2, - [](toml::table&& tbl) // spec-integer-2 - { - const auto expected = toml::table{ - { R"(bin1)"sv, 214 }, { R"(hex1)"sv, 3735928559 }, - { R"(hex2)"sv, 3735928559 }, { R"(hex3)"sv, 3735928559 }, - { R"(oct1)"sv, 342391 }, { R"(oct2)"sv, 493 }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-key-value-pair-0") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_key_value_pair_0, - [](toml::table&& tbl) // spec-key-value-pair-0 - { - const auto expected = toml::table{ - { R"(key)"sv, R"(value)"sv }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-keys-0") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_keys_0, - [](toml::table&& tbl) // spec-keys-0 - { - const auto expected = toml::table{ - { R"(1234)"sv, R"(value)"sv }, - { R"(bare-key)"sv, R"(value)"sv }, - { R"(bare_key)"sv, R"(value)"sv }, - { R"(key)"sv, R"(value)"sv }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-keys-3") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_keys_3, - [](toml::table&& tbl) // spec-keys-3 - { - const auto expected = toml::table{ - { R"(name)"sv, R"(Orange)"sv }, - { R"(physical)"sv, - toml::table{ - { R"(color)"sv, R"(orange)"sv }, - { R"(shape)"sv, R"(round)"sv }, - } }, - { R"(site)"sv, - toml::table{ - { R"(google.com)"sv, true }, - } }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-keys-4") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_keys_4, - [](toml::table&& tbl) // spec-keys-4 - { - const auto expected = toml::table{ - { R"(fruit)"sv, - toml::table{ - { R"(color)"sv, R"(yellow)"sv }, - { R"(flavor)"sv, R"(banana)"sv }, - { R"(name)"sv, R"(banana)"sv }, - } }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-keys-5") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_keys_5, - [](toml::table&& tbl) // spec-keys-5 - { - const auto expected = toml::table{ - { R"(apple)"sv, - toml::table{ - { R"(color)"sv, R"(red)"sv }, - { R"(skin)"sv, R"(thin)"sv }, - { R"(type)"sv, R"(fruit)"sv }, - } }, - { R"(orange)"sv, - toml::table{ - { R"(color)"sv, R"(orange)"sv }, - { R"(skin)"sv, R"(thick)"sv }, - { R"(type)"sv, R"(fruit)"sv }, - } }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-keys-6") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_keys_6, - [](toml::table&& tbl) // spec-keys-6 - { - const auto expected = toml::table{ - { R"(apple)"sv, - toml::table{ - { R"(color)"sv, R"(red)"sv }, - { R"(skin)"sv, R"(thin)"sv }, - { R"(type)"sv, R"(fruit)"sv }, - } }, - { R"(orange)"sv, - toml::table{ - { R"(color)"sv, R"(orange)"sv }, - { R"(skin)"sv, R"(thick)"sv }, - { R"(type)"sv, R"(fruit)"sv }, - } }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-keys-7") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_keys_7, - [](toml::table&& tbl) // spec-keys-7 - { - const auto expected = toml::table{ - { R"(3)"sv, - toml::table{ - { R"(14159)"sv, R"(pi)"sv }, - } }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-local-date-0") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_local_date_0, - [](toml::table&& tbl) // spec-local-date-0 - { - const auto expected = toml::table{ - { R"(ld1)"sv, toml::date{ 1979, 5, 27 } }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-local-date-time-0") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_local_date_time_0, - [](toml::table&& tbl) // spec-local-date-time-0 - { - const auto expected = toml::table{ - { R"(ldt1)"sv, toml::date_time{ { 1979, 5, 27 }, { 7, 32 } } }, - { R"(ldt2)"sv, toml::date_time{ { 1979, 5, 27 }, { 0, 32, 0, 999999000 } } }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-local-time-0") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_local_time_0, - [](toml::table&& tbl) // spec-local-time-0 - { - const auto expected = toml::table{ - { R"(lt1)"sv, toml::time{ 7, 32 } }, - { R"(lt2)"sv, toml::time{ 0, 32, 0, 999999000 } }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-offset-date-time-0") - { - parsing_should_succeed( - FILE_LINE_ARGS, - spec_offset_date_time_0, - [](toml::table&& tbl) // spec-offset-date-time-0 - { - const auto expected = toml::table{ - { R"(odt1)"sv, toml::date_time{ { 1979, 5, 27 }, { 7, 32 }, { 0, 0 } } }, - { R"(odt2)"sv, toml::date_time{ { 1979, 5, 27 }, { 0, 32 }, { -7, 0 } } }, - { R"(odt3)"sv, toml::date_time{ { 1979, 5, 27 }, { 0, 32, 0, 999999000 }, { -7, 0 } } }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-offset-date-time-1") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_offset_date_time_1, - [](toml::table&& tbl) // spec-offset-date-time-1 - { - const auto expected = toml::table{ - { R"(odt4)"sv, toml::date_time{ { 1979, 5, 27 }, { 7, 32 }, { 0, 0 } } }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-string-1") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_string_1, - [](toml::table&& tbl) // spec-string-1 - { - const auto expected = toml::table{ - { R"(str1)"sv, R"(Roses are red -Violets are blue)"sv }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-string-2") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_string_2, - [](toml::table&& tbl) // spec-string-2 - { - const auto expected = toml::table{ - { R"(str2)"sv, R"(Roses are red -Violets are blue)"sv }, - { R"(str3)"sv, - "Roses are red\r\n" - "Violets are blue"sv }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-string-3") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_string_3, - [](toml::table&& tbl) // spec-string-3 - { - const auto expected = toml::table{ - { R"(str1)"sv, R"(The quick brown fox jumps over the lazy dog.)"sv }, - { R"(str2)"sv, R"(The quick brown fox jumps over the lazy dog.)"sv }, - { R"(str3)"sv, R"(The quick brown fox jumps over the lazy dog.)"sv }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-string-4") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_string_4, - [](toml::table&& tbl) // spec-string-4 - { - const auto expected = toml::table{ - { R"(str4)"sv, R"(Here are two quotation marks: "". Simple enough.)"sv }, - { R"(str5)"sv, R"(Here are three quotation marks: """.)"sv }, - { R"(str6)"sv, R"(Here are fifteen quotation marks: """"""""""""""".)"sv }, - { R"(str7)"sv, R"("This," she said, "is just a pointless statement.")"sv }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-string-5") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_string_5, - [](toml::table&& tbl) // spec-string-5 - { - const auto expected = toml::table{ - { R"(quoted)"sv, R"(Tom "Dubs" Preston-Werner)"sv }, - { R"(regex)"sv, R"(<\i\c*\s*>)"sv }, - { R"(winpath)"sv, R"(C:\Users\nodejs\templates)"sv }, - { R"(winpath2)"sv, R"(\\ServerX\admin$\system32\)"sv }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-string-6") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_string_6, - [](toml::table&& tbl) // spec-string-6 - { - const auto expected = toml::table{ - { R"(lines)"sv, R"(The first newline is -trimmed in raw strings. - All other whitespace - is preserved. -)"sv }, - { R"(regex2)"sv, R"(I [dw]on't need \d{2} apples)"sv }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-string-7") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_string_7, - [](toml::table&& tbl) // spec-string-7 - { - const auto expected = toml::table{ - { R"(apos15)"sv, R"(Here are fifteen apostrophes: ''''''''''''''')"sv }, - { R"(quot15)"sv, R"(Here are fifteen quotation marks: """"""""""""""")"sv }, - { R"(str)"sv, R"('That,' she said, 'is still pointless.')"sv }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-table-0") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_table_0, - [](toml::table&& tbl) // spec-table-0 - { - const auto expected = toml::table{ - { R"(table)"sv, toml::table{} }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-table-1") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_table_1, - [](toml::table&& tbl) // spec-table-1 - { - const auto expected = toml::table{ - { R"(table-1)"sv, - toml::table{ - { R"(key1)"sv, R"(some string)"sv }, - { R"(key2)"sv, 123 }, - } }, - { R"(table-2)"sv, - toml::table{ - { R"(key1)"sv, R"(another string)"sv }, - { R"(key2)"sv, 456 }, - } }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-table-2") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_table_2, - [](toml::table&& tbl) // spec-table-2 - { - const auto expected = toml::table{ - { R"(dog)"sv, - toml::table{ - { R"(tater.man)"sv, - toml::table{ - { R"(type)"sv, - toml::table{ - { R"(name)"sv, R"(pug)"sv }, - } }, - } }, - } }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-table-4") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_table_4, - [](toml::table&& tbl) // spec-table-4 - { - const auto expected = toml::table{ - { R"(x)"sv, - toml::table{ - { R"(y)"sv, - toml::table{ - { R"(z)"sv, - toml::table{ - { R"(w)"sv, toml::table{} }, - } }, - } }, - } }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-table-5") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_table_5, - [](toml::table&& tbl) // spec-table-5 - { - const auto expected = toml::table{ - { R"(animal)"sv, toml::table{} }, - { R"(fruit)"sv, - toml::table{ - { R"(apple)"sv, toml::table{} }, - { R"(orange)"sv, toml::table{} }, - } }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-table-6") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_table_6, - [](toml::table&& tbl) // spec-table-6 - { - const auto expected = toml::table{ - { R"(animal)"sv, toml::table{} }, - { R"(fruit)"sv, - toml::table{ - { R"(apple)"sv, toml::table{} }, - { R"(orange)"sv, toml::table{} }, - } }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-table-7") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_table_7, - [](toml::table&& tbl) // spec-table-7 - { - const auto expected = toml::table{ - { R"(breed)"sv, R"(pug)"sv }, - { R"(name)"sv, R"(Fido)"sv }, - { R"(owner)"sv, - toml::table{ - { R"(member_since)"sv, toml::date{ 1999, 8, 4 } }, - { R"(name)"sv, R"(Regina Dogman)"sv }, - } }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-table-8") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_table_8, - [](toml::table&& tbl) // spec-table-8 - { - const auto expected = toml::table{ - { R"(fruit)"sv, - toml::table{ - { R"(apple)"sv, - toml::table{ - { R"(color)"sv, R"(red)"sv }, - { R"(taste)"sv, - toml::table{ - { R"(sweet)"sv, true }, - } }, - } }, - } }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-table-9") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_table_9, - [](toml::table&& tbl) // spec-table-9 - { - const auto expected = toml::table{ - { R"(fruit)"sv, - toml::table{ - { R"(apple)"sv, - toml::table{ - { R"(color)"sv, R"(red)"sv }, - { R"(taste)"sv, - toml::table{ - { R"(sweet)"sv, true }, - } }, - { R"(texture)"sv, - toml::table{ - { R"(smooth)"sv, true }, - } }, - } }, - } }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-example-1-compact") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_example_1_compact, - [](toml::table&& tbl) // spec-example-1-compact - { - const auto expected = toml::table{ - { R"(clients)"sv, - toml::table{ - { R"(data)"sv, - toml::array{ - toml::array{ - R"(gamma)"sv, - R"(delta)"sv, - }, - toml::array{ - 1, - 2, - }, - } }, - { R"(hosts)"sv, - toml::array{ - R"(alpha)"sv, - R"(omega)"sv, - } }, - } }, - { R"(database)"sv, - toml::table{ - { R"(connection_max)"sv, 5000 }, - { R"(enabled)"sv, true }, - { R"(ports)"sv, - toml::array{ - 8001, - 8001, - 8002, - } }, - { R"(server)"sv, R"(192.168.1.1)"sv }, - } }, - { R"(owner)"sv, - toml::table{ - { R"(dob)"sv, toml::date_time{ { 1979, 5, 27 }, { 7, 32 }, { -8, 0 } } }, - { R"(name)"sv, R"(Lance Uppercut)"sv }, - } }, - { R"(servers)"sv, - toml::table{ - { R"(alpha)"sv, - toml::table{ - { R"(dc)"sv, R"(eqdc10)"sv }, - { R"(ip)"sv, R"(10.0.0.1)"sv }, - } }, - { R"(beta)"sv, - toml::table{ - { R"(dc)"sv, R"(eqdc10)"sv }, - { R"(ip)"sv, R"(10.0.0.2)"sv }, - } }, - } }, - { R"(title)"sv, R"(TOML Example)"sv }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-example-1") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_example_1, - [](toml::table&& tbl) // spec-example-1 - { - const auto expected = toml::table{ - { R"(clients)"sv, - toml::table{ - { R"(data)"sv, - toml::array{ - toml::array{ - R"(gamma)"sv, - R"(delta)"sv, - }, - toml::array{ - 1, - 2, - }, - } }, - { R"(hosts)"sv, - toml::array{ - R"(alpha)"sv, - R"(omega)"sv, - } }, - } }, - { R"(database)"sv, - toml::table{ - { R"(connection_max)"sv, 5000 }, - { R"(enabled)"sv, true }, - { R"(ports)"sv, - toml::array{ - 8001, - 8001, - 8002, - } }, - { R"(server)"sv, R"(192.168.1.1)"sv }, - } }, - { R"(owner)"sv, - toml::table{ - { R"(dob)"sv, toml::date_time{ { 1979, 5, 27 }, { 7, 32 }, { -8, 0 } } }, - { R"(name)"sv, R"(Lance Uppercut)"sv }, - } }, - { R"(servers)"sv, - toml::table{ - { R"(alpha)"sv, - toml::table{ - { R"(dc)"sv, R"(eqdc10)"sv }, - { R"(ip)"sv, R"(10.0.0.1)"sv }, - } }, - { R"(beta)"sv, - toml::table{ - { R"(dc)"sv, R"(eqdc10)"sv }, - { R"(ip)"sv, R"(10.0.0.2)"sv }, - } }, - } }, - { R"(title)"sv, R"(TOML Example)"sv }, - }; - REQUIRE(tbl == expected); - }); - } - -#if UNICODE_LITERALS_OK - - SECTION("spec-keys-1") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_keys_1, - [](toml::table&& tbl) // spec-keys-1 - { - const auto expected = toml::table{ - { R"(127.0.0.1)"sv, R"(value)"sv }, { R"(character encoding)"sv, R"(value)"sv }, - { R"(key2)"sv, R"(value)"sv }, { R"(quoted "value")"sv, R"(value)"sv }, - { R"(ʎǝʞ)"sv, R"(value)"sv }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-string-0") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_string_0, - [](toml::table&& tbl) // spec-string-0 - { - const auto expected = toml::table{ - { R"(str)"sv, R"(I'm a string. "You can quote me". Name José -Location SF.)"sv }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-table-3") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_table_3, - [](toml::table&& tbl) // spec-table-3 - { - const auto expected = toml::table{ - { R"(a)"sv, - toml::table{ - { R"(b)"sv, - toml::table{ - { R"(c)"sv, toml::table{} }, - } }, - } }, - { R"(d)"sv, - toml::table{ - { R"(e)"sv, - toml::table{ - { R"(f)"sv, toml::table{} }, - } }, - } }, - { R"(g)"sv, - toml::table{ - { R"(h)"sv, - toml::table{ - { R"(i)"sv, toml::table{} }, - } }, - } }, - { R"(j)"sv, - toml::table{ - { R"(ʞ)"sv, - toml::table{ - { R"(l)"sv, toml::table{} }, - } }, - } }, - }; - REQUIRE(tbl == expected); - }); - } - -#endif // UNICODE_LITERALS_OK - - SECTION("string-double-quote-escape") - { - parsing_should_succeed(FILE_LINE_ARGS, - string_double_quote_escape, - [](toml::table&& tbl) // string-double-quote-escape - { - const auto expected = toml::table{ - { R"(test)"sv, R"("one")"sv }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("string-empty") - { - parsing_should_succeed(FILE_LINE_ARGS, - string_empty, - [](toml::table&& tbl) // string-empty - { - const auto expected = toml::table{ - { R"(answer)"sv, ""sv }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("string-escaped-escape") - { - parsing_should_succeed(FILE_LINE_ARGS, - string_escaped_escape, - [](toml::table&& tbl) // string-escaped-escape - { - const auto expected = toml::table{ - { R"(answer)"sv, R"(\x64)"sv }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("string-escapes") - { - parsing_should_succeed( - FILE_LINE_ARGS, - string_escapes, - [](toml::table&& tbl) // string-escapes - { - const auto expected = toml::table{ - { R"(backslash)"sv, R"(This string has a \ backslash character.)"sv }, - { R"(backspace)"sv, "This string has a \x08 backspace character."sv }, - { R"(carriage)"sv, "This string has a \r carriage return character."sv }, - { R"(delete)"sv, "This string has a \x7F delete control code."sv }, - { R"(formfeed)"sv, "This string has a \f form feed character."sv }, - { R"(newline)"sv, R"(This string has a - new line character.)"sv }, - { R"(notunicode1)"sv, R"(This string does not have a unicode \u escape.)"sv }, - { R"(notunicode2)"sv, R"(This string does not have a unicode \u escape.)"sv }, - { R"(notunicode3)"sv, R"(This string does not have a unicode \u0075 escape.)"sv }, - { R"(notunicode4)"sv, R"(This string does not have a unicode \u escape.)"sv }, - { R"(quote)"sv, R"(This string has a " quote character.)"sv }, - { R"(tab)"sv, R"(This string has a tab character.)"sv }, - { R"(unitseparator)"sv, "This string has a \x1F unit separator control code."sv }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("string-multiline-escaped-crlf") - { - parsing_should_succeed(FILE_LINE_ARGS, - string_multiline_escaped_crlf, - [](toml::table&& tbl) // string-multiline-escaped-crlf - { - const auto expected = toml::table{ - { R"(0)"sv, ""sv }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("string-multiline-quotes") - { - parsing_should_succeed(FILE_LINE_ARGS, - string_multiline_quotes, - [](toml::table&& tbl) // string-multiline-quotes - { - const auto expected = toml::table{ - { R"(escaped)"sv, R"(lol""")"sv }, - { R"(lit_one)"sv, R"('one quote')"sv }, - { R"(lit_one_space)"sv, R"( 'one quote' )"sv }, - { R"(lit_two)"sv, R"(''two quotes'')"sv }, - { R"(lit_two_space)"sv, R"( ''two quotes'' )"sv }, - { R"(mismatch1)"sv, R"(aaa'''bbb)"sv }, - { R"(mismatch2)"sv, R"(aaa"""bbb)"sv }, - { R"(one)"sv, R"("one quote")"sv }, - { R"(one_space)"sv, R"( "one quote" )"sv }, - { R"(two)"sv, R"(""two quotes"")"sv }, - { R"(two_space)"sv, R"( ""two quotes"" )"sv }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("string-multiline") - { - parsing_should_succeed( - FILE_LINE_ARGS, - string_multiline, - [](toml::table&& tbl) // string-multiline - { - const auto expected = toml::table{ - { R"(equivalent_one)"sv, R"(The quick brown fox jumps over the lazy dog.)"sv }, - { R"(equivalent_three)"sv, R"(The quick brown fox jumps over the lazy dog.)"sv }, - { R"(equivalent_two)"sv, R"(The quick brown fox jumps over the lazy dog.)"sv }, - { R"(escape-bs-1)"sv, R"(a \ -b)"sv }, - { R"(escape-bs-2)"sv, R"(a \b)"sv }, - { R"(escape-bs-3)"sv, R"(a \\ - b)"sv }, - { R"(keep-ws-before)"sv, R"(a b)"sv }, - { R"(multiline_empty_four)"sv, ""sv }, - { R"(multiline_empty_one)"sv, ""sv }, - { R"(multiline_empty_three)"sv, ""sv }, - { R"(multiline_empty_two)"sv, ""sv }, - { R"(no-space)"sv, R"(ab)"sv }, - { R"(whitespace-after-bs)"sv, R"(The quick brown fox jumps over the lazy dog.)"sv }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("string-nl") - { - parsing_should_succeed(FILE_LINE_ARGS, - string_nl, - [](toml::table&& tbl) // string-nl - { - const auto expected = toml::table{ - { R"(lit_nl_end)"sv, R"(value\n)"sv }, - { R"(lit_nl_mid)"sv, R"(val\nue)"sv }, - { R"(lit_nl_uni)"sv, R"(val\ue)"sv }, - { R"(nl_end)"sv, R"(value -)"sv }, - { R"(nl_mid)"sv, R"(val -ue)"sv }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("string-raw-multiline") - { - parsing_should_succeed(FILE_LINE_ARGS, - string_raw_multiline, - [](toml::table&& tbl) // string-raw-multiline - { - const auto expected = toml::table{ - { R"(firstnl)"sv, R"(This string has a ' quote character.)"sv }, - { R"(multiline)"sv, R"(This string -has ' a quote character -and more than -one newline -in it.)"sv }, - { R"(multiline_with_tab)"sv, R"(First line - Followed by a tab)"sv }, - { R"(oneline)"sv, R"(This string has a ' quote character.)"sv }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("string-raw") - { - parsing_should_succeed(FILE_LINE_ARGS, - string_raw, - [](toml::table&& tbl) // string-raw - { - const auto expected = toml::table{ - { R"(backslash)"sv, R"(This string has a \\ backslash character.)"sv }, - { R"(backspace)"sv, R"(This string has a \b backspace character.)"sv }, - { R"(carriage)"sv, R"(This string has a \r carriage return character.)"sv }, - { R"(formfeed)"sv, R"(This string has a \f form feed character.)"sv }, - { R"(newline)"sv, R"(This string has a \n new line character.)"sv }, - { R"(slash)"sv, R"(This string has a \/ slash character.)"sv }, - { R"(tab)"sv, R"(This string has a \t tab character.)"sv }, - { R"(unescaped_tab)"sv, R"(This string has an unescaped tab character.)"sv }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("string-simple") - { - parsing_should_succeed(FILE_LINE_ARGS, - string_simple, - [](toml::table&& tbl) // string-simple - { - const auto expected = toml::table{ - { R"(answer)"sv, R"(You are not drinking enough whisky.)"sv }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("string-with-pound") - { - parsing_should_succeed(FILE_LINE_ARGS, - string_with_pound, - [](toml::table&& tbl) // string-with-pound - { - const auto expected = toml::table{ - { R"(pound)"sv, R"(We see no # comments here.)"sv }, - { R"(poundcomment)"sv, R"(But there are # some comments here.)"sv }, - }; - REQUIRE(tbl == expected); - }); - } - -#if TOML_LANG_UNRELEASED - - SECTION("string-escape-esc") - { - parsing_should_succeed(FILE_LINE_ARGS, - string_escape_esc, - [](toml::table&& tbl) // string-escape-esc - { - const auto expected = toml::table{ - { R"(esc)"sv, "\x1B There is no escape! \x1B"sv }, - }; - REQUIRE(tbl == expected); - }); - } - -#endif // TOML_LANG_UNRELEASED - -#if UNICODE_LITERALS_OK - - SECTION("string-escape-tricky") - { - parsing_should_succeed(FILE_LINE_ARGS, - string_escape_tricky, - [](toml::table&& tbl) // string-escape-tricky - { - const auto expected = toml::table{ - { R"(end_esc)"sv, R"(String does not end here" but ends here\)"sv }, - { R"(lit_end_esc)"sv, R"(String ends here\)"sv }, - { R"(lit_multiline_end)"sv, R"(There is no escape\)"sv }, - { R"(lit_multiline_not_unicode)"sv, R"(\u007f)"sv }, - { R"(multiline_end_esc)"sv, R"(When will it end? """...""" should be here")"sv }, - { R"(multiline_not_unicode)"sv, R"(\u0041)"sv }, - { R"(multiline_unicode)"sv, R"( )"sv }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("string-quoted-unicode") - { - parsing_should_succeed( - FILE_LINE_ARGS, - string_quoted_unicode, - [](toml::table&& tbl) // string-quoted-unicode - { - const auto expected = toml::table{ - { R"(escaped_string)"sv, "\x00 \x08 \f A \x7F € ÿ ퟿  ￿ 𐀀 􏿿"sv }, - { R"(not_escaped_string)"sv, - R"(\u0000 \u0008 \u000c \U00000041 \u007f \u0080 \u00ff \ud7ff \ue000 \uffff \U00010000 \U0010ffff)"sv }, - { R"(basic_string)"sv, R"(~ € ÿ ퟿  ￿ 𐀀 􏿿)"sv }, - { R"(literal_string)"sv, R"(~ € ÿ ퟿  ￿ 𐀀 􏿿)"sv }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("string-unicode-escape") - { - parsing_should_succeed(FILE_LINE_ARGS, - string_unicode_escape, - [](toml::table&& tbl) // string-unicode-escape - { - const auto expected = toml::table{ - { R"(answer4)"sv, R"(δ)"sv }, - { R"(answer8)"sv, R"(δ)"sv }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("string-unicode-literal") - { - parsing_should_succeed(FILE_LINE_ARGS, - string_unicode_literal, - [](toml::table&& tbl) // string-unicode-literal - { - const auto expected = toml::table{ - { R"(answer)"sv, R"(δ)"sv }, - }; - REQUIRE(tbl == expected); - }); - } - -#endif // UNICODE_LITERALS_OK - -#if TOML_LANG_UNRELEASED && UNICODE_LITERALS_OK - - SECTION("string-hex-escape") - { - parsing_should_succeed(FILE_LINE_ARGS, - string_hex_escape, - [](toml::table&& tbl) // string-hex-escape - { - const auto expected = toml::table{ - { R"(bs)"sv, "\x7F"sv }, - { R"(hello)"sv, R"(hello -)"sv }, - { R"(higher-than-127)"sv, R"(Sørmirbæren)"sv }, - { R"(literal)"sv, R"(\x20 \x09 \x0d\x0a)"sv }, - { R"(multiline)"sv, - " \x1B \r\n" - "\n" - "\x7F\n" - "\x00\n" - "hello\n" - "\n" - "Sørmirbæren\n" - ""sv }, - { R"(multiline-literal)"sv, R"(\x20 \x09 \x0d\x0a -)"sv }, - { R"(nul)"sv, "\x00"sv }, - { R"(whitespace)"sv, - " \x1B \r\n" - ""sv }, - }; - REQUIRE(tbl == expected); - }); - } - -#endif // TOML_LANG_UNRELEASED && UNICODE_LITERALS_OK - - SECTION("table-array-implicit-and-explicit-after") - { - parsing_should_succeed(FILE_LINE_ARGS, - table_array_implicit_and_explicit_after, - [](toml::table&& tbl) // table-array-implicit-and-explicit-after - { - const auto expected = toml::table{ - { R"(a)"sv, - toml::table{ - { R"(b)"sv, - toml::array{ - toml::table{ - { R"(x)"sv, 1 }, - }, - } }, - { R"(y)"sv, 2 }, - } }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("table-array-implicit") - { - parsing_should_succeed(FILE_LINE_ARGS, - table_array_implicit, - [](toml::table&& tbl) // table-array-implicit - { - const auto expected = toml::table{ - { R"(albums)"sv, - toml::table{ - { R"(songs)"sv, - toml::array{ - toml::table{ - { R"(name)"sv, R"(Glory Days)"sv }, - }, - } }, - } }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("table-array-many") - { - parsing_should_succeed(FILE_LINE_ARGS, - table_array_many, - [](toml::table&& tbl) // table-array-many - { - const auto expected = toml::table{ - { R"(people)"sv, - toml::array{ - toml::table{ - { R"(first_name)"sv, R"(Bruce)"sv }, - { R"(last_name)"sv, R"(Springsteen)"sv }, - }, - toml::table{ - { R"(first_name)"sv, R"(Eric)"sv }, - { R"(last_name)"sv, R"(Clapton)"sv }, - }, - toml::table{ - { R"(first_name)"sv, R"(Bob)"sv }, - { R"(last_name)"sv, R"(Seger)"sv }, - }, - } }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("table-array-nest") - { - parsing_should_succeed(FILE_LINE_ARGS, - table_array_nest, - [](toml::table&& tbl) // table-array-nest - { - const auto expected = toml::table{ - { R"(albums)"sv, - toml::array{ - toml::table{ - { R"(name)"sv, R"(Born to Run)"sv }, - { R"(songs)"sv, - toml::array{ - toml::table{ - { R"(name)"sv, R"(Jungleland)"sv }, - }, - toml::table{ - { R"(name)"sv, R"(Meeting Across the River)"sv }, - }, - } }, - }, - toml::table{ - { R"(name)"sv, R"(Born in the USA)"sv }, - { R"(songs)"sv, - toml::array{ - toml::table{ - { R"(name)"sv, R"(Glory Days)"sv }, - }, - toml::table{ - { R"(name)"sv, R"(Dancing in the Dark)"sv }, - }, - } }, - }, - } }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("table-array-one") - { - parsing_should_succeed(FILE_LINE_ARGS, - table_array_one, - [](toml::table&& tbl) // table-array-one - { - const auto expected = toml::table{ - { R"(people)"sv, - toml::array{ - toml::table{ - { R"(first_name)"sv, R"(Bruce)"sv }, - { R"(last_name)"sv, R"(Springsteen)"sv }, - }, - } }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("table-array-table-array") - { - parsing_should_succeed(FILE_LINE_ARGS, - table_array_table_array, - [](toml::table&& tbl) // table-array-table-array - { - const auto expected = toml::table{ - { R"(a)"sv, - toml::array{ - toml::table{ - { R"(b)"sv, - toml::array{ - toml::table{ - { R"(c)"sv, - toml::table{ - { R"(d)"sv, R"(val0)"sv }, - } }, - }, - toml::table{ - { R"(c)"sv, - toml::table{ - { R"(d)"sv, R"(val1)"sv }, - } }, - }, - } }, - }, - } }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("table-array-within-dotted") - { - parsing_should_succeed(FILE_LINE_ARGS, - table_array_within_dotted, - [](toml::table&& tbl) // table-array-within-dotted - { - const auto expected = toml::table{ - { R"(fruit)"sv, - toml::table{ - { R"(apple)"sv, - toml::table{ - { R"(color)"sv, R"(red)"sv }, - { R"(seeds)"sv, - toml::array{ - toml::table{ - { R"(size)"sv, 2 }, - }, - } }, - } }, - } }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("table-empty-name") - { - parsing_should_succeed(FILE_LINE_ARGS, - table_empty_name, - [](toml::table&& tbl) // table-empty-name - { - const auto expected = toml::table{ - { ""sv, - toml::table{ - { R"(a)"sv, - toml::table{ - { R"(x)"sv, 2 }, - } }, - { R"(x)"sv, 1 }, - } }, - { R"(a)"sv, - toml::table{ - { ""sv, - toml::table{ - { R"(x)"sv, 3 }, - } }, - } }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("table-empty") - { - parsing_should_succeed(FILE_LINE_ARGS, - table_empty, - [](toml::table&& tbl) // table-empty - { - const auto expected = toml::table{ - { R"(a)"sv, toml::table{} }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("table-keyword") - { - parsing_should_succeed(FILE_LINE_ARGS, - table_keyword, - [](toml::table&& tbl) // table-keyword - { - const auto expected = toml::table{ - { R"(false)"sv, toml::table{} }, - { R"(inf)"sv, toml::table{} }, - { R"(nan)"sv, toml::table{} }, - { R"(true)"sv, toml::table{} }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("table-no-eol") - { - parsing_should_succeed(FILE_LINE_ARGS, - table_no_eol, - [](toml::table&& tbl) // table-no-eol - { - const auto expected = toml::table{ - { R"(table)"sv, toml::table{} }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("table-sub-empty") - { - parsing_should_succeed(FILE_LINE_ARGS, - table_sub_empty, - [](toml::table&& tbl) // table-sub-empty - { - const auto expected = toml::table{ - { R"(a)"sv, - toml::table{ - { R"(b)"sv, toml::table{} }, - } }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("table-sub") - { - parsing_should_succeed(FILE_LINE_ARGS, - table_sub, - [](toml::table&& tbl) // table-sub - { - const auto expected = toml::table{ - { R"(a)"sv, - toml::table{ - { R"(extend)"sv, - toml::table{ - { R"(key)"sv, 2 }, - { R"(more)"sv, - toml::table{ - { R"(key)"sv, 3 }, - } }, - } }, - { R"(key)"sv, 1 }, - } }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("table-whitespace") - { - parsing_should_succeed(FILE_LINE_ARGS, - table_whitespace, - [](toml::table&& tbl) // table-whitespace - { - const auto expected = toml::table{ - { R"(valid key)"sv, toml::table{} }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("table-with-literal-string") - { - parsing_should_succeed(FILE_LINE_ARGS, - table_with_literal_string, - [](toml::table&& tbl) // table-with-literal-string - { - const auto expected = toml::table{ - { R"(a)"sv, - toml::table{ - { R"("b")"sv, - toml::table{ - { R"(c)"sv, - toml::table{ - { R"(answer)"sv, 42 }, - } }, - } }, - } }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("table-with-pound") - { - parsing_should_succeed(FILE_LINE_ARGS, - table_with_pound, - [](toml::table&& tbl) // table-with-pound - { - const auto expected = toml::table{ - { R"(key#group)"sv, - toml::table{ - { R"(answer)"sv, 42 }, - } }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("table-with-single-quotes") - { - parsing_should_succeed(FILE_LINE_ARGS, - table_with_single_quotes, - [](toml::table&& tbl) // table-with-single-quotes - { - const auto expected = toml::table{ - { R"(a)"sv, - toml::table{ - { R"(b)"sv, - toml::table{ - { R"(c)"sv, - toml::table{ - { R"(answer)"sv, 42 }, - } }, - } }, - } }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("table-without-super") - { - parsing_should_succeed(FILE_LINE_ARGS, - table_without_super, - [](toml::table&& tbl) // table-without-super - { - const auto expected = toml::table{ - { R"(x)"sv, - toml::table{ - { R"(y)"sv, - toml::table{ - { R"(z)"sv, - toml::table{ - { R"(w)"sv, toml::table{} }, - } }, - } }, - } }, - }; - REQUIRE(tbl == expected); - }); - } - -#if UNICODE_LITERALS_OK - - SECTION("table-names") - { - parsing_should_succeed(FILE_LINE_ARGS, - table_names, - [](toml::table&& tbl) // table-names - { - const auto expected = toml::table{ - { R"(a)"sv, - toml::table{ - { R"( x )"sv, toml::table{} }, - { R"(b)"sv, - toml::table{ - { R"(c)"sv, toml::table{} }, - } }, - { R"(b.c)"sv, toml::table{} }, - { R"(d.e)"sv, toml::table{} }, - } }, - { R"(d)"sv, - toml::table{ - { R"(e)"sv, - toml::table{ - { R"(f)"sv, toml::table{} }, - } }, - } }, - { R"(g)"sv, - toml::table{ - { R"(h)"sv, - toml::table{ - { R"(i)"sv, toml::table{} }, - } }, - } }, - { R"(j)"sv, - toml::table{ - { R"(ʞ)"sv, - toml::table{ - { R"(l)"sv, toml::table{} }, - } }, - } }, - { R"(x)"sv, - toml::table{ - { R"(1)"sv, - toml::table{ - { R"(2)"sv, toml::table{} }, - } }, - } }, - }; - REQUIRE(tbl == expected); - }); - } - -#endif // UNICODE_LITERALS_OK -} diff --git a/tests/conformance_iarna_invalid.cpp b/tests/conformance_iarna_invalid.cpp deleted file mode 100644 index 28c32b3..0000000 --- a/tests/conformance_iarna_invalid.cpp +++ /dev/null @@ -1,451 +0,0 @@ -// This file is a part of toml++ and is subject to the the terms of the MIT license. -// Copyright (c) Mark Gillard -// See https://github.com/marzer/tomlplusplus/blob/master/LICENSE for the full license text. -// SPDX-License-Identifier: MIT -//----- -// this file was generated by generate_conformance_tests.py - do not modify it directly - -#include "tests.hpp" - -namespace -{ - static constexpr auto array_of_tables_1 = "# INVALID TOML DOC\r\n" - "fruit = []\r\n" - "\r\n" - "[[fruit]] # Not allowed"sv; - static constexpr auto array_of_tables_2 = "# INVALID TOML DOC\r\n" - "[[fruit]]\r\n" - " name = \"apple\"\r\n" - "\r\n" - " [[fruit.variety]]\r\n" - " name = \"red delicious\"\r\n" - "\r\n" - " # This table conflicts with the previous table\r\n" - " [fruit.variety]\r\n" - " name = \"granny smith\""sv; - - static constexpr auto bare_key_1 = "bare!key = 123"sv; - static constexpr auto bare_key_2 = "barekey\r\n" - " = 123"sv; - static constexpr auto bare_key_3 = R"(barekey =)"sv; - - static constexpr auto comment_control_1 = "a = \"null\" # \x00"sv; - static constexpr auto comment_control_2 = "a = \"ctrl-P\" # \x10"sv; - static constexpr auto comment_control_3 = "a = \"ctrl-_\" # \x1F"sv; - static constexpr auto comment_control_4 = "a = \"0x7f\" # \x7F"sv; - - static constexpr auto inline_table_imutable_1 = "[product]\r\n" - "type = { name = \"Nail\" }\r\n" - "type.edible = false # INVALID"sv; - static constexpr auto inline_table_imutable_2 = "[product]\r\n" - "type.name = \"Nail\"\r\n" - "type = { edible = false } # INVALID"sv; - -#if !TOML_LANG_UNRELEASED - - static constexpr auto inline_table_trailing_comma = "abc = { abc = 123, }"sv; - -#endif // !TOML_LANG_UNRELEASED - - static constexpr auto int_0_padded = "int = 0123"sv; - static constexpr auto int_signed_bin = "bin = +0b10"sv; - static constexpr auto int_signed_hex = "hex = +0xab"sv; - static constexpr auto int_signed_oct = "oct = +0o23"sv; - - static constexpr auto key_value_pair_1 = "key = # INVALID"sv; - static constexpr auto key_value_pair_2 = "first = \"Tom\" last = \"Preston-Werner\" # INVALID"sv; - - static constexpr auto multiple_dot_key = "# THE FOLLOWING IS INVALID\r\n" - "\r\n" - "# This defines the value of fruit.apple to be an integer.\r\n" - "fruit.apple = 1\r\n" - "\r\n" - "# But then this treats fruit.apple like it's a table.\r\n" - "# You can't turn an integer into a table.\r\n" - "fruit.apple.smooth = true"sv; - static constexpr auto multiple_key = "# DO NOT DO THIS\r\n" - "name = \"Tom\"\r\n" - "name = \"Pradyun\""sv; - - static constexpr auto no_key_name = "= \"no key name\" # INVALID"sv; - - static constexpr auto string_basic_control_1 = "a = \"null\x00\""sv; - static constexpr auto string_basic_control_2 = "a = \"ctrl-P\x10\""sv; - static constexpr auto string_basic_control_3 = "a = \"ctrl-_\x1F\""sv; - static constexpr auto string_basic_control_4 = "a = \"0x7f\x7F\""sv; - static constexpr auto string_basic_multiline_control_1 = "a = \"\"\"null\x00\"\"\""sv; - static constexpr auto string_basic_multiline_control_2 = "a = \"\"\"null\x10\"\"\""sv; - static constexpr auto string_basic_multiline_control_3 = "a = \"\"\"null\x1F\"\"\""sv; - static constexpr auto string_basic_multiline_control_4 = "a = \"\"\"null\x7F\"\"\""sv; - static constexpr auto string_basic_multiline_invalid_backslash = "a = \"\"\"\r\n" - " foo \\ \\n\r\n" - " bar\"\"\""sv; - static constexpr auto string_basic_multiline_out_of_range_unicode_escape_1 = "a = \"\"\"\\UFFFFFFFF\"\"\""sv; - static constexpr auto string_basic_multiline_out_of_range_unicode_escape_2 = "a = \"\"\"\\U00D80000\"\"\""sv; - static constexpr auto string_basic_multiline_quotes = - "str5 = \"\"\"Here are three quotation marks: \"\"\".\"\"\""sv; - static constexpr auto string_basic_multiline_unknown_escape = "a = \"\"\"\\@\"\"\""sv; - static constexpr auto string_basic_out_of_range_unicode_escape_1 = "a = \"\\UFFFFFFFF\""sv; - static constexpr auto string_basic_out_of_range_unicode_escape_2 = "a = \"\\U00D80000\""sv; - static constexpr auto string_basic_unknown_escape = "a = \"\\@\""sv; - static constexpr auto string_literal_control_1 = "a = 'null\x00'"sv; - static constexpr auto string_literal_control_2 = "a = 'null\x10'"sv; - static constexpr auto string_literal_control_3 = "a = 'null\x1F'"sv; - static constexpr auto string_literal_control_4 = "a = 'null\x7F'"sv; - static constexpr auto string_literal_multiline_control_1 = "a = '''null\x00'''"sv; - static constexpr auto string_literal_multiline_control_2 = "a = '''null\x10'''"sv; - static constexpr auto string_literal_multiline_control_3 = "a = '''null\x1F'''"sv; - static constexpr auto string_literal_multiline_control_4 = "a = '''null\x7F'''"sv; - static constexpr auto string_literal_multiline_quotes = - "apos15 = '''Here are fifteen apostrophes: '''''''''''''''''' # INVALID"sv; - - static constexpr auto table_1 = "# DO NOT DO THIS\r\n" - "\r\n" - "[fruit]\r\n" - "apple = \"red\"\r\n" - "\r\n" - "[fruit]\r\n" - "orange = \"orange\""sv; - static constexpr auto table_2 = "# DO NOT DO THIS EITHER\r\n" - "\r\n" - "[fruit]\r\n" - "apple = \"red\"\r\n" - "\r\n" - "[fruit.apple]\r\n" - "texture = \"smooth\""sv; - static constexpr auto table_3 = "[fruit]\r\n" - "apple.color = \"red\"\r\n" - "apple.taste.sweet = true\r\n" - "\r\n" - "[fruit.apple] # INVALID"sv; - static constexpr auto table_4 = "[fruit]\r\n" - "apple.color = \"red\"\r\n" - "apple.taste.sweet = true\r\n" - "\r\n" - "[fruit.apple.taste] # INVALID"sv; - static constexpr auto table_invalid_1 = - "[fruit.physical] # subtable, but to which parent element should it belong?\r\n" - " color = \"red\"\r\n" - " shape = \"round\"\r\n" - "\r\n" - "[[fruit]] # parser must throw an error upon discovering that \"fruit\" is\r\n" - " # an array rather than a table\r\n" - " name = \"apple\""sv; - static constexpr auto table_invalid_2 = "# INVALID TOML DOC\r\n" - "fruit = []\r\n" - "\r\n" - "[[fruit]] # Not allowed"sv; - static constexpr auto table_invalid_3 = "# INVALID TOML DOC\r\n" - "[[fruit]]\r\n" - " name = \"apple\"\r\n" - "\r\n" - " [[fruit.variety]]\r\n" - " name = \"red delicious\"\r\n" - "\r\n" - " # INVALID: This table conflicts with the previous array of tables\r\n" - " [fruit.variety]\r\n" - " name = \"granny smith\"\r\n" - "\r\n" - " [fruit.physical]\r\n" - " color = \"red\"\r\n" - " shape = \"round\""sv; - static constexpr auto table_invalid_4 = "# INVALID TOML DOC\r\n" - "[[fruit]]\r\n" - " name = \"apple\"\r\n" - "\r\n" - " [[fruit.variety]]\r\n" - " name = \"red delicious\"\r\n" - "\r\n" - " [fruit.physical]\r\n" - " color = \"red\"\r\n" - " shape = \"round\"\r\n" - "\r\n" - " # INVALID: This array of tables conflicts with the previous table\r\n" - " [[fruit.physical]]\r\n" - " color = \"green\""sv; -} - -TEST_CASE("conformance - iarna/invalid") -{ - SECTION("array-of-tables-1") - { - parsing_should_fail(FILE_LINE_ARGS, array_of_tables_1); // array-of-tables-1 - } - - SECTION("array-of-tables-2") - { - parsing_should_fail(FILE_LINE_ARGS, array_of_tables_2); // array-of-tables-2 - } - - SECTION("bare-key-1") - { - parsing_should_fail(FILE_LINE_ARGS, bare_key_1); // bare-key-1 - } - - SECTION("bare-key-2") - { - parsing_should_fail(FILE_LINE_ARGS, bare_key_2); // bare-key-2 - } - - SECTION("bare-key-3") - { - parsing_should_fail(FILE_LINE_ARGS, bare_key_3); // bare-key-3 - } - - SECTION("comment-control-1") - { - parsing_should_fail(FILE_LINE_ARGS, comment_control_1); // comment-control-1 - } - - SECTION("comment-control-2") - { - parsing_should_fail(FILE_LINE_ARGS, comment_control_2); // comment-control-2 - } - - SECTION("comment-control-3") - { - parsing_should_fail(FILE_LINE_ARGS, comment_control_3); // comment-control-3 - } - - SECTION("comment-control-4") - { - parsing_should_fail(FILE_LINE_ARGS, comment_control_4); // comment-control-4 - } - - SECTION("inline-table-imutable-1") - { - parsing_should_fail(FILE_LINE_ARGS, inline_table_imutable_1); // inline-table-imutable-1 - } - - SECTION("inline-table-imutable-2") - { - parsing_should_fail(FILE_LINE_ARGS, inline_table_imutable_2); // inline-table-imutable-2 - } - -#if !TOML_LANG_UNRELEASED - - SECTION("inline-table-trailing-comma") - { - parsing_should_fail(FILE_LINE_ARGS, inline_table_trailing_comma); // inline-table-trailing-comma - } - -#endif // !TOML_LANG_UNRELEASED - - SECTION("int-0-padded") - { - parsing_should_fail(FILE_LINE_ARGS, int_0_padded); // int-0-padded - } - - SECTION("int-signed-bin") - { - parsing_should_fail(FILE_LINE_ARGS, int_signed_bin); // int-signed-bin - } - - SECTION("int-signed-hex") - { - parsing_should_fail(FILE_LINE_ARGS, int_signed_hex); // int-signed-hex - } - - SECTION("int-signed-oct") - { - parsing_should_fail(FILE_LINE_ARGS, int_signed_oct); // int-signed-oct - } - - SECTION("key-value-pair-1") - { - parsing_should_fail(FILE_LINE_ARGS, key_value_pair_1); // key-value-pair-1 - } - - SECTION("key-value-pair-2") - { - parsing_should_fail(FILE_LINE_ARGS, key_value_pair_2); // key-value-pair-2 - } - - SECTION("multiple-dot-key") - { - parsing_should_fail(FILE_LINE_ARGS, multiple_dot_key); // multiple-dot-key - } - - SECTION("multiple-key") - { - parsing_should_fail(FILE_LINE_ARGS, multiple_key); // multiple-key - } - - SECTION("no-key-name") - { - parsing_should_fail(FILE_LINE_ARGS, no_key_name); // no-key-name - } - - SECTION("string-basic-control-1") - { - parsing_should_fail(FILE_LINE_ARGS, string_basic_control_1); // string-basic-control-1 - } - - SECTION("string-basic-control-2") - { - parsing_should_fail(FILE_LINE_ARGS, string_basic_control_2); // string-basic-control-2 - } - - SECTION("string-basic-control-3") - { - parsing_should_fail(FILE_LINE_ARGS, string_basic_control_3); // string-basic-control-3 - } - - SECTION("string-basic-control-4") - { - parsing_should_fail(FILE_LINE_ARGS, string_basic_control_4); // string-basic-control-4 - } - - SECTION("string-basic-multiline-control-1") - { - parsing_should_fail(FILE_LINE_ARGS, string_basic_multiline_control_1); // string-basic-multiline-control-1 - } - - SECTION("string-basic-multiline-control-2") - { - parsing_should_fail(FILE_LINE_ARGS, string_basic_multiline_control_2); // string-basic-multiline-control-2 - } - - SECTION("string-basic-multiline-control-3") - { - parsing_should_fail(FILE_LINE_ARGS, string_basic_multiline_control_3); // string-basic-multiline-control-3 - } - - SECTION("string-basic-multiline-control-4") - { - parsing_should_fail(FILE_LINE_ARGS, string_basic_multiline_control_4); // string-basic-multiline-control-4 - } - - SECTION("string-basic-multiline-invalid-backslash") - { - parsing_should_fail(FILE_LINE_ARGS, - string_basic_multiline_invalid_backslash); // string-basic-multiline-invalid-backslash - } - - SECTION("string-basic-multiline-out-of-range-unicode-escape-1") - { - parsing_should_fail( - FILE_LINE_ARGS, - string_basic_multiline_out_of_range_unicode_escape_1); // string-basic-multiline-out-of-range-unicode-escape-1 - } - - SECTION("string-basic-multiline-out-of-range-unicode-escape-2") - { - parsing_should_fail( - FILE_LINE_ARGS, - string_basic_multiline_out_of_range_unicode_escape_2); // string-basic-multiline-out-of-range-unicode-escape-2 - } - - SECTION("string-basic-multiline-quotes") - { - parsing_should_fail(FILE_LINE_ARGS, string_basic_multiline_quotes); // string-basic-multiline-quotes - } - - SECTION("string-basic-multiline-unknown-escape") - { - parsing_should_fail(FILE_LINE_ARGS, - string_basic_multiline_unknown_escape); // string-basic-multiline-unknown-escape - } - - SECTION("string-basic-out-of-range-unicode-escape-1") - { - parsing_should_fail(FILE_LINE_ARGS, - string_basic_out_of_range_unicode_escape_1); // string-basic-out-of-range-unicode-escape-1 - } - - SECTION("string-basic-out-of-range-unicode-escape-2") - { - parsing_should_fail(FILE_LINE_ARGS, - string_basic_out_of_range_unicode_escape_2); // string-basic-out-of-range-unicode-escape-2 - } - - SECTION("string-basic-unknown-escape") - { - parsing_should_fail(FILE_LINE_ARGS, string_basic_unknown_escape); // string-basic-unknown-escape - } - - SECTION("string-literal-control-1") - { - parsing_should_fail(FILE_LINE_ARGS, string_literal_control_1); // string-literal-control-1 - } - - SECTION("string-literal-control-2") - { - parsing_should_fail(FILE_LINE_ARGS, string_literal_control_2); // string-literal-control-2 - } - - SECTION("string-literal-control-3") - { - parsing_should_fail(FILE_LINE_ARGS, string_literal_control_3); // string-literal-control-3 - } - - SECTION("string-literal-control-4") - { - parsing_should_fail(FILE_LINE_ARGS, string_literal_control_4); // string-literal-control-4 - } - - SECTION("string-literal-multiline-control-1") - { - parsing_should_fail(FILE_LINE_ARGS, string_literal_multiline_control_1); // string-literal-multiline-control-1 - } - - SECTION("string-literal-multiline-control-2") - { - parsing_should_fail(FILE_LINE_ARGS, string_literal_multiline_control_2); // string-literal-multiline-control-2 - } - - SECTION("string-literal-multiline-control-3") - { - parsing_should_fail(FILE_LINE_ARGS, string_literal_multiline_control_3); // string-literal-multiline-control-3 - } - - SECTION("string-literal-multiline-control-4") - { - parsing_should_fail(FILE_LINE_ARGS, string_literal_multiline_control_4); // string-literal-multiline-control-4 - } - - SECTION("string-literal-multiline-quotes") - { - parsing_should_fail(FILE_LINE_ARGS, string_literal_multiline_quotes); // string-literal-multiline-quotes - } - - SECTION("table-1") - { - parsing_should_fail(FILE_LINE_ARGS, table_1); // table-1 - } - - SECTION("table-2") - { - parsing_should_fail(FILE_LINE_ARGS, table_2); // table-2 - } - - SECTION("table-3") - { - parsing_should_fail(FILE_LINE_ARGS, table_3); // table-3 - } - - SECTION("table-4") - { - parsing_should_fail(FILE_LINE_ARGS, table_4); // table-4 - } - - SECTION("table-invalid-1") - { - parsing_should_fail(FILE_LINE_ARGS, table_invalid_1); // table-invalid-1 - } - - SECTION("table-invalid-2") - { - parsing_should_fail(FILE_LINE_ARGS, table_invalid_2); // table-invalid-2 - } - - SECTION("table-invalid-3") - { - parsing_should_fail(FILE_LINE_ARGS, table_invalid_3); // table-invalid-3 - } - - SECTION("table-invalid-4") - { - parsing_should_fail(FILE_LINE_ARGS, table_invalid_4); // table-invalid-4 - } -} diff --git a/tests/conformance_iarna_valid.cpp b/tests/conformance_iarna_valid.cpp deleted file mode 100644 index 8848906..0000000 --- a/tests/conformance_iarna_valid.cpp +++ /dev/null @@ -1,2210 +0,0 @@ -// This file is a part of toml++ and is subject to the the terms of the MIT license. -// Copyright (c) Mark Gillard -// See https://github.com/marzer/tomlplusplus/blob/master/LICENSE for the full license text. -// SPDX-License-Identifier: MIT -//----- -// this file was generated by generate_conformance_tests.py - do not modify it directly - -#include "tests.hpp" - -namespace -{ - static constexpr auto spec_array_1 = "integers = [ 1, 2, 3 ]"sv; - static constexpr auto spec_array_2 = "colors = [ \"red\", \"yellow\", \"green\" ]"sv; - static constexpr auto spec_array_3 = "nested_array_of_int = [ [ 1, 2 ], [3, 4, 5] ]"sv; - static constexpr auto spec_array_4 = "string_array = [ \"all\", 'strings', \"\"\"are the same\"\"\", '''type''']"sv; - static constexpr auto spec_array_5 = "nested_mixed_array = [ [ 1, 2 ], [\"a\", \"b\", \"c\"] ]"sv; - static constexpr auto spec_array_7 = "integers2 = [\r\n" - " 1, 2, 3\r\n" - "]"sv; - static constexpr auto spec_array_8 = "integers3 = [\r\n" - " 1,\r\n" - " 2, # this is ok\r\n" - "]"sv; - static constexpr auto spec_array_mixed_number_types = "numbers = [ 0.1, 0.2, 0.5, 1, 2, 5 ]"sv; - static constexpr auto spec_array_more_mixed_types = - "contributors = [\r\n" - " \"Foo Bar \",\r\n" - " { name = \"Baz Qux\", email = \"bazqux@example.com\", url = \"https://example.com/bazqux\" }\r\n" - "]"sv; - static constexpr auto spec_array_of_tables_1 = "[[products]]\r\n" - "name = \"Hammer\"\r\n" - "sku = 738594937\r\n" - "\r\n" - "[[products]]\r\n" - "\r\n" - "[[products]]\r\n" - "name = \"Nail\"\r\n" - "sku = 284758393\r\n" - "color = \"gray\""sv; - static constexpr auto spec_array_of_tables_2 = "[[fruit]]\r\n" - " name = \"apple\"\r\n" - "\r\n" - " [fruit.physical]\r\n" - " color = \"red\"\r\n" - " shape = \"round\"\r\n" - "\r\n" - " [[fruit.variety]]\r\n" - " name = \"red delicious\"\r\n" - "\r\n" - " [[fruit.variety]]\r\n" - " name = \"granny smith\"\r\n" - "\r\n" - "[[fruit]]\r\n" - " name = \"banana\"\r\n" - "\r\n" - " [[fruit.variety]]\r\n" - " name = \"plantain\""sv; - static constexpr auto spec_array_of_tables_3 = "points = [ { x = 1, y = 2, z = 3 },\r\n" - " { x = 7, y = 8, z = 9 },\r\n" - " { x = 2, y = 4, z = 8 } ]"sv; - static constexpr auto spec_boolean_1 = "bool1 = true"sv; - static constexpr auto spec_boolean_2 = "bool1 = false"sv; - static constexpr auto spec_case_sensitive = "# TOML is case sensitive.\r\n" - "abc = 123\r\n" - "ABC = 456"sv; - static constexpr auto spec_comment_mid_array = "# eol commetns can go anywhere\r\n" - "abc = [ # this is valid\r\n" - " 123,#as is this\r\n" - " 456 #so is this\r\n" - " ]# and this\r\n" - "# here too"sv; - static constexpr auto spec_comment_mid_string = "another = \"# This is not a comment\""sv; - static constexpr auto spec_comment_tab = - "# This is a full-line comment with a tab in the middle\r\n" - "key = \"value\" # This is a commen with a tab in the middle at the end of a line"sv; - static constexpr auto spec_comment = "# This is a full-line comment\r\n" - "key = \"value\" # This is a comment at the end of a line"sv; - static constexpr auto spec_date_local_1 = "ld1 = 1979-05-27"sv; - static constexpr auto spec_date_time_1 = "odt1 = 1979-05-27T07:32:00Z"sv; - static constexpr auto spec_date_time_2 = "odt2 = 1979-05-27T00:32:00-07:00"sv; - static constexpr auto spec_date_time_3 = "odt3 = 1979-05-27T00:32:00.999999-07:00"sv; - static constexpr auto spec_date_time_4 = "odt4 = 1979-05-27 07:32:00Z"sv; - static constexpr auto spec_date_time_5 = "odt5 = 1979-05-27T07:32:00.123Z"sv; - static constexpr auto spec_date_time_local_1 = "ldt1 = 1979-05-27T07:32:00"sv; - static constexpr auto spec_dotted_keys_1 = "name = \"Orange\"\r\n" - "physical.color = \"orange\"\r\n" - "physical.shape = \"round\"\r\n" - "site.\"google.com\" = true"sv; - static constexpr auto spec_dotted_keys_2 = "a . b = 23"sv; - static constexpr auto spec_dotted_keys_3 = "a . b = 23"sv; - static constexpr auto spec_empty_key_name_1 = "\"\" = \"blank\" # VALID but discouraged"sv; - static constexpr auto spec_empty_key_name_2 = "'' = \"blank\" # VALID but discouraged"sv; - static constexpr auto spec_extend_dotted_object_1 = "# This makes the key \"fruit\" into a table.\r\n" - "fruit.apple.smooth = true\r\n" - "\r\n" - "# So then you can add to the table \"fruit\" like so:\r\n" - "fruit.orange = 2"sv; - static constexpr auto spec_extend_dotted_object_2 = "# VALID BUT DISCOURAGED\r\n" - "\r\n" - "apple.type = \"fruit\"\r\n" - "orange.type = \"fruit\"\r\n" - "\r\n" - "apple.skin = \"thin\"\r\n" - "orange.skin = \"thick\"\r\n" - "\r\n" - "apple.color = \"red\"\r\n" - "orange.color = \"orange\""sv; - static constexpr auto spec_extend_dotted_object_3 = "# RECOMMENDED\r\n" - "\r\n" - "apple.type = \"fruit\"\r\n" - "apple.skin = \"thin\"\r\n" - "apple.color = \"red\"\r\n" - "\r\n" - "orange.type = \"fruit\"\r\n" - "orange.skin = \"thick\"\r\n" - "orange.color = \"orange\""sv; - static constexpr auto spec_float_1 = "flt1 = +1.0"sv; - static constexpr auto spec_float_10 = "sf1 = inf # positive infinity"sv; - static constexpr auto spec_float_11 = "sf2 = +inf # positive infinity"sv; - static constexpr auto spec_float_12 = "sf2 = -inf # negative infinity"sv; - static constexpr auto spec_float_13 = "sf4 = nan # actual sNaN/qNaN encoding is implementation specific"sv; - static constexpr auto spec_float_14 = "sf5 = +nan # same as `nan`"sv; - static constexpr auto spec_float_15 = "sf6 = -nan # valid, actual encoding is implementation specific"sv; - static constexpr auto spec_float_2 = "flt2 = 3.1415"sv; - static constexpr auto spec_float_3 = "flt3 = -0.01"sv; - static constexpr auto spec_float_4 = "flt4 = 5e+22"sv; - static constexpr auto spec_float_5 = "flt5 = 1e06"sv; - static constexpr auto spec_float_6 = "flt6 = -2E-2"sv; - static constexpr auto spec_float_7 = "flt7 = 6.626e-34"sv; - static constexpr auto spec_float_8 = "flt8 = 224_617.445_991_228"sv; - static constexpr auto spec_float_9 = "flt9 = -0e0"sv; - static constexpr auto spec_int_1 = "int1 = +99"sv; - static constexpr auto spec_int_2 = "int2 = 42"sv; - static constexpr auto spec_int_3 = "int3 = 0"sv; - static constexpr auto spec_int_3a = "int3 = +0"sv; - static constexpr auto spec_int_3b = "int3 = -0"sv; - static constexpr auto spec_int_4 = "int4 = -17"sv; - static constexpr auto spec_int_5 = "int5 = 1_000"sv; - static constexpr auto spec_int_6 = "int6 = 5_349_221"sv; - static constexpr auto spec_int_7 = "int7 = 1_2_3_4_5 # VALID but discouraged"sv; - static constexpr auto spec_int_bin1 = "bin1 = 0b11010110"sv; - static constexpr auto spec_int_hex1 = "hex1 = 0xDEADBEEF"sv; - static constexpr auto spec_int_hex2 = "hex2 = 0xdeadbeef"sv; - static constexpr auto spec_int_hex3 = "hex3 = 0xdead_beef"sv; - static constexpr auto spec_int_max = "max=9_223_372_036_854_775_807"sv; - static constexpr auto spec_int_min = "min=-9_223_372_036_854_775_808"sv; - static constexpr auto spec_int_oct1 = "oct1 = 0o01234567"sv; - static constexpr auto spec_int_oct2 = "oct2 = 0o755 # useful for Unix file permissions"sv; - static constexpr auto spec_key_value_pair_1 = "key = \"value\""sv; - static constexpr auto spec_key_value_pair_2 = "bare_key = \"value\""sv; - static constexpr auto spec_key_value_pair_3 = "bare-key = \"value\""sv; - static constexpr auto spec_key_value_pair_4 = "1234 = \"value\""sv; - static constexpr auto spec_key_value_pair_5 = "1234=\"value\""sv; - static constexpr auto spec_key_value_pair_6 = "-=1"sv; - static constexpr auto spec_key_value_pair_7 = "_=1"sv; - static constexpr auto spec_key_value_pair_8 = "-_-_-_-_-=1"sv; - static constexpr auto spec_key_value_pair_9 = "3.14159 = \"pi\""sv; - static constexpr auto spec_newline_1 = R"(abc = 123 -def = 456)"sv; - static constexpr auto spec_newline_2 = "abc = 123\r\n" - "def = 456"sv; - static constexpr auto spec_newline_3 = "abc = 123\r\n" - "def = 456\n" - "ghi = 789"sv; - static constexpr auto spec_quoted_literal_keys_1 = "'quoted \"value\"' = \"value\""sv; - static constexpr auto spec_readme_example = "# This is a TOML document.\r\n" - "\r\n" - "title = \"TOML Example\"\r\n" - "\r\n" - "[owner]\r\n" - "name = \"Tom Preston-Werner\"\r\n" - "dob = 1979-05-27T07:32:00-08:00 # First class dates\r\n" - "\r\n" - "[database]\r\n" - "server = \"192.168.1.1\"\r\n" - "ports = [ 8001, 8001, 8002 ]\r\n" - "connection_max = 5000\r\n" - "enabled = true\r\n" - "\r\n" - "[servers]\r\n" - "\r\n" - " # Indentation (tabs and/or spaces) is allowed but not required\r\n" - " [servers.alpha]\r\n" - " ip = \"10.0.0.1\"\r\n" - " dc = \"eqdc10\"\r\n" - "\r\n" - " [servers.beta]\r\n" - " ip = \"10.0.0.2\"\r\n" - " dc = \"eqdc10\"\r\n" - "\r\n" - "[clients]\r\n" - "data = [ [\"gamma\", \"delta\"], [1, 2] ]\r\n" - "\r\n" - "# Line breaks are OK when inside arrays\r\n" - "hosts = [\r\n" - " \"alpha\",\r\n" - " \"omega\"\r\n" - "]"sv; - static constexpr auto spec_string_basic_multiline_1 = "str1 = \"\"\"\r\n" - "Roses are red\r\n" - "Violets are blue\"\"\""sv; - static constexpr auto spec_string_basic_multiline_2 = "str = \"\"\"\r\n" - "The quick brown \\\r\n" - "\r\n" - "\r\n" - " fox jumps over \\\r\n" - " the lazy dog.\"\"\""sv; - static constexpr auto spec_string_basic_multiline_3 = "str = \"\"\"\\\r\n" - " The quick brown \\\r\n" - " fox jumps over \\\r\n" - " the lazy dog.\\\r\n" - " \"\"\""sv; - static constexpr auto spec_string_basic_multiline_4 = "a = \"\"\"abc\\ \r\n" - "def\"\"\""sv; - static constexpr auto spec_string_basic_multiline_5 = "ml-escaped-nl = \"\"\"\r\n" - " foo \\\r\n" - " bar \\\\\r\n" - " baz \\\\\\\r\n" - " quux\"\"\""sv; - static constexpr auto spec_string_basic_multiline_6 = - "str4 = \"\"\"Here are two quotation marks: \"\". Simple enough.\"\"\""sv; - static constexpr auto spec_string_basic_multiline_7 = - "str5 = \"\"\"Here are three quotation marks: \"\"\\\".\"\"\""sv; - static constexpr auto spec_string_basic_multiline_8 = - "str6 = \"\"\"Here are fifteen quotation marks: \"\"\\\"\"\"\\\"\"\"\\\"\"\"\\\"\"\"\\\".\"\"\""sv; - static constexpr auto spec_string_basic_multiline_9 = - "str7 = \"\"\"\"This,\" she said, \"is just a pointless statement.\"\"\"\""sv; - static constexpr auto spec_string_basic_tab_multiline = "str = \"\"\"This is a tab\"\"\""sv; - static constexpr auto spec_string_basic_tab = "str = \"This is a tab\""sv; - static constexpr auto spec_string_escape_1 = "a = \"\\b\""sv; - static constexpr auto spec_string_escape_2 = "a = \"\\t\""sv; - static constexpr auto spec_string_escape_3 = "a = \"\\n\""sv; - static constexpr auto spec_string_escape_4 = "a = \"\\f\""sv; - static constexpr auto spec_string_escape_5 = "a = \"\\r\""sv; - static constexpr auto spec_string_escape_6 = "a = \"\\\"\""sv; - static constexpr auto spec_string_escape_7 = "a = \"\\\\\""sv; - static constexpr auto spec_string_escape_8 = "a = \"\\u0000\""sv; - static constexpr auto spec_string_escape_9 = "a = \"\\U00000000\""sv; - static constexpr auto spec_string_literal_1 = "winpath = 'C:\\Users\\nodejs\\templates'"sv; - static constexpr auto spec_string_literal_2 = "winpath2 = '\\\\ServerX\\admin$\\system32\\'"sv; - static constexpr auto spec_string_literal_3 = "quoted = 'Tom \"Dubs\" Preston-Werner'"sv; - static constexpr auto spec_string_literal_4 = "regex = '<\\i\\c*\\s*>'"sv; - static constexpr auto spec_string_literal_multiline_1 = "regex2 = '''I [dw]on't need \\d{2} apples'''"sv; - static constexpr auto spec_string_literal_multiline_2 = "lines = '''\r\n" - "The first newline is\r\n" - "trimmed in raw strings.\r\n" - " All other whitespace\r\n" - " is preserved.\r\n" - "'''"sv; - static constexpr auto spec_string_literal_multiline_3 = - "quot15 = '''Here are fifteen quotation marks: \"\"\"\"\"\"\"\"\"\"\"\"\"\"\"'''"sv; - static constexpr auto spec_string_literal_multiline_4 = "str = ''''That,' she said, 'is still pointless.''''"sv; - static constexpr auto spec_table_1 = "[table-1]\r\n" - "key1 = \"some string\"\r\n" - "key2 = 123\r\n" - "\r\n" - "[table-2]\r\n" - "key1 = \"another string\"\r\n" - "key2 = 456"sv; - static constexpr auto spec_table_2 = "[dog.\"tater.man\"]\r\n" - "type.name = \"pug\""sv; - static constexpr auto spec_table_3 = "[a.b.c]"sv; - static constexpr auto spec_table_4 = "[ d.e.f ] # same as [d.e.f]"sv; - static constexpr auto spec_table_5 = "[ g . h . i ] # same as [g.h.i]"sv; - static constexpr auto spec_table_7 = "# [x] you\r\n" - "# [x.y] don't\r\n" - "# [x.y.z] need these\r\n" - "[x.y.z.w] # for this to work\r\n" - "[x] # defining a super-table afterwards is ok"sv; - static constexpr auto spec_table_8 = "[fruit]\r\n" - "apple.color = \"red\"\r\n" - "apple.taste.sweet = true\r\n" - "\r\n" - "[fruit.apple.texture] # you can add sub-tables\r\n" - "smooth = true"sv; - static constexpr auto spec_table_inline_1 = "name = { first = \"Tom\", last = \"Preston-Werner\" }"sv; - static constexpr auto spec_table_inline_2 = "point = { x = 1, y = 2 }"sv; - static constexpr auto spec_table_inline_3 = "animal = { type.name = \"pug\" } "sv; - static constexpr auto spec_table = "[table]"sv; - static constexpr auto spec_time_1 = "lt1 = 07:32:00"sv; - -#if UNICODE_LITERALS_OK - - static constexpr auto spec_quoted_basic_keys_1 = "\"ʎǝʞ\" = \"value\""sv; - static constexpr auto spec_string_basic = - "str = \"I'm a string. \\\"You can quote me\\\". Name\\tJos\\u00E9\\nLocation\\tSF.\""sv; - static constexpr auto spec_table_6 = "[ j . \"ʞ\" . 'l' ] # same as [j.\"ʞ\".'l']"sv; - -#endif // UNICODE_LITERALS_OK -} - -TEST_CASE("conformance - iarna/valid") -{ - SECTION("spec-array-1") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_array_1, - [](toml::table&& tbl) // spec-array-1 - { - const auto expected = toml::table{ - { R"(integers)"sv, - toml::array{ - 1, - 2, - 3, - } }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-array-2") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_array_2, - [](toml::table&& tbl) // spec-array-2 - { - const auto expected = toml::table{ - { R"(colors)"sv, - toml::array{ - R"(red)"sv, - R"(yellow)"sv, - R"(green)"sv, - } }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-array-3") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_array_3, - [](toml::table&& tbl) // spec-array-3 - { - const auto expected = toml::table{ - { R"(nested_array_of_int)"sv, - toml::array{ - toml::array{ - 1, - 2, - }, - toml::array{ - 3, - 4, - 5, - }, - } }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-array-4") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_array_4, - [](toml::table&& tbl) // spec-array-4 - { - const auto expected = toml::table{ - { R"(string_array)"sv, - toml::array{ - R"(all)"sv, - R"(strings)"sv, - R"(are the same)"sv, - R"(type)"sv, - } }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-array-5") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_array_5, - [](toml::table&& tbl) // spec-array-5 - { - const auto expected = toml::table{ - { R"(nested_mixed_array)"sv, - toml::array{ - toml::array{ - 1, - 2, - }, - toml::array{ - R"(a)"sv, - R"(b)"sv, - R"(c)"sv, - }, - } }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-array-7") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_array_7, - [](toml::table&& tbl) // spec-array-7 - { - const auto expected = toml::table{ - { R"(integers2)"sv, - toml::array{ - 1, - 2, - 3, - } }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-array-8") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_array_8, - [](toml::table&& tbl) // spec-array-8 - { - const auto expected = toml::table{ - { R"(integers3)"sv, - toml::array{ - 1, - 2, - } }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-array-mixed-number-types") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_array_mixed_number_types, - [](toml::table&& tbl) // spec-array-mixed-number-types - { - const auto expected = toml::table{ - { R"(numbers)"sv, - toml::array{ - 0.1, - 0.2, - 0.5, - 1, - 2, - 5, - } }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-array-more-mixed-types") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_array_more_mixed_types, - [](toml::table&& tbl) // spec-array-more-mixed-types - { - const auto expected = toml::table{ - { R"(contributors)"sv, - toml::array{ - R"(Foo Bar )"sv, - toml::table{ - { R"(name)"sv, R"(Baz Qux)"sv }, - { R"(email)"sv, R"(bazqux@example.com)"sv }, - { R"(url)"sv, R"(https://example.com/bazqux)"sv }, - }, - } }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-array-of-tables-1") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_array_of_tables_1, - [](toml::table&& tbl) // spec-array-of-tables-1 - { - const auto expected = toml::table{ - { R"(products)"sv, - toml::array{ - toml::table{ - { R"(name)"sv, R"(Hammer)"sv }, - { R"(sku)"sv, 738594937 }, - }, - toml::table{}, - toml::table{ - { R"(name)"sv, R"(Nail)"sv }, - { R"(sku)"sv, 284758393 }, - { R"(color)"sv, R"(gray)"sv }, - }, - } }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-array-of-tables-2") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_array_of_tables_2, - [](toml::table&& tbl) // spec-array-of-tables-2 - { - const auto expected = toml::table{ - { R"(fruit)"sv, - toml::array{ - toml::table{ - { R"(name)"sv, R"(apple)"sv }, - { R"(physical)"sv, - toml::table{ - { R"(color)"sv, R"(red)"sv }, - { R"(shape)"sv, R"(round)"sv }, - } }, - { R"(variety)"sv, - toml::array{ - toml::table{ - { R"(name)"sv, R"(red delicious)"sv }, - }, - toml::table{ - { R"(name)"sv, R"(granny smith)"sv }, - }, - } }, - }, - toml::table{ - { R"(name)"sv, R"(banana)"sv }, - { R"(variety)"sv, - toml::array{ - toml::table{ - { R"(name)"sv, R"(plantain)"sv }, - }, - } }, - }, - } }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-array-of-tables-3") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_array_of_tables_3, - [](toml::table&& tbl) // spec-array-of-tables-3 - { - const auto expected = toml::table{ - { R"(points)"sv, - toml::array{ - toml::table{ - { R"(x)"sv, 1 }, - { R"(y)"sv, 2 }, - { R"(z)"sv, 3 }, - }, - toml::table{ - { R"(x)"sv, 7 }, - { R"(y)"sv, 8 }, - { R"(z)"sv, 9 }, - }, - toml::table{ - { R"(x)"sv, 2 }, - { R"(y)"sv, 4 }, - { R"(z)"sv, 8 }, - }, - } }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-boolean-1") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_boolean_1, - [](toml::table&& tbl) // spec-boolean-1 - { - const auto expected = toml::table{ - { R"(bool1)"sv, true }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-boolean-2") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_boolean_2, - [](toml::table&& tbl) // spec-boolean-2 - { - const auto expected = toml::table{ - { R"(bool1)"sv, false }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-case-sensitive") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_case_sensitive, - [](toml::table&& tbl) // spec-case-sensitive - { - const auto expected = toml::table{ - { R"(abc)"sv, 123 }, - { R"(ABC)"sv, 456 }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-comment-mid-array") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_comment_mid_array, - [](toml::table&& tbl) // spec-comment-mid-array - { - const auto expected = toml::table{ - { R"(abc)"sv, - toml::array{ - 123, - 456, - } }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-comment-mid-string") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_comment_mid_string, - [](toml::table&& tbl) // spec-comment-mid-string - { - const auto expected = toml::table{ - { R"(another)"sv, R"(# This is not a comment)"sv }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-comment-tab") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_comment_tab, - [](toml::table&& tbl) // spec-comment-tab - { - const auto expected = toml::table{ - { R"(key)"sv, R"(value)"sv }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-comment") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_comment, - [](toml::table&& tbl) // spec-comment - { - const auto expected = toml::table{ - { R"(key)"sv, R"(value)"sv }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-date-local-1") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_date_local_1, - [](toml::table&& tbl) // spec-date-local-1 - { - const auto expected = toml::table{ - { R"(ld1)"sv, toml::date{ 1979, 5, 27 } }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-date-time-1") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_date_time_1, - [](toml::table&& tbl) // spec-date-time-1 - { - const auto expected = toml::table{ - { R"(odt1)"sv, toml::date_time{ { 1979, 5, 27 }, { 7, 32 }, { 0, 0 } } }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-date-time-2") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_date_time_2, - [](toml::table&& tbl) // spec-date-time-2 - { - const auto expected = toml::table{ - { R"(odt2)"sv, toml::date_time{ { 1979, 5, 27 }, { 0, 32 }, { -7, 0 } } }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-date-time-3") - { - parsing_should_succeed( - FILE_LINE_ARGS, - spec_date_time_3, - [](toml::table&& tbl) // spec-date-time-3 - { - const auto expected = toml::table{ - { R"(odt3)"sv, toml::date_time{ { 1979, 5, 27 }, { 0, 32, 0, 999999000 }, { -7, 0 } } }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-date-time-4") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_date_time_4, - [](toml::table&& tbl) // spec-date-time-4 - { - const auto expected = toml::table{ - { R"(odt4)"sv, toml::date_time{ { 1979, 5, 27 }, { 7, 32 }, { 0, 0 } } }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-date-time-5") - { - parsing_should_succeed( - FILE_LINE_ARGS, - spec_date_time_5, - [](toml::table&& tbl) // spec-date-time-5 - { - const auto expected = toml::table{ - { R"(odt5)"sv, toml::date_time{ { 1979, 5, 27 }, { 7, 32, 0, 123000000 }, { 0, 0 } } }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-date-time-local-1") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_date_time_local_1, - [](toml::table&& tbl) // spec-date-time-local-1 - { - const auto expected = toml::table{ - { R"(ldt1)"sv, toml::date_time{ { 1979, 5, 27 }, { 7, 32 } } }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-dotted-keys-1") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_dotted_keys_1, - [](toml::table&& tbl) // spec-dotted-keys-1 - { - const auto expected = toml::table{ - { R"(name)"sv, R"(Orange)"sv }, - { R"(physical)"sv, - toml::table{ - { R"(color)"sv, R"(orange)"sv }, - { R"(shape)"sv, R"(round)"sv }, - } }, - { R"(site)"sv, - toml::table{ - { R"(google.com)"sv, true }, - } }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-dotted-keys-2") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_dotted_keys_2, - [](toml::table&& tbl) // spec-dotted-keys-2 - { - const auto expected = toml::table{ - { R"(a)"sv, - toml::table{ - { R"(b)"sv, 23 }, - } }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-dotted-keys-3") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_dotted_keys_3, - [](toml::table&& tbl) // spec-dotted-keys-3 - { - const auto expected = toml::table{ - { R"(a)"sv, - toml::table{ - { R"(b)"sv, 23 }, - } }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-empty-key-name-1") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_empty_key_name_1, - [](toml::table&& tbl) // spec-empty-key-name-1 - { - const auto expected = toml::table{ - { ""sv, R"(blank)"sv }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-empty-key-name-2") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_empty_key_name_2, - [](toml::table&& tbl) // spec-empty-key-name-2 - { - const auto expected = toml::table{ - { ""sv, R"(blank)"sv }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-extend-dotted-object-1") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_extend_dotted_object_1, - [](toml::table&& tbl) // spec-extend-dotted-object-1 - { - const auto expected = toml::table{ - { R"(fruit)"sv, - toml::table{ - { R"(apple)"sv, - toml::table{ - { R"(smooth)"sv, true }, - } }, - { R"(orange)"sv, 2 }, - } }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-extend-dotted-object-2") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_extend_dotted_object_2, - [](toml::table&& tbl) // spec-extend-dotted-object-2 - { - const auto expected = toml::table{ - { R"(apple)"sv, - toml::table{ - { R"(type)"sv, R"(fruit)"sv }, - { R"(skin)"sv, R"(thin)"sv }, - { R"(color)"sv, R"(red)"sv }, - } }, - { R"(orange)"sv, - toml::table{ - { R"(type)"sv, R"(fruit)"sv }, - { R"(skin)"sv, R"(thick)"sv }, - { R"(color)"sv, R"(orange)"sv }, - } }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-extend-dotted-object-3") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_extend_dotted_object_3, - [](toml::table&& tbl) // spec-extend-dotted-object-3 - { - const auto expected = toml::table{ - { R"(apple)"sv, - toml::table{ - { R"(type)"sv, R"(fruit)"sv }, - { R"(skin)"sv, R"(thin)"sv }, - { R"(color)"sv, R"(red)"sv }, - } }, - { R"(orange)"sv, - toml::table{ - { R"(type)"sv, R"(fruit)"sv }, - { R"(skin)"sv, R"(thick)"sv }, - { R"(color)"sv, R"(orange)"sv }, - } }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-float-1") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_float_1, - [](toml::table&& tbl) // spec-float-1 - { - const auto expected = toml::table{ - { R"(flt1)"sv, 1.0 }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-float-10") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_float_10, - [](toml::table&& tbl) // spec-float-10 - { - const auto expected = toml::table{ - { R"(sf1)"sv, std::numeric_limits::infinity() }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-float-11") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_float_11, - [](toml::table&& tbl) // spec-float-11 - { - const auto expected = toml::table{ - { R"(sf2)"sv, std::numeric_limits::infinity() }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-float-12") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_float_12, - [](toml::table&& tbl) // spec-float-12 - { - const auto expected = toml::table{ - { R"(sf2)"sv, -std::numeric_limits::infinity() }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-float-13") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_float_13, - [](toml::table&& tbl) // spec-float-13 - { - const auto expected = toml::table{ - { R"(sf4)"sv, std::numeric_limits::quiet_NaN() }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-float-14") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_float_14, - [](toml::table&& tbl) // spec-float-14 - { - const auto expected = toml::table{ - { R"(sf5)"sv, std::numeric_limits::quiet_NaN() }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-float-15") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_float_15, - [](toml::table&& tbl) // spec-float-15 - { - const auto expected = toml::table{ - { R"(sf6)"sv, std::numeric_limits::quiet_NaN() }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-float-2") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_float_2, - [](toml::table&& tbl) // spec-float-2 - { - const auto expected = toml::table{ - { R"(flt2)"sv, 3.1415 }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-float-3") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_float_3, - [](toml::table&& tbl) // spec-float-3 - { - const auto expected = toml::table{ - { R"(flt3)"sv, -0.01 }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-float-4") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_float_4, - [](toml::table&& tbl) // spec-float-4 - { - const auto expected = toml::table{ - { R"(flt4)"sv, 5e+22 }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-float-5") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_float_5, - [](toml::table&& tbl) // spec-float-5 - { - const auto expected = toml::table{ - { R"(flt5)"sv, 1000000.0 }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-float-6") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_float_6, - [](toml::table&& tbl) // spec-float-6 - { - const auto expected = toml::table{ - { R"(flt6)"sv, -0.02 }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-float-7") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_float_7, - [](toml::table&& tbl) // spec-float-7 - { - const auto expected = toml::table{ - { R"(flt7)"sv, 6.626e-34 }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-float-8") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_float_8, - [](toml::table&& tbl) // spec-float-8 - { - const auto expected = toml::table{ - { R"(flt8)"sv, 224617.445991228 }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-float-9") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_float_9, - [](toml::table&& tbl) // spec-float-9 - { - const auto expected = toml::table{ - { R"(flt9)"sv, -0.0 }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-int-1") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_int_1, - [](toml::table&& tbl) // spec-int-1 - { - const auto expected = toml::table{ - { R"(int1)"sv, 99 }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-int-2") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_int_2, - [](toml::table&& tbl) // spec-int-2 - { - const auto expected = toml::table{ - { R"(int2)"sv, 42 }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-int-3") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_int_3, - [](toml::table&& tbl) // spec-int-3 - { - const auto expected = toml::table{ - { R"(int3)"sv, 0 }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-int-3a") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_int_3a, - [](toml::table&& tbl) // spec-int-3a - { - const auto expected = toml::table{ - { R"(int3)"sv, 0 }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-int-3b") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_int_3b, - [](toml::table&& tbl) // spec-int-3b - { - const auto expected = toml::table{ - { R"(int3)"sv, 0 }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-int-4") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_int_4, - [](toml::table&& tbl) // spec-int-4 - { - const auto expected = toml::table{ - { R"(int4)"sv, -17 }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-int-5") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_int_5, - [](toml::table&& tbl) // spec-int-5 - { - const auto expected = toml::table{ - { R"(int5)"sv, 1000 }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-int-6") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_int_6, - [](toml::table&& tbl) // spec-int-6 - { - const auto expected = toml::table{ - { R"(int6)"sv, 5349221 }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-int-7") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_int_7, - [](toml::table&& tbl) // spec-int-7 - { - const auto expected = toml::table{ - { R"(int7)"sv, 12345 }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-int-bin1") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_int_bin1, - [](toml::table&& tbl) // spec-int-bin1 - { - const auto expected = toml::table{ - { R"(bin1)"sv, 214 }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-int-hex1") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_int_hex1, - [](toml::table&& tbl) // spec-int-hex1 - { - const auto expected = toml::table{ - { R"(hex1)"sv, 3735928559 }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-int-hex2") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_int_hex2, - [](toml::table&& tbl) // spec-int-hex2 - { - const auto expected = toml::table{ - { R"(hex2)"sv, 3735928559 }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-int-hex3") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_int_hex3, - [](toml::table&& tbl) // spec-int-hex3 - { - const auto expected = toml::table{ - { R"(hex3)"sv, 3735928559 }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-int-max") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_int_max, - [](toml::table&& tbl) // spec-int-max - { - const auto expected = toml::table{ - { R"(max)"sv, std::numeric_limits::max() }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-int-min") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_int_min, - [](toml::table&& tbl) // spec-int-min - { - const auto expected = toml::table{ - { R"(min)"sv, std::numeric_limits::min() }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-int-oct1") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_int_oct1, - [](toml::table&& tbl) // spec-int-oct1 - { - const auto expected = toml::table{ - { R"(oct1)"sv, 342391 }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-int-oct2") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_int_oct2, - [](toml::table&& tbl) // spec-int-oct2 - { - const auto expected = toml::table{ - { R"(oct2)"sv, 493 }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-key-value-pair-1") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_key_value_pair_1, - [](toml::table&& tbl) // spec-key-value-pair-1 - { - const auto expected = toml::table{ - { R"(key)"sv, R"(value)"sv }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-key-value-pair-2") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_key_value_pair_2, - [](toml::table&& tbl) // spec-key-value-pair-2 - { - const auto expected = toml::table{ - { R"(bare_key)"sv, R"(value)"sv }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-key-value-pair-3") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_key_value_pair_3, - [](toml::table&& tbl) // spec-key-value-pair-3 - { - const auto expected = toml::table{ - { R"(bare-key)"sv, R"(value)"sv }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-key-value-pair-4") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_key_value_pair_4, - [](toml::table&& tbl) // spec-key-value-pair-4 - { - const auto expected = toml::table{ - { R"(1234)"sv, R"(value)"sv }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-key-value-pair-5") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_key_value_pair_5, - [](toml::table&& tbl) // spec-key-value-pair-5 - { - const auto expected = toml::table{ - { R"(1234)"sv, R"(value)"sv }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-key-value-pair-6") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_key_value_pair_6, - [](toml::table&& tbl) // spec-key-value-pair-6 - { - const auto expected = toml::table{ - { R"(-)"sv, 1 }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-key-value-pair-7") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_key_value_pair_7, - [](toml::table&& tbl) // spec-key-value-pair-7 - { - const auto expected = toml::table{ - { R"(_)"sv, 1 }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-key-value-pair-8") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_key_value_pair_8, - [](toml::table&& tbl) // spec-key-value-pair-8 - { - const auto expected = toml::table{ - { R"(-_-_-_-_-)"sv, 1 }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-key-value-pair-9") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_key_value_pair_9, - [](toml::table&& tbl) // spec-key-value-pair-9 - { - const auto expected = toml::table{ - { R"(3)"sv, - toml::table{ - { R"(14159)"sv, R"(pi)"sv }, - } }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-newline-1") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_newline_1, - [](toml::table&& tbl) // spec-newline-1 - { - const auto expected = toml::table{ - { R"(abc)"sv, 123 }, - { R"(def)"sv, 456 }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-newline-2") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_newline_2, - [](toml::table&& tbl) // spec-newline-2 - { - const auto expected = toml::table{ - { R"(abc)"sv, 123 }, - { R"(def)"sv, 456 }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-newline-3") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_newline_3, - [](toml::table&& tbl) // spec-newline-3 - { - const auto expected = toml::table{ - { R"(abc)"sv, 123 }, - { R"(def)"sv, 456 }, - { R"(ghi)"sv, 789 }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-quoted-literal-keys-1") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_quoted_literal_keys_1, - [](toml::table&& tbl) // spec-quoted-literal-keys-1 - { - const auto expected = toml::table{ - { R"(quoted "value")"sv, R"(value)"sv }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-readme-example") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_readme_example, - [](toml::table&& tbl) // spec-readme-example - { - const auto expected = toml::table{ - { R"(title)"sv, R"(TOML Example)"sv }, - { R"(owner)"sv, - toml::table{ - { R"(name)"sv, R"(Tom Preston-Werner)"sv }, - { R"(dob)"sv, toml::date_time{ { 1979, 5, 27 }, { 7, 32 }, { -8, 0 } } }, - } }, - { R"(database)"sv, - toml::table{ - { R"(server)"sv, R"(192.168.1.1)"sv }, - { R"(ports)"sv, - toml::array{ - 8001, - 8001, - 8002, - } }, - { R"(connection_max)"sv, 5000 }, - { R"(enabled)"sv, true }, - } }, - { R"(servers)"sv, - toml::table{ - { R"(alpha)"sv, - toml::table{ - { R"(ip)"sv, R"(10.0.0.1)"sv }, - { R"(dc)"sv, R"(eqdc10)"sv }, - } }, - { R"(beta)"sv, - toml::table{ - { R"(ip)"sv, R"(10.0.0.2)"sv }, - { R"(dc)"sv, R"(eqdc10)"sv }, - } }, - } }, - { R"(clients)"sv, - toml::table{ - { R"(data)"sv, - toml::array{ - toml::array{ - R"(gamma)"sv, - R"(delta)"sv, - }, - toml::array{ - 1, - 2, - }, - } }, - { R"(hosts)"sv, - toml::array{ - R"(alpha)"sv, - R"(omega)"sv, - } }, - } }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-string-basic-multiline-1") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_string_basic_multiline_1, - [](toml::table&& tbl) // spec-string-basic-multiline-1 - { - const auto expected = toml::table{ - { R"(str1)"sv, R"(Roses are red -Violets are blue)"sv }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-string-basic-multiline-2") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_string_basic_multiline_2, - [](toml::table&& tbl) // spec-string-basic-multiline-2 - { - const auto expected = toml::table{ - { R"(str)"sv, R"(The quick brown fox jumps over the lazy dog.)"sv }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-string-basic-multiline-3") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_string_basic_multiline_3, - [](toml::table&& tbl) // spec-string-basic-multiline-3 - { - const auto expected = toml::table{ - { R"(str)"sv, R"(The quick brown fox jumps over the lazy dog.)"sv }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-string-basic-multiline-4") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_string_basic_multiline_4, - [](toml::table&& tbl) // spec-string-basic-multiline-4 - { - const auto expected = toml::table{ - { R"(a)"sv, R"(abcdef)"sv }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-string-basic-multiline-5") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_string_basic_multiline_5, - [](toml::table&& tbl) // spec-string-basic-multiline-5 - { - const auto expected = toml::table{ - { R"(ml-escaped-nl)"sv, R"( foo bar \ - baz \quux)"sv }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-string-basic-multiline-6") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_string_basic_multiline_6, - [](toml::table&& tbl) // spec-string-basic-multiline-6 - { - const auto expected = toml::table{ - { R"(str4)"sv, R"(Here are two quotation marks: "". Simple enough.)"sv }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-string-basic-multiline-7") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_string_basic_multiline_7, - [](toml::table&& tbl) // spec-string-basic-multiline-7 - { - const auto expected = toml::table{ - { R"(str5)"sv, R"(Here are three quotation marks: """.)"sv }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-string-basic-multiline-8") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_string_basic_multiline_8, - [](toml::table&& tbl) // spec-string-basic-multiline-8 - { - const auto expected = toml::table{ - { R"(str6)"sv, R"(Here are fifteen quotation marks: """"""""""""""".)"sv }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-string-basic-multiline-9") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_string_basic_multiline_9, - [](toml::table&& tbl) // spec-string-basic-multiline-9 - { - const auto expected = toml::table{ - { R"(str7)"sv, R"("This," she said, "is just a pointless statement.")"sv }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-string-basic-tab-multiline") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_string_basic_tab_multiline, - [](toml::table&& tbl) // spec-string-basic-tab-multiline - { - const auto expected = toml::table{ - { R"(str)"sv, R"(This is a tab)"sv }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-string-basic-tab") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_string_basic_tab, - [](toml::table&& tbl) // spec-string-basic-tab - { - const auto expected = toml::table{ - { R"(str)"sv, R"(This is a tab)"sv }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-string-escape-1") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_string_escape_1, - [](toml::table&& tbl) // spec-string-escape-1 - { - const auto expected = toml::table{ - { R"(a)"sv, "\x08"sv }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-string-escape-2") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_string_escape_2, - [](toml::table&& tbl) // spec-string-escape-2 - { - const auto expected = toml::table{ - { R"(a)"sv, R"( )"sv }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-string-escape-3") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_string_escape_3, - [](toml::table&& tbl) // spec-string-escape-3 - { - const auto expected = toml::table{ - { R"(a)"sv, R"( -)"sv }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-string-escape-4") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_string_escape_4, - [](toml::table&& tbl) // spec-string-escape-4 - { - const auto expected = toml::table{ - { R"(a)"sv, "\f"sv }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-string-escape-5") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_string_escape_5, - [](toml::table&& tbl) // spec-string-escape-5 - { - const auto expected = toml::table{ - { R"(a)"sv, "\r"sv }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-string-escape-6") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_string_escape_6, - [](toml::table&& tbl) // spec-string-escape-6 - { - const auto expected = toml::table{ - { R"(a)"sv, R"(")"sv }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-string-escape-7") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_string_escape_7, - [](toml::table&& tbl) // spec-string-escape-7 - { - const auto expected = toml::table{ - { R"(a)"sv, R"(\)"sv }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-string-escape-8") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_string_escape_8, - [](toml::table&& tbl) // spec-string-escape-8 - { - const auto expected = toml::table{ - { R"(a)"sv, "\x00"sv }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-string-escape-9") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_string_escape_9, - [](toml::table&& tbl) // spec-string-escape-9 - { - const auto expected = toml::table{ - { R"(a)"sv, "\x00"sv }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-string-literal-1") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_string_literal_1, - [](toml::table&& tbl) // spec-string-literal-1 - { - const auto expected = toml::table{ - { R"(winpath)"sv, R"(C:\Users\nodejs\templates)"sv }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-string-literal-2") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_string_literal_2, - [](toml::table&& tbl) // spec-string-literal-2 - { - const auto expected = toml::table{ - { R"(winpath2)"sv, R"(\\ServerX\admin$\system32\)"sv }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-string-literal-3") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_string_literal_3, - [](toml::table&& tbl) // spec-string-literal-3 - { - const auto expected = toml::table{ - { R"(quoted)"sv, R"(Tom "Dubs" Preston-Werner)"sv }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-string-literal-4") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_string_literal_4, - [](toml::table&& tbl) // spec-string-literal-4 - { - const auto expected = toml::table{ - { R"(regex)"sv, R"(<\i\c*\s*>)"sv }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-string-literal-multiline-1") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_string_literal_multiline_1, - [](toml::table&& tbl) // spec-string-literal-multiline-1 - { - const auto expected = toml::table{ - { R"(regex2)"sv, R"(I [dw]on't need \d{2} apples)"sv }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-string-literal-multiline-2") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_string_literal_multiline_2, - [](toml::table&& tbl) // spec-string-literal-multiline-2 - { - const auto expected = toml::table{ - { R"(lines)"sv, R"(The first newline is -trimmed in raw strings. - All other whitespace - is preserved. -)"sv }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-string-literal-multiline-3") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_string_literal_multiline_3, - [](toml::table&& tbl) // spec-string-literal-multiline-3 - { - const auto expected = toml::table{ - { R"(quot15)"sv, R"(Here are fifteen quotation marks: """"""""""""""")"sv }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-string-literal-multiline-4") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_string_literal_multiline_4, - [](toml::table&& tbl) // spec-string-literal-multiline-4 - { - const auto expected = toml::table{ - { R"(str)"sv, R"('That,' she said, 'is still pointless.')"sv }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-table-1") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_table_1, - [](toml::table&& tbl) // spec-table-1 - { - const auto expected = toml::table{ - { R"(table-1)"sv, - toml::table{ - { R"(key1)"sv, R"(some string)"sv }, - { R"(key2)"sv, 123 }, - } }, - { R"(table-2)"sv, - toml::table{ - { R"(key1)"sv, R"(another string)"sv }, - { R"(key2)"sv, 456 }, - } }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-table-2") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_table_2, - [](toml::table&& tbl) // spec-table-2 - { - const auto expected = toml::table{ - { R"(dog)"sv, - toml::table{ - { R"(tater.man)"sv, - toml::table{ - { R"(type)"sv, - toml::table{ - { R"(name)"sv, R"(pug)"sv }, - } }, - } }, - } }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-table-3") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_table_3, - [](toml::table&& tbl) // spec-table-3 - { - const auto expected = toml::table{ - { R"(a)"sv, - toml::table{ - { R"(b)"sv, - toml::table{ - { R"(c)"sv, toml::table{} }, - } }, - } }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-table-4") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_table_4, - [](toml::table&& tbl) // spec-table-4 - { - const auto expected = toml::table{ - { R"(d)"sv, - toml::table{ - { R"(e)"sv, - toml::table{ - { R"(f)"sv, toml::table{} }, - } }, - } }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-table-5") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_table_5, - [](toml::table&& tbl) // spec-table-5 - { - const auto expected = toml::table{ - { R"(g)"sv, - toml::table{ - { R"(h)"sv, - toml::table{ - { R"(i)"sv, toml::table{} }, - } }, - } }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-table-7") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_table_7, - [](toml::table&& tbl) // spec-table-7 - { - const auto expected = toml::table{ - { R"(x)"sv, - toml::table{ - { R"(y)"sv, - toml::table{ - { R"(z)"sv, - toml::table{ - { R"(w)"sv, toml::table{} }, - } }, - } }, - } }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-table-8") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_table_8, - [](toml::table&& tbl) // spec-table-8 - { - const auto expected = toml::table{ - { R"(fruit)"sv, - toml::table{ - { R"(apple)"sv, - toml::table{ - { R"(color)"sv, R"(red)"sv }, - { R"(taste)"sv, - toml::table{ - { R"(sweet)"sv, true }, - } }, - { R"(texture)"sv, - toml::table{ - { R"(smooth)"sv, true }, - } }, - } }, - } }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-table-inline-1") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_table_inline_1, - [](toml::table&& tbl) // spec-table-inline-1 - { - const auto expected = toml::table{ - { R"(name)"sv, - toml::table{ - { R"(first)"sv, R"(Tom)"sv }, - { R"(last)"sv, R"(Preston-Werner)"sv }, - } }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-table-inline-2") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_table_inline_2, - [](toml::table&& tbl) // spec-table-inline-2 - { - const auto expected = toml::table{ - { R"(point)"sv, - toml::table{ - { R"(x)"sv, 1 }, - { R"(y)"sv, 2 }, - } }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-table-inline-3") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_table_inline_3, - [](toml::table&& tbl) // spec-table-inline-3 - { - const auto expected = toml::table{ - { R"(animal)"sv, - toml::table{ - { R"(type)"sv, - toml::table{ - { R"(name)"sv, R"(pug)"sv }, - } }, - } }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-table") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_table, - [](toml::table&& tbl) // spec-table - { - const auto expected = toml::table{ - { R"(table)"sv, toml::table{} }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-time-1") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_time_1, - [](toml::table&& tbl) // spec-time-1 - { - const auto expected = toml::table{ - { R"(lt1)"sv, toml::time{ 7, 32 } }, - }; - REQUIRE(tbl == expected); - }); - } - -#if UNICODE_LITERALS_OK - - SECTION("spec-quoted-basic-keys-1") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_quoted_basic_keys_1, - [](toml::table&& tbl) // spec-quoted-basic-keys-1 - { - const auto expected = toml::table{ - { R"(ʎǝʞ)"sv, R"(value)"sv }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-string-basic") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_string_basic, - [](toml::table&& tbl) // spec-string-basic - { - const auto expected = toml::table{ - { R"(str)"sv, R"(I'm a string. "You can quote me". Name José -Location SF.)"sv }, - }; - REQUIRE(tbl == expected); - }); - } - - SECTION("spec-table-6") - { - parsing_should_succeed(FILE_LINE_ARGS, - spec_table_6, - [](toml::table&& tbl) // spec-table-6 - { - const auto expected = toml::table{ - { R"(j)"sv, - toml::table{ - { R"(ʞ)"sv, - toml::table{ - { R"(l)"sv, toml::table{} }, - } }, - } }, - }; - REQUIRE(tbl == expected); - }); - } - -#endif // UNICODE_LITERALS_OK -} diff --git a/tests/cpp.hint b/tests/cpp.hint deleted file mode 100644 index 9bb942a..0000000 --- a/tests/cpp.hint +++ /dev/null @@ -1 +0,0 @@ -#define TEST_CASE(...) void func() diff --git a/tests/for_each.cpp b/tests/for_each.cpp deleted file mode 100644 index 6d28581..0000000 --- a/tests/for_each.cpp +++ /dev/null @@ -1,380 +0,0 @@ -// This file is a part of toml++ and is subject to the the terms of the MIT license. -// Copyright (c) Mark Gillard -// See https://github.com/marzer/tomlplusplus/blob/master/LICENSE for the full license text. -// SPDX-License-Identifier: MIT - -#include "tests.hpp" -TOML_DISABLE_SPAM_WARNINGS; - -TEST_CASE("array::for_each") -{ - toml::array arr{ 0, 1, 2, 3.0, "four", "five", 6 }; - - // check lvalue propagates correctly - static_cast(arr).for_each( - [](auto&& elem, size_t) noexcept - { - using elem_ref_type = decltype(elem); - static_assert(std::is_lvalue_reference_v); - - using elem_type = std::remove_reference_t; - static_assert(!std::is_const_v); - static_assert(!std::is_volatile_v); - }); - static_cast(arr).for_each( - [](size_t, auto&& elem) noexcept - { - using elem_ref_type = decltype(elem); - static_assert(std::is_lvalue_reference_v); - - using elem_type = std::remove_reference_t; - static_assert(!std::is_const_v); - static_assert(!std::is_volatile_v); - }); - static_cast(arr).for_each( - [](auto&& elem) noexcept - { - using elem_ref_type = decltype(elem); - static_assert(std::is_lvalue_reference_v); - - using elem_type = std::remove_reference_t; - static_assert(!std::is_const_v); - static_assert(!std::is_volatile_v); - }); - - // check rvalue propagates correctly - static_cast(arr).for_each( - [](auto&& elem, size_t) noexcept - { - using elem_ref_type = decltype(elem); - static_assert(std::is_rvalue_reference_v); - - using elem_type = std::remove_reference_t; - static_assert(!std::is_const_v); - static_assert(!std::is_volatile_v); - }); - static_cast(arr).for_each( - [](size_t, auto&& elem) noexcept - { - using elem_ref_type = decltype(elem); - static_assert(std::is_rvalue_reference_v); - - using elem_type = std::remove_reference_t; - static_assert(!std::is_const_v); - static_assert(!std::is_volatile_v); - }); - static_cast(arr).for_each( - [](auto&& elem) noexcept - { - using elem_ref_type = decltype(elem); - static_assert(std::is_rvalue_reference_v); - - using elem_type = std::remove_reference_t; - static_assert(!std::is_const_v); - static_assert(!std::is_volatile_v); - }); - - // check const lvalue propagates correctly - static_cast(arr).for_each( - [](auto&& elem, size_t) noexcept - { - using elem_ref_type = decltype(elem); - static_assert(std::is_lvalue_reference_v); - - using elem_type = std::remove_reference_t; - static_assert(std::is_const_v); - static_assert(!std::is_volatile_v); - }); - static_cast(arr).for_each( - [](size_t, auto&& elem) noexcept - { - using elem_ref_type = decltype(elem); - static_assert(std::is_lvalue_reference_v); - - using elem_type = std::remove_reference_t; - static_assert(std::is_const_v); - static_assert(!std::is_volatile_v); - }); - static_cast(arr).for_each( - [](auto&& elem) noexcept - { - using elem_ref_type = decltype(elem); - static_assert(std::is_lvalue_reference_v); - - using elem_type = std::remove_reference_t; - static_assert(std::is_const_v); - static_assert(!std::is_volatile_v); - }); - - // check const rvalue propagates correctly - static_cast(arr).for_each( - [](auto&& elem, size_t) noexcept - { - using elem_ref_type = decltype(elem); - static_assert(std::is_rvalue_reference_v); - - using elem_type = std::remove_reference_t; - static_assert(std::is_const_v); - static_assert(!std::is_volatile_v); - }); - static_cast(arr).for_each( - [](size_t, auto&& elem) noexcept - { - using elem_ref_type = decltype(elem); - static_assert(std::is_rvalue_reference_v); - - using elem_type = std::remove_reference_t; - static_assert(std::is_const_v); - static_assert(!std::is_volatile_v); - }); - static_cast(arr).for_each( - [](auto&& elem) noexcept - { - using elem_ref_type = decltype(elem); - static_assert(std::is_rvalue_reference_v); - - using elem_type = std::remove_reference_t; - static_assert(std::is_const_v); - static_assert(!std::is_volatile_v); - }); - - // check noexcept - func(elem, i) - { - static constexpr auto throwing_visitor = [](auto&&, size_t) noexcept(false) {}; - static constexpr auto non_throwing_visitor = [](auto&&, size_t) noexcept(true) {}; - static_assert(!noexcept(static_cast(arr).for_each(throwing_visitor))); - static_assert(!noexcept(static_cast(arr).for_each(throwing_visitor))); - static_assert(!noexcept(static_cast(arr).for_each(throwing_visitor))); - static_assert(!noexcept(static_cast(arr).for_each(throwing_visitor))); - static_assert(noexcept(static_cast(arr).for_each(non_throwing_visitor))); - static_assert(noexcept(static_cast(arr).for_each(non_throwing_visitor))); - static_assert(noexcept(static_cast(arr).for_each(non_throwing_visitor))); - static_assert(noexcept(static_cast(arr).for_each(non_throwing_visitor))); - } - - // check noexcept - func(i, elem) - { - static constexpr auto throwing_visitor = [](size_t, auto&&) noexcept(false) {}; - static constexpr auto non_throwing_visitor = [](size_t, auto&&) noexcept(true) {}; - static_assert(!noexcept(static_cast(arr).for_each(throwing_visitor))); - static_assert(!noexcept(static_cast(arr).for_each(throwing_visitor))); - static_assert(!noexcept(static_cast(arr).for_each(throwing_visitor))); - static_assert(!noexcept(static_cast(arr).for_each(throwing_visitor))); - static_assert(noexcept(static_cast(arr).for_each(non_throwing_visitor))); - static_assert(noexcept(static_cast(arr).for_each(non_throwing_visitor))); - static_assert(noexcept(static_cast(arr).for_each(non_throwing_visitor))); - static_assert(noexcept(static_cast(arr).for_each(non_throwing_visitor))); - } - - // check noexcept - func(elem) - { - static constexpr auto throwing_visitor = [](auto&&) noexcept(false) {}; - static constexpr auto non_throwing_visitor = [](auto&&) noexcept(true) {}; - static_assert(!noexcept(static_cast(arr).for_each(throwing_visitor))); - static_assert(!noexcept(static_cast(arr).for_each(throwing_visitor))); - static_assert(!noexcept(static_cast(arr).for_each(throwing_visitor))); - static_assert(!noexcept(static_cast(arr).for_each(throwing_visitor))); - static_assert(noexcept(static_cast(arr).for_each(non_throwing_visitor))); - static_assert(noexcept(static_cast(arr).for_each(non_throwing_visitor))); - static_assert(noexcept(static_cast(arr).for_each(non_throwing_visitor))); - static_assert(noexcept(static_cast(arr).for_each(non_throwing_visitor))); - } - - // check that the iteration actually does what it says on the box - { - toml::array arr2; - arr.for_each([&](const auto& val) { arr2.push_back(val); }); - CHECK(arr == arr2); - } - - // check that visitation works for a specific type - { - toml::array arr2; - arr.for_each([&](const toml::value& val) { arr2.push_back(val); }); - CHECK(arr2 == toml::array{ 0, 1, 2, 6 }); - } - -#if !TOML_RETURN_BOOL_FROM_FOR_EACH_BROKEN - - // check that early-stopping works - { - toml::array arr2; - arr.for_each( - [&](const auto& val) - { - if constexpr (!toml::is_number) - return false; - else - { - arr2.push_back(val); - return true; - } - }); - CHECK(arr2 == toml::array{ 0, 1, 2, 3.0 }); - } - -#endif -} - -TEST_CASE("table::for_each") -{ - table tbl{ { "zero", 0 }, // - { "one", 1 }, // - { "two", 2 }, // - { "three", 3.0 }, // - { "four", "four" }, // - { "five", "five" }, // - { "six", 6 } }; - - // check lvalue propagates correctly - static_cast(tbl).for_each( - [](const toml::key&, auto&& elem) noexcept - { - using elem_ref_type = decltype(elem); - static_assert(std::is_lvalue_reference_v); - - using elem_type = std::remove_reference_t; - static_assert(!std::is_const_v); - static_assert(!std::is_volatile_v); - }); - static_cast(tbl).for_each( - [](auto&& elem) noexcept - { - using elem_ref_type = decltype(elem); - static_assert(std::is_lvalue_reference_v); - - using elem_type = std::remove_reference_t; - static_assert(!std::is_const_v); - static_assert(!std::is_volatile_v); - }); - - // check rvalue propagates correctly - static_cast(tbl).for_each( - [](const toml::key&, auto&& elem) noexcept - { - using elem_ref_type = decltype(elem); - static_assert(std::is_rvalue_reference_v); - - using elem_type = std::remove_reference_t; - static_assert(!std::is_const_v); - static_assert(!std::is_volatile_v); - }); - static_cast(tbl).for_each( - [](auto&& elem) noexcept - { - using elem_ref_type = decltype(elem); - static_assert(std::is_rvalue_reference_v); - - using elem_type = std::remove_reference_t; - static_assert(!std::is_const_v); - static_assert(!std::is_volatile_v); - }); - - // check const lvalue propagates correctly - static_cast(tbl).for_each( - [](const toml::key&, auto&& elem) noexcept - { - using elem_ref_type = decltype(elem); - static_assert(std::is_lvalue_reference_v); - - using elem_type = std::remove_reference_t; - static_assert(std::is_const_v); - static_assert(!std::is_volatile_v); - }); - static_cast(tbl).for_each( - [](auto&& elem) noexcept - { - using elem_ref_type = decltype(elem); - static_assert(std::is_lvalue_reference_v); - - using elem_type = std::remove_reference_t; - static_assert(std::is_const_v); - static_assert(!std::is_volatile_v); - }); - - // check const rvalue propagates correctly - static_cast(tbl).for_each( - [](const toml::key&, auto&& elem) noexcept - { - using elem_ref_type = decltype(elem); - static_assert(std::is_rvalue_reference_v); - - using elem_type = std::remove_reference_t; - static_assert(std::is_const_v); - static_assert(!std::is_volatile_v); - }); - static_cast(tbl).for_each( - [](auto&& elem) noexcept - { - using elem_ref_type = decltype(elem); - static_assert(std::is_rvalue_reference_v); - - using elem_type = std::remove_reference_t; - static_assert(std::is_const_v); - static_assert(!std::is_volatile_v); - }); - - // check noexcept - func(key, value) - { - static constexpr auto throwing_visitor = [](const toml::key&, auto&&) noexcept(false) {}; - static constexpr auto non_throwing_visitor = [](const toml::key&, auto&&) noexcept(true) {}; - static_assert(!noexcept(static_cast(tbl).for_each(throwing_visitor))); - static_assert(!noexcept(static_cast(tbl).for_each(throwing_visitor))); - static_assert(!noexcept(static_cast(tbl).for_each(throwing_visitor))); - static_assert(!noexcept(static_cast(tbl).for_each(throwing_visitor))); - static_assert(noexcept(static_cast(tbl).for_each(non_throwing_visitor))); - static_assert(noexcept(static_cast(tbl).for_each(non_throwing_visitor))); - static_assert(noexcept(static_cast(tbl).for_each(non_throwing_visitor))); - static_assert(noexcept(static_cast(tbl).for_each(non_throwing_visitor))); - } - - // check noexcept - func(value) - { - static constexpr auto throwing_visitor = [](auto&&) noexcept(false) {}; - static constexpr auto non_throwing_visitor = [](auto&&) noexcept(true) {}; - static_assert(!noexcept(static_cast(tbl).for_each(throwing_visitor))); - static_assert(!noexcept(static_cast(tbl).for_each(throwing_visitor))); - static_assert(!noexcept(static_cast(tbl).for_each(throwing_visitor))); - static_assert(!noexcept(static_cast(tbl).for_each(throwing_visitor))); - static_assert(noexcept(static_cast(tbl).for_each(non_throwing_visitor))); - static_assert(noexcept(static_cast(tbl).for_each(non_throwing_visitor))); - static_assert(noexcept(static_cast(tbl).for_each(non_throwing_visitor))); - static_assert(noexcept(static_cast(tbl).for_each(non_throwing_visitor))); - } - - // check that the iteration actually does what it says on the box - { - toml::table tbl2; - tbl.for_each([&](auto&& key, auto&& val) { tbl2.insert_or_assign(key, val); }); - CHECK(tbl == tbl2); - } - - // check that visitation works for a specific type - { - toml::table tbl2; - tbl.for_each([&](auto&& key, const toml::value& val) { tbl2.insert_or_assign(key, val); }); - CHECK(tbl2 - == table{ { "zero", 0 }, // - { "one", 1 }, // - { "two", 2 }, // - { "six", 6 } }); - } - -#if !TOML_RETURN_BOOL_FROM_FOR_EACH_BROKEN - - // check that early-stopping works - { - toml::table tbl2; - size_t added{}; - tbl.for_each( - [&](auto&& key, const auto& val) - { - tbl2.insert_or_assign(key, val); - added++; - return added < 3u; - }); - CHECK(tbl2.size() == 3u); - } - -#endif -} diff --git a/tests/formatters.cpp b/tests/formatters.cpp deleted file mode 100644 index a0cd35f..0000000 --- a/tests/formatters.cpp +++ /dev/null @@ -1,332 +0,0 @@ -// This file is a part of toml++ and is subject to the the terms of the MIT license. -// Copyright (c) Mark Gillard -// See https://github.com/marzer/tomlplusplus/blob/master/LICENSE for the full license text. -// SPDX-License-Identifier: MIT - -#include "tests.hpp" - -namespace -{ - template - static auto format_to_string(const T& obj, - format_flags flags = Formatter::default_flags, - format_flags exclude_flags = format_flags::none) - { - std::stringstream ss; - ss << "*****\n" << Formatter{ obj, flags & ~(exclude_flags) } << "\n*****"; - return ss.str(); - } - - struct char32_printer - { - char32_t value; - - friend std::ostream& operator<<(std::ostream& os, const char32_printer& p) - { - if (p.value <= U'\x1F') - return os << '\'' << impl::control_char_escapes[static_cast(p.value)] << '\''; - else if (p.value == U'\x7F') - return os << "'\\u007F'"sv; - else if (p.value < 127u) - return os << '\'' << static_cast(static_cast(p.value)) << '\''; - else - return os << static_cast(p.value); - } - }; - - struct string_difference - { - source_position position; - size_t index; - char32_t a, b; - - friend std::ostream& operator<<(std::ostream& os, const string_difference& diff) - { - if (diff.a && diff.b && diff.a != diff.b) - os << char32_printer{ diff.a } << " vs "sv << char32_printer{ diff.b } << " at "sv; - return os << diff.position << ", index "sv << diff.index; - } - }; - - static optional find_first_difference(std::string_view str_a, std::string_view str_b) noexcept - { - string_difference diff{ { 1u, 1u } }; - impl::utf8_decoder a, b; - - for (size_t i = 0, e = std::min(str_a.length(), str_b.length()); i < e; i++, diff.index++) - { - a(static_cast(str_a[i])); - b(static_cast(str_b[i])); - if (a.has_code_point() != b.has_code_point() || a.error() != b.error()) - return diff; - - if (a.error()) - { - a.reset(); - b.reset(); - continue; - } - - if (!a.has_code_point()) - continue; - - if (a.codepoint != b.codepoint) - { - diff.a = a.codepoint; - diff.b = b.codepoint; - return diff; - } - - if (a.codepoint == U'\n') - { - diff.position.line++; - diff.position.column = 1u; - } - else - diff.position.column++; - } - if (str_a.length() != str_b.length()) - return diff; - return {}; - } -} - -#define CHECK_FORMATTER(formatter, data, expected) \ - do \ - { \ - const auto str = format_to_string(data); \ - const auto diff = find_first_difference(str, expected); \ - if (diff) \ - FORCE_FAIL("string mismatch: "sv << *diff); \ - } \ - while (false) - -TEST_CASE("formatters") -{ - const auto data_date = toml::date{ 2021, 11, 2 }; - const auto data_time = toml::time{ 20, 33, 0 }; - const auto data = toml::table{ - { "integers"sv, - toml::table{ { "zero"sv, 0 }, - { "one"sv, 1 }, - { "dec"sv, 10 }, - { "bin"sv, 10, toml::value_flags::format_as_binary }, - { "oct"sv, 10, toml::value_flags::format_as_octal }, - { "hex"sv, 10, toml::value_flags::format_as_hexadecimal } } }, - { "floats"sv, - toml::table{ { "pos_zero"sv, +0.0 }, - { "neg_zero"sv, -0.0 }, - { "one"sv, 1.0 }, - { "pos_inf"sv, +std::numeric_limits::infinity() }, - { "neg_inf"sv, -std::numeric_limits::infinity() }, - { "pos_nan"sv, +std::numeric_limits::quiet_NaN() }, - { "neg_nan"sv, -std::numeric_limits::quiet_NaN() } - - } }, - - { "dates and times"sv, - toml::table{ - - { "dates"sv, toml::table{ { "val"sv, data_date } } }, - - { "times"sv, toml::table{ { "val"sv, data_time } } }, - - { "date-times"sv, - toml::table{ - - { "local"sv, toml::table{ { "val"sv, toml::date_time{ data_date, data_time } } } }, - { "offset"sv, - toml::table{ - { "val"sv, toml::date_time{ data_date, data_time, toml::time_offset{} } } } } } } } }, - - { "bools"sv, - toml::table{ { "true"sv, true }, // - { "false"sv, false } } }, - - { - "strings"sv, - toml::array{ R"()"sv, - R"(string)"sv, - R"(string with a single quote in it: ')"sv, - R"(string with a double quote in it: ")"sv, - "string with a tab: \t"sv, - R"(a long string to force the array over multiple lines)"sv }, - }, - - { "a"sv, - toml::table{ { "val", true }, - { "b"sv, toml::table{ { "val", true }, { "c"sv, toml::table{ { "val", true } } } } } } } - - }; - - SECTION("toml_formatter") - { - static constexpr auto expected = R"(***** -strings = [ - '', - 'string', - "string with a single quote in it: '", - 'string with a double quote in it: "', - 'string with a tab: ', - 'a long string to force the array over multiple lines' -] - -[a] -val = true - - [a.b] - val = true - - [a.b.c] - val = true - -[bools] -false = false -true = true - -['dates and times'.date-times.local] -val = 2021-11-02T20:33:00 - -['dates and times'.date-times.offset] -val = 2021-11-02T20:33:00Z - -['dates and times'.dates] -val = 2021-11-02 - -['dates and times'.times] -val = 20:33:00 - -[floats] -neg_inf = -inf -neg_nan = nan -neg_zero = -0.0 -one = 1.0 -pos_inf = inf -pos_nan = nan -pos_zero = 0.0 - -[integers] -bin = 0b1010 -dec = 10 -hex = 0xA -oct = 0o12 -one = 1 -zero = 0 -*****)"sv; - - CHECK_FORMATTER(toml_formatter, data, expected); - } - - SECTION("json_formatter") - { - static constexpr auto expected = R"(***** -{ - "a" : { - "b" : { - "c" : { - "val" : true - }, - "val" : true - }, - "val" : true - }, - "bools" : { - "false" : false, - "true" : true - }, - "dates and times" : { - "date-times" : { - "local" : { - "val" : "2021-11-02T20:33:00" - }, - "offset" : { - "val" : "2021-11-02T20:33:00Z" - } - }, - "dates" : { - "val" : "2021-11-02" - }, - "times" : { - "val" : "20:33:00" - } - }, - "floats" : { - "neg_inf" : "-Infinity", - "neg_nan" : "NaN", - "neg_zero" : -0.0, - "one" : 1.0, - "pos_inf" : "Infinity", - "pos_nan" : "NaN", - "pos_zero" : 0.0 - }, - "integers" : { - "bin" : 10, - "dec" : 10, - "hex" : 10, - "oct" : 10, - "one" : 1, - "zero" : 0 - }, - "strings" : [ - "", - "string", - "string with a single quote in it: '", - "string with a double quote in it: \"", - "string with a tab: \t", - "a long string to force the array over multiple lines" - ] -} -*****)"sv; - - CHECK_FORMATTER(json_formatter, data, expected); - } - - SECTION("yaml_formatter") - { - static constexpr auto expected = R"(***** -a: - b: - c: - val: true - val: true - val: true -bools: - false: false - true: true -'dates and times': - date-times: - local: - val: '2021-11-02T20:33:00' - offset: - val: '2021-11-02T20:33:00Z' - dates: - val: '2021-11-02' - times: - val: '20:33:00' -floats: - neg_inf: -.inf - neg_nan: .NAN - neg_zero: -0.0 - one: 1.0 - pos_inf: .inf - pos_nan: .NAN - pos_zero: 0.0 -integers: - bin: 10 - dec: 10 - hex: 0xA - oct: 0o12 - one: 1 - zero: 0 -strings: - - '' - - string - - "string with a single quote in it: '" - - 'string with a double quote in it: "' - - "string with a tab: \t" - - 'a long string to force the array over multiple lines' -*****)"sv; - - CHECK_FORMATTER(yaml_formatter, data, expected); - } -} diff --git a/tests/impl_toml.cpp b/tests/impl_toml.cpp deleted file mode 100644 index bdf23a3..0000000 --- a/tests/impl_toml.cpp +++ /dev/null @@ -1,407 +0,0 @@ -// This file is a part of toml++ and is subject to the the terms of the MIT license. -// Copyright (c) Mark Gillard -// See https://github.com/marzer/tomlplusplus/blob/master/LICENSE for the full license text. -// SPDX-License-Identifier: MIT - -#include "settings.hpp" -#if !TOML_HEADER_ONLY && !TOML_SHARED_LIB -#define TOML_IMPLEMENTATION -#endif - -#if USE_SINGLE_HEADER -#include "../toml.hpp" -#else -#include "../include/toml++/toml.hpp" -#endif - -namespace toml -{ - using std::declval; - using std::is_same_v; - -#define CHECK_NODE_TYPE_MAPPING(T, expected) \ - static_assert(impl::node_type_of == expected); \ - static_assert(impl::node_type_of == expected); \ - static_assert(impl::node_type_of == expected); \ - static_assert(impl::node_type_of == expected); \ - static_assert(impl::node_type_of == expected); \ - static_assert(impl::node_type_of == expected); \ - static_assert(impl::node_type_of == expected); \ - static_assert(impl::node_type_of == expected); \ - static_assert(impl::node_type_of == expected); \ - static_assert(impl::node_type_of == expected); \ - static_assert(impl::node_type_of == expected); \ - static_assert(impl::node_type_of == expected) - - CHECK_NODE_TYPE_MAPPING(int64_t, node_type::integer); - CHECK_NODE_TYPE_MAPPING(double, node_type::floating_point); - CHECK_NODE_TYPE_MAPPING(std::string, node_type::string); - CHECK_NODE_TYPE_MAPPING(bool, node_type::boolean); - CHECK_NODE_TYPE_MAPPING(toml::date, node_type::date); - CHECK_NODE_TYPE_MAPPING(toml::time, node_type::time); - CHECK_NODE_TYPE_MAPPING(toml::date_time, node_type::date_time); - CHECK_NODE_TYPE_MAPPING(toml::array, node_type::array); - CHECK_NODE_TYPE_MAPPING(toml::table, node_type::table); - -#define CHECK_CAN_REPRESENT_NATIVE(T, expected) \ - static_assert((impl::value_traits::is_native || impl::value_traits::can_represent_native) == expected) - - CHECK_CAN_REPRESENT_NATIVE(time, true); - CHECK_CAN_REPRESENT_NATIVE(date, true); - CHECK_CAN_REPRESENT_NATIVE(date_time, true); - CHECK_CAN_REPRESENT_NATIVE(bool, true); - CHECK_CAN_REPRESENT_NATIVE(int8_t, false); - CHECK_CAN_REPRESENT_NATIVE(int16_t, false); - CHECK_CAN_REPRESENT_NATIVE(int32_t, false); - CHECK_CAN_REPRESENT_NATIVE(int64_t, true); - CHECK_CAN_REPRESENT_NATIVE(uint8_t, false); - CHECK_CAN_REPRESENT_NATIVE(uint16_t, false); - CHECK_CAN_REPRESENT_NATIVE(uint32_t, false); - CHECK_CAN_REPRESENT_NATIVE(uint64_t, false); - CHECK_CAN_REPRESENT_NATIVE(float, false); - CHECK_CAN_REPRESENT_NATIVE(double, true); -#ifdef TOML_INT128 - CHECK_CAN_REPRESENT_NATIVE(TOML_INT128, true); - CHECK_CAN_REPRESENT_NATIVE(TOML_UINT128, false); -#endif -#if TOML_ENABLE_FLOAT16 - CHECK_CAN_REPRESENT_NATIVE(_Float16, false); -#endif -#ifdef TOML_FLOAT128 - CHECK_CAN_REPRESENT_NATIVE(TOML_FLOAT128, true); -#endif - - CHECK_CAN_REPRESENT_NATIVE(char*, false); - CHECK_CAN_REPRESENT_NATIVE(char* const, false); - CHECK_CAN_REPRESENT_NATIVE(char[2], false); - CHECK_CAN_REPRESENT_NATIVE(const char[2], false); - CHECK_CAN_REPRESENT_NATIVE(char (&)[2], false); - CHECK_CAN_REPRESENT_NATIVE(const char (&)[2], false); - CHECK_CAN_REPRESENT_NATIVE(char (&&)[2], false); - CHECK_CAN_REPRESENT_NATIVE(const char (&&)[2], false); - CHECK_CAN_REPRESENT_NATIVE(const char*, true); - CHECK_CAN_REPRESENT_NATIVE(const char* const, true); - CHECK_CAN_REPRESENT_NATIVE(std::string, true); - CHECK_CAN_REPRESENT_NATIVE(std::string_view, true); -#if TOML_HAS_CHAR8 - CHECK_CAN_REPRESENT_NATIVE(char8_t*, false); - CHECK_CAN_REPRESENT_NATIVE(char8_t* const, false); - CHECK_CAN_REPRESENT_NATIVE(char8_t[2], false); - CHECK_CAN_REPRESENT_NATIVE(const char8_t[2], false); - CHECK_CAN_REPRESENT_NATIVE(char8_t (&)[2], false); - CHECK_CAN_REPRESENT_NATIVE(const char8_t (&)[2], false); - CHECK_CAN_REPRESENT_NATIVE(char (&&)[2], false); - CHECK_CAN_REPRESENT_NATIVE(const char8_t (&&)[2], false); - CHECK_CAN_REPRESENT_NATIVE(const char8_t*, true); - CHECK_CAN_REPRESENT_NATIVE(const char8_t* const, true); - CHECK_CAN_REPRESENT_NATIVE(std::u8string, true); - CHECK_CAN_REPRESENT_NATIVE(std::u8string_view, true); -#endif - CHECK_CAN_REPRESENT_NATIVE(wchar_t*, false); - CHECK_CAN_REPRESENT_NATIVE(wchar_t* const, false); - CHECK_CAN_REPRESENT_NATIVE(wchar_t[2], false); - CHECK_CAN_REPRESENT_NATIVE(const wchar_t[2], false); - CHECK_CAN_REPRESENT_NATIVE(wchar_t (&)[2], false); - CHECK_CAN_REPRESENT_NATIVE(const wchar_t (&)[2], false); - CHECK_CAN_REPRESENT_NATIVE(wchar_t (&&)[2], false); - CHECK_CAN_REPRESENT_NATIVE(const wchar_t (&&)[2], false); - CHECK_CAN_REPRESENT_NATIVE(const wchar_t*, false); - CHECK_CAN_REPRESENT_NATIVE(const wchar_t* const, false); - CHECK_CAN_REPRESENT_NATIVE(std::wstring, !!TOML_ENABLE_WINDOWS_COMPAT); - CHECK_CAN_REPRESENT_NATIVE(std::wstring_view, false); - -#define CHECK_VALUE_EXACT(T, expected) \ - static_assert(is_same_v().value_exact()), optional>); \ - static_assert(is_same_v>().value_exact()), optional>); \ - static_assert(is_same_v>().value_exact()), optional>) - -#define CHECK_VALUE_OR(T, expected) \ - static_assert(is_same_v().value_or(declval())), expected>); \ - static_assert(is_same_v>().value_or(declval())), expected>); \ - static_assert(is_same_v>().value_or(declval())), expected>) - - CHECK_VALUE_EXACT(time, time); - CHECK_VALUE_EXACT(date, date); - CHECK_VALUE_EXACT(date_time, date_time); - CHECK_VALUE_EXACT(bool, bool); - CHECK_VALUE_EXACT(double, double); - CHECK_VALUE_EXACT(int64_t, int64_t); - CHECK_VALUE_EXACT(const char*, const char*); - CHECK_VALUE_EXACT(std::string_view, std::string_view); - CHECK_VALUE_EXACT(std::string, std::string); -#if TOML_HAS_CHAR8 - CHECK_VALUE_EXACT(const char8_t*, const char8_t*); - CHECK_VALUE_EXACT(std::u8string_view, std::u8string_view); - CHECK_VALUE_EXACT(std::u8string, std::u8string); -#endif - - CHECK_VALUE_OR(time, time); - CHECK_VALUE_OR(time&, time); - CHECK_VALUE_OR(time&&, time); - CHECK_VALUE_OR(time const, time); - CHECK_VALUE_OR(date, date); - CHECK_VALUE_OR(date&, date); - CHECK_VALUE_OR(date&&, date); - CHECK_VALUE_OR(date const, date); - CHECK_VALUE_OR(date_time, date_time); - CHECK_VALUE_OR(date_time&, date_time); - CHECK_VALUE_OR(date_time&&, date_time); - CHECK_VALUE_OR(date_time const, date_time); - CHECK_VALUE_OR(bool, bool); - CHECK_VALUE_OR(bool&, bool); - CHECK_VALUE_OR(bool&&, bool); - CHECK_VALUE_OR(bool const, bool); - CHECK_VALUE_OR(int32_t, int32_t); - CHECK_VALUE_OR(int32_t&, int32_t); - CHECK_VALUE_OR(int32_t&&, int32_t); - CHECK_VALUE_OR(int32_t const, int32_t); - CHECK_VALUE_OR(int64_t, int64_t); - CHECK_VALUE_OR(int64_t&, int64_t); - CHECK_VALUE_OR(int64_t&&, int64_t); - CHECK_VALUE_OR(int64_t const, int64_t); -#ifdef TOML_INT128 - CHECK_VALUE_OR(TOML_INT128, TOML_INT128); - CHECK_VALUE_OR(TOML_INT128&, TOML_INT128); - CHECK_VALUE_OR(TOML_INT128&&, TOML_INT128); - CHECK_VALUE_OR(TOML_INT128 const, TOML_INT128); - CHECK_VALUE_OR(TOML_UINT128, TOML_UINT128); - CHECK_VALUE_OR(TOML_UINT128&, TOML_UINT128); - CHECK_VALUE_OR(TOML_UINT128&&, TOML_UINT128); - CHECK_VALUE_OR(TOML_UINT128 const, TOML_UINT128); -#endif - CHECK_VALUE_OR(float, float); - CHECK_VALUE_OR(float&, float); - CHECK_VALUE_OR(float&&, float); - CHECK_VALUE_OR(float const, float); - CHECK_VALUE_OR(double, double); - CHECK_VALUE_OR(double&, double); - CHECK_VALUE_OR(double&&, double); - CHECK_VALUE_OR(double const, double); -#ifdef TOML_FLOAT128 - CHECK_VALUE_OR(TOML_FLOAT128, TOML_FLOAT128); - CHECK_VALUE_OR(TOML_FLOAT128&, TOML_FLOAT128); - CHECK_VALUE_OR(TOML_FLOAT128&&, TOML_FLOAT128); - CHECK_VALUE_OR(TOML_FLOAT128 const, TOML_FLOAT128); -#endif - CHECK_VALUE_OR(char*, const char*); - CHECK_VALUE_OR(char*&, const char*); - CHECK_VALUE_OR(char*&&, const char*); - CHECK_VALUE_OR(char* const, const char*); - CHECK_VALUE_OR(char[2], const char*); - CHECK_VALUE_OR(char (&)[2], const char*); - CHECK_VALUE_OR(char (&&)[2], const char*); - CHECK_VALUE_OR(const char*, const char*); - CHECK_VALUE_OR(const char*&, const char*); - CHECK_VALUE_OR(const char*&&, const char*); - CHECK_VALUE_OR(const char* const, const char*); - CHECK_VALUE_OR(const char[2], const char*); - CHECK_VALUE_OR(const char (&)[2], const char*); - CHECK_VALUE_OR(const char (&&)[2], const char*); - CHECK_VALUE_OR(std::string_view, std::string_view); - CHECK_VALUE_OR(std::string_view&, std::string_view); - CHECK_VALUE_OR(std::string_view&&, std::string_view); - CHECK_VALUE_OR(const std::string_view, std::string_view); - CHECK_VALUE_OR(const std::string_view&, std::string_view); - CHECK_VALUE_OR(const std::string_view&&, std::string_view); - CHECK_VALUE_OR(std::string, std::string); - CHECK_VALUE_OR(std::string&, std::string); - CHECK_VALUE_OR(std::string&&, std::string); - CHECK_VALUE_OR(const std::string, std::string); - CHECK_VALUE_OR(const std::string&, std::string); - CHECK_VALUE_OR(const std::string&&, std::string); -#if TOML_HAS_CHAR8 - CHECK_VALUE_OR(char8_t*, const char8_t*); - CHECK_VALUE_OR(char8_t*&, const char8_t*); - CHECK_VALUE_OR(char8_t*&&, const char8_t*); - CHECK_VALUE_OR(char8_t* const, const char8_t*); - CHECK_VALUE_OR(char8_t[2], const char8_t*); - CHECK_VALUE_OR(char8_t (&)[2], const char8_t*); - CHECK_VALUE_OR(char8_t (&&)[2], const char8_t*); - CHECK_VALUE_OR(const char8_t*, const char8_t*); - CHECK_VALUE_OR(const char8_t*&, const char8_t*); - CHECK_VALUE_OR(const char8_t*&&, const char8_t*); - CHECK_VALUE_OR(const char8_t* const, const char8_t*); - CHECK_VALUE_OR(const char8_t[2], const char8_t*); - CHECK_VALUE_OR(const char8_t (&)[2], const char8_t*); - CHECK_VALUE_OR(const char8_t (&&)[2], const char8_t*); - CHECK_VALUE_OR(std::u8string_view, std::u8string_view); - CHECK_VALUE_OR(std::u8string_view&, std::u8string_view); - CHECK_VALUE_OR(std::u8string_view&&, std::u8string_view); - CHECK_VALUE_OR(const std::u8string_view, std::u8string_view); - CHECK_VALUE_OR(const std::u8string_view&, std::u8string_view); - CHECK_VALUE_OR(const std::u8string_view&&, std::u8string_view); - CHECK_VALUE_OR(std::u8string, std::u8string); - CHECK_VALUE_OR(std::u8string&, std::u8string); - CHECK_VALUE_OR(std::u8string&&, std::u8string); - CHECK_VALUE_OR(const std::u8string, std::u8string); - CHECK_VALUE_OR(const std::u8string&, std::u8string); - CHECK_VALUE_OR(const std::u8string&&, std::u8string); -#endif -#if TOML_ENABLE_WINDOWS_COMPAT - CHECK_VALUE_OR(wchar_t*, std::wstring); - CHECK_VALUE_OR(wchar_t*&, std::wstring); - CHECK_VALUE_OR(wchar_t*&&, std::wstring); - CHECK_VALUE_OR(wchar_t* const, std::wstring); - CHECK_VALUE_OR(wchar_t[2], std::wstring); - CHECK_VALUE_OR(wchar_t (&)[2], std::wstring); - CHECK_VALUE_OR(wchar_t (&&)[2], std::wstring); - CHECK_VALUE_OR(const wchar_t*, std::wstring); - CHECK_VALUE_OR(const wchar_t*&, std::wstring); - CHECK_VALUE_OR(const wchar_t*&&, std::wstring); - CHECK_VALUE_OR(const wchar_t* const, std::wstring); - CHECK_VALUE_OR(const wchar_t[2], std::wstring); - CHECK_VALUE_OR(const wchar_t (&)[2], std::wstring); - CHECK_VALUE_OR(const wchar_t (&&)[2], std::wstring); - CHECK_VALUE_OR(std::wstring_view, std::wstring); - CHECK_VALUE_OR(std::wstring_view&, std::wstring); - CHECK_VALUE_OR(std::wstring_view&&, std::wstring); - CHECK_VALUE_OR(const std::wstring_view, std::wstring); - CHECK_VALUE_OR(const std::wstring_view&, std::wstring); - CHECK_VALUE_OR(const std::wstring_view&&, std::wstring); - CHECK_VALUE_OR(std::wstring, std::wstring); - CHECK_VALUE_OR(std::wstring&, std::wstring); - CHECK_VALUE_OR(std::wstring&&, std::wstring); - CHECK_VALUE_OR(const std::wstring, std::wstring); - CHECK_VALUE_OR(const std::wstring&, std::wstring); - CHECK_VALUE_OR(const std::wstring&&, std::wstring); -#endif - -#define CHECK_INSERTED_AS(T, expected) \ - static_assert(std::is_same_v, expected>); \ - static_assert(std::is_same_v, expected>); \ - static_assert(std::is_same_v, expected>); \ - static_assert(std::is_same_v, expected>); \ - static_assert(std::is_same_v, expected>) - - CHECK_INSERTED_AS(table, table); - CHECK_INSERTED_AS(array, array); - CHECK_INSERTED_AS(node, node); - CHECK_INSERTED_AS(time, value