diff --git a/.clang-format b/.clang-format deleted file mode 100644 index b0522ba..0000000 --- a/.clang-format +++ /dev/null @@ -1,2 +0,0 @@ -BasedOnStyle: Chromium -ColumnLimit: 120 diff --git a/.clang-tidy b/.clang-tidy deleted file mode 100644 index 3feaab7..0000000 --- a/.clang-tidy +++ /dev/null @@ -1,54 +0,0 @@ ---- -Checks: > - -*, - readability-braces-around-statements, - clang-diagnostic-*, - clang-analyzer-*, - cppcoreguidelines-*, - cppcoreguidelines-*, - readability-*, - modernize-*, - bugprone-*, - chromium-include-order, - performance-for-range-copy, - performance-implicit-conversion-in-loop, - performance-inefficient-algorithm, - performance-inefficient-string-concatenation, - performance-inefficient-vector-operation, - performance-move-const-arg, - performance-move-constructor-init, - performance-no-automatic-move, - performance-no-int-to-ptr, - performance-trivially-destructible, - performance-type-promotion-in-math-fn, - performance-unnecessary-copy-initialization, - performance-unnecessary-value-param, - -modernize-use-trailing-return-type, - -modernize-avoid-c-arrays, - -bugprone-easily-swappable-parameters, - -cppcoreguidelines-avoid-non-const-global-variables, - -cppcoreguidelines-avoid-magic-numbers, - -cppcoreguidelines-pro-bounds-array-to-pointer-decay, - -cppcoreguidelines-special-member-functions, - -cppcoreguidelines-pro-bounds-constant-array-index, - -cppcoreguidelines-non-private-member-variables-in-classes, - -readability-uppercase-literal-suffix, - -readability-identifier-length, - -readability-magic-numbers -WarningsAsErrors: false # should be true once we get there -HeaderFileExtensions: ['h','hh','hpp','hxx'] # enable iff clang-tidy v17+ -ImplementationFileExtensions: ['c','cc','cpp','cxx'] # enable iff clang-tidy v17+ (stops from touching .S assembly files) -HeaderFilterRegex: ".*" -ExtraArgs: ['-Wno-unknown-argument', '-Wno-unknown-warning-option', '-W'] -FormatStyle: file -CheckOptions: - - key: cppcoreguidelines-explicit-virtual-functions.IgnoreDestructors - value: "1" - - key: cppcoreguidelines-non-private-member-variables-in-classes.IgnoreClassesWithAllMemberVariablesBeingPublic - value: "1" - - key: modernize-loop-convert.IncludeStyle - value: google - - key: modernize-pass-by-value.IncludeStyle - value: google - - key: modernize-replace-auto-ptr.IncludeStyle - value: google diff --git a/.gitattributes b/.gitattributes deleted file mode 100644 index 97907e4..0000000 --- a/.gitattributes +++ /dev/null @@ -1,6 +0,0 @@ -include/cxx-prettyprint/* linguist-vendored -include/optional/* linguist-vendored -gh-pages/* linguist-vendored -CMake/* linguist-vendored -doxygen_extras/* linguist-vendored -docs/* linguist-documentation diff --git a/.github/workflows/doxygen.yml b/.github/workflows/doxygen.yml deleted file mode 100644 index f9c6a03..0000000 --- a/.github/workflows/doxygen.yml +++ /dev/null @@ -1,55 +0,0 @@ -name: Generate Doxygen Documentation - -on: - push: - branches: - - main - workflow_dispatch: - -jobs: - generate-docs: - runs-on: ubuntu-latest - - steps: - # Checkout the repository - - name: Checkout repository - uses: actions/checkout@v4 - - - name: Install CMake - uses: lukka/get-cmake@latest - - - name: Install doxygen - uses: ssciwr/doxygen-install@v1 - - - name: Install graphviz - run: | - sudo apt-get update - sudo apt-get install --no-install-recommends -y graphviz - - - name: Run configure - run: cmake -B build -S . -DCMAKE_BUILD_TYPE=Release -DCPPSPEC_BUILD_DOCS=ON - - # Generate Doxygen documentation - - name: Generate Doxygen documentation - run: cmake --build build --target doxygen - - # Deploy to gh-pages branch - - name: Deploy to gh-pages branch - run: | - # Configure Git - git config --global user.name "github-actions[bot]" - git config --global user.email "github-actions[bot]@users.noreply.github.com" - - # Create or switch to gh-pages branch - git fetch origin gh-pages - git checkout --track origin/gh-pages || git checkout -b gh-pages - - # Remove old files and copy new documentation - git rm -rf doxygen || true - mv build/html/ doxygen - touch doxygen/.nojekyll - - # Commit and push changes - git add doxygen - git commit -m "Update Doxygen documentation" - git push origin gh-pages --force diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml deleted file mode 100644 index 16cd127..0000000 --- a/.github/workflows/test.yml +++ /dev/null @@ -1,101 +0,0 @@ -name: Build and Test - -on: - push: - branches: - - main - - develop - pull_request: - branches: - - main - -jobs: - build-and-test: - runs-on: ${{ matrix.os }} - - strategy: - fail-fast: false - matrix: - compiler: [native, llvm-20, gcc-14] - os: [ubuntu-latest, windows-latest, macos-14, macos-15] - exclude: - - os: windows-latest - compiler: gcc-14 - - os: macos-14 - compiler: native # AppleClang is too old - - steps: - - name: Checkout code - uses: actions/checkout@v4 - - - name: Install CMake - uses: lukka/get-cmake@latest - - - name: Install Clang - run: | - brew install llvm@20 - brew link --force --overwrite llvm@20 - LLVM_PREFIX=$(brew --prefix llvm@20) - echo "CC=$LLVM_PREFIX/bin/clang" >> $GITHUB_ENV - echo "CXX=$LLVM_PREFIX/bin/clang++" >> $GITHUB_ENV - echo "LDFLAGS=-L$LLVM_PREFIX/lib/c++ -Wl,-rpath,$LLVM_PREFIX/lib/c++" >> $GITHUB_ENV - if: ${{ matrix.compiler == 'llvm-20' && (matrix.os == 'macos-14' || matrix.os == 'macos-15') }} - - - name: Install LLVM and Clang (Ubuntu) - run: | - wget https://apt.llvm.org/llvm.sh - chmod +x llvm.sh - sudo ./llvm.sh 20 - echo "CC=clang-20" >> $GITHUB_ENV - echo "CXX=clang++-20" >> $GITHUB_ENV - if: ${{ matrix.compiler == 'llvm-20' && matrix.os == 'ubuntu-latest' }} - - - name: Use GCC - run: | - echo "CC=gcc-14" >> $GITHUB_ENV - echo "CXX=g++-14" >> $GITHUB_ENV - if: ${{ matrix.compiler == 'gcc-14' }} - - - name: Configure - run: cmake -B build -DCPPSPEC_BUILD_TESTS=YES - if: ${{ matrix.compiler != 'llvm-20' || matrix.os != 'windows-latest' }} - - - name: Configure ClangCL - run: cmake -B build -DCPPSPEC_BUILD_TESTS=YES -G "Visual Studio 17 2022" -T ClangCL - if: ${{ matrix.compiler == 'llvm-20' && matrix.os == 'windows-latest' }} - - - name: Build - run: cmake --build build --config Release - - - name: Test - run: ctest --test-dir build --build-config Release --output-on-failure - - - name: Upload Test Results - uses: actions/upload-artifact@v4 - if: always() - with: - name: Test Results (${{ matrix.os }} - ${{ matrix.compiler }}) - path: build/spec/results/*.xml - - publish-test-results: - name: "Publish Tests Results" - needs: build-and-test - runs-on: ubuntu-latest - permissions: - checks: write - - # only needed unless run with comment_mode: off - pull-requests: write - - if: always() - - steps: - - name: Download Artifacts - uses: actions/download-artifact@v4 - with: - path: artifacts - - - name: Publish Test Results - uses: EnricoMi/publish-unit-test-result-action@v2 - with: - files: "artifacts/**/*.xml" diff --git a/.gitignore b/.gitignore deleted file mode 100644 index b98d9b1..0000000 --- a/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -build* -.cache -.vscode \ No newline at end of file diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index e6df407..4e6a92c 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,10 +1 @@ -repos: - - repo: https://github.com/rhysd/actionlint - rev: v1.7.7 - hooks: - - id: actionlint - - repo: https://github.com/pre-commit/mirrors-clang-format - rev: v20.1.0 - hooks: - - id: clang-format - types_or: [c, c++] +repos: [] diff --git a/.vscode/extensions.json b/.vscode/extensions.json deleted file mode 100644 index ba2a260..0000000 --- a/.vscode/extensions.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "recommendations": [ - "llvm-vs-code-extensions.vscode-clangd" - ] -} \ No newline at end of file diff --git a/.vscode/launch.json b/.vscode/launch.json deleted file mode 100644 index 0da40ae..0000000 --- a/.vscode/launch.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "version": "0.2.0", - "configurations": [ - { - "type": "lldb", - "preLaunchTask": "CMake: build", - "request": "launch", - "name": "Launch", - "program": "${workspaceFolder}/build/examples/sample/jasmine_intro.exe", - "args": [], - "cwd": "${workspaceFolder}" - }, - ], - "compounds": [] -} \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json deleted file mode 100644 index 2954b1f..0000000 --- a/.vscode/settings.json +++ /dev/null @@ -1,107 +0,0 @@ -{ - "files.associations": { - "*.scons": "python", - "regex": "cpp", - "xutility": "cpp", - "optional": "cpp", - "iosfwd": "cpp", - "type_traits": "cpp", - "functional": "cpp", - "algorithm": "cpp", - "complex": "cpp", - "system_error": "cpp", - "xlocmon": "cpp", - "xtr1common": "cpp", - "array": "cpp", - "atomic": "cpp", - "bit": "cpp", - "cctype": "cpp", - "charconv": "cpp", - "clocale": "cpp", - "cmath": "cpp", - "compare": "cpp", - "concepts": "cpp", - "cstddef": "cpp", - "cstdint": "cpp", - "cstdio": "cpp", - "cstdlib": "cpp", - "cstring": "cpp", - "ctime": "cpp", - "cwchar": "cpp", - "deque": "cpp", - "exception": "cpp", - "format": "cpp", - "forward_list": "cpp", - "initializer_list": "cpp", - "ios": "cpp", - "iostream": "cpp", - "istream": "cpp", - "iterator": "cpp", - "limits": "cpp", - "list": "cpp", - "locale": "cpp", - "memory": "cpp", - "mutex": "cpp", - "new": "cpp", - "ostream": "cpp", - "queue": "cpp", - "ranges": "cpp", - "ratio": "cpp", - "set": "cpp", - "span": "cpp", - "sstream": "cpp", - "stdexcept": "cpp", - "stop_token": "cpp", - "streambuf": "cpp", - "string": "cpp", - "thread": "cpp", - "tuple": "cpp", - "typeinfo": "cpp", - "unordered_map": "cpp", - "unordered_set": "cpp", - "utility": "cpp", - "valarray": "cpp", - "vector": "cpp", - "xfacet": "cpp", - "xhash": "cpp", - "xiosbase": "cpp", - "xlocale": "cpp", - "xlocbuf": "cpp", - "xlocinfo": "cpp", - "xlocmes": "cpp", - "xlocnum": "cpp", - "xloctime": "cpp", - "xmemory": "cpp", - "xstring": "cpp", - "xtree": "cpp" - }, - "cmake.configureArgs": [ - "-DCPPSPEC_BUILD_TESTS=YES", - "-DCPPSPEC_BUILD_EXAMPLES=YES" - ], - "C_Cpp.intelliSenseEngine": "disabled", - "C_Cpp.autocomplete": "disabled", - "C_Cpp.errorSquiggles": "disabled", - "editor.tokenColorCustomizations": { - "textMateRules": [ - { - "scope": "googletest.failed", - "settings": { - "foreground": "#f00" - } - }, - { - "scope": "googletest.passed", - "settings": { - "foreground": "#0f0" - } - }, - { - "scope": "googletest.run", - "settings": { - "foreground": "#0f0" - } - } - ] - }, -} diff --git a/CMakeLists.txt b/CMakeLists.txt deleted file mode 100644 index 83e23cf..0000000 --- a/CMakeLists.txt +++ /dev/null @@ -1,155 +0,0 @@ -cmake_minimum_required(VERSION 3.27 FATAL_ERROR) - -project(c++spec - VERSION 1.0.0 - DESCRIPTION "BDD testing for C++" - LANGUAGES CXX -) - -set(CMAKE_COLOR_DIAGNOSTICS ON) - -cmake_policy(SET CMP0135 NEW) - -include(FetchContent) - -FetchContent_Declare(argparse - GIT_REPOSITORY https://github.com/p-ranav/argparse/ - GIT_TAG v3.2 - GIT_SHALLOW 1 -) -FetchContent_MakeAvailable(argparse) - -FetchContent_Declare(cxx-prettyprint - GIT_REPOSITORY https://github.com/louisdx/cxx-prettyprint/ - GIT_TAG master - GIT_SHALLOW 1 -) -FetchContent_MakeAvailable(cxx-prettyprint) - -add_library(cxx-prettyprint INTERFACE) -target_sources(cxx-prettyprint INTERFACE ${cxx-prettyprint_SOURCE_DIR}/prettyprint.hpp) -target_include_directories(cxx-prettyprint INTERFACE ${cxx-prettyprint_SOURCE_DIR}) - -add_library(c++spec INTERFACE) -target_include_directories(c++spec INTERFACE - $ - $ # /include/cppspec -) -target_link_libraries(c++spec INTERFACE - cxx-prettyprint - argparse -) - -if(NOT CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") - target_compile_options(c++spec INTERFACE -Wno-missing-template-arg-list-after-template-kw -Wno-dollar-in-identifier-extension) -endif() - -FILE(GLOB_RECURSE c++spec_headers ${CMAKE_CURRENT_LIST_DIR}/include/*.hpp) - -option(CPPSPEC_PRECOMPILE_HEADERS "Precompile the C++Spec headers") -if(CPPSPEC_PRECOMPILE_HEADERS) - target_precompile_headers(c++spec INTERFACE - ${c++spec_headers} - ) -endif() - -# HELPERS - -# Add spec -function(add_spec source_file args) - cmake_path(GET source_file STEM spec_name) - add_executable(${spec_name} ${source_file}) - target_link_libraries(${spec_name} c++spec) - target_compile_features(${spec_name} PRIVATE cxx_std_23) - set_target_properties(${spec_name} PROPERTIES - CXX_STANDARD 23 - CXX_STANDARD_REQUIRED YES - ) - add_test(NAME ${spec_name} COMMAND ${CPPSPEC_SPEC_RUNNER} ${spec_name} --verbose ${args}) -endfunction(add_spec) - -# Discover Specs -function(discover_specs spec_folder) - file(GLOB_RECURSE specs RELATIVE ${spec_folder} ${spec_folder}/*_spec.cpp) - - if (${ARGC} GREATER 1) - set(output_junit ${ARGV1}) - else() - set(output_junit FALSE) - endif() - - foreach(spec IN LISTS specs) - cmake_path(GET spec STEM spec_name) - cmake_path(GET spec PARENT_PATH spec_folder) - - if (${output_junit}) - file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/results/${spec_folder}) - add_spec(${spec} "--output-junit;${CMAKE_CURRENT_BINARY_DIR}/results/${spec_folder}/${spec_name}.xml") - else() - add_spec(${spec} "") - endif() - endforeach() -endfunction() - -# OPTIONS -option(CPPSPEC_BUILD_TESTS "Build C++Spec tests") -option(CPPSPEC_BUILD_EXAMPLES "Build C++Spec examples") -option(CPPSPEC_BUILD_DOCS "Build C++Spec documentation") - -if(CPPSPEC_BUILD_TESTS) - enable_testing() - include(CTest) - - # Tests - add_subdirectory(spec) -endif(CPPSPEC_BUILD_TESTS) - -if(CPPSPEC_BUILD_EXAMPLES) - add_subdirectory(examples) -endif(CPPSPEC_BUILD_EXAMPLES) - -# #### Documentation generation ####### -if(CPPSPEC_BUILD_DOCS) - find_package(Doxygen - OPTIONAL_COMPONENTS dot mscgen dia - ) - - if(DOXYGEN_FOUND) - if(NOT ${DOXYGEN_HAVE_DOT}) - message( - "Can't find GraphViz DOT tool for generating images." - "Make sure it's on your PATH or install GraphViz") - endif() - - FetchContent_Declare(doxygen-awesome-css - GIT_REPOSITORY https://github.com/jothepro/doxygen-awesome-css/ - GIT_TAG v2.3.4 - GIT_SHALLOW 1 - ) - FetchContent_MakeAvailable(doxygen-awesome-css) - - set(DOXYGEN_PROJECT_NAME "C++Spec") - set(DOXYGEN_PROJECT_BRIEF "BDD testing for C++") - set(DOXYGEN_RECURSIVE YES) - set(DOXYGEN_EXAMPLE_RECURSIVE YES) - set(DOXYGEN_EXCLUDE_PATTERNS "*/cxx-prettyprint/*") - set(DOXYGEN_NUM_PROC_THREADS ${HOST_NUM_CORES}) - - # From doxygen-awesome - set(DOXYGEN_GENERATE_TREEVIEW YES) - set(DOXYGEN_DISABLE_INDEX NO) - set(DOXYGEN_FULL_SIDEBAR NO) - set(DOXYGEN_HTML_COLORSTYLE LIGHT) - set(DOXYGEN_HTML_EXTRA_STYLESHEET "${doxygen-awesome-css_SOURCE_DIR}/doxygen-awesome.css") - - set(DOXYGEN_USE_MDFILE_AS_MAINPAGE README.md) - - file(GLOB markdown_SOURCES *.md) - - doxygen_add_docs(doxygen ${markdown_SOURCES} include) - else(DOXYGEN_FOUND) - message(WARNING - "Doxygen needs to be installed to generate documentation." - "Please install from https://github.com/doxygen/doxygen/releases") - endif(DOXYGEN_FOUND) -endif(CPPSPEC_BUILD_DOCS) diff --git a/LICENSE.md b/LICENSE.md deleted file mode 100644 index 76dd11b..0000000 --- a/LICENSE.md +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2016 Katherine Whitlock - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/README.md b/README.md deleted file mode 100644 index a8b4960..0000000 --- a/README.md +++ /dev/null @@ -1,85 +0,0 @@ -# C++Spec -[![license](https://img.shields.io/badge/license-MIT-blue)](https://choosealicense.com/licenses/mit/) -[![GitHub Action](https://github.com/toroidal-code/cppspec/actions/workflows/test.yml/badge.svg)]()  -[![GitHub release](https://img.shields.io/github/release/toroidal-code/cppspec.svg)](https://github.com/toroidal-code/cppspec/releases/latest)  -[![Documentation Status](https://readthedocs.org/projects/cppspec/badge/?version=latest)](http://cppspec.readthedocs.org/en/latest/?badge=latest) - -A behavior-driven development testing library for C++ with an RSpec-inspired DSL. - -## Documentation - -See [http://cppspec.readthedocs.org/](http://cppspec.readthedocs.org/) for full documentation and a tutorial. - -## Requirements - -C++Spec requires a compiler and standard library with C++23 support. Currently tested: - -- LLVM/Clang 18 (on Linux, macOS, and Windows) -- GCC 14.2 (on Linux and macOS) -- MSVC 19.43 (on Windows) -- AppleClang 16 (on macOS) - -__Note:__ Only spec files require C++23 (`-std=c++23`). No other part of an existing project's build needs modification. - -## Usage - -The recommended approach is to integrate C++Spec as a CMake subproject: - -```cmake -FetchContent_Declare( - cppspec - GIT_REPOSITORY https://github.com/toroidal-code/cppspec - GIT_TAG VERSION -) -FetchContent_MakeAvailable(cppspec) - -# Or using CPM -CPMAddPackage("gh:toroidal-code/cppspec@VERSION") -``` - -Spec files are picked up automatically with: - -```cmake -discover_specs(specs_folder) -``` - -This creates a separate CTest executable for every file ending in `_spec.cpp` in the given directory (recursive). - -## Introduction - -If you've ever used RSpec or Jasmine, chances are you'll be familiar with C++Spec's syntax. For example, this is a C++Spec version of the first snippet on RSpec's [README](https://github.com/rspec/rspec-core/blob/master/README.md#basic-structure). - -```cpp -#include "cppspec.hpp" -#include "order.hpp" - -describe order_spec("Order", $ { - it("sums the prices of its line items", _ { - Order order; - - order.add_entry(LineItem().set_item(Item() - .set_price(Money(1.11, Money::USD)) - )); - - order.add_entry(LineItem().set_item(Item() - .set_price(Money(1.11, Money::USD)) - .set_quantity(2) - )); - - expect(order.total()).to_equal(Money(5.55, Money::USD)); - }); -}); - -CPPSPEC_MAIN(order_spec); -``` - -## FAQ - -## Attribution -Heavily inspired by [RSpec](https://github.com/rspec) and [Jasmine](http://jasmine.github.io). - -## Authors -Copyright © 2014-2024 Katherine Whitlock - -## License -The project is licensed under the MIT License. diff --git a/gh-pages/_config.yml b/_config.yml similarity index 94% rename from gh-pages/_config.yml rename to _config.yml index 593dd02..8a1dec3 100644 --- a/gh-pages/_config.yml +++ b/_config.yml @@ -25,7 +25,7 @@ links: external: true - name: API Docs - url: /dox/html/index.html + url: /doxygen/index.html - name: Download url: https://github.com/toroidal-code/cppspec/releases/latest diff --git a/gh-pages/_includes/footer.html b/_includes/footer.html similarity index 100% rename from gh-pages/_includes/footer.html rename to _includes/footer.html diff --git a/gh-pages/_includes/navigation.html b/_includes/navigation.html similarity index 100% rename from gh-pages/_includes/navigation.html rename to _includes/navigation.html diff --git a/gh-pages/_layouts/default.html b/_layouts/default.html similarity index 100% rename from gh-pages/_layouts/default.html rename to _layouts/default.html diff --git a/gh-pages/assets/css/highlight.css b/assets/css/highlight.css similarity index 100% rename from gh-pages/assets/css/highlight.css rename to assets/css/highlight.css diff --git a/gh-pages/assets/css/style.css b/assets/css/style.css similarity index 100% rename from gh-pages/assets/css/style.css rename to assets/css/style.css diff --git a/gh-pages/assets/js/main.js b/assets/js/main.js similarity index 100% rename from gh-pages/assets/js/main.js rename to assets/js/main.js diff --git a/docs/index.md b/docs/index.md deleted file mode 100644 index 6c873cd..0000000 --- a/docs/index.md +++ /dev/null @@ -1,54 +0,0 @@ -# C++Spec - -C++Spec is a behavior-driven development library with an RSpec-inspired DSL. - -------------------------------------------------------------------------------- - -## Overview - -C++Spec is a behavior-driven development library for C++ with an RSpec-inspired DSL. Designed -with ease of use and rapid prototyping in mind, C++Spec offers an alternative to traditional -testing libraries and frameworks. - -Also see the [official GitHub pages site](http://toroidal-code.github.io/cppspec/) for more -information. - -## Requirements - -C++Spec requires a compiler and standard library with C++23 support. Currently tested: - -- LLVM/Clang 18 (Linux, macOS, Windows) -- GCC 14.2 (Linux, macOS) -- MSVC 19.43 (Windows) -- AppleClang 16 (macOS) - -## Installing - -The recommended approach is to integrate C++Spec as a CMake subproject: - -```cmake -include(FetchContent) -FetchContent_Declare( - cppspec - GIT_REPOSITORY https://github.com/toroidal-code/cppspec - GIT_TAG VERSION -) -FetchContent_MakeAvailable(cppspec) -``` - -Spec files are picked up automatically with: - -```cmake -discover_specs(specs_folder) -``` - -This creates a separate CTest executable for every file ending in `_spec.cpp` in the given -directory (recursive). - -Alternatively, clone the repository and add the `include/` directory to your include path: - -```sh -git clone https://github.com/toroidal-code/cppspec.git -``` - -Then `#include "cppspec.hpp"` in your spec files. diff --git a/docs/syntax/before_after.md b/docs/syntax/before_after.md deleted file mode 100644 index e892f20..0000000 --- a/docs/syntax/before_after.md +++ /dev/null @@ -1,131 +0,0 @@ -# before_each, after_each, before_all, after_all - -C++Spec provides four lifecycle hooks to manage setup and teardown around examples. - -## before_each - -Runs once **before every `it`** in the enclosing `describe` or `context`: - -```cpp -namespace { int n = 0; } - -describe lifecycle_spec("lifecycle", $ { - before_each([] { n = 0; }); - - it("starts at zero", _ { - expect(n).to_equal(0); - }); - - it("can be set to 5", _ { - n = 5; - expect(n).to_equal(5); - }); - - it("is zero again (reset by before_each)", _ { - expect(n).to_equal(0); - }); -}); -``` - -## after_each - -Runs once **after every `it`** in the enclosing block. Useful for releasing resources or -asserting post-conditions: - -```cpp -namespace { std::FILE* f = nullptr; } - -describe file_spec("File handle", $ { - before_each([] { f = std::tmpfile(); }); - after_each([] { if (f) { std::fclose(f); f = nullptr; } }); - - it("is open after setup", _ { - expect(f).not_().to_be_null(); - }); -}); -``` - -## before_all - -Runs **once** before the first `it` in the enclosing block. Unlike `before_each`, it does -**not** re-run between examples — mutations made inside examples persist: - -```cpp -namespace { int init_count = 0; } - -describe before_all_spec("Expensive setup", $ { - before_all([] { init_count = 42; }); - - it("sees the value set by before_all", _ { - expect(init_count).to_equal(42); - }); - - it("mutations persist (before_all does not re-run)", _ { - init_count = 99; - expect(init_count).to_equal(99); - }); - - it("sees the mutated value from the previous it", _ { - expect(init_count).to_equal(99); - }); -}); -``` - -Use `before_all` only when setup is genuinely expensive and examples do not mutate shared -state, or when mutation is intentional (as above). - -## after_all - -Runs **once** after the last `it` in the enclosing block: - -```cpp -namespace { int x = 0; } - -describe after_all_spec("Timing", $ { - context("inner context", _ { - after_all([] { x = 777; }); - - it("x is still 0 while its run", _ { expect(x).to_equal(0); }); - it("x is still 0 here too", _ { expect(x).to_equal(0); }); - // after_all fires here → x = 777 - }); - - it("outer it sees x == 777 after inner context completed", _ { - expect(x).to_equal(777); - }); -}); -``` - -## Hook inheritance in nested contexts - -Hooks defined in a parent `describe` or `context` run for all `it` blocks in child contexts -as well. Additional hooks registered in a child context run **after** the parent's, stacking -up: - -```cpp -namespace { int total = 0; } - -describe stacked_spec("Stacked hooks", $ { - before_each([] { total = 0; total += 1; }); // runs first: total = 1 - - context("inner", _ { - before_each([] { total += 10; }); // runs second: total = 11 - - it("sees 11", _ { - expect(total).to_equal(11); - }); - }); - - it("outer it sees only 1 (inner before_each does not apply)", _ { - expect(total).to_equal(1); - }); -}); -``` - -Hook execution order for a nested `it`: - -1. Parent `before_each` hooks (outermost first) -2. Child `before_each` hooks -3. The `it` body runs -4. Child `after_each` hooks -5. Parent `after_each` hooks (outermost last) diff --git a/docs/syntax/describe.md b/docs/syntax/describe.md deleted file mode 100644 index a35b29c..0000000 --- a/docs/syntax/describe.md +++ /dev/null @@ -1,122 +0,0 @@ -Every test suite begins with either `describe` or `describe_a`. - -# describe - -`describe` creates a named test suite: - -```cpp -describe example_spec("An example", $ { - // it blocks and hooks go here -}); -``` - -Each `describe` is a global instance of `Description`. The `$` macro expands to -`[](auto& self) -> void`. Everything inside the block (`it`, `context`, `before_each`, etc.) -resolves through `self` automatically via macros, so you write them unqualified. - -!!! important - - Use `$` for `describe` and `context` bodies. Use `_` for `it` bodies. - -In expanded form, the above is equivalent to: - -```cpp -Description example_spec("An example", [](auto& self) -> void { }); -``` - -State shared between hooks and examples can live as a local variable inside the `$` block or -as a file-scope variable in an anonymous namespace: - -```cpp -namespace { int n = 0; } - -describe counter_spec("Counter", $ { - before_each([] { n = 0; }); - - it("starts at zero", _ { - expect(n).to_equal(0); - }); -}); -``` - -# describe_a - -`describe_a` creates a typed test suite with a *subject* — an instance of `T` available -to all examples. The template parameter determines the subject type. - -```cpp -template -class ClassDescription : public Description { ... }; -``` - -## Implicit subject - -When no value is provided, `T` is default-constructed: - -```cpp -describe_a my_spec("MyClass", $ { - it("starts in a valid state", _ { - expect(subject.is_valid()).to_be_true(); - }); -}); -``` - -## Explicit subject - -Pass a value after the description string: - -```cpp -describe_a point_spec("Point{3,4}", Point{3.0, 4.0}, $ { - it("has length 5", _ { - expect(subject.length()).to_be_within(1e-9).of(5.0); - }); -}); -``` - -For containers, an initializer list is also accepted: - -```cpp -describe_a> vec_spec({1, 2, 3}, $ { - it("contains 2", _ { - expect(subject).to_contain(2); - }); -}); -``` - -## Accessing the subject - -Inside a `describe_a` block there are two ways to access the subject: - -**`subject` keyword** — available inside any `it` body at any nesting depth: - -```cpp -it("accesses the subject", _ { - expect(subject.value()).to_equal(42); -}); -``` - -**`is_expected()`** — shorthand for `expect(subject)`, reads naturally when asserting on -the subject itself: - -```cpp -it("has the right value", _ { - is_expected().to_equal(MyClass{42}); -}); -``` - -## describe_an - -`describe_an` is an alias for `describe_a` for grammatical convenience: - -```cpp -describe_an animal_spec("Animal", $ { ... }); -``` - -# Entry point - -Each spec file needs an entry point: - -```cpp -CPPSPEC_MAIN(my_spec); // single suite -CPPSPEC_MAIN(spec_a, spec_b, spec_c); // multiple suites -``` diff --git a/docs/syntax/expect.md b/docs/syntax/expect.md deleted file mode 100644 index dd2a6ee..0000000 --- a/docs/syntax/expect.md +++ /dev/null @@ -1,43 +0,0 @@ -# Expect - -Expectations are the primary focus of C++Spec, allowing clean, readable tests without falling -back on assertions. - -Expectations have two parts, the "actual" value, and the "expected" value. - -```cpp -auto x = 2; -expect(x).to_equal(2); -// ^ ^ -// actual expected -``` - -The `expect` half references whatever is being tested (the "actual" result of the test), while the -matcher references what the value _should_ be (the "expected" value of the test). - -## Values - -The standard usage of an `expect` is to reference a variable or value to test. - -```cpp -Something some_thing(); - -expect(some_thing.some_method()).to_be_true(); -``` - -## Lambdas - -Expectations are also to contain lambdas that return objects or throw exceptions. - -```cpp -expect([] { return 2; }).to_equal(2); -expect([] { throw std::exception; }).to_throw(); -``` - -This allows creating delayed "thunks" that can be created earlier and then passed to the -`Expectation`. - -```cpp -auto val = [] { return 5; }; -expect(val).to_equal(5); -``` diff --git a/docs/syntax/it.md b/docs/syntax/it.md deleted file mode 100644 index 4e01b6a..0000000 --- a/docs/syntax/it.md +++ /dev/null @@ -1,76 +0,0 @@ -# it - -`it` blocks are the individual examples of a spec. Each `it` should contain at least one -expectation that verifies a specific behaviour. - -## Named it - -The most common form takes a description string and a block: - -```cpp -it("returns the correct sum", _ { - expect(1 + 1).to_equal(2); -}); -``` - -The description appears in test output and should read like plain English when prefixed by its -enclosing `describe` or `context` name. - -!!! important - - Use `_` for all `it` bodies. `_` expands to `[=](auto& self) mutable -> void`. - -## Anonymous it - -Omit the description to have C++Spec generate one automatically from the contained expectation: - -```cpp -it(_ { - expect(answer).to_equal(42); -}); -// Output: "is expected to equal 42" -``` - -## it inside describe_a - -Inside a `describe_a` block, the `subject` keyword and `is_expected()` are available: - -```cpp -describe_a str_spec(std::string{"hello"}, $ { - it("has the right length", _ { - expect(subject.size()).to_equal(5u); - }); - - it(_ { - is_expected().to_start_with("hel"); - }); -}); -``` - -## specify - -`specify` is an alias for `it`: - -```cpp -specify("correct total price", _ { - expect(cart.total()).to_equal(9.99); -}); -``` - -## Nesting with context - -`it` blocks live inside `describe`, `describe_a`, or `context` blocks. `context` (and its alias -`explain`) groups related examples and can inherit lifecycle hooks from its parent: - -```cpp -describe stack_spec("Stack", $ { - context("when empty", _ { - it("has size 0", _ { expect(stack.size()).to_equal(0); }); - }); - - context("after one push", _ { - before_each([] { stack.push(1); }); - it("has size 1", _ { expect(stack.size()).to_equal(1); }); - }); -}); -``` diff --git a/docs/syntax/let.md b/docs/syntax/let.md deleted file mode 100644 index a0faf92..0000000 --- a/docs/syntax/let.md +++ /dev/null @@ -1,84 +0,0 @@ -# let - -`let` introduces a *memoized* value inside a `describe` or `context` block. The factory -lambda is called at most once per `it` — subsequent accesses within the same example return -the cached value. The cache is cleared automatically before the next `it` runs. - -## Basic usage - -```cpp -namespace { int _count = 0; } - -describe let_spec("let", $ { - let(count, [] { return ++_count; }); - - it("memoizes the value within an it", _ { - expect(count).to_equal(1); - expect(count).to_equal(1); // same call — factory not invoked again - }); - - it("resets between its", _ { - expect(count).to_equal(2); // factory called fresh for this it - }); -}); -``` - -`let` creates a `Let&`. Dereference it with `*` to obtain the value, or use `->` to call -members directly. For simple types, `expect(count)` resolves via the `Let&` overload of -`expect` and calls `value()` automatically. - -```cpp -let(greeting, [] { return std::string{"hello"}; }); - -it("uses arrow access", _ { - expect(greeting->size()).to_equal(5u); -}); -``` - -## Why use let instead of a plain variable? - -A plain variable shared via capture is shared across all `it` blocks — mutation in one -example leaks into the next. A `let` value is always freshly computed at the start of each -`it`, so examples remain independent. - -```cpp -// Fragile: shared variable must be reset manually -namespace { std::vector v; } -before_each([] { v = {1, 2, 3}; }); - -// Clean: automatically fresh each it -let(v, ([] { return std::vector{1, 2, 3}; })); -``` - -## let in nested contexts - -Each `context` can define its own `let` values alongside those inherited from its parent: - -```cpp -describe nested_let_spec("nested let", $ { - let(base, [] { return 10; }); - - it("outer sees base", _ { - expect(*base).to_equal(10); - }); - - context("inner", _ { - let(derived, [] { return 20; }); - - it("inner sees both", _ { - expect(*base).to_equal(10); - expect(*derived).to_equal(20); - }); - }); -}); -``` - -!!! note - - When the `let` factory lambda contains commas (e.g. an initializer list), wrap the - lambda in parentheses to prevent the preprocessor from treating the commas as macro - argument separators: - - ```cpp - let(vec, ([] { return std::vector{1, 2, 3}; })); - ``` diff --git a/docs/syntax/matchers.md b/docs/syntax/matchers.md deleted file mode 100644 index a6ee7b6..0000000 --- a/docs/syntax/matchers.md +++ /dev/null @@ -1,203 +0,0 @@ -# Matchers - -Matchers are the verbs of a C++Spec expectation: `expect(actual).to_equal(expected)`. -Every matcher can be negated by inserting `.not_()` before it: - -```cpp -expect(x).to_equal(0); // passes when x == 0 -expect(x).not_().to_equal(0); // passes when x != 0 -``` - ---- - -## Equality & boolean - -### to_equal - -Compares using `operator==`. Works with any type that defines equality: - -```cpp -expect(1 + 1).to_equal(2); -expect(std::string{"hi"}).to_equal("hi"); -``` - -### to_be_true / to_be_false - -Strict boolean check (value must be exactly `true` or `false`): - -```cpp -expect(vec.empty()).to_be_true(); -expect(result.ok()).to_be_false(); -``` - -### to_be_truthy / to_be_falsy - -Checks the result of `static_cast(value)`: - -```cpp -expect(1).to_be_truthy(); -expect(0).to_be_falsy(); -expect(std::optional{42}).to_be_truthy(); -``` - -### to_be_null - -Passes when a pointer is `nullptr`: - -```cpp -int* p = nullptr; -expect(p).to_be_null(); - -int x = 1; -expect(&x).not_().to_be_null(); -``` - ---- - -## Containers - -### to_contain (single element) - -Passes when the container holds the given element (uses `std::ranges::find`): - -```cpp -expect(std::vector{1, 2, 3}).to_contain(2); -expect(std::string{"hello"}).to_contain('e'); -``` - -### to_contain (multiple elements) - -Passes when **all** listed elements are present. Negated form passes when **none** are present: - -```cpp -expect(std::vector{1, 2, 3, 4, 5}).to_contain({1, 3, 5}); // all must be in vec -expect(std::vector{1, 2, 3}).not_().to_contain({7, 8, 9}); // none may be in vec -``` - -### to_start_with - -For strings, checks the leading prefix. For containers, checks the leading sub-sequence: - -```cpp -expect(std::string{"hello world"}).to_start_with("hello"); -expect(std::vector{1, 2, 3, 4}).to_start_with({1, 2}); -``` - -### to_end_with - -For strings, checks the trailing suffix. For containers, checks the trailing sub-sequence: - -```cpp -expect(std::string{"hello world"}).to_end_with("world"); -expect(std::vector{1, 2, 3, 4}).to_end_with({3, 4}); -``` - ---- - -## Numeric - -### to_be_between - -Passes when the value falls within the given range (inclusive by default): - -```cpp -expect(5).to_be_between(1, 10); -expect(5).to_be_between(1, 10, RangeMode::exclusive); // strict bounds -``` - -### to_be_within - -Floating-point proximity check. Use `.of(expected)` to specify the target: - -```cpp -expect(3.14159).to_be_within(0.001).of(std::numbers::pi); -``` - -### to_be_less_than / to_be_greater_than - -```cpp -expect(3).to_be_less_than(5); -expect(7).to_be_greater_than(4); -``` - ---- - -## Strings - -### to_match - -Full regex match against `std::regex`. Accepts a pattern string or a pre-built `std::regex`: - -```cpp -expect(std::string{"hello123"}).to_match("[a-z]+[0-9]+"); -expect(std::string{"HELLO"}).to_match(std::regex("hello", std::regex::icase)); -``` - -Note: `to_match` uses `std::regex_match` which requires the **entire** string to match the -pattern. - ---- - -## Custom predicate - -### to_satisfy - -Accepts any callable `(const T&) -> bool`. Useful when no built-in matcher fits: - -```cpp -expect(42).to_satisfy([](int n) { return n % 2 == 0; }); -``` - ---- - -## Exceptions - -`to_throw` requires the expected value to be a **non-void callable** (use -`std::function` if needed). - -### to_throw - -Passes when the callable throws any exception: - -```cpp -std::function f = [] -> void* { throw std::runtime_error("boom"); }; -expect(f).to_throw(); -``` - -### to_throw\ - -Passes when the callable throws an exception of type `E` (or derived from `E`). Inside a -generic `_` block, use `.template to_throw()`: - -```cpp -it("catches the specific type", _ { - std::function f = [] -> void* { throw MyException{}; }; - expect(f).template to_throw(); - expect(f).template to_throw(); // base class also matches -}); -``` - ---- - -## std::optional / std::expected - -### to_have_value - -Passes when an `optional` or `expected` holds a value: - -```cpp -std::optional opt{42}; -expect(opt).to_have_value(); - -std::expected result = 42; -expect(result).to_have_value(); -``` - -### to_have_error - -Passes when a `std::expected` holds an error: - -```cpp -std::expected err = std::unexpected{"oops"}; -expect(err).to_have_error(); -``` diff --git a/docs/testing.md b/docs/testing.md deleted file mode 100644 index 25ea757..0000000 --- a/docs/testing.md +++ /dev/null @@ -1,47 +0,0 @@ -# Testing - -Running tests requires one or more spec objects. Each spec is independent and self-contained. - -Specs are handed to `CppSpec::parse` which returns a runner. The runner executes all specs and -returns a `Result`. Use `CPPSPEC_MAIN` for the common single-file case. - -## Formatters - -There are a number of formatter options for printing to a terminal: `verbose`, `progress`, and -`tap`. `progress` prints a series of dots while `verbose` prints a fully RSpec-like list of -tests, colouring them to show their status and result. - -Pass a formatter to `CppSpec::parse`: - -```cpp -CppSpec::parse(argc, argv, CppSpec::Formatters::verbose) -``` - -## Example - -```cpp -#include -#include -#include "cppspec.hpp" - -describe strcmp_spec("int strcmp ( const char * str1, const char * str2 )", $ { - auto greater_than_zero = [](int i){ return i >= 0; }; - auto less_than_zero = [](int i){ return i < 0; }; - - it("returns 0 only when strings are equal", _ { - expect(strcmp("hello", "hello")).to_equal(0); - }); - - it("returns a negative integer when str1 is less than str2", _ { - expect(strcmp("hello", "world")).to_satisfy(less_than_zero); - expect(strcmp("0123", "1321431")).to_satisfy(less_than_zero); - }); - - it("returns a positive integer if str1 is greater than str2", _ { - expect(strcmp("yellow", "world")).to_satisfy(greater_than_zero); - expect(strcmp("9", "789")).to_satisfy(greater_than_zero); - }); -}); - -CPPSPEC_MAIN(strcmp_spec); -``` diff --git a/examples/sample/fabs_spec.cpp b/doxygen/.nojekyll old mode 100755 new mode 100644 similarity index 100% rename from examples/sample/fabs_spec.cpp rename to doxygen/.nojekyll diff --git a/doxygen/annotated.html b/doxygen/annotated.html new file mode 100644 index 0000000..d1b87d4 --- /dev/null +++ b/doxygen/annotated.html @@ -0,0 +1,163 @@ + + + + + + + +C++Spec: Class List + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Class List
+
+
+
Here are the classes, structs, unions and interfaces with brief descriptions:
+
[detail level 1234]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
 NCppSpec
 NFormatters
 NJUnitNodes
 CResult
 CTestCase
 CTestSuite
 CTestSuites
 CBaseFormatter
 CJUnitXML
 CProgress
 CTAP
 CVerbose
 NMatchers
 CBeNullptr
 CContainBase
 CContain
 CContain< A, U, U >
 CEqualThe equal matcher
 CFail
 CFailWith
 CHaveError
 CHaveErrorEqualTo
 CHaveValue
 CHaveValueEqualTo
 CThrow
 CMatcherBaseBase class for all Matcher classes and objects
 CBeBetween
 CBeGreaterThan
 CBeLessThan
 CBeWithin
 CBeWithinHelper
 CSatisfy
 CEndWith
 CMatch
 CMatchPartial
 CStartWith
 NUtil
 Cverbose_assertHelper class for static assertions that has a built-in error string
 CClassDescriptionA Description with a defined subject
 CDescription
 CExpectationWraps the target of an expectation
 CExpectationValue
 CExpectationFunc
 CPositiveExpectationHandlerHandles "positive" expectations (i.e. non-negated)
 CNegativeExpectationHandlerHandles "negative" expectations (i.e. negated with '.not_()
 CItDAn it embedded in a Description
 CItCDAn it embedded in a ClassDescription
 CItBaseBase class for it expressions
 CLetBaseBase class for lets to abstract away the template arguments
 CPrettyA helper base class that assists in pretty-printing various objects
 CResult
 CRunnableBase class for all objects in the execution tree
 CRunnerA collection of Descriptions that are run in sequence
+
+
+
+
+ + + + diff --git a/doxygen/annotated_dup.js b/doxygen/annotated_dup.js new file mode 100644 index 0000000..59d66b7 --- /dev/null +++ b/doxygen/annotated_dup.js @@ -0,0 +1,61 @@ +var annotated_dup = +[ + [ "CppSpec", null, [ + [ "Formatters", null, [ + [ "JUnitNodes", null, [ + [ "Result", "structCppSpec_1_1Formatters_1_1JUnitNodes_1_1Result.html", null ], + [ "TestCase", "structCppSpec_1_1Formatters_1_1JUnitNodes_1_1TestCase.html", null ], + [ "TestSuite", "structCppSpec_1_1Formatters_1_1JUnitNodes_1_1TestSuite.html", null ], + [ "TestSuites", "structCppSpec_1_1Formatters_1_1JUnitNodes_1_1TestSuites.html", null ] + ] ], + [ "BaseFormatter", "classCppSpec_1_1Formatters_1_1BaseFormatter.html", null ], + [ "JUnitXML", "classCppSpec_1_1Formatters_1_1JUnitXML.html", null ], + [ "Progress", "classCppSpec_1_1Formatters_1_1Progress.html", null ], + [ "TAP", "structCppSpec_1_1Formatters_1_1TAP.html", null ], + [ "Verbose", "classCppSpec_1_1Formatters_1_1Verbose.html", null ] + ] ], + [ "Matchers", null, [ + [ "BeNullptr", "classCppSpec_1_1Matchers_1_1BeNullptr.html", "classCppSpec_1_1Matchers_1_1BeNullptr" ], + [ "ContainBase", "classCppSpec_1_1Matchers_1_1ContainBase.html", "classCppSpec_1_1Matchers_1_1ContainBase" ], + [ "Contain", "classCppSpec_1_1Matchers_1_1Contain.html", null ], + [ "Contain< A, U, U >", "classCppSpec_1_1Matchers_1_1Contain_3_01A_00_01U_00_01U_01_4.html", null ], + [ "Equal", "classCppSpec_1_1Matchers_1_1Equal.html", "classCppSpec_1_1Matchers_1_1Equal" ], + [ "Fail", "classCppSpec_1_1Matchers_1_1Fail.html", null ], + [ "FailWith", "classCppSpec_1_1Matchers_1_1FailWith.html", "classCppSpec_1_1Matchers_1_1FailWith" ], + [ "HaveError", "classCppSpec_1_1Matchers_1_1HaveError.html", "classCppSpec_1_1Matchers_1_1HaveError" ], + [ "HaveErrorEqualTo", "classCppSpec_1_1Matchers_1_1HaveErrorEqualTo.html", null ], + [ "HaveValue", "classCppSpec_1_1Matchers_1_1HaveValue.html", "classCppSpec_1_1Matchers_1_1HaveValue" ], + [ "HaveValueEqualTo", "classCppSpec_1_1Matchers_1_1HaveValueEqualTo.html", null ], + [ "Throw", "classCppSpec_1_1Matchers_1_1Throw.html", "classCppSpec_1_1Matchers_1_1Throw" ], + [ "MatcherBase", "classCppSpec_1_1Matchers_1_1MatcherBase.html", "classCppSpec_1_1Matchers_1_1MatcherBase" ], + [ "BeBetween", "classCppSpec_1_1Matchers_1_1BeBetween.html", "classCppSpec_1_1Matchers_1_1BeBetween" ], + [ "BeGreaterThan", "classCppSpec_1_1Matchers_1_1BeGreaterThan.html", null ], + [ "BeLessThan", "classCppSpec_1_1Matchers_1_1BeLessThan.html", null ], + [ "BeWithin", "classCppSpec_1_1Matchers_1_1BeWithin.html", "classCppSpec_1_1Matchers_1_1BeWithin" ], + [ "BeWithinHelper", "classCppSpec_1_1Matchers_1_1BeWithinHelper.html", null ], + [ "Satisfy", "classCppSpec_1_1Matchers_1_1Satisfy.html", "classCppSpec_1_1Matchers_1_1Satisfy" ], + [ "EndWith", "classCppSpec_1_1Matchers_1_1EndWith.html", null ], + [ "Match", "classCppSpec_1_1Matchers_1_1Match.html", null ], + [ "MatchPartial", "classCppSpec_1_1Matchers_1_1MatchPartial.html", "classCppSpec_1_1Matchers_1_1MatchPartial" ], + [ "StartWith", "classCppSpec_1_1Matchers_1_1StartWith.html", null ] + ] ], + [ "Util", null, [ + [ "verbose_assert", "structCppSpec_1_1Util_1_1verbose__assert.html", null ] + ] ], + [ "ClassDescription", "classCppSpec_1_1ClassDescription.html", "classCppSpec_1_1ClassDescription" ], + [ "Description", "classCppSpec_1_1Description.html", null ], + [ "Expectation", "classCppSpec_1_1Expectation.html", "classCppSpec_1_1Expectation" ], + [ "ExpectationValue", "classCppSpec_1_1ExpectationValue.html", "classCppSpec_1_1ExpectationValue" ], + [ "ExpectationFunc", "classCppSpec_1_1ExpectationFunc.html", "classCppSpec_1_1ExpectationFunc" ], + [ "PositiveExpectationHandler", "structCppSpec_1_1PositiveExpectationHandler.html", null ], + [ "NegativeExpectationHandler", "structCppSpec_1_1NegativeExpectationHandler.html", null ], + [ "ItD", "classCppSpec_1_1ItD.html", "classCppSpec_1_1ItD" ], + [ "ItCD", "classCppSpec_1_1ItCD.html", "classCppSpec_1_1ItCD" ], + [ "ItBase", "classCppSpec_1_1ItBase.html", "classCppSpec_1_1ItBase" ], + [ "LetBase", "classCppSpec_1_1LetBase.html", null ], + [ "Pretty", "structCppSpec_1_1Pretty.html", "structCppSpec_1_1Pretty" ], + [ "Result", "classCppSpec_1_1Result.html", null ], + [ "Runnable", "classCppSpec_1_1Runnable.html", "classCppSpec_1_1Runnable" ], + [ "Runner", "classCppSpec_1_1Runner.html", "classCppSpec_1_1Runner" ] + ] ] +]; \ No newline at end of file diff --git a/doxygen/argparse_8hpp_source.html b/doxygen/argparse_8hpp_source.html new file mode 100644 index 0000000..5206b81 --- /dev/null +++ b/doxygen/argparse_8hpp_source.html @@ -0,0 +1,183 @@ + + + + + + + +C++Spec: include/argparse.hpp Source File + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
argparse.hpp
+
+
+
1#pragma once
+
2
+
3#include <argparse/argparse.hpp>
+
4#include <fstream>
+
5#include <string>
+
6#include <string_view>
+
7#include "formatters/junit_xml.hpp"
+ +
9#include "formatters/tap.hpp"
+ +
11#include "runner.hpp"
+
12
+
13namespace CppSpec {
+
14
+
15inline std::string file_name(std::string_view path) {
+
16 std::string_view file = path;
+
17 for (size_t i = 0; i < path.size(); ++i) {
+
18 if (path[i] == '/') {
+
19 file = &path[i + 1];
+
20 }
+
21 }
+
22 return std::string{file};
+
23}
+
24
+
25inline Runner parse(int argc, char** const argv) {
+
26 std::filesystem::path executable_path = argv[0];
+
27 std::string executable_name = executable_path.filename().string();
+
28 argparse::ArgumentParser program{executable_name};
+
29
+
30 program.add_argument("-f", "--format")
+
31 .default_value(std::string{"p"})
+
32 .choices("progress", "p", "tap", "t", "detail", "d", "junit", "j")
+
33 .required()
+
34 .help("set the output format");
+
35
+
36 program.add_argument("--output-junit").help("output JUnit XML to the specified file").default_value(std::string{});
+
37 program.add_argument("--verbose").help("increase output verbosity").flag();
+
38
+
39 try {
+
40 program.parse_args(argc, argv);
+
41 } catch (const std::runtime_error& err) {
+
42 std::cerr << err.what() << std::endl;
+
43 std::cerr << program;
+
44 std::exit(1);
+
45 }
+
46
+
47 auto format_string = program.get<std::string>("--format");
+
48 std::shared_ptr<Formatters::BaseFormatter> formatter;
+
49 if (format_string == "d" || format_string == "detail" || program["--verbose"] == true) {
+
50 formatter = std::make_shared<Formatters::Verbose>();
+
51 } else if (format_string == "p" || format_string == "progress") {
+
52 formatter = std::make_shared<Formatters::Progress>();
+
53 } else if (format_string == "t" || format_string == "tap") {
+
54 formatter = std::make_shared<Formatters::TAP>();
+
55 } else if (format_string == "j" || format_string == "junit") {
+
56 formatter = std::make_shared<Formatters::JUnitXML>();
+
57 } else {
+
58 std::cerr << "Unrecognized format type" << std::endl;
+
59 std::exit(-1);
+
60 }
+
61
+
62 auto junit_output_filepath = program.get<std::string>("--output-junit");
+
63 if (!junit_output_filepath.empty()) {
+
64 // open file stream
+
65 auto* file_stream = new std::ofstream(junit_output_filepath);
+
66 auto junit_output = std::make_shared<Formatters::JUnitXML>(*file_stream, false);
+
67 return Runner{formatter, junit_output};
+
68 }
+
69 return Runner{formatter};
+
70}
+
71} // namespace CppSpec
+
A collection of Descriptions that are run in sequence.
Definition runner.hpp:16
+ + + + +
+
+
+ + + + diff --git a/doxygen/be__between_8hpp.html b/doxygen/be__between_8hpp.html new file mode 100644 index 0000000..a727b71 --- /dev/null +++ b/doxygen/be__between_8hpp.html @@ -0,0 +1,243 @@ + + + + + + + +C++Spec: include/matchers/numeric/be_between.hpp File Reference + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
be_between.hpp File Reference
+
+
+
+Include dependency graph for be_between.hpp:
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+This graph shows which files directly or indirectly include this file:
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

Go to the source code of this file.

+ + + +

+Classes

class  CppSpec::Matchers::BeBetween< A, E >
+ + +

+Enumerations

enum class  RangeMode { exclusive +, inclusive + }
+
+
+ +
+ + + + diff --git a/doxygen/be__between_8hpp.js b/doxygen/be__between_8hpp.js new file mode 100644 index 0000000..26fc760 --- /dev/null +++ b/doxygen/be__between_8hpp.js @@ -0,0 +1,4 @@ +var be__between_8hpp = +[ + [ "CppSpec::Matchers::BeBetween< A, E >", "classCppSpec_1_1Matchers_1_1BeBetween.html", "classCppSpec_1_1Matchers_1_1BeBetween" ] +]; \ No newline at end of file diff --git a/doxygen/be__between_8hpp__dep__incl.map b/doxygen/be__between_8hpp__dep__incl.map new file mode 100644 index 0000000..30b9256 --- /dev/null +++ b/doxygen/be__between_8hpp__dep__incl.map @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doxygen/be__between_8hpp__dep__incl.md5 b/doxygen/be__between_8hpp__dep__incl.md5 new file mode 100644 index 0000000..cc27f32 --- /dev/null +++ b/doxygen/be__between_8hpp__dep__incl.md5 @@ -0,0 +1 @@ +62b60d7875af19ab9ebc6dd2cb872124 \ No newline at end of file diff --git a/doxygen/be__between_8hpp__dep__incl.png b/doxygen/be__between_8hpp__dep__incl.png new file mode 100644 index 0000000..f644ea5 Binary files /dev/null and b/doxygen/be__between_8hpp__dep__incl.png differ diff --git a/doxygen/be__between_8hpp__incl.map b/doxygen/be__between_8hpp__incl.map new file mode 100644 index 0000000..b2ed5d4 --- /dev/null +++ b/doxygen/be__between_8hpp__incl.map @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doxygen/be__between_8hpp__incl.md5 b/doxygen/be__between_8hpp__incl.md5 new file mode 100644 index 0000000..fea0051 --- /dev/null +++ b/doxygen/be__between_8hpp__incl.md5 @@ -0,0 +1 @@ +33be48a845d6432825b9b016ba4b8c3f \ No newline at end of file diff --git a/doxygen/be__between_8hpp__incl.png b/doxygen/be__between_8hpp__incl.png new file mode 100644 index 0000000..58ef06d Binary files /dev/null and b/doxygen/be__between_8hpp__incl.png differ diff --git a/doxygen/be__between_8hpp_source.html b/doxygen/be__between_8hpp_source.html new file mode 100644 index 0000000..9563e67 --- /dev/null +++ b/doxygen/be__between_8hpp_source.html @@ -0,0 +1,184 @@ + + + + + + + +C++Spec: include/matchers/numeric/be_between.hpp Source File + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
be_between.hpp
+
+
+Go to the documentation of this file.
1
+
2#pragma once
+
3
+ +
5
+
6namespace CppSpec::Matchers {
+
7
+
8enum class RangeMode { exclusive, inclusive };
+
9
+
10template <typename A, typename E>
+
+
11class BeBetween : public MatcherBase<A, E> {
+
12 E min;
+
13 E max;
+
14 RangeMode mode;
+
15 enum class LtOp { lt, lt_eq } lt_op;
+
16 enum class GtOp { gt, gt_eq } gt_op;
+
17
+
18 public:
+
19 // BeBetween(Expectation<A> &expectation, E min, E max)
+
20 // : BaseMatcher<A, E>(expectation), min(min), max(max) {}
+
21
+
22 BeBetween(Expectation<A>& expectation, E min, E max, RangeMode mode = RangeMode::inclusive)
+
23 : MatcherBase<A, E>(expectation), min(min), max(max), mode(mode) {
+
24 switch (mode) {
+
25 case RangeMode::inclusive:
+
26 lt_op = LtOp::lt_eq;
+
27 gt_op = GtOp::gt_eq;
+
28 break;
+
29 case RangeMode::exclusive:
+
30 lt_op = LtOp::lt;
+
31 gt_op = GtOp::gt;
+
32 break;
+
33 }
+
34 }
+
35
+
36 bool match() override;
+
37 std::string verb() override { return "be between"; }
+
38 std::string description() override;
+
39};
+
+
40
+
41template <typename A, typename E>
+
42bool BeBetween<A, E>::match() {
+
43 auto actual = this->actual();
+
44 bool result1;
+
45 switch (gt_op) {
+
46 case GtOp::gt:
+
47 result1 = actual > min;
+
48 break;
+
49 case GtOp::gt_eq:
+
50 result1 = actual >= min;
+
51 break;
+
52 }
+
53 bool result2;
+
54 switch (lt_op) {
+
55 case LtOp::lt:
+
56 result2 = actual < max;
+
57 break;
+
58 case LtOp::lt_eq:
+
59 result2 = actual <= max;
+
60 break;
+
61 }
+
62 return result1 && result2;
+
63}
+
64
+
65template <typename A, typename E>
+
+ +
67 return std::format("be between {} and {} ({})", min, max, (mode == RangeMode::exclusive ? "exclusive" : "inclusive"));
+
68}
+
+
69
+
70} // namespace CppSpec::Matchers
+
Wraps the target of an expectation.
Definition expectation.hpp:48
+
std::string description() override
Get the description of the Matcher.
Definition be_between.hpp:66
+
Contains the base class for all Matchers.
+
+
+
+ + + + diff --git a/doxygen/be__greater__than_8hpp.html b/doxygen/be__greater__than_8hpp.html new file mode 100644 index 0000000..0553dcb --- /dev/null +++ b/doxygen/be__greater__than_8hpp.html @@ -0,0 +1,239 @@ + + + + + + + +C++Spec: include/matchers/numeric/be_greater_than.hpp File Reference + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
be_greater_than.hpp File Reference
+
+
+
#include <string>
+#include "matchers/matcher_base.hpp"
+
+Include dependency graph for be_greater_than.hpp:
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+This graph shows which files directly or indirectly include this file:
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

Go to the source code of this file.

+ + + +

+Classes

class  CppSpec::Matchers::BeGreaterThan< A, E >
+
+
+ +
+ + + + diff --git a/doxygen/be__greater__than_8hpp.js b/doxygen/be__greater__than_8hpp.js new file mode 100644 index 0000000..0861536 --- /dev/null +++ b/doxygen/be__greater__than_8hpp.js @@ -0,0 +1,4 @@ +var be__greater__than_8hpp = +[ + [ "CppSpec::Matchers::BeGreaterThan< A, E >", "classCppSpec_1_1Matchers_1_1BeGreaterThan.html", null ] +]; \ No newline at end of file diff --git a/doxygen/be__greater__than_8hpp__dep__incl.map b/doxygen/be__greater__than_8hpp__dep__incl.map new file mode 100644 index 0000000..43d0585 --- /dev/null +++ b/doxygen/be__greater__than_8hpp__dep__incl.map @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doxygen/be__greater__than_8hpp__dep__incl.md5 b/doxygen/be__greater__than_8hpp__dep__incl.md5 new file mode 100644 index 0000000..c227dbf --- /dev/null +++ b/doxygen/be__greater__than_8hpp__dep__incl.md5 @@ -0,0 +1 @@ +45e5664ec409af6183395ac67bdffac0 \ No newline at end of file diff --git a/doxygen/be__greater__than_8hpp__dep__incl.png b/doxygen/be__greater__than_8hpp__dep__incl.png new file mode 100644 index 0000000..041d2cf Binary files /dev/null and b/doxygen/be__greater__than_8hpp__dep__incl.png differ diff --git a/doxygen/be__greater__than_8hpp__incl.map b/doxygen/be__greater__than_8hpp__incl.map new file mode 100644 index 0000000..8ea117b --- /dev/null +++ b/doxygen/be__greater__than_8hpp__incl.map @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doxygen/be__greater__than_8hpp__incl.md5 b/doxygen/be__greater__than_8hpp__incl.md5 new file mode 100644 index 0000000..b196f70 --- /dev/null +++ b/doxygen/be__greater__than_8hpp__incl.md5 @@ -0,0 +1 @@ +20afe3fcb66359ddcb5a952c5d92a37c \ No newline at end of file diff --git a/doxygen/be__greater__than_8hpp__incl.png b/doxygen/be__greater__than_8hpp__incl.png new file mode 100644 index 0000000..8d55fda Binary files /dev/null and b/doxygen/be__greater__than_8hpp__incl.png differ diff --git a/doxygen/be__greater__than_8hpp_source.html b/doxygen/be__greater__than_8hpp_source.html new file mode 100644 index 0000000..16d45b0 --- /dev/null +++ b/doxygen/be__greater__than_8hpp_source.html @@ -0,0 +1,129 @@ + + + + + + + +C++Spec: include/matchers/numeric/be_greater_than.hpp Source File + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
be_greater_than.hpp
+
+
+Go to the documentation of this file.
1
+
2#pragma once
+
3#include <string>
+
4
+ +
6
+
7namespace CppSpec::Matchers {
+
8
+
9template <typename A, typename E>
+
+
10class BeGreaterThan : public MatcherBase<A, E> {
+
11 public:
+
12 BeGreaterThan(Expectation<A>& expectation, E expected) : MatcherBase<A, E>(expectation, expected) {}
+
13 bool match() override { return this->actual() > this->expected(); }
+
14 std::string verb() override { return "be greater than"; }
+
15};
+
+
16
+
17} // namespace CppSpec::Matchers
+
Wraps the target of an expectation.
Definition expectation.hpp:48
+
Definition have_error.hpp:9
+
Contains the base class for all Matchers.
+
+
+
+ + + + diff --git a/doxygen/be__less__than_8hpp.html b/doxygen/be__less__than_8hpp.html new file mode 100644 index 0000000..da4b9ff --- /dev/null +++ b/doxygen/be__less__than_8hpp.html @@ -0,0 +1,239 @@ + + + + + + + +C++Spec: include/matchers/numeric/be_less_than.hpp File Reference + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
be_less_than.hpp File Reference
+
+
+
#include <string>
+#include "matchers/matcher_base.hpp"
+
+Include dependency graph for be_less_than.hpp:
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+This graph shows which files directly or indirectly include this file:
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

Go to the source code of this file.

+ + + +

+Classes

class  CppSpec::Matchers::BeLessThan< A, E >
+
+
+ +
+ + + + diff --git a/doxygen/be__less__than_8hpp.js b/doxygen/be__less__than_8hpp.js new file mode 100644 index 0000000..2ae3c78 --- /dev/null +++ b/doxygen/be__less__than_8hpp.js @@ -0,0 +1,4 @@ +var be__less__than_8hpp = +[ + [ "CppSpec::Matchers::BeLessThan< A, E >", "classCppSpec_1_1Matchers_1_1BeLessThan.html", null ] +]; \ No newline at end of file diff --git a/doxygen/be__less__than_8hpp__dep__incl.map b/doxygen/be__less__than_8hpp__dep__incl.map new file mode 100644 index 0000000..3b8257e --- /dev/null +++ b/doxygen/be__less__than_8hpp__dep__incl.map @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doxygen/be__less__than_8hpp__dep__incl.md5 b/doxygen/be__less__than_8hpp__dep__incl.md5 new file mode 100644 index 0000000..a27ac39 --- /dev/null +++ b/doxygen/be__less__than_8hpp__dep__incl.md5 @@ -0,0 +1 @@ +8a26928adf10fdb2468dee00888b4825 \ No newline at end of file diff --git a/doxygen/be__less__than_8hpp__dep__incl.png b/doxygen/be__less__than_8hpp__dep__incl.png new file mode 100644 index 0000000..6bdd699 Binary files /dev/null and b/doxygen/be__less__than_8hpp__dep__incl.png differ diff --git a/doxygen/be__less__than_8hpp__incl.map b/doxygen/be__less__than_8hpp__incl.map new file mode 100644 index 0000000..9e49ef6 --- /dev/null +++ b/doxygen/be__less__than_8hpp__incl.map @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doxygen/be__less__than_8hpp__incl.md5 b/doxygen/be__less__than_8hpp__incl.md5 new file mode 100644 index 0000000..b4db506 --- /dev/null +++ b/doxygen/be__less__than_8hpp__incl.md5 @@ -0,0 +1 @@ +d6577f994091d34ac692ce59c07819aa \ No newline at end of file diff --git a/doxygen/be__less__than_8hpp__incl.png b/doxygen/be__less__than_8hpp__incl.png new file mode 100644 index 0000000..5ac33ac Binary files /dev/null and b/doxygen/be__less__than_8hpp__incl.png differ diff --git a/doxygen/be__less__than_8hpp_source.html b/doxygen/be__less__than_8hpp_source.html new file mode 100644 index 0000000..1260b99 --- /dev/null +++ b/doxygen/be__less__than_8hpp_source.html @@ -0,0 +1,129 @@ + + + + + + + +C++Spec: include/matchers/numeric/be_less_than.hpp Source File + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
be_less_than.hpp
+
+
+Go to the documentation of this file.
1
+
2#pragma once
+
3#include <string>
+
4
+ +
6
+
7namespace CppSpec::Matchers {
+
8
+
9template <typename A, typename E>
+
+
10class BeLessThan : public MatcherBase<A, E> {
+
11 public:
+
12 BeLessThan(Expectation<A>& expectation, E expected) : MatcherBase<A, E>(expectation, expected) {}
+
13 bool match() override { return this->actual() < this->expected(); }
+
14 std::string verb() override { return "be less than"; }
+
15};
+
+
16
+
17} // namespace CppSpec::Matchers
+
Wraps the target of an expectation.
Definition expectation.hpp:48
+
Definition have_error.hpp:9
+
Contains the base class for all Matchers.
+
+
+
+ + + + diff --git a/doxygen/be__nullptr_8hpp.html b/doxygen/be__nullptr_8hpp.html new file mode 100644 index 0000000..5339538 --- /dev/null +++ b/doxygen/be__nullptr_8hpp.html @@ -0,0 +1,239 @@ + + + + + + + +C++Spec: include/matchers/be_nullptr.hpp File Reference + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
be_nullptr.hpp File Reference
+
+
+
#include <string>
+#include "matcher_base.hpp"
+
+Include dependency graph for be_nullptr.hpp:
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+This graph shows which files directly or indirectly include this file:
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

Go to the source code of this file.

+ + + +

+Classes

class  CppSpec::Matchers::BeNullptr< A >
+
+
+ +
+ + + + diff --git a/doxygen/be__nullptr_8hpp.js b/doxygen/be__nullptr_8hpp.js new file mode 100644 index 0000000..c0059fb --- /dev/null +++ b/doxygen/be__nullptr_8hpp.js @@ -0,0 +1,4 @@ +var be__nullptr_8hpp = +[ + [ "CppSpec::Matchers::BeNullptr< A >", "classCppSpec_1_1Matchers_1_1BeNullptr.html", "classCppSpec_1_1Matchers_1_1BeNullptr" ] +]; \ No newline at end of file diff --git a/doxygen/be__nullptr_8hpp__dep__incl.map b/doxygen/be__nullptr_8hpp__dep__incl.map new file mode 100644 index 0000000..51f967c --- /dev/null +++ b/doxygen/be__nullptr_8hpp__dep__incl.map @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doxygen/be__nullptr_8hpp__dep__incl.md5 b/doxygen/be__nullptr_8hpp__dep__incl.md5 new file mode 100644 index 0000000..262734d --- /dev/null +++ b/doxygen/be__nullptr_8hpp__dep__incl.md5 @@ -0,0 +1 @@ +010e9b1dc5581460809b3fb356d3a651 \ No newline at end of file diff --git a/doxygen/be__nullptr_8hpp__dep__incl.png b/doxygen/be__nullptr_8hpp__dep__incl.png new file mode 100644 index 0000000..e680c60 Binary files /dev/null and b/doxygen/be__nullptr_8hpp__dep__incl.png differ diff --git a/doxygen/be__nullptr_8hpp__incl.map b/doxygen/be__nullptr_8hpp__incl.map new file mode 100644 index 0000000..82c6030 --- /dev/null +++ b/doxygen/be__nullptr_8hpp__incl.map @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doxygen/be__nullptr_8hpp__incl.md5 b/doxygen/be__nullptr_8hpp__incl.md5 new file mode 100644 index 0000000..bd257fd --- /dev/null +++ b/doxygen/be__nullptr_8hpp__incl.md5 @@ -0,0 +1 @@ +939109ce29d96cd5a57195d34873dfce \ No newline at end of file diff --git a/doxygen/be__nullptr_8hpp__incl.png b/doxygen/be__nullptr_8hpp__incl.png new file mode 100644 index 0000000..5f944da Binary files /dev/null and b/doxygen/be__nullptr_8hpp__incl.png differ diff --git a/doxygen/be__nullptr_8hpp_source.html b/doxygen/be__nullptr_8hpp_source.html new file mode 100644 index 0000000..46ec8a5 --- /dev/null +++ b/doxygen/be__nullptr_8hpp_source.html @@ -0,0 +1,131 @@ + + + + + + + +C++Spec: include/matchers/be_nullptr.hpp Source File + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
be_nullptr.hpp
+
+
+Go to the documentation of this file.
1
+
2#pragma once
+
3#include <string>
+
4
+
5#include "matcher_base.hpp"
+
6
+
7namespace CppSpec::Matchers {
+
8
+
9template <class A>
+
+
10class BeNullptr : public MatcherBase<A, std::nullptr_t> {
+
11 public:
+
12 explicit BeNullptr(Expectation<A>& expectation) : MatcherBase<A, std::nullptr_t>(expectation) {}
+
13
+
14 std::string verb() override { return "be"; }
+
15 std::string description() override { return "be nullptr"; }
+
16 bool match() override { return this->actual() == nullptr; }
+
17};
+
+
18
+
19} // namespace CppSpec::Matchers
+
Wraps the target of an expectation.
Definition expectation.hpp:48
+
std::string description() override
Get the description of the Matcher.
Definition be_nullptr.hpp:15
+
Contains the base class for all Matchers.
+
+
+
+ + + + diff --git a/doxygen/be__within_8hpp_source.html b/doxygen/be__within_8hpp_source.html new file mode 100644 index 0000000..8888298 --- /dev/null +++ b/doxygen/be__within_8hpp_source.html @@ -0,0 +1,202 @@ + + + + + + + +C++Spec: include/matchers/numeric/be_within.hpp Source File + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
be_within.hpp
+
+
+
1#pragma once
+
2
+ +
4
+
5namespace CppSpec::Matchers {
+
6template <typename A, typename E>
+
7class BeWithin;
+
8
+
9template <typename A, typename E>
+
+
10class BeWithinHelper {
+
11 Expectation<A>& expectation;
+
12 E tolerance;
+
13 std::string msg;
+
14
+
15 public:
+
16 BeWithinHelper(Expectation<A>& expectation, E tolerance) : expectation(expectation), tolerance(tolerance) {}
+
17
+ +
19 BeWithin<A, E> percent_of(E expected);
+
20 void set_message(const std::string& msg) { this->msg = msg; }
+
21 std::string get_message() { return this->msg; }
+
22};
+
+
23
+
24template <typename A, typename E>
+
+
25class BeWithin : public MatcherBase<A, E> {
+
26 E tolerance;
+
27 std::string unit;
+
28
+
29 public:
+
30 BeWithin(Expectation<A>& expectation, E tolerance, E value, std::string_view unit)
+
31 : MatcherBase<A, E>(expectation, value), tolerance{tolerance}, unit{unit} {}
+
32
+
33 bool match() override;
+
34
+
35 std::string failure_message() override;
+
36 std::string failure_message_when_negated() override;
+
37 std::string description() override;
+
38 std::string verb() override { return "be within"; }
+
39};
+
+
40
+
41template <typename A, typename E>
+
42BeWithin<A, E> BeWithinHelper<A, E>::of(E expected) {
+
43 auto matcher = BeWithin<A, E>(expectation, tolerance, expected, ""); // No unit specified
+
44 matcher.set_message(msg);
+
45 return matcher;
+
46}
+
47
+
48template <typename A, typename E>
+
49BeWithin<A, E> BeWithinHelper<A, E>::percent_of(E expected) {
+
50 auto matcher = BeWithin<A, E>(expectation, tolerance, expected, "%"); // Percent unit specified
+
51 matcher.set_message(msg);
+
52 return matcher;
+
53}
+
54
+
55template <typename A, typename E>
+
56bool BeWithin<A, E>::match() {
+
57 if (!this->expected()) {
+
58 return false;
+
59 }
+
60 return std::abs(this->actual() - this->expected()) <= this->tolerance;
+
61}
+
62
+
63template <typename A, typename E>
+
+ +
65 return std::format("expected {} to {}", this->actual(), description());
+
66}
+
+
67
+
68template <typename A, typename E>
+
+ +
70 return std::format("expected {} not to {}", this->actual(), description());
+
71}
+
+
72
+
73template <typename A, typename E>
+
+ +
75 return std::format("be within {}{} of {}", this->tolerance, this->unit, this->expected());
+
76}
+
+
77
+
78} // namespace CppSpec::Matchers
+
Wraps the target of an expectation.
Definition expectation.hpp:48
+
Definition be_within.hpp:25
+
std::string description() override
Get the description of the Matcher.
Definition be_within.hpp:74
+
std::string failure_message() override
Get message to give on match failure.
Definition be_within.hpp:64
+
std::string failure_message_when_negated() override
Get message to give on match failure when negated.
Definition be_within.hpp:69
+
Definition have_error.hpp:9
+
Contains the base class for all Matchers.
+
+
+
+ + + + diff --git a/doxygen/classCppSpec_1_1ClassDescription-members.html b/doxygen/classCppSpec_1_1ClassDescription-members.html new file mode 100644 index 0000000..8998713 --- /dev/null +++ b/doxygen/classCppSpec_1_1ClassDescription-members.html @@ -0,0 +1,176 @@ + + + + + + + +C++Spec: Member List + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
CppSpec::ClassDescription< T > Member List
+
+
+ +

This is the complete list of members for CppSpec::ClassDescription< T >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
after_all(VoidBlock block) (defined in CppSpec::Description)CppSpec::Descriptioninline
after_alls (defined in CppSpec::Description)CppSpec::Description
after_each(VoidBlock block) (defined in CppSpec::Description)CppSpec::Descriptioninline
after_eaches (defined in CppSpec::Description)CppSpec::Description
as_main() (defined in CppSpec::Description)CppSpec::Descriptioninline
before_all(VoidBlock block) (defined in CppSpec::Description)CppSpec::Descriptioninline
before_each(VoidBlock block) (defined in CppSpec::Description)CppSpec::Descriptioninline
before_eaches (defined in CppSpec::Description)CppSpec::Description
ClassDescription(Block block, std::source_location location=std::source_location::current()) (defined in CppSpec::ClassDescription< T >)CppSpec::ClassDescription< T >inline
ClassDescription(const char *description, Block block, std::source_location location=std::source_location::current()) (defined in CppSpec::ClassDescription< T >)CppSpec::ClassDescription< T >inline
ClassDescription(const char *description, T &subject, Block block, std::source_location location=std::source_location::current()) (defined in CppSpec::ClassDescription< T >)CppSpec::ClassDescription< T >inline
ClassDescription(U &subject, Block block, std::source_location location=std::source_location::current()) (defined in CppSpec::ClassDescription< T >)CppSpec::ClassDescription< T >inline
ClassDescription(const char *description, T &&subject, Block block, std::source_location location=std::source_location::current()) (defined in CppSpec::ClassDescription< T >)CppSpec::ClassDescription< T >inline
ClassDescription(U &&subject, Block block, std::source_location location=std::source_location::current()) (defined in CppSpec::ClassDescription< T >)CppSpec::ClassDescription< T >inline
ClassDescription(std::initializer_list< U > init_list, Block block, std::source_location location=std::source_location::current()) (defined in CppSpec::ClassDescription< T >)CppSpec::ClassDescription< T >inline
ClassDescription(const char *description, std::initializer_list< U > init_list, Block block, std::source_location location=std::source_location::current()) (defined in CppSpec::ClassDescription< T >)CppSpec::ClassDescription< T >inline
context(const char *description, B block, std::source_location location=std::source_location::current()) (defined in CppSpec::ClassDescription< T >)CppSpec::ClassDescription< T >
context(const char *description, U &subject, B block, std::source_location location=std::source_location::current()) (defined in CppSpec::ClassDescription< T >)CppSpec::ClassDescription< T >
context(U &subject, B block, std::source_location location=std::source_location::current()) (defined in CppSpec::ClassDescription< T >)CppSpec::ClassDescription< T >inline
context(const char *description, U &&subject, B block, std::source_location location=std::source_location::current()) (defined in CppSpec::ClassDescription< T >)CppSpec::ClassDescription< T >
context(U &&subject, B block, std::source_location location=std::source_location::current()) (defined in CppSpec::ClassDescription< T >)CppSpec::ClassDescription< T >inline
context(const char *description, U &subject, B block, std::source_location location) (defined in CppSpec::ClassDescription< T >)CppSpec::ClassDescription< T >
context(const char *description, U &&subject, B block, std::source_location location) (defined in CppSpec::ClassDescription< T >)CppSpec::ClassDescription< T >
context(const char *description, B block, std::source_location location) (defined in CppSpec::ClassDescription< T >)CppSpec::ClassDescription< T >
context(const char *description, Block body, std::source_location location=std::source_location::current()) (defined in CppSpec::Description)CppSpec::Description
context(T &subject, B block, std::source_location location=std::source_location::current()) (defined in CppSpec::Description)CppSpec::Description
context(const char *description, T &subject, B block, std::source_location location=std::source_location::current()) (defined in CppSpec::Description)CppSpec::Description
context(T &&subject, B block, std::source_location location=std::source_location::current()) (defined in CppSpec::Description)CppSpec::Description
context(const char *description, T &&subject, B block, std::source_location location=std::source_location::current()) (defined in CppSpec::Description)CppSpec::Description
context(std::initializer_list< U > init_list, std::function< void(ClassDescription< T > &)> block, std::source_location location=std::source_location::current()) (defined in CppSpec::Description)CppSpec::Description
Description(const char *description, Block block, std::source_location location=std::source_location::current()) noexcept (defined in CppSpec::Description)CppSpec::Descriptioninline
Description(std::source_location location, std::string &&description) noexcept (defined in CppSpec::Description)CppSpec::Descriptioninline
Description(std::source_location location, const char *description, Block block) noexcept (defined in CppSpec::Description)CppSpec::Descriptioninline
description (defined in CppSpec::Description)CppSpec::Descriptionprotected
exec_after_eaches() (defined in CppSpec::Description)CppSpec::Descriptioninlineprotected
exec_before_eaches() (defined in CppSpec::Description)CppSpec::Descriptioninlineprotected
get_children() noexcept (defined in CppSpec::Runnable)CppSpec::Runnableinline
get_children() const noexcept (defined in CppSpec::Runnable)CppSpec::Runnableinline
get_description() const noexcept (defined in CppSpec::Description)CppSpec::Descriptioninlinevirtual
get_location() const noexcept (defined in CppSpec::Runnable)CppSpec::Runnableinline
get_parent() noexceptCppSpec::Runnableinline
get_parent() const noexcept (defined in CppSpec::Runnable)CppSpec::Runnableinline
get_parent_as() noexcept (defined in CppSpec::Runnable)CppSpec::Runnableinline
get_parent_as() const noexcept (defined in CppSpec::Runnable)CppSpec::Runnableinline
get_result() const (defined in CppSpec::Runnable)CppSpec::Runnableinlinevirtual
get_runtime() const (defined in CppSpec::Runnable)CppSpec::Runnableinline
get_start_time() const (defined in CppSpec::Runnable)CppSpec::Runnableinline
get_subject_type() const noexcept override (defined in CppSpec::ClassDescription< T >)CppSpec::ClassDescription< T >inlinevirtual
has_parent() noexceptCppSpec::Runnableinline
has_parent() const noexcept (defined in CppSpec::Runnable)CppSpec::Runnableinline
it(const char *name, std::function< void(ItCD< T > &)> block, std::source_location location=std::source_location::current())CppSpec::ClassDescription< T >
it(std::function< void(ItCD< T > &)> block, std::source_location location=std::source_location::current())CppSpec::ClassDescription< T >
it(const char *name, ItD::Block body, std::source_location location=std::source_location::current()) (defined in CppSpec::Description)CppSpec::Descriptioninline
it(ItD::Block body, std::source_location location=std::source_location::current()) (defined in CppSpec::Description)CppSpec::Descriptioninline
let(F factory) (defined in CppSpec::Description)CppSpec::Description
lets (defined in CppSpec::Description)CppSpec::Description
make_child(Args &&... args) (defined in CppSpec::Runnable)CppSpec::Runnableinline
num_failures() const noexcept (defined in CppSpec::Runnable)CppSpec::Runnableinline
num_tests() const noexcept (defined in CppSpec::Runnable)CppSpec::Runnableinline
padding() const noexceptCppSpec::Runnableinline
reset_lets() noexcept (defined in CppSpec::Description)CppSpec::Descriptioninline
run() override (defined in CppSpec::ClassDescription< T >)CppSpec::ClassDescription< T >virtual
Runnable(std::source_location location) (defined in CppSpec::Runnable)CppSpec::Runnableinline
set_location(std::source_location location) noexcept (defined in CppSpec::Runnable)CppSpec::Runnableinline
subject (defined in CppSpec::ClassDescription< T >)CppSpec::ClassDescription< T >
timed_run() (defined in CppSpec::Runnable)CppSpec::Runnableinlinevirtual
~Runnable()=default (defined in CppSpec::Runnable)CppSpec::Runnablevirtual
+
+
+ + + + diff --git a/doxygen/classCppSpec_1_1ClassDescription.html b/doxygen/classCppSpec_1_1ClassDescription.html new file mode 100644 index 0000000..9ce394a --- /dev/null +++ b/doxygen/classCppSpec_1_1ClassDescription.html @@ -0,0 +1,479 @@ + + + + + + + +C++Spec: CppSpec::ClassDescription< T > Class Template Reference + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
CppSpec::ClassDescription< T > Class Template Reference
+
+
+ +

A Description with a defined subject. + More...

+ +

#include <class_description.hpp>

+
+Inheritance diagram for CppSpec::ClassDescription< T >:
+
+
Inheritance graph
+ + + + + + + +
[legend]
+
+Collaboration diagram for CppSpec::ClassDescription< T >:
+
+
Collaboration graph
+ + + + + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

ClassDescription (Block block, std::source_location location=std::source_location::current())
ClassDescription (const char *description, Block block, std::source_location location=std::source_location::current())
ClassDescription (const char *description, T &subject, Block block, std::source_location location=std::source_location::current())
+template<Util::not_c_string U>
 ClassDescription (U &subject, Block block, std::source_location location=std::source_location::current())
ClassDescription (const char *description, T &&subject, Block block, std::source_location location=std::source_location::current())
+template<Util::not_c_string U>
 ClassDescription (U &&subject, Block block, std::source_location location=std::source_location::current())
+template<typename U>
 ClassDescription (std::initializer_list< U > init_list, Block block, std::source_location location=std::source_location::current())
+template<typename U>
 ClassDescription (const char *description, std::initializer_list< U > init_list, Block block, std::source_location location=std::source_location::current())
ItCD< T > & it (const char *name, std::function< void(ItCD< T > &)> block, std::source_location location=std::source_location::current())
ItCD< T > & it (std::function< void(ItCD< T > &)> block, std::source_location location=std::source_location::current())
+template<class U = std::nullptr_t, class B>
ClassDescription< T > & context (const char *description, B block, std::source_location location=std::source_location::current())
+template<class U, class B>
ClassDescription< U > & context (const char *description, U &subject, B block, std::source_location location=std::source_location::current())
+template<class U, class B>
ClassDescription< U > & context (U &subject, B block, std::source_location location=std::source_location::current())
+template<class U, class B>
ClassDescription< U > & context (const char *description, U &&subject, B block, std::source_location location=std::source_location::current())
+template<class U, class B>
ClassDescription< U > & context (U &&subject, B block, std::source_location location=std::source_location::current())
void run () override
std::string get_subject_type () const noexcept override
+template<class U, class B>
ClassContext< U > & context (const char *description, U &subject, B block, std::source_location location)
+template<class U, class B>
ClassContext< U > & context (const char *description, U &&subject, B block, std::source_location location)
+template<class U, class B>
ClassContext< T > & context (const char *description, B block, std::source_location location)
Public Member Functions inherited from CppSpec::Description
Description (const char *description, Block block, std::source_location location=std::source_location::current()) noexcept
Description (std::source_location location, std::string &&description) noexcept
Description (std::source_location location, const char *description, Block block) noexcept
+ItDit (const char *name, ItD::Block body, std::source_location location=std::source_location::current())
+ItDit (ItD::Block body, std::source_location location=std::source_location::current())
+template<class T = std::nullptr_t>
Description & context (const char *description, Block body, std::source_location location=std::source_location::current())
+template<Util::not_c_string T, class B>
ClassDescription< T > & context (T &subject, B block, std::source_location location=std::source_location::current())
+template<class T, class B>
ClassDescription< T > & context (const char *description, T &subject, B block, std::source_location location=std::source_location::current())
+template<Util::not_c_string T, class B>
ClassDescription< T > & context (T &&subject, B block, std::source_location location=std::source_location::current())
+template<class T, class B>
ClassDescription< T > & context (const char *description, T &&subject, B block, std::source_location location=std::source_location::current())
+template<class T, typename U>
ClassDescription< T > & context (std::initializer_list< U > init_list, std::function< void(ClassDescription< T > &)> block, std::source_location location=std::source_location::current())
+void before_each (VoidBlock block)
+void before_all (VoidBlock block)
+void after_each (VoidBlock block)
+void after_all (VoidBlock block)
+template<typename F>
auto & let (F factory)
+void reset_lets () noexcept
+virtual std::string get_description () const noexcept
void run () override
+template<typename Formatter>
auto as_main ()
+template<Util::not_c_string T, class B>
ClassContext< T > & context (T &subject, B block, std::source_location location)
+template<class T, class B>
ClassContext< T > & context (const char *description, T &subject, B block, std::source_location location)
+template<Util::not_c_string T, class B>
ClassContext< T > & context (T &&subject, B block, std::source_location location)
+template<class T, class B>
ClassContext< T > & context (const char *description, T &&subject, B block, std::source_location location)
+template<class T, typename U>
ClassContext< T > & context (std::initializer_list< U > init_list, std::function< void(ClassDescription< T > &)> block, std::source_location location)
+template<class T>
Context & context (const char *description, Block body, std::source_location location)
Public Member Functions inherited from CppSpec::Runnable
Runnable (std::source_location location)
+bool has_parent () noexcept
 Check to see if the Runnable has a parent.
+bool has_parent () const noexcept
+Runnable * get_parent () noexcept
 Get the Runnable's parent.
+const Runnable * get_parent () const noexcept
+std::list< std::shared_ptr< Runnable > > & get_children () noexcept
+const std::list< std::shared_ptr< Runnable > > & get_children () const noexcept
+template<class C>
C * get_parent_as () noexcept
+template<class C>
const C * get_parent_as () const noexcept
+template<typename T, typename... Args>
T * make_child (Args &&... args)
std::string padding () const noexcept
 Generate padding (indentation) fore the current object.
+std::source_location get_location () const noexcept
+void set_location (std::source_location location) noexcept
+virtual void timed_run ()
+std::chrono::duration< double > get_runtime () const
+std::chrono::time_point< std::chrono::system_clock > get_start_time () const
+virtual Result get_result () const
+size_t num_tests () const noexcept
+size_t num_failures () const noexcept
+ + + + + + + +

+Public Attributes

+T subject
Public Attributes inherited from CppSpec::Description
+std::forward_list< LetBase * > lets
+std::deque< VoidBlock > after_alls
+std::deque< VoidBlock > before_eaches
+std::deque< VoidBlock > after_eaches
+ + + + + + + + +

+Additional Inherited Members

Public Types inherited from CppSpec::Description
+using Block = std::function<void(Description&)>
Protected Member Functions inherited from CppSpec::Description
+void exec_before_eaches ()
+void exec_after_eaches ()
Protected Attributes inherited from CppSpec::Description
+std::string description
+

Detailed Description

+
template<class T>
+class CppSpec::ClassDescription< T >

A Description with a defined subject.

+

A ClassDescription is a subclass of Description that allows for templating and specification of the subject of the tests prior to any it objects.

+

It is also aliased to the context keyword through Description whenever it is templated, allowing the implicit subject in any child it blocks

+

Member Function Documentation

+ +

◆ get_subject_type()

+ +
+
+
+template<class T>
+ + + + + +
+ + + + + + + +
std::string CppSpec::ClassDescription< T >::get_subject_type () const
+
+inlinenodiscardoverridevirtualnoexcept
+
+ +

Reimplemented from CppSpec::Description.

+ +
+
+ +

◆ it() [1/2]

+ +
+
+
+template<class T>
+ + + + + + + + + + + + + + + + +
ItCD< T > & CppSpec::ClassDescription< T >::it (const char * name,
std::function< void(ItCD< T > &)> block,
std::source_location location = std::source_location::current() )
+
+

Jasmine-style it declaration, with an explicit docstring provided for verbose printing.

+

As this is an ItCD, it passes along associated type information about the implicit subject from the containing ClassDescription / ClassContext.

+
describe_a <std::string> (_{
+
it("is empty upon initialization", _{
+
is_expected.to_be_empty();
+
});
+
});
+
ItCD< T > & it(const char *name, std::function< void(ItCD< T > &)> block, std::source_location location=std::source_location::current())
Definition class_description.hpp:237
+
Parameters
+ + + +
namethe name of the test
blockthe contents of test
+
+
+
Returns
the result of the test
+ +
+
+ +

◆ it() [2/2]

+ +
+
+
+template<class T>
+ + + + + + + + + + + +
ItCD< T > & CppSpec::ClassDescription< T >::it (std::function< void(ItCD< T > &)> block,
std::source_location location = std::source_location::current() )
+
+

Rspec-style it declaration, with an implicit docstring generated by the contained expects. Particularly handy if testing multiple facets of a single behavior and there is a desire to be verbose, as each expectation prints its own docstring.

+

As this is an ItCD, it passes along associated type information about the implicit subject from the containing ClassDescription / ClassContext.

+
describe_a <std::string> ("", _{
+
it(_{ is_expected.to_be_empty(); });
+
});
+
Parameters
+ + +
blockthe contents of the test
+
+
+
Returns
the result of the test
+ +
+
+ +

◆ run()

+ +
+
+
+template<class T>
+ + + + + +
+ + + + + + + +
void CppSpec::ClassDescription< T >::run ()
+
+overridevirtual
+
+ +

Implements CppSpec::Runnable.

+ +
+
+
The documentation for this class was generated from the following file: +
+
+ +
+ + + + diff --git a/doxygen/classCppSpec_1_1ClassDescription.js b/doxygen/classCppSpec_1_1ClassDescription.js new file mode 100644 index 0000000..97bdfe3 --- /dev/null +++ b/doxygen/classCppSpec_1_1ClassDescription.js @@ -0,0 +1,5 @@ +var classCppSpec_1_1ClassDescription = +[ + [ "it", "classCppSpec_1_1ClassDescription.html#a587616a01b3aa92d74b84876e926350a", null ], + [ "it", "classCppSpec_1_1ClassDescription.html#a93eec01059c49f37b2bfe6efc196367c", null ] +]; \ No newline at end of file diff --git a/doxygen/classCppSpec_1_1ClassDescription__coll__graph.map b/doxygen/classCppSpec_1_1ClassDescription__coll__graph.map new file mode 100644 index 0000000..d743d1e --- /dev/null +++ b/doxygen/classCppSpec_1_1ClassDescription__coll__graph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/doxygen/classCppSpec_1_1ClassDescription__coll__graph.md5 b/doxygen/classCppSpec_1_1ClassDescription__coll__graph.md5 new file mode 100644 index 0000000..9a96442 --- /dev/null +++ b/doxygen/classCppSpec_1_1ClassDescription__coll__graph.md5 @@ -0,0 +1 @@ +355ac13c1f777634d41d1f9846d52884 \ No newline at end of file diff --git a/doxygen/classCppSpec_1_1ClassDescription__coll__graph.png b/doxygen/classCppSpec_1_1ClassDescription__coll__graph.png new file mode 100644 index 0000000..29a3254 Binary files /dev/null and b/doxygen/classCppSpec_1_1ClassDescription__coll__graph.png differ diff --git a/doxygen/classCppSpec_1_1ClassDescription__inherit__graph.map b/doxygen/classCppSpec_1_1ClassDescription__inherit__graph.map new file mode 100644 index 0000000..d743d1e --- /dev/null +++ b/doxygen/classCppSpec_1_1ClassDescription__inherit__graph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/doxygen/classCppSpec_1_1ClassDescription__inherit__graph.md5 b/doxygen/classCppSpec_1_1ClassDescription__inherit__graph.md5 new file mode 100644 index 0000000..9a96442 --- /dev/null +++ b/doxygen/classCppSpec_1_1ClassDescription__inherit__graph.md5 @@ -0,0 +1 @@ +355ac13c1f777634d41d1f9846d52884 \ No newline at end of file diff --git a/doxygen/classCppSpec_1_1ClassDescription__inherit__graph.png b/doxygen/classCppSpec_1_1ClassDescription__inherit__graph.png new file mode 100644 index 0000000..29a3254 Binary files /dev/null and b/doxygen/classCppSpec_1_1ClassDescription__inherit__graph.png differ diff --git a/doxygen/classCppSpec_1_1Description-members.html b/doxygen/classCppSpec_1_1Description-members.html new file mode 100644 index 0000000..1a808ec --- /dev/null +++ b/doxygen/classCppSpec_1_1Description-members.html @@ -0,0 +1,164 @@ + + + + + + + +C++Spec: Member List + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
CppSpec::Description Member List
+
+
+ +

This is the complete list of members for CppSpec::Description, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
after_all(VoidBlock block) (defined in CppSpec::Description)CppSpec::Descriptioninline
after_alls (defined in CppSpec::Description)CppSpec::Description
after_each(VoidBlock block) (defined in CppSpec::Description)CppSpec::Descriptioninline
after_eaches (defined in CppSpec::Description)CppSpec::Description
as_main() (defined in CppSpec::Description)CppSpec::Descriptioninline
before_all(VoidBlock block) (defined in CppSpec::Description)CppSpec::Descriptioninline
before_each(VoidBlock block) (defined in CppSpec::Description)CppSpec::Descriptioninline
before_eaches (defined in CppSpec::Description)CppSpec::Description
Block typedef (defined in CppSpec::Description)CppSpec::Description
context(const char *description, Block body, std::source_location location=std::source_location::current()) (defined in CppSpec::Description)CppSpec::Description
context(T &subject, B block, std::source_location location=std::source_location::current()) (defined in CppSpec::Description)CppSpec::Description
context(const char *description, T &subject, B block, std::source_location location=std::source_location::current()) (defined in CppSpec::Description)CppSpec::Description
context(T &&subject, B block, std::source_location location=std::source_location::current()) (defined in CppSpec::Description)CppSpec::Description
context(const char *description, T &&subject, B block, std::source_location location=std::source_location::current()) (defined in CppSpec::Description)CppSpec::Description
context(std::initializer_list< U > init_list, std::function< void(ClassDescription< T > &)> block, std::source_location location=std::source_location::current()) (defined in CppSpec::Description)CppSpec::Description
context(T &subject, B block, std::source_location location) (defined in CppSpec::Description)CppSpec::Description
context(const char *description, T &subject, B block, std::source_location location) (defined in CppSpec::Description)CppSpec::Description
context(T &&subject, B block, std::source_location location) (defined in CppSpec::Description)CppSpec::Description
context(const char *description, T &&subject, B block, std::source_location location) (defined in CppSpec::Description)CppSpec::Description
context(std::initializer_list< U > init_list, std::function< void(ClassDescription< T > &)> block, std::source_location location) (defined in CppSpec::Description)CppSpec::Description
context(const char *description, Block body, std::source_location location) (defined in CppSpec::Description)CppSpec::Descriptioninline
Description(const char *description, Block block, std::source_location location=std::source_location::current()) noexcept (defined in CppSpec::Description)CppSpec::Descriptioninline
Description(std::source_location location, std::string &&description) noexcept (defined in CppSpec::Description)CppSpec::Descriptioninline
Description(std::source_location location, const char *description, Block block) noexcept (defined in CppSpec::Description)CppSpec::Descriptioninline
description (defined in CppSpec::Description)CppSpec::Descriptionprotected
exec_after_eaches() (defined in CppSpec::Description)CppSpec::Descriptioninlineprotected
exec_before_eaches() (defined in CppSpec::Description)CppSpec::Descriptioninlineprotected
get_children() noexcept (defined in CppSpec::Runnable)CppSpec::Runnableinline
get_children() const noexcept (defined in CppSpec::Runnable)CppSpec::Runnableinline
get_description() const noexcept (defined in CppSpec::Description)CppSpec::Descriptioninlinevirtual
get_location() const noexcept (defined in CppSpec::Runnable)CppSpec::Runnableinline
get_parent() noexceptCppSpec::Runnableinline
get_parent() const noexcept (defined in CppSpec::Runnable)CppSpec::Runnableinline
get_parent_as() noexcept (defined in CppSpec::Runnable)CppSpec::Runnableinline
get_parent_as() const noexcept (defined in CppSpec::Runnable)CppSpec::Runnableinline
get_result() const (defined in CppSpec::Runnable)CppSpec::Runnableinlinevirtual
get_runtime() const (defined in CppSpec::Runnable)CppSpec::Runnableinline
get_start_time() const (defined in CppSpec::Runnable)CppSpec::Runnableinline
get_subject_type() const noexcept (defined in CppSpec::Description)CppSpec::Descriptioninlinevirtual
has_parent() noexceptCppSpec::Runnableinline
has_parent() const noexcept (defined in CppSpec::Runnable)CppSpec::Runnableinline
it(const char *name, ItD::Block body, std::source_location location=std::source_location::current()) (defined in CppSpec::Description)CppSpec::Descriptioninline
it(ItD::Block body, std::source_location location=std::source_location::current()) (defined in CppSpec::Description)CppSpec::Descriptioninline
let(F factory) (defined in CppSpec::Description)CppSpec::Description
lets (defined in CppSpec::Description)CppSpec::Description
make_child(Args &&... args) (defined in CppSpec::Runnable)CppSpec::Runnableinline
num_failures() const noexcept (defined in CppSpec::Runnable)CppSpec::Runnableinline
num_tests() const noexcept (defined in CppSpec::Runnable)CppSpec::Runnableinline
padding() const noexceptCppSpec::Runnableinline
reset_lets() noexcept (defined in CppSpec::Description)CppSpec::Descriptioninline
run() override (defined in CppSpec::Description)CppSpec::Descriptioninlinevirtual
Runnable(std::source_location location) (defined in CppSpec::Runnable)CppSpec::Runnableinline
set_location(std::source_location location) noexcept (defined in CppSpec::Runnable)CppSpec::Runnableinline
timed_run() (defined in CppSpec::Runnable)CppSpec::Runnableinlinevirtual
~Runnable()=default (defined in CppSpec::Runnable)CppSpec::Runnablevirtual
+
+
+ + + + diff --git a/doxygen/classCppSpec_1_1Description.html b/doxygen/classCppSpec_1_1Description.html new file mode 100644 index 0000000..6cbb55e --- /dev/null +++ b/doxygen/classCppSpec_1_1Description.html @@ -0,0 +1,311 @@ + + + + + + + +C++Spec: CppSpec::Description Class Reference + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
CppSpec::Description Class Reference
+
+
+
+Inheritance diagram for CppSpec::Description:
+
+
Inheritance graph
+ + + + + + + +
[legend]
+
+Collaboration diagram for CppSpec::Description:
+
+
Collaboration graph
+ + + + + +
[legend]
+ + + +

+Public Types

+using Block = std::function<void(Description&)>
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

Description (const char *description, Block block, std::source_location location=std::source_location::current()) noexcept
Description (std::source_location location, std::string &&description) noexcept
Description (std::source_location location, const char *description, Block block) noexcept
+ItDit (const char *name, ItD::Block body, std::source_location location=std::source_location::current())
+ItDit (ItD::Block body, std::source_location location=std::source_location::current())
+template<class T = std::nullptr_t>
Description & context (const char *description, Block body, std::source_location location=std::source_location::current())
+template<Util::not_c_string T, class B>
ClassDescription< T > & context (T &subject, B block, std::source_location location=std::source_location::current())
+template<class T, class B>
ClassDescription< T > & context (const char *description, T &subject, B block, std::source_location location=std::source_location::current())
+template<Util::not_c_string T, class B>
ClassDescription< T > & context (T &&subject, B block, std::source_location location=std::source_location::current())
+template<class T, class B>
ClassDescription< T > & context (const char *description, T &&subject, B block, std::source_location location=std::source_location::current())
+template<class T, typename U>
ClassDescription< T > & context (std::initializer_list< U > init_list, std::function< void(ClassDescription< T > &)> block, std::source_location location=std::source_location::current())
+void before_each (VoidBlock block)
+void before_all (VoidBlock block)
+void after_each (VoidBlock block)
+void after_all (VoidBlock block)
+template<typename F>
auto & let (F factory)
+void reset_lets () noexcept
+virtual std::string get_description () const noexcept
+virtual std::string get_subject_type () const noexcept
void run () override
+template<typename Formatter>
auto as_main ()
+template<Util::not_c_string T, class B>
ClassContext< T > & context (T &subject, B block, std::source_location location)
+template<class T, class B>
ClassContext< T > & context (const char *description, T &subject, B block, std::source_location location)
+template<Util::not_c_string T, class B>
ClassContext< T > & context (T &&subject, B block, std::source_location location)
+template<class T, class B>
ClassContext< T > & context (const char *description, T &&subject, B block, std::source_location location)
+template<class T, typename U>
ClassContext< T > & context (std::initializer_list< U > init_list, std::function< void(ClassDescription< T > &)> block, std::source_location location)
+template<class T>
Context & context (const char *description, Block body, std::source_location location)
Public Member Functions inherited from CppSpec::Runnable
Runnable (std::source_location location)
+bool has_parent () noexcept
 Check to see if the Runnable has a parent.
+bool has_parent () const noexcept
+Runnable * get_parent () noexcept
 Get the Runnable's parent.
+const Runnable * get_parent () const noexcept
+std::list< std::shared_ptr< Runnable > > & get_children () noexcept
+const std::list< std::shared_ptr< Runnable > > & get_children () const noexcept
+template<class C>
C * get_parent_as () noexcept
+template<class C>
const C * get_parent_as () const noexcept
+template<typename T, typename... Args>
T * make_child (Args &&... args)
std::string padding () const noexcept
 Generate padding (indentation) fore the current object.
+std::source_location get_location () const noexcept
+void set_location (std::source_location location) noexcept
+virtual void timed_run ()
+std::chrono::duration< double > get_runtime () const
+std::chrono::time_point< std::chrono::system_clock > get_start_time () const
+virtual Result get_result () const
+size_t num_tests () const noexcept
+size_t num_failures () const noexcept
+ + + + + +

+Public Attributes

+std::forward_list< LetBase * > lets
+std::deque< VoidBlock > after_alls
+std::deque< VoidBlock > before_eaches
+std::deque< VoidBlock > after_eaches
+ + + +

+Protected Member Functions

+void exec_before_eaches ()
+void exec_after_eaches ()
+ + +

+Protected Attributes

+std::string description
+

Member Function Documentation

+ +

◆ run()

+ +
+
+ + + + + +
+ + + + + + + +
void CppSpec::Description::run ()
+
+inlineoverridevirtual
+
+ +

Implements CppSpec::Runnable.

+ +
+
+
The documentation for this class was generated from the following files: +
+
+ +
+ + + + diff --git a/doxygen/classCppSpec_1_1Description__coll__graph.map b/doxygen/classCppSpec_1_1Description__coll__graph.map new file mode 100644 index 0000000..b1c0a84 --- /dev/null +++ b/doxygen/classCppSpec_1_1Description__coll__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/doxygen/classCppSpec_1_1Description__coll__graph.md5 b/doxygen/classCppSpec_1_1Description__coll__graph.md5 new file mode 100644 index 0000000..6fb9faf --- /dev/null +++ b/doxygen/classCppSpec_1_1Description__coll__graph.md5 @@ -0,0 +1 @@ +c7886b547359188d902c5e23bac868a8 \ No newline at end of file diff --git a/doxygen/classCppSpec_1_1Description__coll__graph.png b/doxygen/classCppSpec_1_1Description__coll__graph.png new file mode 100644 index 0000000..078dead Binary files /dev/null and b/doxygen/classCppSpec_1_1Description__coll__graph.png differ diff --git a/doxygen/classCppSpec_1_1Description__inherit__graph.map b/doxygen/classCppSpec_1_1Description__inherit__graph.map new file mode 100644 index 0000000..c2dfb1e --- /dev/null +++ b/doxygen/classCppSpec_1_1Description__inherit__graph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/doxygen/classCppSpec_1_1Description__inherit__graph.md5 b/doxygen/classCppSpec_1_1Description__inherit__graph.md5 new file mode 100644 index 0000000..427fdac --- /dev/null +++ b/doxygen/classCppSpec_1_1Description__inherit__graph.md5 @@ -0,0 +1 @@ +95f58df52adbd7ea681e302017d0e0f5 \ No newline at end of file diff --git a/doxygen/classCppSpec_1_1Description__inherit__graph.png b/doxygen/classCppSpec_1_1Description__inherit__graph.png new file mode 100644 index 0000000..57c5bff Binary files /dev/null and b/doxygen/classCppSpec_1_1Description__inherit__graph.png differ diff --git a/doxygen/classCppSpec_1_1Expectation-members.html b/doxygen/classCppSpec_1_1Expectation-members.html new file mode 100644 index 0000000..77e79e2 --- /dev/null +++ b/doxygen/classCppSpec_1_1Expectation-members.html @@ -0,0 +1,146 @@ + + + + + + + +C++Spec: Member List + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
CppSpec::Expectation< A > Member List
+
+
+ +

This is the complete list of members for CppSpec::Expectation< A >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Expectation()=default (defined in CppSpec::Expectation< A >)CppSpec::Expectation< A >
Expectation(std::source_location location) (defined in CppSpec::Expectation< A >)CppSpec::Expectation< A >inlineexplicit
Expectation(ItBase &it, std::source_location location)CppSpec::Expectation< A >inlineexplicit
get_it() const (defined in CppSpec::Expectation< A >)CppSpec::Expectation< A >inline
get_location() const (defined in CppSpec::Expectation< A >)CppSpec::Expectation< A >inline
get_target() &=0CppSpec::Expectation< A >pure virtual
ignore()=0 (defined in CppSpec::Expectation< A >)CppSpec::Expectation< A >pure virtual
ignore_ (defined in CppSpec::Expectation< A >)CppSpec::Expectation< A >protected
ignored() const (defined in CppSpec::Expectation< A >)CppSpec::Expectation< A >inline
is_positive_ (defined in CppSpec::Expectation< A >)CppSpec::Expectation< A >protected
not_()=0 (defined in CppSpec::Expectation< A >)CppSpec::Expectation< A >pure virtual
positive() constCppSpec::Expectation< A >inline
to(M matcher, std::string msg="")CppSpec::Expectation< A >
to_be_between(E min, E max, Matchers::RangeMode mode=Matchers::RangeMode::inclusive, std::string msg="")CppSpec::Expectation< A >
to_be_false(std::string msg="")CppSpec::Expectation< A >
to_be_falsy(std::string msg="")CppSpec::Expectation< A >
to_be_greater_than(E rhs, std::string msg="") (defined in CppSpec::Expectation< A >)CppSpec::Expectation< A >
to_be_less_than(E rhs, std::string msg="") (defined in CppSpec::Expectation< A >)CppSpec::Expectation< A >
to_be_null(std::string msg="")CppSpec::Expectation< A >
to_be_true(std::string msg="")CppSpec::Expectation< A >
to_be_truthy(std::string msg="")CppSpec::Expectation< A >
to_be_within(E expected, std::string msg="")CppSpec::Expectation< A >
to_contain(std::initializer_list< U > expected, std::string msg="")CppSpec::Expectation< A >
to_contain(E expected, std::string msg="")CppSpec::Expectation< A >
to_end_with(std::string ending, std::string msg="") (defined in CppSpec::Expectation< A >)CppSpec::Expectation< A >
to_end_with(std::initializer_list< U > start, std::string msg="") (defined in CppSpec::Expectation< A >)CppSpec::Expectation< A >
to_equal(E expected, std::string msg="")CppSpec::Expectation< A >
to_fail(std::string msg="") (defined in CppSpec::Expectation< A >)CppSpec::Expectation< A >
to_fail_with(std::string failure_message, std::string msg="") (defined in CppSpec::Expectation< A >)CppSpec::Expectation< A >
to_have_value(std::string msg="") (defined in CppSpec::Expectation< A >)CppSpec::Expectation< A >
to_match(std::regex regex, std::string msg="") (defined in CppSpec::Expectation< A >)CppSpec::Expectation< A >
to_match(std::string str, std::string msg="") (defined in CppSpec::Expectation< A >)CppSpec::Expectation< A >
to_partially_match(std::regex regex, std::string msg="") (defined in CppSpec::Expectation< A >)CppSpec::Expectation< A >
to_partially_match(std::string str, std::string msg="") (defined in CppSpec::Expectation< A >)CppSpec::Expectation< A >
to_satisfy(F test, std::string msg="")CppSpec::Expectation< A >
to_start_with(std::string start, std::string msg="") (defined in CppSpec::Expectation< A >)CppSpec::Expectation< A >
to_start_with(std::initializer_list< U > start, std::string msg="") (defined in CppSpec::Expectation< A >)CppSpec::Expectation< A >
+
+
+ + + + diff --git a/doxygen/classCppSpec_1_1Expectation.html b/doxygen/classCppSpec_1_1Expectation.html new file mode 100644 index 0000000..7ffe931 --- /dev/null +++ b/doxygen/classCppSpec_1_1Expectation.html @@ -0,0 +1,714 @@ + + + + + + + +C++Spec: CppSpec::Expectation< A > Class Template Reference + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
CppSpec::Expectation< A > Class Template Referenceabstract
+
+
+ +

Wraps the target of an expectation. + More...

+ +

#include <expectation.hpp>

+
+Inheritance diagram for CppSpec::Expectation< A >:
+
+
Inheritance graph
+ + + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

Expectation (std::source_location location)
 Expectation (ItBase &it, std::source_location location)
 Create an Expectation using a value.
virtual A & get_target () &=0
 Get the target of the expectation.
+ItBaseget_it () const
+std::source_location get_location () const
+constexpr bool positive () const
 Get whether the expectation is normal or negated.
+constexpr bool ignored () const
+virtual Expectation & not_ ()=0
+virtual Expectation & ignore ()=0
template<class M>
void to (M matcher, std::string msg="")
void to_be_false (std::string msg="")
 Match using the Matchers::Be matcher, testing for falsy-ness.
void to_be_falsy (std::string msg="")
void to_be_null (std::string msg="")
 Match using the Matchers::BeNullptr matcher.
void to_be_true (std::string msg="")
 Match using the Matchers::Be matcher, testing for truthy-ness.
void to_be_truthy (std::string msg="")
template<typename E>
void to_be_between (E min, E max, Matchers::RangeMode mode=Matchers::RangeMode::inclusive, std::string msg="")
 Match using the Matchers::BeBetween matcher, with an explicit range mode.
+template<typename E>
void to_be_greater_than (E rhs, std::string msg="")
+template<typename E>
void to_be_less_than (E rhs, std::string msg="")
template<typename E>
Matchers::BeWithinHelper< A, E > to_be_within (E expected, std::string msg="")
 Match using the Matchers::BeWithin matcher.
+void to_end_with (std::string ending, std::string msg="")
+void to_fail (std::string msg="")
+void to_fail_with (std::string failure_message, std::string msg="")
+void to_match (std::regex regex, std::string msg="")
+void to_match (std::string str, std::string msg="")
+void to_partially_match (std::regex regex, std::string msg="")
+void to_partially_match (std::string str, std::string msg="")
template<typename F>
void to_satisfy (F test, std::string msg="")
 Match using the Matchers::Satisfy matcher.
+void to_start_with (std::string start, std::string msg="")
template<typename U>
void to_contain (std::initializer_list< U > expected, std::string msg="")
 Match using the Matchers::Include matcher, given an initializer list.
template<typename E>
void to_contain (E expected, std::string msg="")
 Match using the Matchers::Include matcher.
+template<typename U>
void to_end_with (std::initializer_list< U > start, std::string msg="")
template<typename E>
void to_equal (E expected, std::string msg="")
 Match using the Matchers::Equal matcher.
+template<typename U>
void to_start_with (std::initializer_list< U > start, std::string msg="")
+void to_have_value (std::string msg="")
+ + + +

+Protected Attributes

+bool is_positive_ = true
+bool ignore_ = false
+

Detailed Description

+
template<class A>
+class CppSpec::Expectation< A >

Wraps the target of an expectation.

+
expect(something)
+
expect([] -> auto { return something })
+
+
// used with a matcher
+
expect(actual).to_equal(target)
+
+
// used with `not` and a matcher
+
expect(actual).not_().to_equal(target)
+

Static typing forces us to either give the type of the expected result to the Matcher object, or chain in a builder-like fashion.

+

Constructor & Destructor Documentation

+ +

◆ Expectation()

+ +
+
+
+template<class A>
+ + + + + +
+ + + + + + + + + + + +
CppSpec::Expectation< A >::Expectation (ItBase & it,
std::source_location location )
+
+inlineexplicit
+
+ +

Create an Expectation using a value.

+
Parameters
+ + +
valueThe target to test, an explicit value.
+
+
+
Returns
The constructed Expectation.
+ +
+
+

Member Function Documentation

+ +

◆ get_target()

+ +
+
+
+template<class A>
+ + + + + +
+ + + + + + + +
virtual A & CppSpec::Expectation< A >::get_target () &
+
+pure virtual
+
+ +

Get the target of the expectation.

+ +

Implemented in CppSpec::ExpectationFunc< F >, and CppSpec::ExpectationValue< A >.

+ +
+
+ +

◆ to()

+ +
+
+
+template<typename A>
+
+template<class M>
+ + + + + + + + + + + +
void CppSpec::Expectation< A >::to (M matcher,
std::string msg = "" )
+
+
Parameters
+ + + +
matcher
msg
+
+
+
Template Parameters
+ + + +
A
M
+
+
+
Returns
+ +
+
+ +

◆ to_be_between()

+ +
+
+
+template<typename A>
+
+template<typename E>
+ + + + + + + + + + + + + + + + + + + + + +
void CppSpec::Expectation< A >::to_be_between (E min,
E max,
Matchers::RangeMode mode = Matchers::RangeMode::inclusive,
std::string msg = "" )
+
+ +

Match using the Matchers::BeBetween matcher, with an explicit range mode.

+
Parameters
+ + + + +
min
max
msgOptional message to give on failure.
+
+
+
Returns
+ +
+
+ +

◆ to_be_false()

+ +
+
+
+template<typename A>
+ + + + + + + +
void CppSpec::Expectation< A >::to_be_false (std::string msg = "")
+
+ +

Match using the Matchers::Be matcher, testing for falsy-ness.

+
Parameters
+ + +
msgOptional message to give on failure.
+
+
+
Template Parameters
+ + +
A
+
+
+
Returns
+ +
+
+ +

◆ to_be_falsy()

+ +
+
+
+template<typename A>
+ + + + + + + +
void CppSpec::Expectation< A >::to_be_falsy (std::string msg = "")
+
+
Parameters
+ + +
msg
+
+
+
Returns
+ +
+
+ +

◆ to_be_null()

+ +
+
+
+template<typename A>
+ + + + + + + +
void CppSpec::Expectation< A >::to_be_null (std::string msg = "")
+
+ +

Match using the Matchers::BeNullptr matcher.

+
Parameters
+ + +
msgOptional message to give on failure.
+
+
+
Returns
+ +
+
+ +

◆ to_be_true()

+ +
+
+
+template<typename A>
+ + + + + + + +
void CppSpec::Expectation< A >::to_be_true (std::string msg = "")
+
+ +

Match using the Matchers::Be matcher, testing for truthy-ness.

+
Parameters
+ + +
msgOptional message to give on failure.
+
+
+
Returns
+ +
+
+ +

◆ to_be_truthy()

+ +
+
+
+template<typename A>
+ + + + + + + +
void CppSpec::Expectation< A >::to_be_truthy (std::string msg = "")
+
+
Parameters
+ + +
msg
+
+
+
Template Parameters
+ + +
A
+
+
+
Returns
+ +
+
+ +

◆ to_be_within()

+ +
+
+
+template<typename A>
+
+template<typename E>
+ + + + + + + + + + + +
Matchers::BeWithinHelper< A, E > CppSpec::Expectation< A >::to_be_within (E expected,
std::string msg = "" )
+
+ +

Match using the Matchers::BeWithin matcher.

+
Parameters
+ + + +
expected
msgOptional message to give on failure.
+
+
+
Returns
+ +
+
+ +

◆ to_contain() [1/2]

+ +
+
+
+template<typename A>
+
+template<typename E>
+ + + + + + + + + + + +
void CppSpec::Expectation< A >::to_contain (E expected,
std::string msg = "" )
+
+ +

Match using the Matchers::Include matcher.

+
Parameters
+ + + +
expected
msgOptional message to give on failure.
+
+
+
Returns
+ +
+
+ +

◆ to_contain() [2/2]

+ +
+
+
+template<typename A>
+
+template<typename U>
+ + + + + + + + + + + +
void CppSpec::Expectation< A >::to_contain (std::initializer_list< U > expected,
std::string msg = "" )
+
+ +

Match using the Matchers::Include matcher, given an initializer list.

+
Parameters
+ + + +
expected
msgOptional message to give on failure.
+
+
+
Returns
+ +
+
+ +

◆ to_equal()

+ +
+
+
+template<typename A>
+
+template<typename E>
+ + + + + + + + + + + +
void CppSpec::Expectation< A >::to_equal (E expected,
std::string msg = "" )
+
+ +

Match using the Matchers::Equal matcher.

+
Parameters
+ + + +
expected
msgOptional message to give on failure.
+
+
+
Returns
+ +
+
+ +

◆ to_satisfy()

+ +
+
+
+template<typename A>
+
+template<typename F>
+ + + + + + + + + + + +
void CppSpec::Expectation< A >::to_satisfy (F test,
std::string msg = "" )
+
+ +

Match using the Matchers::Satisfy matcher.

+
Parameters
+ + + +
testThe function to use to test the output of the expectation expression.
msgOptional message to give on failure.
+
+
+
Returns
Whether the expectation succeeds or fails.
+ +
+
+
The documentation for this class was generated from the following file: +
+
+ +
+ + + + diff --git a/doxygen/classCppSpec_1_1Expectation.js b/doxygen/classCppSpec_1_1Expectation.js new file mode 100644 index 0000000..978485b --- /dev/null +++ b/doxygen/classCppSpec_1_1Expectation.js @@ -0,0 +1,18 @@ +var classCppSpec_1_1Expectation = +[ + [ "Expectation", "classCppSpec_1_1Expectation.html#a09af06bbc66ed2e4e9f1f1c3bfcf1110", null ], + [ "get_target", "classCppSpec_1_1Expectation.html#a50dba18deadb9038f46cd14f0d7c45fa", null ], + [ "positive", "classCppSpec_1_1Expectation.html#a11077d298319d69222e03b23a63e21bc", null ], + [ "to", "classCppSpec_1_1Expectation.html#a13d4297d066d6df2f19bc1bd05f533b6", null ], + [ "to_be_between", "classCppSpec_1_1Expectation.html#ae23225ef213d0ca12e3d286e1a887a38", null ], + [ "to_be_false", "classCppSpec_1_1Expectation.html#a19ab784fd5cc8e0b72ff2146c78d3552", null ], + [ "to_be_falsy", "classCppSpec_1_1Expectation.html#a2567cea54531bd294b50fff70e0ea680", null ], + [ "to_be_null", "classCppSpec_1_1Expectation.html#af0c8a77816f4a2a07db019c643edc65f", null ], + [ "to_be_true", "classCppSpec_1_1Expectation.html#a4d9d95be3ce6207683a7cb7d7ef74418", null ], + [ "to_be_truthy", "classCppSpec_1_1Expectation.html#aa992cef3fee6c0bbba2a993efc6e8ada", null ], + [ "to_be_within", "classCppSpec_1_1Expectation.html#aed9b431bbfe5729d11101e844c45c090", null ], + [ "to_contain", "classCppSpec_1_1Expectation.html#ae42603bfb6283f73a7bd4b4f40f66992", null ], + [ "to_contain", "classCppSpec_1_1Expectation.html#a1edc3c2ec03516d7359b0ae5acd7299a", null ], + [ "to_equal", "classCppSpec_1_1Expectation.html#ac6b898a5711a410b3733da24eb4e8cf1", null ], + [ "to_satisfy", "classCppSpec_1_1Expectation.html#a2eaf3647d0427652e0b77e881b7cf036", null ] +]; \ No newline at end of file diff --git a/doxygen/classCppSpec_1_1ExpectationFunc-members.html b/doxygen/classCppSpec_1_1ExpectationFunc-members.html new file mode 100644 index 0000000..b234c5f --- /dev/null +++ b/doxygen/classCppSpec_1_1ExpectationFunc-members.html @@ -0,0 +1,128 @@ + + + + + + + +C++Spec: Member List + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
CppSpec::ExpectationFunc< F > Member List
+
+
+ +

This is the complete list of members for CppSpec::ExpectationFunc< F >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + +
casted() (defined in CppSpec::ExpectationFunc< F >)CppSpec::ExpectationFunc< F >inline
ExpectationFunc(ExpectationFunc< F > const &copy, std::source_location location) (defined in CppSpec::ExpectationFunc< F >)CppSpec::ExpectationFunc< F >inline
ExpectationFunc(ItBase &it, F block, std::source_location location)CppSpec::ExpectationFunc< F >inline
get_target() &overrideCppSpec::ExpectationFunc< F >inlinevirtual
ignore() override (defined in CppSpec::ExpectationFunc< F >)CppSpec::ExpectationFunc< F >inlinevirtual
not_() override (defined in CppSpec::ExpectationFunc< F >)CppSpec::ExpectationFunc< F >inlinevirtual
positive() constCppSpec::Expectation< decltype(std::declval< F >()())>inline
to(M matcher, std::string msg="")CppSpec::Expectation< decltype(std::declval< F >()())>
to_be_between(E min, E max, Matchers::RangeMode mode=Matchers::RangeMode::inclusive, std::string msg="")CppSpec::Expectation< decltype(std::declval< F >()())>
to_be_false(std::string msg="")CppSpec::Expectation< decltype(std::declval< F >()())>
to_be_falsy(std::string msg="")CppSpec::Expectation< decltype(std::declval< F >()())>
to_be_null(std::string msg="")CppSpec::Expectation< decltype(std::declval< F >()())>
to_be_true(std::string msg="")CppSpec::Expectation< decltype(std::declval< F >()())>
to_be_truthy(std::string msg="")CppSpec::Expectation< decltype(std::declval< F >()())>
to_be_within(E expected, std::string msg="")CppSpec::Expectation< decltype(std::declval< F >()())>
to_contain(std::initializer_list< U > expected, std::string msg="")CppSpec::Expectation< decltype(std::declval< F >()())>
to_equal(E expected, std::string msg="")CppSpec::Expectation< decltype(std::declval< F >()())>
to_satisfy(F test, std::string msg="")CppSpec::Expectation< decltype(std::declval< F >()())>
to_throw(std::string msg="") (defined in CppSpec::ExpectationFunc< F >)CppSpec::ExpectationFunc< F >
+
+
+ + + + diff --git a/doxygen/classCppSpec_1_1ExpectationFunc.html b/doxygen/classCppSpec_1_1ExpectationFunc.html new file mode 100644 index 0000000..daf7564 --- /dev/null +++ b/doxygen/classCppSpec_1_1ExpectationFunc.html @@ -0,0 +1,354 @@ + + + + + + + +C++Spec: CppSpec::ExpectationFunc< F > Class Template Reference + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
CppSpec::ExpectationFunc< F > Class Template Reference
+
+
+
+Inheritance diagram for CppSpec::ExpectationFunc< F >:
+
+
Inheritance graph
+ + + + + +
[legend]
+
+Collaboration diagram for CppSpec::ExpectationFunc< F >:
+
+
Collaboration graph
+ + + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

ExpectationFunc (ExpectationFunc< F > const &copy, std::source_location location)
 ExpectationFunc (ItBase &it, F block, std::source_location location)
 Create an ExpectationValue using a value.
block_ret_t & get_target () &override
 Create an Expectation using a function.
ExpectationFunc & not_ () override
ExpectationFunc & ignore () override
+Expectation< decltype(block())> & casted ()
+template<typename Ex = std::exception>
void to_throw (std::string msg="")
Public Member Functions inherited from CppSpec::Expectation< decltype(std::declval< F >()())>
+ItBaseget_it () const
+std::source_location get_location () const
+constexpr bool positive () const
 Get whether the expectation is normal or negated.
+constexpr bool ignored () const
void to (M matcher, std::string msg="")
void to_be_false (std::string msg="")
 Match using the Matchers::Be matcher, testing for falsy-ness.
void to_be_falsy (std::string msg="")
void to_be_null (std::string msg="")
 Match using the Matchers::BeNullptr matcher.
void to_be_true (std::string msg="")
 Match using the Matchers::Be matcher, testing for truthy-ness.
void to_be_truthy (std::string msg="")
void to_be_between (E min, E max, Matchers::RangeMode mode=Matchers::RangeMode::inclusive, std::string msg="")
 Match using the Matchers::BeBetween matcher, with an explicit range mode.
+void to_be_greater_than (E rhs, std::string msg="")
+void to_be_less_than (E rhs, std::string msg="")
Matchers::BeWithinHelper< decltype(std::declval< F >()()), E > to_be_within (E expected, std::string msg="")
 Match using the Matchers::BeWithin matcher.
+void to_end_with (std::string ending, std::string msg="")
+void to_fail (std::string msg="")
+void to_fail_with (std::string failure_message, std::string msg="")
+void to_match (std::regex regex, std::string msg="")
+void to_partially_match (std::regex regex, std::string msg="")
void to_satisfy (F test, std::string msg="")
 Match using the Matchers::Satisfy matcher.
+void to_start_with (std::string start, std::string msg="")
void to_contain (std::initializer_list< U > expected, std::string msg="")
 Match using the Matchers::Include matcher, given an initializer list.
void to_equal (E expected, std::string msg="")
 Match using the Matchers::Equal matcher.
+void to_have_value (std::string msg="")
+ + + + +

+Additional Inherited Members

Protected Attributes inherited from CppSpec::Expectation< decltype(std::declval< F >()())>
+bool is_positive_
+bool ignore_
+

Constructor & Destructor Documentation

+ +

◆ ExpectationFunc()

+ +
+
+
+template<Util::is_functional F>
+ + + + + +
+ + + + + + + + + + + + + + + + +
CppSpec::ExpectationFunc< F >::ExpectationFunc (ItBase & it,
F block,
std::source_location location )
+
+inline
+
+ +

Create an ExpectationValue using a value.

+
Parameters
+ + +
valueThe target to test, an explicit value.
+
+
+
Returns
The constructed ExpectationValue.
+ +
+
+

Member Function Documentation

+ +

◆ get_target()

+ +
+
+
+template<Util::is_functional F>
+ + + + + +
+ + + + + + + +
block_ret_t & CppSpec::ExpectationFunc< F >::get_target () &
+
+inlineoverridevirtual
+
+ +

Create an Expectation using a function.

+

This does not simply contain the return value of the given lambda, but instead wraps the thunk, delaying execution until it is time to perform the match.

+
Parameters
+ + +
blockA function that returns some value to test against.
+
+
+
Returns
The constructed Expectation.
+

Get the target of the expectation.

+ +

Implements CppSpec::Expectation< decltype(std::declval< F >()())>.

+ +
+
+ +

◆ ignore()

+ +
+
+
+template<Util::is_functional F>
+ + + + + +
+ + + + + + + +
ExpectationFunc & CppSpec::ExpectationFunc< F >::ignore ()
+
+inlineoverridevirtual
+
+
+ +

◆ not_()

+ +
+
+
+template<Util::is_functional F>
+ + + + + +
+ + + + + + + +
ExpectationFunc & CppSpec::ExpectationFunc< F >::not_ ()
+
+inlineoverridevirtual
+
+
+
The documentation for this class was generated from the following file: +
+
+ +
+ + + + diff --git a/doxygen/classCppSpec_1_1ExpectationFunc.js b/doxygen/classCppSpec_1_1ExpectationFunc.js new file mode 100644 index 0000000..6e7e72d --- /dev/null +++ b/doxygen/classCppSpec_1_1ExpectationFunc.js @@ -0,0 +1,5 @@ +var classCppSpec_1_1ExpectationFunc = +[ + [ "ExpectationFunc", "classCppSpec_1_1ExpectationFunc.html#a1c48c67aa4359b704fd51b67392279aa", null ], + [ "get_target", "classCppSpec_1_1ExpectationFunc.html#a15300b8796f7ed92bf19bae488b907de", null ] +]; \ No newline at end of file diff --git a/doxygen/classCppSpec_1_1ExpectationFunc__coll__graph.map b/doxygen/classCppSpec_1_1ExpectationFunc__coll__graph.map new file mode 100644 index 0000000..f34e742 --- /dev/null +++ b/doxygen/classCppSpec_1_1ExpectationFunc__coll__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/doxygen/classCppSpec_1_1ExpectationFunc__coll__graph.md5 b/doxygen/classCppSpec_1_1ExpectationFunc__coll__graph.md5 new file mode 100644 index 0000000..5e84329 --- /dev/null +++ b/doxygen/classCppSpec_1_1ExpectationFunc__coll__graph.md5 @@ -0,0 +1 @@ +f84a40d34110c8ae0d738c2c0a485f38 \ No newline at end of file diff --git a/doxygen/classCppSpec_1_1ExpectationFunc__coll__graph.png b/doxygen/classCppSpec_1_1ExpectationFunc__coll__graph.png new file mode 100644 index 0000000..c1711dd Binary files /dev/null and b/doxygen/classCppSpec_1_1ExpectationFunc__coll__graph.png differ diff --git a/doxygen/classCppSpec_1_1ExpectationFunc__inherit__graph.map b/doxygen/classCppSpec_1_1ExpectationFunc__inherit__graph.map new file mode 100644 index 0000000..f34e742 --- /dev/null +++ b/doxygen/classCppSpec_1_1ExpectationFunc__inherit__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/doxygen/classCppSpec_1_1ExpectationFunc__inherit__graph.md5 b/doxygen/classCppSpec_1_1ExpectationFunc__inherit__graph.md5 new file mode 100644 index 0000000..5e84329 --- /dev/null +++ b/doxygen/classCppSpec_1_1ExpectationFunc__inherit__graph.md5 @@ -0,0 +1 @@ +f84a40d34110c8ae0d738c2c0a485f38 \ No newline at end of file diff --git a/doxygen/classCppSpec_1_1ExpectationFunc__inherit__graph.png b/doxygen/classCppSpec_1_1ExpectationFunc__inherit__graph.png new file mode 100644 index 0000000..c1711dd Binary files /dev/null and b/doxygen/classCppSpec_1_1ExpectationFunc__inherit__graph.png differ diff --git a/doxygen/classCppSpec_1_1ExpectationValue-members.html b/doxygen/classCppSpec_1_1ExpectationValue-members.html new file mode 100644 index 0000000..4c4c081 --- /dev/null +++ b/doxygen/classCppSpec_1_1ExpectationValue-members.html @@ -0,0 +1,149 @@ + + + + + + + +C++Spec: Member List + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
CppSpec::ExpectationValue< A > Member List
+
+
+ +

This is the complete list of members for CppSpec::ExpectationValue< A >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Expectation()=default (defined in CppSpec::Expectation< A >)CppSpec::Expectation< A >
Expectation(std::source_location location) (defined in CppSpec::Expectation< A >)CppSpec::Expectation< A >inlineexplicit
Expectation(ItBase &it, std::source_location location)CppSpec::Expectation< A >inlineexplicit
ExpectationValue(ItBase &it, A value, std::source_location location)CppSpec::ExpectationValue< A >inline
ExpectationValue(A value, std::source_location location=std::source_location::current()) (defined in CppSpec::ExpectationValue< A >)CppSpec::ExpectationValue< A >inlineexplicit
ExpectationValue(ItBase &it, std::initializer_list< U > init_list, std::source_location location)CppSpec::ExpectationValue< A >inline
get_it() const (defined in CppSpec::Expectation< A >)CppSpec::Expectation< A >inline
get_location() const (defined in CppSpec::Expectation< A >)CppSpec::Expectation< A >inline
get_target() &overrideCppSpec::ExpectationValue< A >inlinevirtual
ignore() override (defined in CppSpec::ExpectationValue< A >)CppSpec::ExpectationValue< A >inlinevirtual
ignore_ (defined in CppSpec::Expectation< A >)CppSpec::Expectation< A >protected
ignored() const (defined in CppSpec::Expectation< A >)CppSpec::Expectation< A >inline
is_positive_ (defined in CppSpec::Expectation< A >)CppSpec::Expectation< A >protected
not_() override (defined in CppSpec::ExpectationValue< A >)CppSpec::ExpectationValue< A >inlinevirtual
positive() constCppSpec::Expectation< A >inline
to(M matcher, std::string msg="")CppSpec::Expectation< A >
to_be_between(E min, E max, Matchers::RangeMode mode=Matchers::RangeMode::inclusive, std::string msg="")CppSpec::Expectation< A >
to_be_false(std::string msg="")CppSpec::Expectation< A >
to_be_falsy(std::string msg="")CppSpec::Expectation< A >
to_be_greater_than(E rhs, std::string msg="") (defined in CppSpec::Expectation< A >)CppSpec::Expectation< A >
to_be_less_than(E rhs, std::string msg="") (defined in CppSpec::Expectation< A >)CppSpec::Expectation< A >
to_be_null(std::string msg="")CppSpec::Expectation< A >
to_be_true(std::string msg="")CppSpec::Expectation< A >
to_be_truthy(std::string msg="")CppSpec::Expectation< A >
to_be_within(E expected, std::string msg="")CppSpec::Expectation< A >
to_contain(std::initializer_list< U > expected, std::string msg="")CppSpec::Expectation< A >
to_contain(E expected, std::string msg="")CppSpec::Expectation< A >
to_end_with(std::string ending, std::string msg="") (defined in CppSpec::Expectation< A >)CppSpec::Expectation< A >
to_end_with(std::initializer_list< U > start, std::string msg="") (defined in CppSpec::Expectation< A >)CppSpec::Expectation< A >
to_equal(E expected, std::string msg="")CppSpec::Expectation< A >
to_fail(std::string msg="") (defined in CppSpec::Expectation< A >)CppSpec::Expectation< A >
to_fail_with(std::string failure_message, std::string msg="") (defined in CppSpec::Expectation< A >)CppSpec::Expectation< A >
to_have_value(std::string msg="") (defined in CppSpec::Expectation< A >)CppSpec::Expectation< A >
to_match(std::regex regex, std::string msg="") (defined in CppSpec::Expectation< A >)CppSpec::Expectation< A >
to_match(std::string str, std::string msg="") (defined in CppSpec::Expectation< A >)CppSpec::Expectation< A >
to_partially_match(std::regex regex, std::string msg="") (defined in CppSpec::Expectation< A >)CppSpec::Expectation< A >
to_partially_match(std::string str, std::string msg="") (defined in CppSpec::Expectation< A >)CppSpec::Expectation< A >
to_satisfy(F test, std::string msg="")CppSpec::Expectation< A >
to_start_with(std::string start, std::string msg="") (defined in CppSpec::Expectation< A >)CppSpec::Expectation< A >
to_start_with(std::initializer_list< U > start, std::string msg="") (defined in CppSpec::Expectation< A >)CppSpec::Expectation< A >
+
+
+ + + + diff --git a/doxygen/classCppSpec_1_1ExpectationValue.html b/doxygen/classCppSpec_1_1ExpectationValue.html new file mode 100644 index 0000000..cdd6b71 --- /dev/null +++ b/doxygen/classCppSpec_1_1ExpectationValue.html @@ -0,0 +1,415 @@ + + + + + + + +C++Spec: CppSpec::ExpectationValue< A > Class Template Reference + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
CppSpec::ExpectationValue< A > Class Template Reference
+
+
+
+Inheritance diagram for CppSpec::ExpectationValue< A >:
+
+
Inheritance graph
+ + + + + +
[legend]
+
+Collaboration diagram for CppSpec::ExpectationValue< A >:
+
+
Collaboration graph
+ + + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 ExpectationValue (ItBase &it, A value, std::source_location location)
 Create an ExpectationValue using a value.
ExpectationValue (A value, std::source_location location=std::source_location::current())
template<typename U>
 ExpectationValue (ItBase &it, std::initializer_list< U > init_list, std::source_location location)
 Create an Expectation using an initializer list.
A & get_target () &override
 Get the target of the expectation.
ExpectationValuenot_ () override
ExpectationValueignore () override
Public Member Functions inherited from CppSpec::Expectation< A >
Expectation (std::source_location location)
 Expectation (ItBase &it, std::source_location location)
 Create an Expectation using a value.
+ItBaseget_it () const
+std::source_location get_location () const
+constexpr bool positive () const
 Get whether the expectation is normal or negated.
+constexpr bool ignored () const
template<class M>
void to (M matcher, std::string msg="")
void to_be_false (std::string msg="")
 Match using the Matchers::Be matcher, testing for falsy-ness.
void to_be_falsy (std::string msg="")
void to_be_null (std::string msg="")
 Match using the Matchers::BeNullptr matcher.
void to_be_true (std::string msg="")
 Match using the Matchers::Be matcher, testing for truthy-ness.
void to_be_truthy (std::string msg="")
template<typename E>
void to_be_between (E min, E max, Matchers::RangeMode mode=Matchers::RangeMode::inclusive, std::string msg="")
 Match using the Matchers::BeBetween matcher, with an explicit range mode.
+template<typename E>
void to_be_greater_than (E rhs, std::string msg="")
+template<typename E>
void to_be_less_than (E rhs, std::string msg="")
template<typename E>
Matchers::BeWithinHelper< A, E > to_be_within (E expected, std::string msg="")
 Match using the Matchers::BeWithin matcher.
+void to_end_with (std::string ending, std::string msg="")
+void to_fail (std::string msg="")
+void to_fail_with (std::string failure_message, std::string msg="")
+void to_match (std::regex regex, std::string msg="")
+void to_match (std::string str, std::string msg="")
+void to_partially_match (std::regex regex, std::string msg="")
+void to_partially_match (std::string str, std::string msg="")
template<typename F>
void to_satisfy (F test, std::string msg="")
 Match using the Matchers::Satisfy matcher.
+void to_start_with (std::string start, std::string msg="")
template<typename U>
void to_contain (std::initializer_list< U > expected, std::string msg="")
 Match using the Matchers::Include matcher, given an initializer list.
template<typename E>
void to_contain (E expected, std::string msg="")
 Match using the Matchers::Include matcher.
+template<typename U>
void to_end_with (std::initializer_list< U > start, std::string msg="")
template<typename E>
void to_equal (E expected, std::string msg="")
 Match using the Matchers::Equal matcher.
+template<typename U>
void to_start_with (std::initializer_list< U > start, std::string msg="")
+void to_have_value (std::string msg="")
+ + + + +

+Additional Inherited Members

Protected Attributes inherited from CppSpec::Expectation< A >
+bool is_positive_ = true
+bool ignore_ = false
+

Constructor & Destructor Documentation

+ +

◆ ExpectationValue() [1/2]

+ +
+
+
+template<typename A>
+ + + + + +
+ + + + + + + + + + + + + + + + +
CppSpec::ExpectationValue< A >::ExpectationValue (ItBase & it,
A value,
std::source_location location )
+
+inline
+
+ +

Create an ExpectationValue using a value.

+
Parameters
+ + +
valueThe target to test, an explicit value.
+
+
+
Returns
The constructed ExpectationValue.
+ +
+
+ +

◆ ExpectationValue() [2/2]

+ +
+
+
+template<typename A>
+
+template<typename U>
+ + + + + +
+ + + + + + + + + + + + + + + + +
CppSpec::ExpectationValue< A >::ExpectationValue (ItBase & it,
std::initializer_list< U > init_list,
std::source_location location )
+
+inline
+
+ +

Create an Expectation using an initializer list.

+
Parameters
+ + +
init_listThe initializer list to match against.
+
+
+
Returns
The constructed Expectation.
+ +
+
+

Member Function Documentation

+ +

◆ get_target()

+ +
+
+
+template<typename A>
+ + + + + +
+ + + + + + + +
A & CppSpec::ExpectationValue< A >::get_target () &
+
+inlineoverridevirtual
+
+ +

Get the target of the expectation.

+ +

Implements CppSpec::Expectation< A >.

+ +
+
+ +

◆ ignore()

+ +
+
+
+template<typename A>
+ + + + + +
+ + + + + + + +
ExpectationValue & CppSpec::ExpectationValue< A >::ignore ()
+
+inlineoverridevirtual
+
+ +

Implements CppSpec::Expectation< A >.

+ +
+
+ +

◆ not_()

+ +
+
+
+template<typename A>
+ + + + + +
+ + + + + + + +
ExpectationValue & CppSpec::ExpectationValue< A >::not_ ()
+
+inlineoverridevirtual
+
+ +

Implements CppSpec::Expectation< A >.

+ +
+
+
The documentation for this class was generated from the following file: +
+
+ +
+ + + + diff --git a/doxygen/classCppSpec_1_1ExpectationValue.js b/doxygen/classCppSpec_1_1ExpectationValue.js new file mode 100644 index 0000000..2705daa --- /dev/null +++ b/doxygen/classCppSpec_1_1ExpectationValue.js @@ -0,0 +1,6 @@ +var classCppSpec_1_1ExpectationValue = +[ + [ "ExpectationValue", "classCppSpec_1_1ExpectationValue.html#ae000f5a957bd5caec676a7183a74dc36", null ], + [ "ExpectationValue", "classCppSpec_1_1ExpectationValue.html#aa523e6cc72a80331acee01bc299cbba4", null ], + [ "get_target", "classCppSpec_1_1ExpectationValue.html#a7232d8c2400444174264a10a2ad6d9a2", null ] +]; \ No newline at end of file diff --git a/doxygen/classCppSpec_1_1ExpectationValue__coll__graph.map b/doxygen/classCppSpec_1_1ExpectationValue__coll__graph.map new file mode 100644 index 0000000..493df1b --- /dev/null +++ b/doxygen/classCppSpec_1_1ExpectationValue__coll__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/doxygen/classCppSpec_1_1ExpectationValue__coll__graph.md5 b/doxygen/classCppSpec_1_1ExpectationValue__coll__graph.md5 new file mode 100644 index 0000000..4984ef6 --- /dev/null +++ b/doxygen/classCppSpec_1_1ExpectationValue__coll__graph.md5 @@ -0,0 +1 @@ +fa51c25b088c381b7c12f83e68c5a139 \ No newline at end of file diff --git a/doxygen/classCppSpec_1_1ExpectationValue__coll__graph.png b/doxygen/classCppSpec_1_1ExpectationValue__coll__graph.png new file mode 100644 index 0000000..57a35c8 Binary files /dev/null and b/doxygen/classCppSpec_1_1ExpectationValue__coll__graph.png differ diff --git a/doxygen/classCppSpec_1_1ExpectationValue__inherit__graph.map b/doxygen/classCppSpec_1_1ExpectationValue__inherit__graph.map new file mode 100644 index 0000000..493df1b --- /dev/null +++ b/doxygen/classCppSpec_1_1ExpectationValue__inherit__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/doxygen/classCppSpec_1_1ExpectationValue__inherit__graph.md5 b/doxygen/classCppSpec_1_1ExpectationValue__inherit__graph.md5 new file mode 100644 index 0000000..4984ef6 --- /dev/null +++ b/doxygen/classCppSpec_1_1ExpectationValue__inherit__graph.md5 @@ -0,0 +1 @@ +fa51c25b088c381b7c12f83e68c5a139 \ No newline at end of file diff --git a/doxygen/classCppSpec_1_1ExpectationValue__inherit__graph.png b/doxygen/classCppSpec_1_1ExpectationValue__inherit__graph.png new file mode 100644 index 0000000..57a35c8 Binary files /dev/null and b/doxygen/classCppSpec_1_1ExpectationValue__inherit__graph.png differ diff --git a/doxygen/classCppSpec_1_1Expectation__inherit__graph.map b/doxygen/classCppSpec_1_1Expectation__inherit__graph.map new file mode 100644 index 0000000..f3f06fe --- /dev/null +++ b/doxygen/classCppSpec_1_1Expectation__inherit__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/doxygen/classCppSpec_1_1Expectation__inherit__graph.md5 b/doxygen/classCppSpec_1_1Expectation__inherit__graph.md5 new file mode 100644 index 0000000..42f4adb --- /dev/null +++ b/doxygen/classCppSpec_1_1Expectation__inherit__graph.md5 @@ -0,0 +1 @@ +a95dbb2ff4f1b132d2ce80521715a838 \ No newline at end of file diff --git a/doxygen/classCppSpec_1_1Expectation__inherit__graph.png b/doxygen/classCppSpec_1_1Expectation__inherit__graph.png new file mode 100644 index 0000000..9693256 Binary files /dev/null and b/doxygen/classCppSpec_1_1Expectation__inherit__graph.png differ diff --git a/doxygen/classCppSpec_1_1Formatters_1_1BaseFormatter-members.html b/doxygen/classCppSpec_1_1Formatters_1_1BaseFormatter-members.html new file mode 100644 index 0000000..a2f34d4 --- /dev/null +++ b/doxygen/classCppSpec_1_1Formatters_1_1BaseFormatter-members.html @@ -0,0 +1,127 @@ + + + + + + + +C++Spec: Member List + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
CppSpec::Formatters::BaseFormatter Member List
+
+
+ +

This is the complete list of members for CppSpec::Formatters::BaseFormatter, including all inherited members.

+ + + + + + + + + + + + + + + + + + + +
BaseFormatter(std::ostream &out_stream=std::cout, bool color=is_terminal()) (defined in CppSpec::Formatters::BaseFormatter)CppSpec::Formatters::BaseFormatterinlineexplicit
BaseFormatter(const BaseFormatter &)=default (defined in CppSpec::Formatters::BaseFormatter)CppSpec::Formatters::BaseFormatter
BaseFormatter(const BaseFormatter &copy, std::ostream &out_stream) (defined in CppSpec::Formatters::BaseFormatter)CppSpec::Formatters::BaseFormatterinline
cleanup() (defined in CppSpec::Formatters::BaseFormatter)CppSpec::Formatters::BaseFormatterinlinevirtual
color_output (defined in CppSpec::Formatters::BaseFormatter)CppSpec::Formatters::BaseFormatterprotected
format(const Runnable &runnable) (defined in CppSpec::Formatters::BaseFormatter)CppSpec::Formatters::BaseFormatterinline
format(const Description &) (defined in CppSpec::Formatters::BaseFormatter)CppSpec::Formatters::BaseFormatterinlinevirtual
format(const ItBase &) (defined in CppSpec::Formatters::BaseFormatter)CppSpec::Formatters::BaseFormatterinlinevirtual
format_children(const Runnable &runnable) (defined in CppSpec::Formatters::BaseFormatter)CppSpec::Formatters::BaseFormatterinline
get_and_increment_test_counter() (defined in CppSpec::Formatters::BaseFormatter)CppSpec::Formatters::BaseFormatterinline
out_stream (defined in CppSpec::Formatters::BaseFormatter)CppSpec::Formatters::BaseFormatterprotected
reset_color() (defined in CppSpec::Formatters::BaseFormatter)CppSpec::Formatters::BaseFormatterinline
reset_test_counter() (defined in CppSpec::Formatters::BaseFormatter)CppSpec::Formatters::BaseFormatterinline
set_color(const char *color) (defined in CppSpec::Formatters::BaseFormatter)CppSpec::Formatters::BaseFormatterinline
set_color_output(bool value) (defined in CppSpec::Formatters::BaseFormatter)CppSpec::Formatters::BaseFormatterinline
status_color(Result::Status status) (defined in CppSpec::Formatters::BaseFormatter)CppSpec::Formatters::BaseFormatterinline
test_counter (defined in CppSpec::Formatters::BaseFormatter)CppSpec::Formatters::BaseFormatterprotected
~BaseFormatter()=default (defined in CppSpec::Formatters::BaseFormatter)CppSpec::Formatters::BaseFormattervirtual
+
+
+ + + + diff --git a/doxygen/classCppSpec_1_1Formatters_1_1BaseFormatter.html b/doxygen/classCppSpec_1_1Formatters_1_1BaseFormatter.html new file mode 100644 index 0000000..c8e5ce1 --- /dev/null +++ b/doxygen/classCppSpec_1_1Formatters_1_1BaseFormatter.html @@ -0,0 +1,174 @@ + + + + + + + +C++Spec: CppSpec::Formatters::BaseFormatter Class Reference + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
CppSpec::Formatters::BaseFormatter Class Reference
+
+
+
+Inheritance diagram for CppSpec::Formatters::BaseFormatter:
+
+
Inheritance graph
+ + + + + + + + + + + +
[legend]
+ + + + + + + + + + + + + + + + +

+Public Member Functions

BaseFormatter (std::ostream &out_stream=std::cout, bool color=is_terminal())
BaseFormatter (const BaseFormatter &)=default
BaseFormatter (const BaseFormatter &copy, std::ostream &out_stream)
+void format (const Runnable &runnable)
+void format_children (const Runnable &runnable)
+virtual void format (const Description &)
+virtual void format (const ItBase &)
+virtual void cleanup ()
+BaseFormatter & set_color_output (bool value)
+int get_and_increment_test_counter ()
+void reset_test_counter ()
+const char * set_color (const char *color)
+const char * status_color (Result::Status status)
+const char * reset_color ()
+ + + + +

+Protected Attributes

+std::ostream & out_stream
+int test_counter = 1
+bool color_output
+
The documentation for this class was generated from the following file: +
+
+ +
+ + + + diff --git a/doxygen/classCppSpec_1_1Formatters_1_1BaseFormatter__inherit__graph.map b/doxygen/classCppSpec_1_1Formatters_1_1BaseFormatter__inherit__graph.map new file mode 100644 index 0000000..91c5a4d --- /dev/null +++ b/doxygen/classCppSpec_1_1Formatters_1_1BaseFormatter__inherit__graph.map @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/doxygen/classCppSpec_1_1Formatters_1_1BaseFormatter__inherit__graph.md5 b/doxygen/classCppSpec_1_1Formatters_1_1BaseFormatter__inherit__graph.md5 new file mode 100644 index 0000000..4b88d3a --- /dev/null +++ b/doxygen/classCppSpec_1_1Formatters_1_1BaseFormatter__inherit__graph.md5 @@ -0,0 +1 @@ +5126310b8986157e3cce63c08368a371 \ No newline at end of file diff --git a/doxygen/classCppSpec_1_1Formatters_1_1BaseFormatter__inherit__graph.png b/doxygen/classCppSpec_1_1Formatters_1_1BaseFormatter__inherit__graph.png new file mode 100644 index 0000000..1e46282 Binary files /dev/null and b/doxygen/classCppSpec_1_1Formatters_1_1BaseFormatter__inherit__graph.png differ diff --git a/doxygen/classCppSpec_1_1Formatters_1_1JUnitXML-members.html b/doxygen/classCppSpec_1_1Formatters_1_1JUnitXML-members.html new file mode 100644 index 0000000..d2bdc65 --- /dev/null +++ b/doxygen/classCppSpec_1_1Formatters_1_1JUnitXML-members.html @@ -0,0 +1,129 @@ + + + + + + + +C++Spec: Member List + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
CppSpec::Formatters::JUnitXML Member List
+
+
+ +

This is the complete list of members for CppSpec::Formatters::JUnitXML, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + +
BaseFormatter(std::ostream &out_stream=std::cout, bool color=is_terminal()) (defined in CppSpec::Formatters::BaseFormatter)CppSpec::Formatters::BaseFormatterinlineexplicit
BaseFormatter(const BaseFormatter &)=default (defined in CppSpec::Formatters::BaseFormatter)CppSpec::Formatters::BaseFormatter
BaseFormatter(const BaseFormatter &copy, std::ostream &out_stream) (defined in CppSpec::Formatters::BaseFormatter)CppSpec::Formatters::BaseFormatterinline
cleanup() (defined in CppSpec::Formatters::BaseFormatter)CppSpec::Formatters::BaseFormatterinlinevirtual
color_output (defined in CppSpec::Formatters::BaseFormatter)CppSpec::Formatters::BaseFormatterprotected
format(const Description &description) override (defined in CppSpec::Formatters::JUnitXML)CppSpec::Formatters::JUnitXMLinlinevirtual
format(const ItBase &it) override (defined in CppSpec::Formatters::JUnitXML)CppSpec::Formatters::JUnitXMLinlinevirtual
format(const Runnable &runnable) (defined in CppSpec::Formatters::BaseFormatter)CppSpec::Formatters::BaseFormatterinline
format_children(const Runnable &runnable) (defined in CppSpec::Formatters::BaseFormatter)CppSpec::Formatters::BaseFormatterinline
get_and_increment_test_counter() (defined in CppSpec::Formatters::BaseFormatter)CppSpec::Formatters::BaseFormatterinline
JUnitXML(std::ostream &out_stream=std::cout, bool color=is_terminal()) (defined in CppSpec::Formatters::JUnitXML)CppSpec::Formatters::JUnitXMLinlineexplicit
out_stream (defined in CppSpec::Formatters::BaseFormatter)CppSpec::Formatters::BaseFormatterprotected
reset_color() (defined in CppSpec::Formatters::BaseFormatter)CppSpec::Formatters::BaseFormatterinline
reset_test_counter() (defined in CppSpec::Formatters::BaseFormatter)CppSpec::Formatters::BaseFormatterinline
set_color(const char *color) (defined in CppSpec::Formatters::BaseFormatter)CppSpec::Formatters::BaseFormatterinline
set_color_output(bool value) (defined in CppSpec::Formatters::BaseFormatter)CppSpec::Formatters::BaseFormatterinline
status_color(Result::Status status) (defined in CppSpec::Formatters::BaseFormatter)CppSpec::Formatters::BaseFormatterinline
test_counter (defined in CppSpec::Formatters::BaseFormatter)CppSpec::Formatters::BaseFormatterprotected
~BaseFormatter()=default (defined in CppSpec::Formatters::BaseFormatter)CppSpec::Formatters::BaseFormattervirtual
~JUnitXML() (defined in CppSpec::Formatters::JUnitXML)CppSpec::Formatters::JUnitXMLinline
+
+
+ + + + diff --git a/doxygen/classCppSpec_1_1Formatters_1_1JUnitXML.html b/doxygen/classCppSpec_1_1Formatters_1_1JUnitXML.html new file mode 100644 index 0000000..bb7eec7 --- /dev/null +++ b/doxygen/classCppSpec_1_1Formatters_1_1JUnitXML.html @@ -0,0 +1,235 @@ + + + + + + + +C++Spec: CppSpec::Formatters::JUnitXML Class Reference + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
CppSpec::Formatters::JUnitXML Class Reference
+
+
+
+Inheritance diagram for CppSpec::Formatters::JUnitXML:
+
+
Inheritance graph
+ + + + + +
[legend]
+
+Collaboration diagram for CppSpec::Formatters::JUnitXML:
+
+
Collaboration graph
+ + + + + +
[legend]
+ + + + + + + + + + + + + + + + + + +

+Public Member Functions

JUnitXML (std::ostream &out_stream=std::cout, bool color=is_terminal())
void format (const Description &description) override
void format (const ItBase &it) override
Public Member Functions inherited from CppSpec::Formatters::BaseFormatter
BaseFormatter (std::ostream &out_stream=std::cout, bool color=is_terminal())
BaseFormatter (const BaseFormatter &)=default
BaseFormatter (const BaseFormatter &copy, std::ostream &out_stream)
+void format (const Runnable &runnable)
+void format_children (const Runnable &runnable)
+virtual void cleanup ()
+BaseFormatter & set_color_output (bool value)
+int get_and_increment_test_counter ()
+void reset_test_counter ()
+const char * set_color (const char *color)
+const char * status_color (Result::Status status)
+const char * reset_color ()
+ + + + + +

+Additional Inherited Members

Protected Attributes inherited from CppSpec::Formatters::BaseFormatter
+std::ostream & out_stream
+int test_counter = 1
+bool color_output
+

Member Function Documentation

+ +

◆ format() [1/2]

+ +
+
+ + + + + +
+ + + + + + + +
void CppSpec::Formatters::JUnitXML::format (const Description & description)
+
+inlineoverridevirtual
+
+ +

Reimplemented from CppSpec::Formatters::BaseFormatter.

+ +
+
+ +

◆ format() [2/2]

+ +
+
+ + + + + +
+ + + + + + + +
void CppSpec::Formatters::JUnitXML::format (const ItBase & it)
+
+inlineoverridevirtual
+
+ +

Reimplemented from CppSpec::Formatters::BaseFormatter.

+ +
+
+
The documentation for this class was generated from the following file: +
+
+ +
+ + + + diff --git a/doxygen/classCppSpec_1_1Formatters_1_1JUnitXML__coll__graph.map b/doxygen/classCppSpec_1_1Formatters_1_1JUnitXML__coll__graph.map new file mode 100644 index 0000000..a71d2a7 --- /dev/null +++ b/doxygen/classCppSpec_1_1Formatters_1_1JUnitXML__coll__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/doxygen/classCppSpec_1_1Formatters_1_1JUnitXML__coll__graph.md5 b/doxygen/classCppSpec_1_1Formatters_1_1JUnitXML__coll__graph.md5 new file mode 100644 index 0000000..4c7737b --- /dev/null +++ b/doxygen/classCppSpec_1_1Formatters_1_1JUnitXML__coll__graph.md5 @@ -0,0 +1 @@ +33961c6746ffbe792c5735edfb47a91f \ No newline at end of file diff --git a/doxygen/classCppSpec_1_1Formatters_1_1JUnitXML__coll__graph.png b/doxygen/classCppSpec_1_1Formatters_1_1JUnitXML__coll__graph.png new file mode 100644 index 0000000..b4ba3b4 Binary files /dev/null and b/doxygen/classCppSpec_1_1Formatters_1_1JUnitXML__coll__graph.png differ diff --git a/doxygen/classCppSpec_1_1Formatters_1_1JUnitXML__inherit__graph.map b/doxygen/classCppSpec_1_1Formatters_1_1JUnitXML__inherit__graph.map new file mode 100644 index 0000000..a71d2a7 --- /dev/null +++ b/doxygen/classCppSpec_1_1Formatters_1_1JUnitXML__inherit__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/doxygen/classCppSpec_1_1Formatters_1_1JUnitXML__inherit__graph.md5 b/doxygen/classCppSpec_1_1Formatters_1_1JUnitXML__inherit__graph.md5 new file mode 100644 index 0000000..4c7737b --- /dev/null +++ b/doxygen/classCppSpec_1_1Formatters_1_1JUnitXML__inherit__graph.md5 @@ -0,0 +1 @@ +33961c6746ffbe792c5735edfb47a91f \ No newline at end of file diff --git a/doxygen/classCppSpec_1_1Formatters_1_1JUnitXML__inherit__graph.png b/doxygen/classCppSpec_1_1Formatters_1_1JUnitXML__inherit__graph.png new file mode 100644 index 0000000..b4ba3b4 Binary files /dev/null and b/doxygen/classCppSpec_1_1Formatters_1_1JUnitXML__inherit__graph.png differ diff --git a/doxygen/classCppSpec_1_1Formatters_1_1Progress-members.html b/doxygen/classCppSpec_1_1Formatters_1_1Progress-members.html new file mode 100644 index 0000000..c4da51b --- /dev/null +++ b/doxygen/classCppSpec_1_1Formatters_1_1Progress-members.html @@ -0,0 +1,131 @@ + + + + + + + +C++Spec: Member List + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
CppSpec::Formatters::Progress Member List
+
+
+ +

This is the complete list of members for CppSpec::Formatters::Progress, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + +
BaseFormatter(std::ostream &out_stream=std::cout, bool color=is_terminal()) (defined in CppSpec::Formatters::BaseFormatter)CppSpec::Formatters::BaseFormatterinlineexplicit
BaseFormatter(const BaseFormatter &)=default (defined in CppSpec::Formatters::BaseFormatter)CppSpec::Formatters::BaseFormatter
BaseFormatter(const BaseFormatter &copy, std::ostream &out_stream) (defined in CppSpec::Formatters::BaseFormatter)CppSpec::Formatters::BaseFormatterinline
cleanup() (defined in CppSpec::Formatters::BaseFormatter)CppSpec::Formatters::BaseFormatterinlinevirtual
color_output (defined in CppSpec::Formatters::BaseFormatter)CppSpec::Formatters::BaseFormatterprotected
format(const ItBase &it) override (defined in CppSpec::Formatters::Progress)CppSpec::Formatters::Progressinlinevirtual
format(const Runnable &runnable) (defined in CppSpec::Formatters::BaseFormatter)CppSpec::Formatters::BaseFormatterinline
format(const Description &) (defined in CppSpec::Formatters::BaseFormatter)CppSpec::Formatters::BaseFormatterinlinevirtual
format_children(const Runnable &runnable) (defined in CppSpec::Formatters::BaseFormatter)CppSpec::Formatters::BaseFormatterinline
format_failure_messages() (defined in CppSpec::Formatters::Progress)CppSpec::Formatters::Progressinline
get_and_increment_test_counter() (defined in CppSpec::Formatters::BaseFormatter)CppSpec::Formatters::BaseFormatterinline
out_stream (defined in CppSpec::Formatters::BaseFormatter)CppSpec::Formatters::BaseFormatterprotected
prep_failure(const ItBase &it) (defined in CppSpec::Formatters::Progress)CppSpec::Formatters::Progressinline
reset_color() (defined in CppSpec::Formatters::BaseFormatter)CppSpec::Formatters::BaseFormatterinline
reset_test_counter() (defined in CppSpec::Formatters::BaseFormatter)CppSpec::Formatters::BaseFormatterinline
set_color(const char *color) (defined in CppSpec::Formatters::BaseFormatter)CppSpec::Formatters::BaseFormatterinline
set_color_output(bool value) (defined in CppSpec::Formatters::BaseFormatter)CppSpec::Formatters::BaseFormatterinline
status_char(Result::Status status) (defined in CppSpec::Formatters::Progress)CppSpec::Formatters::Progressinlinestatic
status_color(Result::Status status) (defined in CppSpec::Formatters::BaseFormatter)CppSpec::Formatters::BaseFormatterinline
test_counter (defined in CppSpec::Formatters::BaseFormatter)CppSpec::Formatters::BaseFormatterprotected
~BaseFormatter()=default (defined in CppSpec::Formatters::BaseFormatter)CppSpec::Formatters::BaseFormattervirtual
~Progress() override (defined in CppSpec::Formatters::Progress)CppSpec::Formatters::Progressinline
+
+
+ + + + diff --git a/doxygen/classCppSpec_1_1Formatters_1_1Progress.html b/doxygen/classCppSpec_1_1Formatters_1_1Progress.html new file mode 100644 index 0000000..99b45cb --- /dev/null +++ b/doxygen/classCppSpec_1_1Formatters_1_1Progress.html @@ -0,0 +1,216 @@ + + + + + + + +C++Spec: CppSpec::Formatters::Progress Class Reference + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
CppSpec::Formatters::Progress Class Reference
+
+
+
+Inheritance diagram for CppSpec::Formatters::Progress:
+
+
Inheritance graph
+ + + + + +
[legend]
+
+Collaboration diagram for CppSpec::Formatters::Progress:
+
+
Collaboration graph
+ + + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + +

+Public Member Functions

void format (const ItBase &it) override
+void format_failure_messages ()
+void prep_failure (const ItBase &it)
Public Member Functions inherited from CppSpec::Formatters::BaseFormatter
BaseFormatter (std::ostream &out_stream=std::cout, bool color=is_terminal())
BaseFormatter (const BaseFormatter &)=default
BaseFormatter (const BaseFormatter &copy, std::ostream &out_stream)
+void format (const Runnable &runnable)
+void format_children (const Runnable &runnable)
+virtual void format (const Description &)
+virtual void cleanup ()
+BaseFormatter & set_color_output (bool value)
+int get_and_increment_test_counter ()
+void reset_test_counter ()
+const char * set_color (const char *color)
+const char * status_color (Result::Status status)
+const char * reset_color ()
+ + +

+Static Public Member Functions

+static char status_char (Result::Status status)
+ + + + + +

+Additional Inherited Members

Protected Attributes inherited from CppSpec::Formatters::BaseFormatter
+std::ostream & out_stream
+int test_counter = 1
+bool color_output
+

Member Function Documentation

+ +

◆ format()

+ +
+
+ + + + + +
+ + + + + + + +
void CppSpec::Formatters::Progress::format (const ItBase & it)
+
+inlineoverridevirtual
+
+ +

Reimplemented from CppSpec::Formatters::BaseFormatter.

+ +
+
+
The documentation for this class was generated from the following file: +
+
+ +
+ + + + diff --git a/doxygen/classCppSpec_1_1Formatters_1_1Progress__coll__graph.map b/doxygen/classCppSpec_1_1Formatters_1_1Progress__coll__graph.map new file mode 100644 index 0000000..be0b538 --- /dev/null +++ b/doxygen/classCppSpec_1_1Formatters_1_1Progress__coll__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/doxygen/classCppSpec_1_1Formatters_1_1Progress__coll__graph.md5 b/doxygen/classCppSpec_1_1Formatters_1_1Progress__coll__graph.md5 new file mode 100644 index 0000000..c1f347e --- /dev/null +++ b/doxygen/classCppSpec_1_1Formatters_1_1Progress__coll__graph.md5 @@ -0,0 +1 @@ +3197e8ebbe386774e45fd7ad00a83bb9 \ No newline at end of file diff --git a/doxygen/classCppSpec_1_1Formatters_1_1Progress__coll__graph.png b/doxygen/classCppSpec_1_1Formatters_1_1Progress__coll__graph.png new file mode 100644 index 0000000..8e41160 Binary files /dev/null and b/doxygen/classCppSpec_1_1Formatters_1_1Progress__coll__graph.png differ diff --git a/doxygen/classCppSpec_1_1Formatters_1_1Progress__inherit__graph.map b/doxygen/classCppSpec_1_1Formatters_1_1Progress__inherit__graph.map new file mode 100644 index 0000000..be0b538 --- /dev/null +++ b/doxygen/classCppSpec_1_1Formatters_1_1Progress__inherit__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/doxygen/classCppSpec_1_1Formatters_1_1Progress__inherit__graph.md5 b/doxygen/classCppSpec_1_1Formatters_1_1Progress__inherit__graph.md5 new file mode 100644 index 0000000..c1f347e --- /dev/null +++ b/doxygen/classCppSpec_1_1Formatters_1_1Progress__inherit__graph.md5 @@ -0,0 +1 @@ +3197e8ebbe386774e45fd7ad00a83bb9 \ No newline at end of file diff --git a/doxygen/classCppSpec_1_1Formatters_1_1Progress__inherit__graph.png b/doxygen/classCppSpec_1_1Formatters_1_1Progress__inherit__graph.png new file mode 100644 index 0000000..8e41160 Binary files /dev/null and b/doxygen/classCppSpec_1_1Formatters_1_1Progress__inherit__graph.png differ diff --git a/doxygen/classCppSpec_1_1Formatters_1_1Verbose-members.html b/doxygen/classCppSpec_1_1Formatters_1_1Verbose-members.html new file mode 100644 index 0000000..1c96c53 --- /dev/null +++ b/doxygen/classCppSpec_1_1Formatters_1_1Verbose-members.html @@ -0,0 +1,131 @@ + + + + + + + +C++Spec: Member List + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
CppSpec::Formatters::Verbose Member List
+
+
+ +

This is the complete list of members for CppSpec::Formatters::Verbose, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + +
BaseFormatter(std::ostream &out_stream=std::cout, bool color=is_terminal()) (defined in CppSpec::Formatters::BaseFormatter)CppSpec::Formatters::BaseFormatterinlineexplicit
BaseFormatter(const BaseFormatter &)=default (defined in CppSpec::Formatters::BaseFormatter)CppSpec::Formatters::BaseFormatter
BaseFormatter(const BaseFormatter &copy, std::ostream &out_stream) (defined in CppSpec::Formatters::BaseFormatter)CppSpec::Formatters::BaseFormatterinline
cleanup() (defined in CppSpec::Formatters::BaseFormatter)CppSpec::Formatters::BaseFormatterinlinevirtual
color_output (defined in CppSpec::Formatters::BaseFormatter)CppSpec::Formatters::BaseFormatterprotected
format(const Description &description) override (defined in CppSpec::Formatters::Verbose)CppSpec::Formatters::Verboseinlinevirtual
format(const ItBase &it) override (defined in CppSpec::Formatters::Verbose)CppSpec::Formatters::Verboseinlinevirtual
format(const Runnable &runnable) (defined in CppSpec::Formatters::BaseFormatter)CppSpec::Formatters::BaseFormatterinline
format_children(const Runnable &runnable) (defined in CppSpec::Formatters::BaseFormatter)CppSpec::Formatters::BaseFormatterinline
get_and_increment_test_counter() (defined in CppSpec::Formatters::BaseFormatter)CppSpec::Formatters::BaseFormatterinline
out_stream (defined in CppSpec::Formatters::BaseFormatter)CppSpec::Formatters::BaseFormatterprotected
reset_color() (defined in CppSpec::Formatters::BaseFormatter)CppSpec::Formatters::BaseFormatterinline
reset_test_counter() (defined in CppSpec::Formatters::BaseFormatter)CppSpec::Formatters::BaseFormatterinline
set_color(const char *color) (defined in CppSpec::Formatters::BaseFormatter)CppSpec::Formatters::BaseFormatterinline
set_color_output(bool value) (defined in CppSpec::Formatters::BaseFormatter)CppSpec::Formatters::BaseFormatterinline
status_color(Result::Status status) (defined in CppSpec::Formatters::BaseFormatter)CppSpec::Formatters::BaseFormatterinline
test_counter (defined in CppSpec::Formatters::BaseFormatter)CppSpec::Formatters::BaseFormatterprotected
Verbose()=default (defined in CppSpec::Formatters::Verbose)CppSpec::Formatters::Verbose
Verbose(std::ostream &out_stream) (defined in CppSpec::Formatters::Verbose)CppSpec::Formatters::Verboseinlineexplicit
Verbose(const BaseFormatter &base, std::ostream &out_stream) (defined in CppSpec::Formatters::Verbose)CppSpec::Formatters::Verboseinline
Verbose(const BaseFormatter &base) (defined in CppSpec::Formatters::Verbose)CppSpec::Formatters::Verboseinlineexplicit
~BaseFormatter()=default (defined in CppSpec::Formatters::BaseFormatter)CppSpec::Formatters::BaseFormattervirtual
+
+
+ + + + diff --git a/doxygen/classCppSpec_1_1Formatters_1_1Verbose.html b/doxygen/classCppSpec_1_1Formatters_1_1Verbose.html new file mode 100644 index 0000000..9638d6c --- /dev/null +++ b/doxygen/classCppSpec_1_1Formatters_1_1Verbose.html @@ -0,0 +1,239 @@ + + + + + + + +C++Spec: CppSpec::Formatters::Verbose Class Reference + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
CppSpec::Formatters::Verbose Class Reference
+
+
+
+Inheritance diagram for CppSpec::Formatters::Verbose:
+
+
Inheritance graph
+ + + + + +
[legend]
+
+Collaboration diagram for CppSpec::Formatters::Verbose:
+
+
Collaboration graph
+ + + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

Verbose (std::ostream &out_stream)
Verbose (const BaseFormatter &base, std::ostream &out_stream)
Verbose (const BaseFormatter &base)
void format (const Description &description) override
void format (const ItBase &it) override
Public Member Functions inherited from CppSpec::Formatters::BaseFormatter
BaseFormatter (std::ostream &out_stream=std::cout, bool color=is_terminal())
BaseFormatter (const BaseFormatter &)=default
BaseFormatter (const BaseFormatter &copy, std::ostream &out_stream)
+void format (const Runnable &runnable)
+void format_children (const Runnable &runnable)
+virtual void cleanup ()
+BaseFormatter & set_color_output (bool value)
+int get_and_increment_test_counter ()
+void reset_test_counter ()
+const char * set_color (const char *color)
+const char * status_color (Result::Status status)
+const char * reset_color ()
+ + + + + +

+Additional Inherited Members

Protected Attributes inherited from CppSpec::Formatters::BaseFormatter
+std::ostream & out_stream
+int test_counter = 1
+bool color_output
+

Member Function Documentation

+ +

◆ format() [1/2]

+ +
+
+ + + + + +
+ + + + + + + +
void CppSpec::Formatters::Verbose::format (const Description & description)
+
+inlineoverridevirtual
+
+ +

Reimplemented from CppSpec::Formatters::BaseFormatter.

+ +
+
+ +

◆ format() [2/2]

+ +
+
+ + + + + +
+ + + + + + + +
void CppSpec::Formatters::Verbose::format (const ItBase & it)
+
+inlineoverridevirtual
+
+ +

Reimplemented from CppSpec::Formatters::BaseFormatter.

+ +
+
+
The documentation for this class was generated from the following file: +
+
+ +
+ + + + diff --git a/doxygen/classCppSpec_1_1Formatters_1_1Verbose__coll__graph.map b/doxygen/classCppSpec_1_1Formatters_1_1Verbose__coll__graph.map new file mode 100644 index 0000000..031224d --- /dev/null +++ b/doxygen/classCppSpec_1_1Formatters_1_1Verbose__coll__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/doxygen/classCppSpec_1_1Formatters_1_1Verbose__coll__graph.md5 b/doxygen/classCppSpec_1_1Formatters_1_1Verbose__coll__graph.md5 new file mode 100644 index 0000000..0ce8eff --- /dev/null +++ b/doxygen/classCppSpec_1_1Formatters_1_1Verbose__coll__graph.md5 @@ -0,0 +1 @@ +8c47dfcafac869e1388aecdee32cd2ca \ No newline at end of file diff --git a/doxygen/classCppSpec_1_1Formatters_1_1Verbose__coll__graph.png b/doxygen/classCppSpec_1_1Formatters_1_1Verbose__coll__graph.png new file mode 100644 index 0000000..570aa3e Binary files /dev/null and b/doxygen/classCppSpec_1_1Formatters_1_1Verbose__coll__graph.png differ diff --git a/doxygen/classCppSpec_1_1Formatters_1_1Verbose__inherit__graph.map b/doxygen/classCppSpec_1_1Formatters_1_1Verbose__inherit__graph.map new file mode 100644 index 0000000..031224d --- /dev/null +++ b/doxygen/classCppSpec_1_1Formatters_1_1Verbose__inherit__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/doxygen/classCppSpec_1_1Formatters_1_1Verbose__inherit__graph.md5 b/doxygen/classCppSpec_1_1Formatters_1_1Verbose__inherit__graph.md5 new file mode 100644 index 0000000..0ce8eff --- /dev/null +++ b/doxygen/classCppSpec_1_1Formatters_1_1Verbose__inherit__graph.md5 @@ -0,0 +1 @@ +8c47dfcafac869e1388aecdee32cd2ca \ No newline at end of file diff --git a/doxygen/classCppSpec_1_1Formatters_1_1Verbose__inherit__graph.png b/doxygen/classCppSpec_1_1Formatters_1_1Verbose__inherit__graph.png new file mode 100644 index 0000000..570aa3e Binary files /dev/null and b/doxygen/classCppSpec_1_1Formatters_1_1Verbose__inherit__graph.png differ diff --git a/doxygen/classCppSpec_1_1ItBase-members.html b/doxygen/classCppSpec_1_1ItBase-members.html new file mode 100644 index 0000000..d7b4e33 --- /dev/null +++ b/doxygen/classCppSpec_1_1ItBase-members.html @@ -0,0 +1,145 @@ + + + + + + + +C++Spec: Member List + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
CppSpec::ItBase Member List
+
+
+ +

This is the complete list of members for CppSpec::ItBase, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
add_result(const Result &result) (defined in CppSpec::ItBase)CppSpec::ItBaseinline
clear_results() noexcept (defined in CppSpec::ItBase)CppSpec::ItBaseinline
expect(T value, std::source_location location=std::source_location::current())CppSpec::ItBase
expect(T block, std::source_location location=std::source_location::current())CppSpec::ItBase
expect(std::initializer_list< T > init_list, std::source_location location=std::source_location::current())CppSpec::ItBase
expect(Let< T > &let, std::source_location location=std::source_location::current())CppSpec::ItBase
expect(const char *string, std::source_location location=std::source_location::current())CppSpec::ItBaseinline
get_children() noexcept (defined in CppSpec::Runnable)CppSpec::Runnableinline
get_children() const noexcept (defined in CppSpec::Runnable)CppSpec::Runnableinline
get_description() const noexceptCppSpec::ItBaseinline
get_location() const noexcept (defined in CppSpec::Runnable)CppSpec::Runnableinline
get_parent() noexceptCppSpec::Runnableinline
get_parent() const noexcept (defined in CppSpec::Runnable)CppSpec::Runnableinline
get_parent_as() noexcept (defined in CppSpec::Runnable)CppSpec::Runnableinline
get_parent_as() const noexcept (defined in CppSpec::Runnable)CppSpec::Runnableinline
get_result() const override (defined in CppSpec::ItBase)CppSpec::ItBaseinlinevirtual
get_results() noexcept (defined in CppSpec::ItBase)CppSpec::ItBaseinline
get_results() const noexcept (defined in CppSpec::ItBase)CppSpec::ItBaseinline
get_runtime() const (defined in CppSpec::Runnable)CppSpec::Runnableinline
get_start_time() const (defined in CppSpec::Runnable)CppSpec::Runnableinline
has_parent() noexceptCppSpec::Runnableinline
has_parent() const noexcept (defined in CppSpec::Runnable)CppSpec::Runnableinline
ItBase()=delete (defined in CppSpec::ItBase)CppSpec::ItBase
ItBase(std::source_location location) noexceptCppSpec::ItBaseinlineexplicit
ItBase(std::source_location location, const char *description) noexceptCppSpec::ItBaseinlineexplicit
make_child(Args &&... args) (defined in CppSpec::Runnable)CppSpec::Runnableinline
needs_description() noexceptCppSpec::ItBaseinline
num_failures() const noexcept (defined in CppSpec::Runnable)CppSpec::Runnableinline
num_tests() const noexcept (defined in CppSpec::Runnable)CppSpec::Runnableinline
padding() const noexceptCppSpec::Runnableinline
run()=0 (defined in CppSpec::Runnable)CppSpec::Runnablepure virtual
Runnable(std::source_location location) (defined in CppSpec::Runnable)CppSpec::Runnableinline
set_description(std::string_view description) noexceptCppSpec::ItBaseinline
set_location(std::source_location location) noexcept (defined in CppSpec::Runnable)CppSpec::Runnableinline
timed_run() (defined in CppSpec::Runnable)CppSpec::Runnableinlinevirtual
~Runnable()=default (defined in CppSpec::Runnable)CppSpec::Runnablevirtual
+
+
+ + + + diff --git a/doxygen/classCppSpec_1_1ItBase.html b/doxygen/classCppSpec_1_1ItBase.html new file mode 100644 index 0000000..e9911e0 --- /dev/null +++ b/doxygen/classCppSpec_1_1ItBase.html @@ -0,0 +1,607 @@ + + + + + + + +C++Spec: CppSpec::ItBase Class Reference + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
CppSpec::ItBase Class Reference
+
+
+ +

Base class for it expressions. + More...

+ +

#include <it_base.hpp>

+
+Inheritance diagram for CppSpec::ItBase:
+
+
Inheritance graph
+ + + + + + + + + +
[legend]
+
+Collaboration diagram for CppSpec::ItBase:
+
+
Collaboration graph
+ + + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 ItBase (std::source_location location) noexcept
 Create an BaseIt without an explicit description.
 ItBase (std::source_location location, const char *description) noexcept
 Create an BaseIt with an explicit description.
bool needs_description () noexcept
 Get whether the object needs a description string.
std::string get_description () const noexcept
 Get the description string for the it statement.
ItBase & set_description (std::string_view description) noexcept
 Set the description string.
template<Util::is_not_functional T>
ExpectationValue< T > expect (T value, std::source_location location=std::source_location::current())
 The expect object generator for objects and LiteralTypes.
template<Util::is_functional T>
ExpectationFunc< T > expect (T block, std::source_location location=std::source_location::current())
 The expect object generator for lambdas.
template<typename T>
ExpectationValue< std::initializer_list< T > > expect (std::initializer_list< T > init_list, std::source_location location=std::source_location::current())
 The expect object generator for initializer lists.
template<typename T>
ExpectationValue< T > expect (Let< T > &let, std::source_location location=std::source_location::current())
 The expect object generator for Let.
ExpectationValue< std::string > expect (const char *string, std::source_location location=std::source_location::current())
 The expect object generator for const char*.
+void add_result (const Result &result)
+std::list< Result > & get_results () noexcept
+const std::list< Result > & get_results () const noexcept
+void clear_results () noexcept
Result get_result () const override
Public Member Functions inherited from CppSpec::Runnable
Runnable (std::source_location location)
+bool has_parent () noexcept
 Check to see if the Runnable has a parent.
+bool has_parent () const noexcept
+Runnable * get_parent () noexcept
 Get the Runnable's parent.
+const Runnable * get_parent () const noexcept
+std::list< std::shared_ptr< Runnable > > & get_children () noexcept
+const std::list< std::shared_ptr< Runnable > > & get_children () const noexcept
+template<class C>
C * get_parent_as () noexcept
+template<class C>
const C * get_parent_as () const noexcept
+template<typename T, typename... Args>
T * make_child (Args &&... args)
std::string padding () const noexcept
 Generate padding (indentation) fore the current object.
+std::source_location get_location () const noexcept
+void set_location (std::source_location location) noexcept
+virtual void run ()=0
+virtual void timed_run ()
+std::chrono::duration< double > get_runtime () const
+std::chrono::time_point< std::chrono::system_clock > get_start_time () const
+size_t num_tests () const noexcept
+size_t num_failures () const noexcept
+

Detailed Description

+

Base class for it expressions.

+

This class is needed to prevent a circular dependency between it.hpp and basematcher.hpp. Matchers need to know whether or not an it has an explicit description string or whether the description should be generated. its need to be able to refer to Expectations, and Expectations need to know about Matchers and execute them. This class is the least common denominator of the it classes, and thus is used to resolve the dependency cycle.

+

Constructor & Destructor Documentation

+ +

◆ ItBase() [1/2]

+ +
+
+ + + + + +
+ + + + + + + +
CppSpec::ItBase::ItBase (std::source_location location)
+
+inlineexplicitnoexcept
+
+ +

Create an BaseIt without an explicit description.

+
Returns
the constructed BaseIt
+ +
+
+ +

◆ ItBase() [2/2]

+ +
+
+ + + + + +
+ + + + + + + + + + + +
CppSpec::ItBase::ItBase (std::source_location location,
const char * description )
+
+inlineexplicitnoexcept
+
+ +

Create an BaseIt with an explicit description.

+
Parameters
+ + +
descriptionthe documentation string of the it statement
+
+
+
Returns
the constructed BaseIt
+ +
+
+

Member Function Documentation

+ +

◆ expect() [1/5]

+ +
+
+ + + + + +
+ + + + + + + + + + + +
ExpectationValue< std::string > CppSpec::ItBase::expect (const char * string,
std::source_location location = std::source_location::current() )
+
+inline
+
+ +

The expect object generator for const char*.

+
Parameters
+ + +
stringthe string to wrap
+
+
+
Returns
a ExpectationValue object containing a C++ string
+ +
+
+ +

◆ expect() [2/5]

+ +
+
+
+template<typename T>
+ + + + + + + + + + + +
ExpectationValue< T > CppSpec::ItBase::expect (Let< T > & let,
std::source_location location = std::source_location::current() )
+
+ +

The expect object generator for Let.

+
Parameters
+ + +
blockthe let variable
+
+
+
Template Parameters
+ + +
Tthe type of the value contained in the ExpectationFunc
+
+
+
Returns
a ExpectationValue object containing the given value.
+ +
+
+ +

◆ expect() [3/5]

+ +
+
+
+template<typename T>
+ + + + + + + + + + + +
ExpectationValue< std::initializer_list< T > > CppSpec::ItBase::expect (std::initializer_list< T > init_list,
std::source_location location = std::source_location::current() )
+
+ +

The expect object generator for initializer lists.

+

An expect for initializer_list subjects.

+
Parameters
+ + +
init_listthe list to wrap
+
+
+
Template Parameters
+ + +
Tthe type of the items inside the initializer list
+
+
+
Returns
a ExpectationValue object containing the given init_list.
+
expect({1,2,3})
+
ExpectationValue< T > expect(T value, std::source_location location=std::source_location::current())
The expect object generator for objects and LiteralTypes.
Definition it.hpp:129
+
+
+
+ +

◆ expect() [4/5]

+ +
+
+
+template<Util::is_functional T>
+ + + + + + + + + + + +
ExpectationFunc< T > CppSpec::ItBase::expect (T block,
std::source_location location = std::source_location::current() )
+
+ +

The expect object generator for lambdas.

+
Parameters
+ + +
blockthe lambda to wrap.
+
+
+
Template Parameters
+ + +
Tthe type of the lambda/function contained in the ExpectationFunc
+
+
+
Returns
a ExpectationFunc object containing the given value.
+ +
+
+ +

◆ expect() [5/5]

+ +
+
+
+template<Util::is_not_functional T>
+ + + + + + + + + + + +
ExpectationValue< T > CppSpec::ItBase::expect (T value,
std::source_location location = std::source_location::current() )
+
+ +

The expect object generator for objects and LiteralTypes.

+

A simple expect statement.

+
Parameters
+ + +
valuethe item to wrap. This parameter is passed by value so that statements like expect(2) or expect(SomeClass()) can be passed in
+
+
+
Template Parameters
+ + +
Tthe type of the object contained in the ExpectationValue
+
+
+
Returns
a ExpectationValue object containing the given value.
+
+
expect(true)
+
expect([] -> int { return 4; })
+
+
+
+ +

◆ get_description()

+ +
+
+ + + + + +
+ + + + + + + +
std::string CppSpec::ItBase::get_description () const
+
+inlinenodiscardnoexcept
+
+ +

Get the description string for the it statement.

+
Returns
the description string
+ +
+
+ +

◆ get_result()

+ +
+
+ + + + + +
+ + + + + + + +
Result CppSpec::ItBase::get_result () const
+
+inlinenodiscardoverridevirtual
+
+ +

Reimplemented from CppSpec::Runnable.

+ +
+
+ +

◆ needs_description()

+ +
+
+ + + + + +
+ + + + + + + +
bool CppSpec::ItBase::needs_description ()
+
+inlinenoexcept
+
+ +

Get whether the object needs a description string.

+
Returns
whether this object needs a description to be generated or not
+ +
+
+ +

◆ set_description()

+ +
+
+ + + + + +
+ + + + + + + +
ItBase & CppSpec::ItBase::set_description (std::string_view description)
+
+inlinenoexcept
+
+ +

Set the description string.

+
Returns
a reference to the modified ItBase
+ +
+
+
The documentation for this class was generated from the following files: +
+
+ +
+ + + + diff --git a/doxygen/classCppSpec_1_1ItBase.js b/doxygen/classCppSpec_1_1ItBase.js new file mode 100644 index 0000000..c17adc6 --- /dev/null +++ b/doxygen/classCppSpec_1_1ItBase.js @@ -0,0 +1,13 @@ +var classCppSpec_1_1ItBase = +[ + [ "ItBase", "classCppSpec_1_1ItBase.html#af40fba1cf1d43835ae0268b169f244d8", null ], + [ "ItBase", "classCppSpec_1_1ItBase.html#ae13ea9650188ce79ab957594c1c3794b", null ], + [ "expect", "classCppSpec_1_1ItBase.html#a09fd74f7b72de7883fe228107c92064d", null ], + [ "expect", "classCppSpec_1_1ItBase.html#a81467a3a7e04055e1685f10e0c94be97", null ], + [ "expect", "classCppSpec_1_1ItBase.html#a00270530ecb561876eb48e0b743bedb7", null ], + [ "expect", "classCppSpec_1_1ItBase.html#a1f408a682aab72ae8837a243f24a36fb", null ], + [ "expect", "classCppSpec_1_1ItBase.html#abfb6f526937d7e8245344e6917ee264e", null ], + [ "get_description", "classCppSpec_1_1ItBase.html#ab4b9db5ea088b58d523c699d8b18e83a", null ], + [ "needs_description", "classCppSpec_1_1ItBase.html#a2f0782966fa91682e6c2e4ce607ba792", null ], + [ "set_description", "classCppSpec_1_1ItBase.html#a86baa06fa64cecf4d2abbc33488ab5a6", null ] +]; \ No newline at end of file diff --git a/doxygen/classCppSpec_1_1ItBase__coll__graph.map b/doxygen/classCppSpec_1_1ItBase__coll__graph.map new file mode 100644 index 0000000..83b03ca --- /dev/null +++ b/doxygen/classCppSpec_1_1ItBase__coll__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/doxygen/classCppSpec_1_1ItBase__coll__graph.md5 b/doxygen/classCppSpec_1_1ItBase__coll__graph.md5 new file mode 100644 index 0000000..bbfc603 --- /dev/null +++ b/doxygen/classCppSpec_1_1ItBase__coll__graph.md5 @@ -0,0 +1 @@ +3f6992af53341717e9ffb782fc4e6a60 \ No newline at end of file diff --git a/doxygen/classCppSpec_1_1ItBase__coll__graph.png b/doxygen/classCppSpec_1_1ItBase__coll__graph.png new file mode 100644 index 0000000..d10d43d Binary files /dev/null and b/doxygen/classCppSpec_1_1ItBase__coll__graph.png differ diff --git a/doxygen/classCppSpec_1_1ItBase__inherit__graph.map b/doxygen/classCppSpec_1_1ItBase__inherit__graph.map new file mode 100644 index 0000000..c88ec63 --- /dev/null +++ b/doxygen/classCppSpec_1_1ItBase__inherit__graph.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/doxygen/classCppSpec_1_1ItBase__inherit__graph.md5 b/doxygen/classCppSpec_1_1ItBase__inherit__graph.md5 new file mode 100644 index 0000000..82e98da --- /dev/null +++ b/doxygen/classCppSpec_1_1ItBase__inherit__graph.md5 @@ -0,0 +1 @@ +7aacc24e476d77c8575bf8cc1c86a483 \ No newline at end of file diff --git a/doxygen/classCppSpec_1_1ItBase__inherit__graph.png b/doxygen/classCppSpec_1_1ItBase__inherit__graph.png new file mode 100644 index 0000000..1df7952 Binary files /dev/null and b/doxygen/classCppSpec_1_1ItBase__inherit__graph.png differ diff --git a/doxygen/classCppSpec_1_1ItCD-members.html b/doxygen/classCppSpec_1_1ItCD-members.html new file mode 100644 index 0000000..17b1598 --- /dev/null +++ b/doxygen/classCppSpec_1_1ItCD-members.html @@ -0,0 +1,150 @@ + + + + + + + +C++Spec: Member List + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
CppSpec::ItCD< T > Member List
+
+
+ +

This is the complete list of members for CppSpec::ItCD< T >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
add_result(const Result &result) (defined in CppSpec::ItBase)CppSpec::ItBaseinline
Block typedef (defined in CppSpec::ItCD< T >)CppSpec::ItCD< T >
clear_results() noexcept (defined in CppSpec::ItBase)CppSpec::ItBaseinline
expect(T value, std::source_location location=std::source_location::current())CppSpec::ItBase
expect(T block, std::source_location location=std::source_location::current())CppSpec::ItBase
expect(std::initializer_list< T > init_list, std::source_location location=std::source_location::current())CppSpec::ItBase
expect(Let< T > &let, std::source_location location=std::source_location::current())CppSpec::ItBase
expect(const char *string, std::source_location location=std::source_location::current())CppSpec::ItBaseinline
get_children() noexcept (defined in CppSpec::Runnable)CppSpec::Runnableinline
get_children() const noexcept (defined in CppSpec::Runnable)CppSpec::Runnableinline
get_description() const noexceptCppSpec::ItBaseinline
get_location() const noexcept (defined in CppSpec::Runnable)CppSpec::Runnableinline
get_parent() noexceptCppSpec::Runnableinline
get_parent() const noexcept (defined in CppSpec::Runnable)CppSpec::Runnableinline
get_parent_as() noexcept (defined in CppSpec::Runnable)CppSpec::Runnableinline
get_parent_as() const noexcept (defined in CppSpec::Runnable)CppSpec::Runnableinline
get_result() const override (defined in CppSpec::ItBase)CppSpec::ItBaseinlinevirtual
get_results() noexcept (defined in CppSpec::ItBase)CppSpec::ItBaseinline
get_results() const noexcept (defined in CppSpec::ItBase)CppSpec::ItBaseinline
get_runtime() const (defined in CppSpec::Runnable)CppSpec::Runnableinline
get_start_time() const (defined in CppSpec::Runnable)CppSpec::Runnableinline
has_parent() noexceptCppSpec::Runnableinline
has_parent() const noexcept (defined in CppSpec::Runnable)CppSpec::Runnableinline
is_expected(std::source_location location=std::source_location::current()) (defined in CppSpec::ItCD< T >)CppSpec::ItCD< T >inline
ItBase()=delete (defined in CppSpec::ItBase)CppSpec::ItBase
ItBase(std::source_location location) noexceptCppSpec::ItBaseinlineexplicit
ItBase(std::source_location location, const char *description) noexceptCppSpec::ItBaseinlineexplicit
ItCD(std::source_location location, T &subject, const char *description, Block block) (defined in CppSpec::ItCD< T >)CppSpec::ItCD< T >inline
ItCD(std::source_location location, T &subject, Block block) (defined in CppSpec::ItCD< T >)CppSpec::ItCD< T >inline
make_child(Args &&... args) (defined in CppSpec::Runnable)CppSpec::Runnableinline
needs_description() noexceptCppSpec::ItBaseinline
num_failures() const noexcept (defined in CppSpec::Runnable)CppSpec::Runnableinline
num_tests() const noexcept (defined in CppSpec::Runnable)CppSpec::Runnableinline
padding() const noexceptCppSpec::Runnableinline
run() override (defined in CppSpec::ItCD< T >)CppSpec::ItCD< T >virtual
Runnable(std::source_location location) (defined in CppSpec::Runnable)CppSpec::Runnableinline
set_description(std::string_view description) noexceptCppSpec::ItBaseinline
set_location(std::source_location location) noexcept (defined in CppSpec::Runnable)CppSpec::Runnableinline
subjectCppSpec::ItCD< T >
timed_run() (defined in CppSpec::Runnable)CppSpec::Runnableinlinevirtual
~Runnable()=default (defined in CppSpec::Runnable)CppSpec::Runnablevirtual
+
+
+ + + + diff --git a/doxygen/classCppSpec_1_1ItCD.html b/doxygen/classCppSpec_1_1ItCD.html new file mode 100644 index 0000000..dea94f9 --- /dev/null +++ b/doxygen/classCppSpec_1_1ItCD.html @@ -0,0 +1,304 @@ + + + + + + + +C++Spec: CppSpec::ItCD< T > Class Template Reference + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
CppSpec::ItCD< T > Class Template Reference
+
+
+ +

An it embedded in a ClassDescription. + More...

+ +

#include <it.hpp>

+
+Inheritance diagram for CppSpec::ItCD< T >:
+
+
Inheritance graph
+ + + + + + + +
[legend]
+
+Collaboration diagram for CppSpec::ItCD< T >:
+
+
Collaboration graph
+ + + + + + + +
[legend]
+ + + +

+Public Types

+using Block = std::function<void(ItCD<T>&)>
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

ItCD (std::source_location location, T &subject, const char *description, Block block)
ItCD (std::source_location location, T &subject, Block block)
+ExpectationValue< T > is_expected (std::source_location location=std::source_location::current())
void run () override
Public Member Functions inherited from CppSpec::ItBase
 ItBase (std::source_location location) noexcept
 Create an BaseIt without an explicit description.
 ItBase (std::source_location location, const char *description) noexcept
 Create an BaseIt with an explicit description.
bool needs_description () noexcept
 Get whether the object needs a description string.
std::string get_description () const noexcept
 Get the description string for the it statement.
ItBase & set_description (std::string_view description) noexcept
 Set the description string.
template<Util::is_not_functional T>
ExpectationValue< T > expect (T value, std::source_location location=std::source_location::current())
 The expect object generator for objects and LiteralTypes.
template<Util::is_functional T>
ExpectationFunc< T > expect (T block, std::source_location location=std::source_location::current())
 The expect object generator for lambdas.
template<typename T>
ExpectationValue< std::initializer_list< T > > expect (std::initializer_list< T > init_list, std::source_location location=std::source_location::current())
 The expect object generator for initializer lists.
template<typename T>
ExpectationValue< T > expect (Let< T > &let, std::source_location location=std::source_location::current())
 The expect object generator for Let.
ExpectationValue< std::string > expect (const char *string, std::source_location location=std::source_location::current())
 The expect object generator for const char*.
+void add_result (const Result &result)
+std::list< Result > & get_results () noexcept
+const std::list< Result > & get_results () const noexcept
+void clear_results () noexcept
Result get_result () const override
Public Member Functions inherited from CppSpec::Runnable
Runnable (std::source_location location)
+bool has_parent () noexcept
 Check to see if the Runnable has a parent.
+bool has_parent () const noexcept
+Runnable * get_parent () noexcept
 Get the Runnable's parent.
+const Runnable * get_parent () const noexcept
+std::list< std::shared_ptr< Runnable > > & get_children () noexcept
+const std::list< std::shared_ptr< Runnable > > & get_children () const noexcept
+template<class C>
C * get_parent_as () noexcept
+template<class C>
const C * get_parent_as () const noexcept
+template<typename T, typename... Args>
T * make_child (Args &&... args)
std::string padding () const noexcept
 Generate padding (indentation) fore the current object.
+std::source_location get_location () const noexcept
+void set_location (std::source_location location) noexcept
+virtual void timed_run ()
+std::chrono::duration< double > get_runtime () const
+std::chrono::time_point< std::chrono::system_clock > get_start_time () const
+size_t num_tests () const noexcept
+size_t num_failures () const noexcept
+ + + +

+Public Attributes

T & subject
 A reference to the parent ClassDescription's subject.
+

Detailed Description

+
template<typename T>
+class CppSpec::ItCD< T >

An it embedded in a ClassDescription.

+

ItCD objects are the representation of an it in a describe_a block. They contain both the function that represents the block of the it, and a reference to the parent ClassDescription::subject

+
Template Parameters
+ + +
Tthe type of the subject of the parent ClassDescription (ClassDescription<T>)
+
+
+

Member Function Documentation

+ +

◆ run()

+ +
+
+
+template<class T>
+ + + + + +
+ + + + + + + +
void CppSpec::ItCD< T >::run ()
+
+overridevirtual
+
+ +

Implements CppSpec::Runnable.

+ +
+
+

Member Data Documentation

+ +

◆ subject

+ +
+
+
+template<typename T>
+ + + + +
T& CppSpec::ItCD< T >::subject
+
+ +

A reference to the parent ClassDescription's subject.

+

Public so that we can easily do expect(subject) without needing to have a dedicated macro for accessing the subject via getter, or needing to introduce parenthesis for call syntax (like subject())

+ +
+
+
The documentation for this class was generated from the following files: +
+
+ +
+ + + + diff --git a/doxygen/classCppSpec_1_1ItCD.js b/doxygen/classCppSpec_1_1ItCD.js new file mode 100644 index 0000000..e35d92a --- /dev/null +++ b/doxygen/classCppSpec_1_1ItCD.js @@ -0,0 +1,4 @@ +var classCppSpec_1_1ItCD = +[ + [ "subject", "classCppSpec_1_1ItCD.html#a348c2a47f1c19467b205fb101393d811", null ] +]; \ No newline at end of file diff --git a/doxygen/classCppSpec_1_1ItCD__coll__graph.map b/doxygen/classCppSpec_1_1ItCD__coll__graph.map new file mode 100644 index 0000000..1f72d15 --- /dev/null +++ b/doxygen/classCppSpec_1_1ItCD__coll__graph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/doxygen/classCppSpec_1_1ItCD__coll__graph.md5 b/doxygen/classCppSpec_1_1ItCD__coll__graph.md5 new file mode 100644 index 0000000..84da8ee --- /dev/null +++ b/doxygen/classCppSpec_1_1ItCD__coll__graph.md5 @@ -0,0 +1 @@ +24ef956949608c6c7c11fa3bf25a1cb7 \ No newline at end of file diff --git a/doxygen/classCppSpec_1_1ItCD__coll__graph.png b/doxygen/classCppSpec_1_1ItCD__coll__graph.png new file mode 100644 index 0000000..7217475 Binary files /dev/null and b/doxygen/classCppSpec_1_1ItCD__coll__graph.png differ diff --git a/doxygen/classCppSpec_1_1ItCD__inherit__graph.map b/doxygen/classCppSpec_1_1ItCD__inherit__graph.map new file mode 100644 index 0000000..1f72d15 --- /dev/null +++ b/doxygen/classCppSpec_1_1ItCD__inherit__graph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/doxygen/classCppSpec_1_1ItCD__inherit__graph.md5 b/doxygen/classCppSpec_1_1ItCD__inherit__graph.md5 new file mode 100644 index 0000000..84da8ee --- /dev/null +++ b/doxygen/classCppSpec_1_1ItCD__inherit__graph.md5 @@ -0,0 +1 @@ +24ef956949608c6c7c11fa3bf25a1cb7 \ No newline at end of file diff --git a/doxygen/classCppSpec_1_1ItCD__inherit__graph.png b/doxygen/classCppSpec_1_1ItCD__inherit__graph.png new file mode 100644 index 0000000..7217475 Binary files /dev/null and b/doxygen/classCppSpec_1_1ItCD__inherit__graph.png differ diff --git a/doxygen/classCppSpec_1_1ItD-members.html b/doxygen/classCppSpec_1_1ItD-members.html new file mode 100644 index 0000000..1ff1cd1 --- /dev/null +++ b/doxygen/classCppSpec_1_1ItD-members.html @@ -0,0 +1,148 @@ + + + + + + + +C++Spec: Member List + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
CppSpec::ItD Member List
+
+
+ +

This is the complete list of members for CppSpec::ItD, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
add_result(const Result &result) (defined in CppSpec::ItBase)CppSpec::ItBaseinline
Block typedef (defined in CppSpec::ItD)CppSpec::ItD
clear_results() noexcept (defined in CppSpec::ItBase)CppSpec::ItBaseinline
expect(T value, std::source_location location=std::source_location::current())CppSpec::ItBase
expect(T block, std::source_location location=std::source_location::current())CppSpec::ItBase
expect(std::initializer_list< T > init_list, std::source_location location=std::source_location::current())CppSpec::ItBase
expect(Let< T > &let, std::source_location location=std::source_location::current())CppSpec::ItBase
expect(const char *string, std::source_location location=std::source_location::current())CppSpec::ItBaseinline
get_children() noexcept (defined in CppSpec::Runnable)CppSpec::Runnableinline
get_children() const noexcept (defined in CppSpec::Runnable)CppSpec::Runnableinline
get_description() const noexceptCppSpec::ItBaseinline
get_location() const noexcept (defined in CppSpec::Runnable)CppSpec::Runnableinline
get_parent() noexceptCppSpec::Runnableinline
get_parent() const noexcept (defined in CppSpec::Runnable)CppSpec::Runnableinline
get_parent_as() noexcept (defined in CppSpec::Runnable)CppSpec::Runnableinline
get_parent_as() const noexcept (defined in CppSpec::Runnable)CppSpec::Runnableinline
get_result() const override (defined in CppSpec::ItBase)CppSpec::ItBaseinlinevirtual
get_results() noexcept (defined in CppSpec::ItBase)CppSpec::ItBaseinline
get_results() const noexcept (defined in CppSpec::ItBase)CppSpec::ItBaseinline
get_runtime() const (defined in CppSpec::Runnable)CppSpec::Runnableinline
get_start_time() const (defined in CppSpec::Runnable)CppSpec::Runnableinline
has_parent() noexceptCppSpec::Runnableinline
has_parent() const noexcept (defined in CppSpec::Runnable)CppSpec::Runnableinline
ItBase()=delete (defined in CppSpec::ItBase)CppSpec::ItBase
ItBase(std::source_location location) noexceptCppSpec::ItBaseinlineexplicit
ItBase(std::source_location location, const char *description) noexceptCppSpec::ItBaseinlineexplicit
ItD(std::source_location location, const char *description, Block block)CppSpec::ItDinline
ItD(std::source_location location, Block block)CppSpec::ItDinline
make_child(Args &&... args) (defined in CppSpec::Runnable)CppSpec::Runnableinline
needs_description() noexceptCppSpec::ItBaseinline
num_failures() const noexcept (defined in CppSpec::Runnable)CppSpec::Runnableinline
num_tests() const noexcept (defined in CppSpec::Runnable)CppSpec::Runnableinline
padding() const noexceptCppSpec::Runnableinline
run() override (defined in CppSpec::ItD)CppSpec::ItDinlinevirtual
Runnable(std::source_location location) (defined in CppSpec::Runnable)CppSpec::Runnableinline
set_description(std::string_view description) noexceptCppSpec::ItBaseinline
set_location(std::source_location location) noexcept (defined in CppSpec::Runnable)CppSpec::Runnableinline
timed_run() (defined in CppSpec::Runnable)CppSpec::Runnableinlinevirtual
~Runnable()=default (defined in CppSpec::Runnable)CppSpec::Runnablevirtual
+
+
+ + + + diff --git a/doxygen/classCppSpec_1_1ItD.html b/doxygen/classCppSpec_1_1ItD.html new file mode 100644 index 0000000..c3652f8 --- /dev/null +++ b/doxygen/classCppSpec_1_1ItD.html @@ -0,0 +1,360 @@ + + + + + + + +C++Spec: CppSpec::ItD Class Reference + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
CppSpec::ItD Class Reference
+
+
+ +

An it embedded in a Description. + More...

+ +

#include <it.hpp>

+
+Inheritance diagram for CppSpec::ItD:
+
+
Inheritance graph
+ + + + + + + +
[legend]
+
+Collaboration diagram for CppSpec::ItD:
+
+
Collaboration graph
+ + + + + + + +
[legend]
+ + + +

+Public Types

+using Block = std::function<void(ItD&)>
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 ItD (std::source_location location, const char *description, Block block)
 The primary ItD constructor.
 ItD (std::source_location location, Block block)
 The anonymous ItD constructor.
void run () override
Public Member Functions inherited from CppSpec::ItBase
 ItBase (std::source_location location) noexcept
 Create an BaseIt without an explicit description.
 ItBase (std::source_location location, const char *description) noexcept
 Create an BaseIt with an explicit description.
bool needs_description () noexcept
 Get whether the object needs a description string.
std::string get_description () const noexcept
 Get the description string for the it statement.
ItBase & set_description (std::string_view description) noexcept
 Set the description string.
template<Util::is_not_functional T>
ExpectationValue< T > expect (T value, std::source_location location=std::source_location::current())
 The expect object generator for objects and LiteralTypes.
template<Util::is_functional T>
ExpectationFunc< T > expect (T block, std::source_location location=std::source_location::current())
 The expect object generator for lambdas.
template<typename T>
ExpectationValue< std::initializer_list< T > > expect (std::initializer_list< T > init_list, std::source_location location=std::source_location::current())
 The expect object generator for initializer lists.
template<typename T>
ExpectationValue< T > expect (Let< T > &let, std::source_location location=std::source_location::current())
 The expect object generator for Let.
ExpectationValue< std::string > expect (const char *string, std::source_location location=std::source_location::current())
 The expect object generator for const char*.
+void add_result (const Result &result)
+std::list< Result > & get_results () noexcept
+const std::list< Result > & get_results () const noexcept
+void clear_results () noexcept
Result get_result () const override
Public Member Functions inherited from CppSpec::Runnable
Runnable (std::source_location location)
+bool has_parent () noexcept
 Check to see if the Runnable has a parent.
+bool has_parent () const noexcept
+Runnable * get_parent () noexcept
 Get the Runnable's parent.
+const Runnable * get_parent () const noexcept
+std::list< std::shared_ptr< Runnable > > & get_children () noexcept
+const std::list< std::shared_ptr< Runnable > > & get_children () const noexcept
+template<class C>
C * get_parent_as () noexcept
+template<class C>
const C * get_parent_as () const noexcept
+template<typename T, typename... Args>
T * make_child (Args &&... args)
std::string padding () const noexcept
 Generate padding (indentation) fore the current object.
+std::source_location get_location () const noexcept
+void set_location (std::source_location location) noexcept
+virtual void timed_run ()
+std::chrono::duration< double > get_runtime () const
+std::chrono::time_point< std::chrono::system_clock > get_start_time () const
+size_t num_tests () const noexcept
+size_t num_failures () const noexcept
+

Detailed Description

+

An it embedded in a Description.

+

ItD objects are the representation of an it in a describe block (not a describe_a) the sole item they contain is the function that represents the block of the it. ItD is derived from ItBase.

+
describe a_thing("A Thing", $ {
+
it("should have 4", _ { ... });
+
});
+

Constructor & Destructor Documentation

+ +

◆ ItD() [1/2]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + +
CppSpec::ItD::ItD (std::source_location location,
const char * description,
Block block )
+
+inline
+
+ +

The primary ItD constructor.

+

This constructor is used for creating ItDs that are given a documentation string.

+
it("should exist", _ { ... });
+
Parameters
+ + + + +
parentthe parent of the it (i.e. the Description object)
descriptionthe documentation string of the it
blockthe lambda/function passed to the it
+
+
+
Returns
the constructed ItD object
+ +
+
+ +

◆ ItD() [2/2]

+ +
+
+ + + + + +
+ + + + + + + + + + + +
CppSpec::ItD::ItD (std::source_location location,
Block block )
+
+inline
+
+ +

The anonymous ItD constructor.

+

Not used frequently, as most anonymous its will be ItCD objects, since the syntax lends itself to this. However, the possibility of not giving a documentation string to the it still exists, both to be consistent and for cases it might want to be used.

+
it(_ { ... });
+
Parameters
+ + + +
parentthe parent of the it (i.e. the Description object)
blockthe lambda function passed to the it
+
+
+
Returns
the constructed ItD object
+ +
+
+

Member Function Documentation

+ +

◆ run()

+ +
+
+ + + + + +
+ + + + + + + +
void CppSpec::ItD::run ()
+
+inlineoverridevirtual
+
+ +

Implements CppSpec::Runnable.

+ +
+
+
The documentation for this class was generated from the following files: +
+
+ +
+ + + + diff --git a/doxygen/classCppSpec_1_1ItD.js b/doxygen/classCppSpec_1_1ItD.js new file mode 100644 index 0000000..399d376 --- /dev/null +++ b/doxygen/classCppSpec_1_1ItD.js @@ -0,0 +1,5 @@ +var classCppSpec_1_1ItD = +[ + [ "ItD", "classCppSpec_1_1ItD.html#a2c174f0712d4a7d30401bb93ca135f0c", null ], + [ "ItD", "classCppSpec_1_1ItD.html#acd734f6e8696ff22fdf8cfd2b51425a8", null ] +]; \ No newline at end of file diff --git a/doxygen/classCppSpec_1_1ItD__coll__graph.map b/doxygen/classCppSpec_1_1ItD__coll__graph.map new file mode 100644 index 0000000..db86906 --- /dev/null +++ b/doxygen/classCppSpec_1_1ItD__coll__graph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/doxygen/classCppSpec_1_1ItD__coll__graph.md5 b/doxygen/classCppSpec_1_1ItD__coll__graph.md5 new file mode 100644 index 0000000..336c039 --- /dev/null +++ b/doxygen/classCppSpec_1_1ItD__coll__graph.md5 @@ -0,0 +1 @@ +2074e77944d81349221048728c047ffe \ No newline at end of file diff --git a/doxygen/classCppSpec_1_1ItD__coll__graph.png b/doxygen/classCppSpec_1_1ItD__coll__graph.png new file mode 100644 index 0000000..99a7420 Binary files /dev/null and b/doxygen/classCppSpec_1_1ItD__coll__graph.png differ diff --git a/doxygen/classCppSpec_1_1ItD__inherit__graph.map b/doxygen/classCppSpec_1_1ItD__inherit__graph.map new file mode 100644 index 0000000..db86906 --- /dev/null +++ b/doxygen/classCppSpec_1_1ItD__inherit__graph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/doxygen/classCppSpec_1_1ItD__inherit__graph.md5 b/doxygen/classCppSpec_1_1ItD__inherit__graph.md5 new file mode 100644 index 0000000..336c039 --- /dev/null +++ b/doxygen/classCppSpec_1_1ItD__inherit__graph.md5 @@ -0,0 +1 @@ +2074e77944d81349221048728c047ffe \ No newline at end of file diff --git a/doxygen/classCppSpec_1_1ItD__inherit__graph.png b/doxygen/classCppSpec_1_1ItD__inherit__graph.png new file mode 100644 index 0000000..99a7420 Binary files /dev/null and b/doxygen/classCppSpec_1_1ItD__inherit__graph.png differ diff --git a/doxygen/classCppSpec_1_1LetBase-members.html b/doxygen/classCppSpec_1_1LetBase-members.html new file mode 100644 index 0000000..e5c74ff --- /dev/null +++ b/doxygen/classCppSpec_1_1LetBase-members.html @@ -0,0 +1,114 @@ + + + + + + + +C++Spec: Member List + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
CppSpec::LetBase Member List
+
+
+ +

This is the complete list of members for CppSpec::LetBase, including all inherited members.

+ + + + + + +
delivered (defined in CppSpec::LetBase)CppSpec::LetBaseprotected
has_result() const noexcept (defined in CppSpec::LetBase)CppSpec::LetBaseinline
LetBase() noexcept=default (defined in CppSpec::LetBase)CppSpec::LetBase
LetBase(const LetBase &copy)=default (defined in CppSpec::LetBase)CppSpec::LetBase
reset() noexcept (defined in CppSpec::LetBase)CppSpec::LetBaseinline
+
+
+ + + + diff --git a/doxygen/classCppSpec_1_1LetBase.html b/doxygen/classCppSpec_1_1LetBase.html new file mode 100644 index 0000000..ed91260 --- /dev/null +++ b/doxygen/classCppSpec_1_1LetBase.html @@ -0,0 +1,140 @@ + + + + + + + +C++Spec: CppSpec::LetBase Class Reference + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
CppSpec::LetBase Class Reference
+
+
+ +

Base class for lets to abstract away the template arguments. + More...

+ +

#include <let.hpp>

+ + + + + +

+Public Member Functions

LetBase (const LetBase &copy)=default
+void reset () noexcept
+constexpr bool has_result () const noexcept
+ + +

+Protected Attributes

+bool delivered {false}
+

Detailed Description

+

Base class for lets to abstract away the template arguments.

+

Expectation needs to know whether the calculated value of a Let has been delivered or not, but doesn't need to know the value itself or its type.

+

The documentation for this class was generated from the following file: +
+
+ +
+ + + + diff --git a/doxygen/classCppSpec_1_1Matchers_1_1BeBetween-members.html b/doxygen/classCppSpec_1_1Matchers_1_1BeBetween-members.html new file mode 100644 index 0000000..262e96b --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1BeBetween-members.html @@ -0,0 +1,134 @@ + + + + + + + +C++Spec: Member List + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
CppSpec::Matchers::BeBetween< A, E > Member List
+
+
+ +

This is the complete list of members for CppSpec::Matchers::BeBetween< A, E >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
_name (defined in CppSpec::Pretty)CppSpec::Pretty
BeBetween(Expectation< A > &expectation, E min, E max, RangeMode mode=RangeMode::inclusive) (defined in CppSpec::Matchers::BeBetween< A, E >)CppSpec::Matchers::BeBetween< A, E >inline
description() overrideCppSpec::Matchers::BeBetween< A, E >virtual
failure_message()CppSpec::Matchers::MatcherBase< A, E >virtual
failure_message_when_negated()CppSpec::Matchers::MatcherBase< A, E >virtual
improve_hash_formatting(const std::string &inspect_string) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
inspect_object(const T &object) (defined in CppSpec::Pretty)CppSpec::Prettystatic
inspect_object(const O &o)CppSpec::Prettyinline
inspect_object(const char *const &o)CppSpec::Prettyinlinestatic
last(const std::string &s, char delim) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
match() override (defined in CppSpec::Matchers::BeBetween< A, E >)CppSpec::Matchers::BeBetween< A, E >virtual
name(const std::string &name) const (defined in CppSpec::Pretty)CppSpec::Prettyinline
name_to_sentence(const std::string &name) const (defined in CppSpec::Pretty)CppSpec::Prettyinline
run()CppSpec::Matchers::MatcherBase< A, E >
set_message(std::string message)CppSpec::Matchers::MatcherBase< A, E >virtual
split_words(const std::string &sym) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
to_sentence(const T &item)CppSpec::Prettyinlinestatic
to_sentence(const std::vector< T > &words)CppSpec::Prettyinlinestatic
to_word(const T &item)CppSpec::Prettyinlinestatic
to_word(const T &item) (defined in CppSpec::Pretty)CppSpec::Prettystatic
to_word(const Matchers::MatcherBase< A, E > &matcher)CppSpec::Prettyinlinestatic
to_word(const bool &item) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
to_word_type(const T &item) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
underscore(const std::string &camel_cased_word) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
verb() override (defined in CppSpec::Matchers::BeBetween< A, E >)CppSpec::Matchers::BeBetween< A, E >inlinevirtual
+
+
+ + + + diff --git a/doxygen/classCppSpec_1_1Matchers_1_1BeBetween.html b/doxygen/classCppSpec_1_1Matchers_1_1BeBetween.html new file mode 100644 index 0000000..9d1c123 --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1BeBetween.html @@ -0,0 +1,319 @@ + + + + + + + +C++Spec: CppSpec::Matchers::BeBetween< A, E > Class Template Reference + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
CppSpec::Matchers::BeBetween< A, E > Class Template Reference
+
+
+
+Inheritance diagram for CppSpec::Matchers::BeBetween< A, E >:
+
+
Inheritance graph
+ + + + + + + +
[legend]
+
+Collaboration diagram for CppSpec::Matchers::BeBetween< A, E >:
+
+
Collaboration graph
+ + + + + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

BeBetween (Expectation< A > &expectation, E min, E max, RangeMode mode=RangeMode::inclusive)
bool match () override
std::string verb () override
std::string description () override
 Get the description of the Matcher.
Public Member Functions inherited from CppSpec::Matchers::MatcherBase< A, E >
MatcherBase (MatcherBase< A, E > const &copy)=default
virtual std::string failure_message ()
 Get message to give on match failure.
virtual std::string failure_message_when_negated ()
 Get message to give on match failure when negated.
+constexpr A & actual ()
+E & expected ()
+Expectation< A > & expectation ()
virtual MatcherBase & set_message (std::string message)
 Set a custom failure message.
+std::source_location get_location () const
Result run ()
 Run the Matcher object.
+virtual bool negated_match ()
Public Member Functions inherited from CppSpec::Pretty
+std::string name (const std::string &name) const
+std::string name_to_sentence (const std::string &name) const
template<typename O>
std::string inspect_object (const O &o)
 Generate a string of the class and data of an object.
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

Public Types inherited from CppSpec::Matchers::MatcherBase< A, E >
+using expected_t
Static Public Member Functions inherited from CppSpec::Pretty
+static std::string split_words (const std::string &sym)
+static std::string underscore (const std::string &camel_cased_word)
+static std::string last (const std::string &s, char delim)
+static std::string improve_hash_formatting (const std::string &inspect_string)
template<Util::is_streamable T>
static std::string to_word (const T &item)
 Formats an object as a string when operator<< is available.
+template<typename T>
static std::string to_word (const T &item)
+template<typename T>
static std::string to_word_type (const T &item)
template<typename A, typename E>
static std::string to_word (const Matchers::MatcherBase< A, E > &matcher)
template<class T>
static std::string to_sentence (const T &item)
 Take a single object and format it as a sentance.
template<class T>
static std::string to_sentence (const std::vector< T > &words)
+template<typename T>
static std::string inspect_object (const T &object)
+template<>
std::string to_word (const bool &item)
template<>
std::string inspect_object (const char *const &o)
 Specialization for C-style strings.
Public Attributes inherited from CppSpec::Pretty
+std::string _name
Protected Attributes inherited from CppSpec::Matchers::MatcherBase< A, E >
+E expected_
+Expectation< A > & expectation_
+

Member Function Documentation

+ +

◆ description()

+ +
+
+
+template<typename A, typename E>
+ + + + + +
+ + + + + + + +
std::string CppSpec::Matchers::BeBetween< A, E >::description ()
+
+overridevirtual
+
+ +

Get the description of the Matcher.

+
Returns
the description
+ +

Reimplemented from CppSpec::Matchers::MatcherBase< A, E >.

+ +
+
+ +

◆ match()

+ +
+
+
+template<typename A, typename E>
+ + + + + +
+ + + + + + + +
bool CppSpec::Matchers::BeBetween< A, E >::match ()
+
+overridevirtual
+
+
+ +

◆ verb()

+ +
+
+
+template<typename A, typename E>
+ + + + + +
+ + + + + + + +
std::string CppSpec::Matchers::BeBetween< A, E >::verb ()
+
+inlineoverridevirtual
+
+ +

Reimplemented from CppSpec::Matchers::MatcherBase< A, E >.

+ +
+
+
The documentation for this class was generated from the following file: +
+
+ +
+ + + + diff --git a/doxygen/classCppSpec_1_1Matchers_1_1BeBetween.js b/doxygen/classCppSpec_1_1Matchers_1_1BeBetween.js new file mode 100644 index 0000000..d2f8c25 --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1BeBetween.js @@ -0,0 +1,4 @@ +var classCppSpec_1_1Matchers_1_1BeBetween = +[ + [ "description", "classCppSpec_1_1Matchers_1_1BeBetween.html#a820941a497d52688b3c393b566cb629a", null ] +]; \ No newline at end of file diff --git a/doxygen/classCppSpec_1_1Matchers_1_1BeBetween__coll__graph.map b/doxygen/classCppSpec_1_1Matchers_1_1BeBetween__coll__graph.map new file mode 100644 index 0000000..318e404 --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1BeBetween__coll__graph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/doxygen/classCppSpec_1_1Matchers_1_1BeBetween__coll__graph.md5 b/doxygen/classCppSpec_1_1Matchers_1_1BeBetween__coll__graph.md5 new file mode 100644 index 0000000..1a87872 --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1BeBetween__coll__graph.md5 @@ -0,0 +1 @@ +4e30c786ecdcd39be319afa19697e1cb \ No newline at end of file diff --git a/doxygen/classCppSpec_1_1Matchers_1_1BeBetween__coll__graph.png b/doxygen/classCppSpec_1_1Matchers_1_1BeBetween__coll__graph.png new file mode 100644 index 0000000..47bcff9 Binary files /dev/null and b/doxygen/classCppSpec_1_1Matchers_1_1BeBetween__coll__graph.png differ diff --git a/doxygen/classCppSpec_1_1Matchers_1_1BeBetween__inherit__graph.map b/doxygen/classCppSpec_1_1Matchers_1_1BeBetween__inherit__graph.map new file mode 100644 index 0000000..318e404 --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1BeBetween__inherit__graph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/doxygen/classCppSpec_1_1Matchers_1_1BeBetween__inherit__graph.md5 b/doxygen/classCppSpec_1_1Matchers_1_1BeBetween__inherit__graph.md5 new file mode 100644 index 0000000..1a87872 --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1BeBetween__inherit__graph.md5 @@ -0,0 +1 @@ +4e30c786ecdcd39be319afa19697e1cb \ No newline at end of file diff --git a/doxygen/classCppSpec_1_1Matchers_1_1BeBetween__inherit__graph.png b/doxygen/classCppSpec_1_1Matchers_1_1BeBetween__inherit__graph.png new file mode 100644 index 0000000..47bcff9 Binary files /dev/null and b/doxygen/classCppSpec_1_1Matchers_1_1BeBetween__inherit__graph.png differ diff --git a/doxygen/classCppSpec_1_1Matchers_1_1BeGreaterThan-members.html b/doxygen/classCppSpec_1_1Matchers_1_1BeGreaterThan-members.html new file mode 100644 index 0000000..7769fb7 --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1BeGreaterThan-members.html @@ -0,0 +1,134 @@ + + + + + + + +C++Spec: Member List + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
CppSpec::Matchers::BeGreaterThan< A, E > Member List
+
+
+ +

This is the complete list of members for CppSpec::Matchers::BeGreaterThan< A, E >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
_name (defined in CppSpec::Pretty)CppSpec::Pretty
BeGreaterThan(Expectation< A > &expectation, E expected) (defined in CppSpec::Matchers::BeGreaterThan< A, E >)CppSpec::Matchers::BeGreaterThan< A, E >inline
description()CppSpec::Matchers::MatcherBase< A, E >virtual
failure_message()CppSpec::Matchers::MatcherBase< A, E >virtual
failure_message_when_negated()CppSpec::Matchers::MatcherBase< A, E >virtual
improve_hash_formatting(const std::string &inspect_string) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
inspect_object(const T &object) (defined in CppSpec::Pretty)CppSpec::Prettystatic
inspect_object(const O &o)CppSpec::Prettyinline
inspect_object(const char *const &o)CppSpec::Prettyinlinestatic
last(const std::string &s, char delim) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
match() override (defined in CppSpec::Matchers::BeGreaterThan< A, E >)CppSpec::Matchers::BeGreaterThan< A, E >inlinevirtual
name(const std::string &name) const (defined in CppSpec::Pretty)CppSpec::Prettyinline
name_to_sentence(const std::string &name) const (defined in CppSpec::Pretty)CppSpec::Prettyinline
run()CppSpec::Matchers::MatcherBase< A, E >
set_message(std::string message)CppSpec::Matchers::MatcherBase< A, E >virtual
split_words(const std::string &sym) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
to_sentence(const T &item)CppSpec::Prettyinlinestatic
to_sentence(const std::vector< T > &words)CppSpec::Prettyinlinestatic
to_word(const T &item)CppSpec::Prettyinlinestatic
to_word(const T &item) (defined in CppSpec::Pretty)CppSpec::Prettystatic
to_word(const Matchers::MatcherBase< A, E > &matcher)CppSpec::Prettyinlinestatic
to_word(const bool &item) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
to_word_type(const T &item) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
underscore(const std::string &camel_cased_word) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
verb() override (defined in CppSpec::Matchers::BeGreaterThan< A, E >)CppSpec::Matchers::BeGreaterThan< A, E >inlinevirtual
+
+
+ + + + diff --git a/doxygen/classCppSpec_1_1Matchers_1_1BeGreaterThan.html b/doxygen/classCppSpec_1_1Matchers_1_1BeGreaterThan.html new file mode 100644 index 0000000..b7d79c0 --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1BeGreaterThan.html @@ -0,0 +1,287 @@ + + + + + + + +C++Spec: CppSpec::Matchers::BeGreaterThan< A, E > Class Template Reference + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
CppSpec::Matchers::BeGreaterThan< A, E > Class Template Reference
+
+
+
+Inheritance diagram for CppSpec::Matchers::BeGreaterThan< A, E >:
+
+
Inheritance graph
+ + + + + + + +
[legend]
+
+Collaboration diagram for CppSpec::Matchers::BeGreaterThan< A, E >:
+
+
Collaboration graph
+ + + + + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

BeGreaterThan (Expectation< A > &expectation, E expected)
bool match () override
std::string verb () override
Public Member Functions inherited from CppSpec::Matchers::MatcherBase< A, E >
MatcherBase (MatcherBase< A, E > const &copy)=default
virtual std::string failure_message ()
 Get message to give on match failure.
virtual std::string failure_message_when_negated ()
 Get message to give on match failure when negated.
virtual std::string description ()
 Get the description of the Matcher.
+constexpr A & actual ()
+E & expected ()
+Expectation< A > & expectation ()
virtual MatcherBase & set_message (std::string message)
 Set a custom failure message.
+std::source_location get_location () const
Result run ()
 Run the Matcher object.
+virtual bool negated_match ()
Public Member Functions inherited from CppSpec::Pretty
+std::string name (const std::string &name) const
+std::string name_to_sentence (const std::string &name) const
template<typename O>
std::string inspect_object (const O &o)
 Generate a string of the class and data of an object.
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

Public Types inherited from CppSpec::Matchers::MatcherBase< A, E >
+using expected_t
Static Public Member Functions inherited from CppSpec::Pretty
+static std::string split_words (const std::string &sym)
+static std::string underscore (const std::string &camel_cased_word)
+static std::string last (const std::string &s, char delim)
+static std::string improve_hash_formatting (const std::string &inspect_string)
template<Util::is_streamable T>
static std::string to_word (const T &item)
 Formats an object as a string when operator<< is available.
+template<typename T>
static std::string to_word (const T &item)
+template<typename T>
static std::string to_word_type (const T &item)
template<typename A, typename E>
static std::string to_word (const Matchers::MatcherBase< A, E > &matcher)
template<class T>
static std::string to_sentence (const T &item)
 Take a single object and format it as a sentance.
template<class T>
static std::string to_sentence (const std::vector< T > &words)
+template<typename T>
static std::string inspect_object (const T &object)
+template<>
std::string to_word (const bool &item)
template<>
std::string inspect_object (const char *const &o)
 Specialization for C-style strings.
Public Attributes inherited from CppSpec::Pretty
+std::string _name
Protected Attributes inherited from CppSpec::Matchers::MatcherBase< A, E >
+E expected_
+Expectation< A > & expectation_
+

Member Function Documentation

+ +

◆ match()

+ +
+
+
+template<typename A, typename E>
+ + + + + +
+ + + + + + + +
bool CppSpec::Matchers::BeGreaterThan< A, E >::match ()
+
+inlineoverridevirtual
+
+
+ +

◆ verb()

+ +
+
+
+template<typename A, typename E>
+ + + + + +
+ + + + + + + +
std::string CppSpec::Matchers::BeGreaterThan< A, E >::verb ()
+
+inlineoverridevirtual
+
+ +

Reimplemented from CppSpec::Matchers::MatcherBase< A, E >.

+ +
+
+
The documentation for this class was generated from the following file: +
+
+ +
+ + + + diff --git a/doxygen/classCppSpec_1_1Matchers_1_1BeGreaterThan__coll__graph.map b/doxygen/classCppSpec_1_1Matchers_1_1BeGreaterThan__coll__graph.map new file mode 100644 index 0000000..0c7a1b3 --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1BeGreaterThan__coll__graph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/doxygen/classCppSpec_1_1Matchers_1_1BeGreaterThan__coll__graph.md5 b/doxygen/classCppSpec_1_1Matchers_1_1BeGreaterThan__coll__graph.md5 new file mode 100644 index 0000000..69f16b5 --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1BeGreaterThan__coll__graph.md5 @@ -0,0 +1 @@ +746e689f0614ecdf3ed3d340cbdf111d \ No newline at end of file diff --git a/doxygen/classCppSpec_1_1Matchers_1_1BeGreaterThan__coll__graph.png b/doxygen/classCppSpec_1_1Matchers_1_1BeGreaterThan__coll__graph.png new file mode 100644 index 0000000..63e1de9 Binary files /dev/null and b/doxygen/classCppSpec_1_1Matchers_1_1BeGreaterThan__coll__graph.png differ diff --git a/doxygen/classCppSpec_1_1Matchers_1_1BeGreaterThan__inherit__graph.map b/doxygen/classCppSpec_1_1Matchers_1_1BeGreaterThan__inherit__graph.map new file mode 100644 index 0000000..0c7a1b3 --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1BeGreaterThan__inherit__graph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/doxygen/classCppSpec_1_1Matchers_1_1BeGreaterThan__inherit__graph.md5 b/doxygen/classCppSpec_1_1Matchers_1_1BeGreaterThan__inherit__graph.md5 new file mode 100644 index 0000000..69f16b5 --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1BeGreaterThan__inherit__graph.md5 @@ -0,0 +1 @@ +746e689f0614ecdf3ed3d340cbdf111d \ No newline at end of file diff --git a/doxygen/classCppSpec_1_1Matchers_1_1BeGreaterThan__inherit__graph.png b/doxygen/classCppSpec_1_1Matchers_1_1BeGreaterThan__inherit__graph.png new file mode 100644 index 0000000..63e1de9 Binary files /dev/null and b/doxygen/classCppSpec_1_1Matchers_1_1BeGreaterThan__inherit__graph.png differ diff --git a/doxygen/classCppSpec_1_1Matchers_1_1BeLessThan-members.html b/doxygen/classCppSpec_1_1Matchers_1_1BeLessThan-members.html new file mode 100644 index 0000000..94e0c77 --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1BeLessThan-members.html @@ -0,0 +1,134 @@ + + + + + + + +C++Spec: Member List + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
CppSpec::Matchers::BeLessThan< A, E > Member List
+
+
+ +

This is the complete list of members for CppSpec::Matchers::BeLessThan< A, E >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
_name (defined in CppSpec::Pretty)CppSpec::Pretty
BeLessThan(Expectation< A > &expectation, E expected) (defined in CppSpec::Matchers::BeLessThan< A, E >)CppSpec::Matchers::BeLessThan< A, E >inline
description()CppSpec::Matchers::MatcherBase< A, E >virtual
failure_message()CppSpec::Matchers::MatcherBase< A, E >virtual
failure_message_when_negated()CppSpec::Matchers::MatcherBase< A, E >virtual
improve_hash_formatting(const std::string &inspect_string) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
inspect_object(const T &object) (defined in CppSpec::Pretty)CppSpec::Prettystatic
inspect_object(const O &o)CppSpec::Prettyinline
inspect_object(const char *const &o)CppSpec::Prettyinlinestatic
last(const std::string &s, char delim) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
match() override (defined in CppSpec::Matchers::BeLessThan< A, E >)CppSpec::Matchers::BeLessThan< A, E >inlinevirtual
name(const std::string &name) const (defined in CppSpec::Pretty)CppSpec::Prettyinline
name_to_sentence(const std::string &name) const (defined in CppSpec::Pretty)CppSpec::Prettyinline
run()CppSpec::Matchers::MatcherBase< A, E >
set_message(std::string message)CppSpec::Matchers::MatcherBase< A, E >virtual
split_words(const std::string &sym) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
to_sentence(const T &item)CppSpec::Prettyinlinestatic
to_sentence(const std::vector< T > &words)CppSpec::Prettyinlinestatic
to_word(const T &item)CppSpec::Prettyinlinestatic
to_word(const T &item) (defined in CppSpec::Pretty)CppSpec::Prettystatic
to_word(const Matchers::MatcherBase< A, E > &matcher)CppSpec::Prettyinlinestatic
to_word(const bool &item) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
to_word_type(const T &item) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
underscore(const std::string &camel_cased_word) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
verb() override (defined in CppSpec::Matchers::BeLessThan< A, E >)CppSpec::Matchers::BeLessThan< A, E >inlinevirtual
+
+
+ + + + diff --git a/doxygen/classCppSpec_1_1Matchers_1_1BeLessThan.html b/doxygen/classCppSpec_1_1Matchers_1_1BeLessThan.html new file mode 100644 index 0000000..4f90546 --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1BeLessThan.html @@ -0,0 +1,287 @@ + + + + + + + +C++Spec: CppSpec::Matchers::BeLessThan< A, E > Class Template Reference + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
CppSpec::Matchers::BeLessThan< A, E > Class Template Reference
+
+
+
+Inheritance diagram for CppSpec::Matchers::BeLessThan< A, E >:
+
+
Inheritance graph
+ + + + + + + +
[legend]
+
+Collaboration diagram for CppSpec::Matchers::BeLessThan< A, E >:
+
+
Collaboration graph
+ + + + + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

BeLessThan (Expectation< A > &expectation, E expected)
bool match () override
std::string verb () override
Public Member Functions inherited from CppSpec::Matchers::MatcherBase< A, E >
MatcherBase (MatcherBase< A, E > const &copy)=default
virtual std::string failure_message ()
 Get message to give on match failure.
virtual std::string failure_message_when_negated ()
 Get message to give on match failure when negated.
virtual std::string description ()
 Get the description of the Matcher.
+constexpr A & actual ()
+E & expected ()
+Expectation< A > & expectation ()
virtual MatcherBase & set_message (std::string message)
 Set a custom failure message.
+std::source_location get_location () const
Result run ()
 Run the Matcher object.
+virtual bool negated_match ()
Public Member Functions inherited from CppSpec::Pretty
+std::string name (const std::string &name) const
+std::string name_to_sentence (const std::string &name) const
template<typename O>
std::string inspect_object (const O &o)
 Generate a string of the class and data of an object.
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

Public Types inherited from CppSpec::Matchers::MatcherBase< A, E >
+using expected_t
Static Public Member Functions inherited from CppSpec::Pretty
+static std::string split_words (const std::string &sym)
+static std::string underscore (const std::string &camel_cased_word)
+static std::string last (const std::string &s, char delim)
+static std::string improve_hash_formatting (const std::string &inspect_string)
template<Util::is_streamable T>
static std::string to_word (const T &item)
 Formats an object as a string when operator<< is available.
+template<typename T>
static std::string to_word (const T &item)
+template<typename T>
static std::string to_word_type (const T &item)
template<typename A, typename E>
static std::string to_word (const Matchers::MatcherBase< A, E > &matcher)
template<class T>
static std::string to_sentence (const T &item)
 Take a single object and format it as a sentance.
template<class T>
static std::string to_sentence (const std::vector< T > &words)
+template<typename T>
static std::string inspect_object (const T &object)
+template<>
std::string to_word (const bool &item)
template<>
std::string inspect_object (const char *const &o)
 Specialization for C-style strings.
Public Attributes inherited from CppSpec::Pretty
+std::string _name
Protected Attributes inherited from CppSpec::Matchers::MatcherBase< A, E >
+E expected_
+Expectation< A > & expectation_
+

Member Function Documentation

+ +

◆ match()

+ +
+
+
+template<typename A, typename E>
+ + + + + +
+ + + + + + + +
bool CppSpec::Matchers::BeLessThan< A, E >::match ()
+
+inlineoverridevirtual
+
+
+ +

◆ verb()

+ +
+
+
+template<typename A, typename E>
+ + + + + +
+ + + + + + + +
std::string CppSpec::Matchers::BeLessThan< A, E >::verb ()
+
+inlineoverridevirtual
+
+ +

Reimplemented from CppSpec::Matchers::MatcherBase< A, E >.

+ +
+
+
The documentation for this class was generated from the following file: +
+
+ +
+ + + + diff --git a/doxygen/classCppSpec_1_1Matchers_1_1BeLessThan__coll__graph.map b/doxygen/classCppSpec_1_1Matchers_1_1BeLessThan__coll__graph.map new file mode 100644 index 0000000..80784e2 --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1BeLessThan__coll__graph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/doxygen/classCppSpec_1_1Matchers_1_1BeLessThan__coll__graph.md5 b/doxygen/classCppSpec_1_1Matchers_1_1BeLessThan__coll__graph.md5 new file mode 100644 index 0000000..50139d1 --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1BeLessThan__coll__graph.md5 @@ -0,0 +1 @@ +164168cf8799d59837cdceedb05510f4 \ No newline at end of file diff --git a/doxygen/classCppSpec_1_1Matchers_1_1BeLessThan__coll__graph.png b/doxygen/classCppSpec_1_1Matchers_1_1BeLessThan__coll__graph.png new file mode 100644 index 0000000..1f066d9 Binary files /dev/null and b/doxygen/classCppSpec_1_1Matchers_1_1BeLessThan__coll__graph.png differ diff --git a/doxygen/classCppSpec_1_1Matchers_1_1BeLessThan__inherit__graph.map b/doxygen/classCppSpec_1_1Matchers_1_1BeLessThan__inherit__graph.map new file mode 100644 index 0000000..80784e2 --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1BeLessThan__inherit__graph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/doxygen/classCppSpec_1_1Matchers_1_1BeLessThan__inherit__graph.md5 b/doxygen/classCppSpec_1_1Matchers_1_1BeLessThan__inherit__graph.md5 new file mode 100644 index 0000000..50139d1 --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1BeLessThan__inherit__graph.md5 @@ -0,0 +1 @@ +164168cf8799d59837cdceedb05510f4 \ No newline at end of file diff --git a/doxygen/classCppSpec_1_1Matchers_1_1BeLessThan__inherit__graph.png b/doxygen/classCppSpec_1_1Matchers_1_1BeLessThan__inherit__graph.png new file mode 100644 index 0000000..1f066d9 Binary files /dev/null and b/doxygen/classCppSpec_1_1Matchers_1_1BeLessThan__inherit__graph.png differ diff --git a/doxygen/classCppSpec_1_1Matchers_1_1BeNullptr-members.html b/doxygen/classCppSpec_1_1Matchers_1_1BeNullptr-members.html new file mode 100644 index 0000000..61782ff --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1BeNullptr-members.html @@ -0,0 +1,134 @@ + + + + + + + +C++Spec: Member List + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
CppSpec::Matchers::BeNullptr< A > Member List
+
+
+ +

This is the complete list of members for CppSpec::Matchers::BeNullptr< A >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
_name (defined in CppSpec::Pretty)CppSpec::Pretty
BeNullptr(Expectation< A > &expectation) (defined in CppSpec::Matchers::BeNullptr< A >)CppSpec::Matchers::BeNullptr< A >inlineexplicit
description() overrideCppSpec::Matchers::BeNullptr< A >inlinevirtual
failure_message()CppSpec::Matchers::MatcherBase< A, std::nullptr_t >virtual
failure_message_when_negated()CppSpec::Matchers::MatcherBase< A, std::nullptr_t >virtual
improve_hash_formatting(const std::string &inspect_string) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
inspect_object(const T &object) (defined in CppSpec::Pretty)CppSpec::Prettystatic
inspect_object(const O &o)CppSpec::Prettyinline
inspect_object(const char *const &o)CppSpec::Prettyinlinestatic
last(const std::string &s, char delim) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
match() override (defined in CppSpec::Matchers::BeNullptr< A >)CppSpec::Matchers::BeNullptr< A >inlinevirtual
name(const std::string &name) const (defined in CppSpec::Pretty)CppSpec::Prettyinline
name_to_sentence(const std::string &name) const (defined in CppSpec::Pretty)CppSpec::Prettyinline
run()CppSpec::Matchers::MatcherBase< A, std::nullptr_t >
set_message(std::string message)CppSpec::Matchers::MatcherBase< A, std::nullptr_t >virtual
split_words(const std::string &sym) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
to_sentence(const T &item)CppSpec::Prettyinlinestatic
to_sentence(const std::vector< T > &words)CppSpec::Prettyinlinestatic
to_word(const T &item)CppSpec::Prettyinlinestatic
to_word(const T &item) (defined in CppSpec::Pretty)CppSpec::Prettystatic
to_word(const Matchers::MatcherBase< A, E > &matcher)CppSpec::Prettyinlinestatic
to_word(const bool &item) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
to_word_type(const T &item) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
underscore(const std::string &camel_cased_word) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
verb() override (defined in CppSpec::Matchers::BeNullptr< A >)CppSpec::Matchers::BeNullptr< A >inlinevirtual
+
+
+ + + + diff --git a/doxygen/classCppSpec_1_1Matchers_1_1BeNullptr.html b/doxygen/classCppSpec_1_1Matchers_1_1BeNullptr.html new file mode 100644 index 0000000..f5cb4a7 --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1BeNullptr.html @@ -0,0 +1,319 @@ + + + + + + + +C++Spec: CppSpec::Matchers::BeNullptr< A > Class Template Reference + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
CppSpec::Matchers::BeNullptr< A > Class Template Reference
+
+
+
+Inheritance diagram for CppSpec::Matchers::BeNullptr< A >:
+
+
Inheritance graph
+ + + + + + + +
[legend]
+
+Collaboration diagram for CppSpec::Matchers::BeNullptr< A >:
+
+
Collaboration graph
+ + + + + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

BeNullptr (Expectation< A > &expectation)
std::string verb () override
std::string description () override
 Get the description of the Matcher.
bool match () override
Public Member Functions inherited from CppSpec::Matchers::MatcherBase< A, std::nullptr_t >
MatcherBase (MatcherBase< A, std::nullptr_t > const &copy)=default
virtual std::string failure_message ()
 Get message to give on match failure.
virtual std::string failure_message_when_negated ()
 Get message to give on match failure when negated.
+constexpr A & actual ()
+std::nullptr_t & expected ()
+Expectation< A > & expectation ()
virtual MatcherBase & set_message (std::string message)
 Set a custom failure message.
+std::source_location get_location () const
Result run ()
 Run the Matcher object.
+virtual bool negated_match ()
Public Member Functions inherited from CppSpec::Pretty
+std::string name (const std::string &name) const
+std::string name_to_sentence (const std::string &name) const
template<typename O>
std::string inspect_object (const O &o)
 Generate a string of the class and data of an object.
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

Public Types inherited from CppSpec::Matchers::MatcherBase< A, std::nullptr_t >
+using expected_t
Static Public Member Functions inherited from CppSpec::Pretty
+static std::string split_words (const std::string &sym)
+static std::string underscore (const std::string &camel_cased_word)
+static std::string last (const std::string &s, char delim)
+static std::string improve_hash_formatting (const std::string &inspect_string)
template<Util::is_streamable T>
static std::string to_word (const T &item)
 Formats an object as a string when operator<< is available.
+template<typename T>
static std::string to_word (const T &item)
+template<typename T>
static std::string to_word_type (const T &item)
template<typename A, typename E>
static std::string to_word (const Matchers::MatcherBase< A, E > &matcher)
template<class T>
static std::string to_sentence (const T &item)
 Take a single object and format it as a sentance.
template<class T>
static std::string to_sentence (const std::vector< T > &words)
+template<typename T>
static std::string inspect_object (const T &object)
+template<>
std::string to_word (const bool &item)
template<>
std::string inspect_object (const char *const &o)
 Specialization for C-style strings.
Public Attributes inherited from CppSpec::Pretty
+std::string _name
Protected Attributes inherited from CppSpec::Matchers::MatcherBase< A, std::nullptr_t >
+std::nullptr_t expected_
+Expectation< A > & expectation_
+

Member Function Documentation

+ +

◆ description()

+ +
+
+
+template<class A>
+ + + + + +
+ + + + + + + +
std::string CppSpec::Matchers::BeNullptr< A >::description ()
+
+inlineoverridevirtual
+
+ +

Get the description of the Matcher.

+
Returns
the description
+ +

Reimplemented from CppSpec::Matchers::MatcherBase< A, std::nullptr_t >.

+ +
+
+ +

◆ match()

+ +
+
+
+template<class A>
+ + + + + +
+ + + + + + + +
bool CppSpec::Matchers::BeNullptr< A >::match ()
+
+inlineoverridevirtual
+
+
+ +

◆ verb()

+ +
+
+
+template<class A>
+ + + + + +
+ + + + + + + +
std::string CppSpec::Matchers::BeNullptr< A >::verb ()
+
+inlineoverridevirtual
+
+
+
The documentation for this class was generated from the following file: +
+
+ +
+ + + + diff --git a/doxygen/classCppSpec_1_1Matchers_1_1BeNullptr.js b/doxygen/classCppSpec_1_1Matchers_1_1BeNullptr.js new file mode 100644 index 0000000..53db7d8 --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1BeNullptr.js @@ -0,0 +1,4 @@ +var classCppSpec_1_1Matchers_1_1BeNullptr = +[ + [ "description", "classCppSpec_1_1Matchers_1_1BeNullptr.html#a1b9a58fe7a6bfaa126eaaaed1db3ba01", null ] +]; \ No newline at end of file diff --git a/doxygen/classCppSpec_1_1Matchers_1_1BeNullptr__coll__graph.map b/doxygen/classCppSpec_1_1Matchers_1_1BeNullptr__coll__graph.map new file mode 100644 index 0000000..24d6847 --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1BeNullptr__coll__graph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/doxygen/classCppSpec_1_1Matchers_1_1BeNullptr__coll__graph.md5 b/doxygen/classCppSpec_1_1Matchers_1_1BeNullptr__coll__graph.md5 new file mode 100644 index 0000000..f29555e --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1BeNullptr__coll__graph.md5 @@ -0,0 +1 @@ +17c77ec0ad18041451452ead11c0ee69 \ No newline at end of file diff --git a/doxygen/classCppSpec_1_1Matchers_1_1BeNullptr__coll__graph.png b/doxygen/classCppSpec_1_1Matchers_1_1BeNullptr__coll__graph.png new file mode 100644 index 0000000..2a67f0d Binary files /dev/null and b/doxygen/classCppSpec_1_1Matchers_1_1BeNullptr__coll__graph.png differ diff --git a/doxygen/classCppSpec_1_1Matchers_1_1BeNullptr__inherit__graph.map b/doxygen/classCppSpec_1_1Matchers_1_1BeNullptr__inherit__graph.map new file mode 100644 index 0000000..24d6847 --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1BeNullptr__inherit__graph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/doxygen/classCppSpec_1_1Matchers_1_1BeNullptr__inherit__graph.md5 b/doxygen/classCppSpec_1_1Matchers_1_1BeNullptr__inherit__graph.md5 new file mode 100644 index 0000000..f29555e --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1BeNullptr__inherit__graph.md5 @@ -0,0 +1 @@ +17c77ec0ad18041451452ead11c0ee69 \ No newline at end of file diff --git a/doxygen/classCppSpec_1_1Matchers_1_1BeNullptr__inherit__graph.png b/doxygen/classCppSpec_1_1Matchers_1_1BeNullptr__inherit__graph.png new file mode 100644 index 0000000..2a67f0d Binary files /dev/null and b/doxygen/classCppSpec_1_1Matchers_1_1BeNullptr__inherit__graph.png differ diff --git a/doxygen/classCppSpec_1_1Matchers_1_1BeWithin-members.html b/doxygen/classCppSpec_1_1Matchers_1_1BeWithin-members.html new file mode 100644 index 0000000..6e31c8a --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1BeWithin-members.html @@ -0,0 +1,134 @@ + + + + + + + +C++Spec: Member List + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
CppSpec::Matchers::BeWithin< A, E > Member List
+
+
+ +

This is the complete list of members for CppSpec::Matchers::BeWithin< A, E >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
_name (defined in CppSpec::Pretty)CppSpec::Pretty
BeWithin(Expectation< A > &expectation, E tolerance, E value, std::string_view unit) (defined in CppSpec::Matchers::BeWithin< A, E >)CppSpec::Matchers::BeWithin< A, E >inline
description() overrideCppSpec::Matchers::BeWithin< A, E >virtual
failure_message() overrideCppSpec::Matchers::BeWithin< A, E >virtual
failure_message_when_negated() overrideCppSpec::Matchers::BeWithin< A, E >virtual
improve_hash_formatting(const std::string &inspect_string) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
inspect_object(const T &object) (defined in CppSpec::Pretty)CppSpec::Prettystatic
inspect_object(const O &o)CppSpec::Prettyinline
inspect_object(const char *const &o)CppSpec::Prettyinlinestatic
last(const std::string &s, char delim) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
match() override (defined in CppSpec::Matchers::BeWithin< A, E >)CppSpec::Matchers::BeWithin< A, E >virtual
name(const std::string &name) const (defined in CppSpec::Pretty)CppSpec::Prettyinline
name_to_sentence(const std::string &name) const (defined in CppSpec::Pretty)CppSpec::Prettyinline
run()CppSpec::Matchers::MatcherBase< A, E >
set_message(std::string message)CppSpec::Matchers::MatcherBase< A, E >virtual
split_words(const std::string &sym) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
to_sentence(const T &item)CppSpec::Prettyinlinestatic
to_sentence(const std::vector< T > &words)CppSpec::Prettyinlinestatic
to_word(const T &item)CppSpec::Prettyinlinestatic
to_word(const T &item) (defined in CppSpec::Pretty)CppSpec::Prettystatic
to_word(const Matchers::MatcherBase< A, E > &matcher)CppSpec::Prettyinlinestatic
to_word(const bool &item) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
to_word_type(const T &item) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
underscore(const std::string &camel_cased_word) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
verb() override (defined in CppSpec::Matchers::BeWithin< A, E >)CppSpec::Matchers::BeWithin< A, E >inlinevirtual
+
+
+ + + + diff --git a/doxygen/classCppSpec_1_1Matchers_1_1BeWithin.html b/doxygen/classCppSpec_1_1Matchers_1_1BeWithin.html new file mode 100644 index 0000000..a838559 --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1BeWithin.html @@ -0,0 +1,383 @@ + + + + + + + +C++Spec: CppSpec::Matchers::BeWithin< A, E > Class Template Reference + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
CppSpec::Matchers::BeWithin< A, E > Class Template Reference
+
+
+
+Inheritance diagram for CppSpec::Matchers::BeWithin< A, E >:
+
+
Inheritance graph
+ + + + + + + +
[legend]
+
+Collaboration diagram for CppSpec::Matchers::BeWithin< A, E >:
+
+
Collaboration graph
+ + + + + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

BeWithin (Expectation< A > &expectation, E tolerance, E value, std::string_view unit)
bool match () override
std::string failure_message () override
 Get message to give on match failure.
std::string failure_message_when_negated () override
 Get message to give on match failure when negated.
std::string description () override
 Get the description of the Matcher.
std::string verb () override
Public Member Functions inherited from CppSpec::Matchers::MatcherBase< A, E >
MatcherBase (MatcherBase< A, E > const &copy)=default
+constexpr A & actual ()
+E & expected ()
+Expectation< A > & expectation ()
virtual MatcherBase & set_message (std::string message)
 Set a custom failure message.
+std::source_location get_location () const
Result run ()
 Run the Matcher object.
+virtual bool negated_match ()
Public Member Functions inherited from CppSpec::Pretty
+std::string name (const std::string &name) const
+std::string name_to_sentence (const std::string &name) const
template<typename O>
std::string inspect_object (const O &o)
 Generate a string of the class and data of an object.
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

Public Types inherited from CppSpec::Matchers::MatcherBase< A, E >
+using expected_t
Static Public Member Functions inherited from CppSpec::Pretty
+static std::string split_words (const std::string &sym)
+static std::string underscore (const std::string &camel_cased_word)
+static std::string last (const std::string &s, char delim)
+static std::string improve_hash_formatting (const std::string &inspect_string)
template<Util::is_streamable T>
static std::string to_word (const T &item)
 Formats an object as a string when operator<< is available.
+template<typename T>
static std::string to_word (const T &item)
+template<typename T>
static std::string to_word_type (const T &item)
template<typename A, typename E>
static std::string to_word (const Matchers::MatcherBase< A, E > &matcher)
template<class T>
static std::string to_sentence (const T &item)
 Take a single object and format it as a sentance.
template<class T>
static std::string to_sentence (const std::vector< T > &words)
+template<typename T>
static std::string inspect_object (const T &object)
+template<>
std::string to_word (const bool &item)
template<>
std::string inspect_object (const char *const &o)
 Specialization for C-style strings.
Public Attributes inherited from CppSpec::Pretty
+std::string _name
Protected Attributes inherited from CppSpec::Matchers::MatcherBase< A, E >
+E expected_
+Expectation< A > & expectation_
+

Member Function Documentation

+ +

◆ description()

+ +
+
+
+template<typename A, typename E>
+ + + + + +
+ + + + + + + +
std::string CppSpec::Matchers::BeWithin< A, E >::description ()
+
+overridevirtual
+
+ +

Get the description of the Matcher.

+
Returns
the description
+ +

Reimplemented from CppSpec::Matchers::MatcherBase< A, E >.

+ +
+
+ +

◆ failure_message()

+ +
+
+
+template<typename A, typename E>
+ + + + + +
+ + + + + + + +
std::string CppSpec::Matchers::BeWithin< A, E >::failure_message ()
+
+overridevirtual
+
+ +

Get message to give on match failure.

+
Returns
the message
+ +

Reimplemented from CppSpec::Matchers::MatcherBase< A, E >.

+ +
+
+ +

◆ failure_message_when_negated()

+ +
+
+
+template<typename A, typename E>
+ + + + + +
+ + + + + + + +
std::string CppSpec::Matchers::BeWithin< A, E >::failure_message_when_negated ()
+
+overridevirtual
+
+ +

Get message to give on match failure when negated.

+
Returns
the message
+ +

Reimplemented from CppSpec::Matchers::MatcherBase< A, E >.

+ +
+
+ +

◆ match()

+ +
+
+
+template<typename A, typename E>
+ + + + + +
+ + + + + + + +
bool CppSpec::Matchers::BeWithin< A, E >::match ()
+
+overridevirtual
+
+
+ +

◆ verb()

+ +
+
+
+template<typename A, typename E>
+ + + + + +
+ + + + + + + +
std::string CppSpec::Matchers::BeWithin< A, E >::verb ()
+
+inlineoverridevirtual
+
+ +

Reimplemented from CppSpec::Matchers::MatcherBase< A, E >.

+ +
+
+
The documentation for this class was generated from the following file: +
+
+ +
+ + + + diff --git a/doxygen/classCppSpec_1_1Matchers_1_1BeWithin.js b/doxygen/classCppSpec_1_1Matchers_1_1BeWithin.js new file mode 100644 index 0000000..a9e66ff --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1BeWithin.js @@ -0,0 +1,6 @@ +var classCppSpec_1_1Matchers_1_1BeWithin = +[ + [ "description", "classCppSpec_1_1Matchers_1_1BeWithin.html#a09e02649752738d2930ae7d0cb2f4b92", null ], + [ "failure_message", "classCppSpec_1_1Matchers_1_1BeWithin.html#a69aa065eee91ebfc086b856f5d6537f4", null ], + [ "failure_message_when_negated", "classCppSpec_1_1Matchers_1_1BeWithin.html#aeff54824c55114a272c61bfac885e639", null ] +]; \ No newline at end of file diff --git a/doxygen/classCppSpec_1_1Matchers_1_1BeWithinHelper-members.html b/doxygen/classCppSpec_1_1Matchers_1_1BeWithinHelper-members.html new file mode 100644 index 0000000..2e83323 --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1BeWithinHelper-members.html @@ -0,0 +1,114 @@ + + + + + + + +C++Spec: Member List + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
CppSpec::Matchers::BeWithinHelper< A, E > Member List
+
+
+ +

This is the complete list of members for CppSpec::Matchers::BeWithinHelper< A, E >, including all inherited members.

+ + + + + + +
BeWithinHelper(Expectation< A > &expectation, E tolerance) (defined in CppSpec::Matchers::BeWithinHelper< A, E >)CppSpec::Matchers::BeWithinHelper< A, E >inline
get_message() (defined in CppSpec::Matchers::BeWithinHelper< A, E >)CppSpec::Matchers::BeWithinHelper< A, E >inline
of(E expected) (defined in CppSpec::Matchers::BeWithinHelper< A, E >)CppSpec::Matchers::BeWithinHelper< A, E >
percent_of(E expected) (defined in CppSpec::Matchers::BeWithinHelper< A, E >)CppSpec::Matchers::BeWithinHelper< A, E >
set_message(const std::string &msg) (defined in CppSpec::Matchers::BeWithinHelper< A, E >)CppSpec::Matchers::BeWithinHelper< A, E >inline
+
+
+ + + + diff --git a/doxygen/classCppSpec_1_1Matchers_1_1BeWithinHelper.html b/doxygen/classCppSpec_1_1Matchers_1_1BeWithinHelper.html new file mode 100644 index 0000000..5142684 --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1BeWithinHelper.html @@ -0,0 +1,131 @@ + + + + + + + +C++Spec: CppSpec::Matchers::BeWithinHelper< A, E > Class Template Reference + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
CppSpec::Matchers::BeWithinHelper< A, E > Class Template Reference
+
+
+ + + + + + + +

+Public Member Functions

BeWithinHelper (Expectation< A > &expectation, E tolerance)
+BeWithin< A, E > of (E expected)
+BeWithin< A, E > percent_of (E expected)
+void set_message (const std::string &msg)
+std::string get_message ()
+
The documentation for this class was generated from the following file: +
+
+ +
+ + + + diff --git a/doxygen/classCppSpec_1_1Matchers_1_1BeWithin__coll__graph.map b/doxygen/classCppSpec_1_1Matchers_1_1BeWithin__coll__graph.map new file mode 100644 index 0000000..d72e569 --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1BeWithin__coll__graph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/doxygen/classCppSpec_1_1Matchers_1_1BeWithin__coll__graph.md5 b/doxygen/classCppSpec_1_1Matchers_1_1BeWithin__coll__graph.md5 new file mode 100644 index 0000000..e0357a4 --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1BeWithin__coll__graph.md5 @@ -0,0 +1 @@ +8f01e710018255fcf2344769ef591bbf \ No newline at end of file diff --git a/doxygen/classCppSpec_1_1Matchers_1_1BeWithin__coll__graph.png b/doxygen/classCppSpec_1_1Matchers_1_1BeWithin__coll__graph.png new file mode 100644 index 0000000..1ba7b69 Binary files /dev/null and b/doxygen/classCppSpec_1_1Matchers_1_1BeWithin__coll__graph.png differ diff --git a/doxygen/classCppSpec_1_1Matchers_1_1BeWithin__inherit__graph.map b/doxygen/classCppSpec_1_1Matchers_1_1BeWithin__inherit__graph.map new file mode 100644 index 0000000..d72e569 --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1BeWithin__inherit__graph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/doxygen/classCppSpec_1_1Matchers_1_1BeWithin__inherit__graph.md5 b/doxygen/classCppSpec_1_1Matchers_1_1BeWithin__inherit__graph.md5 new file mode 100644 index 0000000..e0357a4 --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1BeWithin__inherit__graph.md5 @@ -0,0 +1 @@ +8f01e710018255fcf2344769ef591bbf \ No newline at end of file diff --git a/doxygen/classCppSpec_1_1Matchers_1_1BeWithin__inherit__graph.png b/doxygen/classCppSpec_1_1Matchers_1_1BeWithin__inherit__graph.png new file mode 100644 index 0000000..1ba7b69 Binary files /dev/null and b/doxygen/classCppSpec_1_1Matchers_1_1BeWithin__inherit__graph.png differ diff --git a/doxygen/classCppSpec_1_1Matchers_1_1Contain-members.html b/doxygen/classCppSpec_1_1Matchers_1_1Contain-members.html new file mode 100644 index 0000000..c3d81e2 --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1Contain-members.html @@ -0,0 +1,139 @@ + + + + + + + +C++Spec: Member List + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
CppSpec::Matchers::Contain< A, E, U > Member List
+
+
+ +

This is the complete list of members for CppSpec::Matchers::Contain< A, E, U >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
_name (defined in CppSpec::Pretty)CppSpec::Pretty
actual_collection_includes(U expected_item) (defined in CppSpec::Matchers::ContainBase< A, E, U >)CppSpec::Matchers::ContainBase< A, E, U >protected
ContainBase(Expectation< A > &expectation, std::initializer_list< U > expected) (defined in CppSpec::Matchers::ContainBase< A, E, U >)CppSpec::Matchers::ContainBase< A, E, U >inline
ContainBase(Expectation< A > &expectation, U expected) (defined in CppSpec::Matchers::ContainBase< A, E, U >)CppSpec::Matchers::ContainBase< A, E, U >inline
description() overrideCppSpec::Matchers::ContainBase< A, E, U >virtual
diffable() (defined in CppSpec::Matchers::ContainBase< A, E, U >)CppSpec::Matchers::ContainBase< A, E, U >inlinevirtual
failure_message() overrideCppSpec::Matchers::ContainBase< A, E, U >virtual
failure_message_when_negated() overrideCppSpec::Matchers::ContainBase< A, E, U >virtual
improve_hash_formatting(const std::string &inspect_string) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
inspect_object(const T &object) (defined in CppSpec::Pretty)CppSpec::Prettystatic
inspect_object(const O &o)CppSpec::Prettyinline
inspect_object(const char *const &o)CppSpec::Prettyinlinestatic
last(const std::string &s, char delim) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
match() override (defined in CppSpec::Matchers::Contain< A, E, U >)CppSpec::Matchers::Contain< A, E, U >virtual
name(const std::string &name) const (defined in CppSpec::Pretty)CppSpec::Prettyinline
name_to_sentence(const std::string &name) const (defined in CppSpec::Pretty)CppSpec::Prettyinline
negated_match() override (defined in CppSpec::Matchers::Contain< A, E, U >)CppSpec::Matchers::Contain< A, E, U >virtual
perform_match(Predicate predicate, Predicate hash_subset_predicate) (defined in CppSpec::Matchers::Contain< A, E, U >)CppSpec::Matchers::Contain< A, E, U >protected
run()CppSpec::Matchers::MatcherBase< A, E >
set_message(std::string message)CppSpec::Matchers::MatcherBase< A, E >virtual
split_words(const std::string &sym) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
to_sentence(const T &item)CppSpec::Prettyinlinestatic
to_sentence(const std::vector< T > &words)CppSpec::Prettyinlinestatic
to_word(const T &item)CppSpec::Prettyinlinestatic
to_word(const T &item) (defined in CppSpec::Pretty)CppSpec::Prettystatic
to_word(const Matchers::MatcherBase< A, E > &matcher)CppSpec::Prettyinlinestatic
to_word(const bool &item) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
to_word_type(const T &item) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
underscore(const std::string &camel_cased_word) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
verb() override (defined in CppSpec::Matchers::ContainBase< A, E, U >)CppSpec::Matchers::ContainBase< A, E, U >inlinevirtual
+
+
+ + + + diff --git a/doxygen/classCppSpec_1_1Matchers_1_1Contain.html b/doxygen/classCppSpec_1_1Matchers_1_1Contain.html new file mode 100644 index 0000000..b91dbd1 --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1Contain.html @@ -0,0 +1,308 @@ + + + + + + + +C++Spec: CppSpec::Matchers::Contain< A, E, U > Class Template Reference + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
CppSpec::Matchers::Contain< A, E, U > Class Template Reference
+
+
+ +

#include <contain.hpp>

+
+Inheritance diagram for CppSpec::Matchers::Contain< A, E, U >:
+
+
Inheritance graph
+ + + + + + + + + +
[legend]
+
+Collaboration diagram for CppSpec::Matchers::Contain< A, E, U >:
+
+
Collaboration graph
+ + + + + + + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

bool match () override
bool negated_match () override
Public Member Functions inherited from CppSpec::Matchers::ContainBase< A, E, U >
std::string verb () override
std::string description () override
 Get the description of the Matcher.
std::string failure_message () override
 Get message to give on match failure.
std::string failure_message_when_negated () override
 Get message to give on match failure when negated.
+virtual bool diffable ()
ContainBase (Expectation< A > &expectation, std::initializer_list< U > expected)
ContainBase (Expectation< A > &expectation, U expected)
Public Member Functions inherited from CppSpec::Matchers::MatcherBase< A, E >
MatcherBase (MatcherBase< A, E > const &copy)=default
+constexpr A & actual ()
+E & expected ()
+Expectation< A > & expectation ()
virtual MatcherBase & set_message (std::string message)
 Set a custom failure message.
+std::source_location get_location () const
Result run ()
 Run the Matcher object.
Public Member Functions inherited from CppSpec::Pretty
+std::string name (const std::string &name) const
+std::string name_to_sentence (const std::string &name) const
template<typename O>
std::string inspect_object (const O &o)
 Generate a string of the class and data of an object.
+ + + + +

+Protected Member Functions

+bool perform_match (Predicate predicate, Predicate hash_subset_predicate)
Protected Member Functions inherited from CppSpec::Matchers::ContainBase< A, E, U >
+bool actual_collection_includes (U expected_item)
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

Public Types inherited from CppSpec::Matchers::MatcherBase< A, E >
+using expected_t
Static Public Member Functions inherited from CppSpec::Pretty
+static std::string split_words (const std::string &sym)
+static std::string underscore (const std::string &camel_cased_word)
+static std::string last (const std::string &s, char delim)
+static std::string improve_hash_formatting (const std::string &inspect_string)
template<Util::is_streamable T>
static std::string to_word (const T &item)
 Formats an object as a string when operator<< is available.
+template<typename T>
static std::string to_word (const T &item)
+template<typename T>
static std::string to_word_type (const T &item)
template<typename A, typename E>
static std::string to_word (const Matchers::MatcherBase< A, E > &matcher)
template<class T>
static std::string to_sentence (const T &item)
 Take a single object and format it as a sentance.
template<class T>
static std::string to_sentence (const std::vector< T > &words)
+template<typename T>
static std::string inspect_object (const T &object)
+template<>
std::string to_word (const bool &item)
template<>
std::string inspect_object (const char *const &o)
 Specialization for C-style strings.
Public Attributes inherited from CppSpec::Pretty
+std::string _name
Protected Attributes inherited from CppSpec::Matchers::MatcherBase< A, E >
+E expected_
+Expectation< A > & expectation_
+

Detailed Description

+
template<typename A, typename E, typename U>
+class CppSpec::Matchers::Contain< A, E, U >

The template specialization of Include that permits matching against a list of elements (i.e. expected({1,2,3,4}).to_include({1,4}) )

+

Member Function Documentation

+ +

◆ match()

+ +
+
+
+template<typename A, typename E, typename U>
+ + + + + +
+ + + + + + + +
bool CppSpec::Matchers::Contain< A, E, U >::match ()
+
+overridevirtual
+
+
+ +

◆ negated_match()

+ +
+
+
+template<typename A, typename E, typename U>
+ + + + + +
+ + + + + + + +
bool CppSpec::Matchers::Contain< A, E, U >::negated_match ()
+
+overridevirtual
+
+ +

Reimplemented from CppSpec::Matchers::MatcherBase< A, E >.

+ +
+
+
The documentation for this class was generated from the following file: +
+
+ +
+ + + + diff --git a/doxygen/classCppSpec_1_1Matchers_1_1ContainBase-members.html b/doxygen/classCppSpec_1_1Matchers_1_1ContainBase-members.html new file mode 100644 index 0000000..e13d98c --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1ContainBase-members.html @@ -0,0 +1,136 @@ + + + + + + + +C++Spec: Member List + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
CppSpec::Matchers::ContainBase< A, E, U > Member List
+
+
+ +

This is the complete list of members for CppSpec::Matchers::ContainBase< A, E, U >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
_name (defined in CppSpec::Pretty)CppSpec::Pretty
actual_collection_includes(U expected_item) (defined in CppSpec::Matchers::ContainBase< A, E, U >)CppSpec::Matchers::ContainBase< A, E, U >protected
ContainBase(Expectation< A > &expectation, std::initializer_list< U > expected) (defined in CppSpec::Matchers::ContainBase< A, E, U >)CppSpec::Matchers::ContainBase< A, E, U >inline
ContainBase(Expectation< A > &expectation, U expected) (defined in CppSpec::Matchers::ContainBase< A, E, U >)CppSpec::Matchers::ContainBase< A, E, U >inline
description() overrideCppSpec::Matchers::ContainBase< A, E, U >virtual
diffable() (defined in CppSpec::Matchers::ContainBase< A, E, U >)CppSpec::Matchers::ContainBase< A, E, U >inlinevirtual
failure_message() overrideCppSpec::Matchers::ContainBase< A, E, U >virtual
failure_message_when_negated() overrideCppSpec::Matchers::ContainBase< A, E, U >virtual
improve_hash_formatting(const std::string &inspect_string) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
inspect_object(const T &object) (defined in CppSpec::Pretty)CppSpec::Prettystatic
inspect_object(const O &o)CppSpec::Prettyinline
inspect_object(const char *const &o)CppSpec::Prettyinlinestatic
last(const std::string &s, char delim) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
name(const std::string &name) const (defined in CppSpec::Pretty)CppSpec::Prettyinline
name_to_sentence(const std::string &name) const (defined in CppSpec::Pretty)CppSpec::Prettyinline
run()CppSpec::Matchers::MatcherBase< A, E >
set_message(std::string message)CppSpec::Matchers::MatcherBase< A, E >virtual
split_words(const std::string &sym) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
to_sentence(const T &item)CppSpec::Prettyinlinestatic
to_sentence(const std::vector< T > &words)CppSpec::Prettyinlinestatic
to_word(const T &item)CppSpec::Prettyinlinestatic
to_word(const T &item) (defined in CppSpec::Pretty)CppSpec::Prettystatic
to_word(const Matchers::MatcherBase< A, E > &matcher)CppSpec::Prettyinlinestatic
to_word(const bool &item) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
to_word_type(const T &item) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
underscore(const std::string &camel_cased_word) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
verb() override (defined in CppSpec::Matchers::ContainBase< A, E, U >)CppSpec::Matchers::ContainBase< A, E, U >inlinevirtual
+
+
+ + + + diff --git a/doxygen/classCppSpec_1_1Matchers_1_1ContainBase.html b/doxygen/classCppSpec_1_1Matchers_1_1ContainBase.html new file mode 100644 index 0000000..c2ff220 --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1ContainBase.html @@ -0,0 +1,371 @@ + + + + + + + +C++Spec: CppSpec::Matchers::ContainBase< A, E, U > Class Template Reference + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
CppSpec::Matchers::ContainBase< A, E, U > Class Template Reference
+
+
+ +

#include <contain.hpp>

+
+Inheritance diagram for CppSpec::Matchers::ContainBase< A, E, U >:
+
+
Inheritance graph
+ + + + + + + + + +
[legend]
+
+Collaboration diagram for CppSpec::Matchers::ContainBase< A, E, U >:
+
+
Collaboration graph
+ + + + + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

std::string verb () override
std::string description () override
 Get the description of the Matcher.
std::string failure_message () override
 Get message to give on match failure.
std::string failure_message_when_negated () override
 Get message to give on match failure when negated.
+virtual bool diffable ()
ContainBase (Expectation< A > &expectation, std::initializer_list< U > expected)
ContainBase (Expectation< A > &expectation, U expected)
Public Member Functions inherited from CppSpec::Matchers::MatcherBase< A, E >
MatcherBase (MatcherBase< A, E > const &copy)=default
+constexpr A & actual ()
+E & expected ()
+Expectation< A > & expectation ()
virtual MatcherBase & set_message (std::string message)
 Set a custom failure message.
+std::source_location get_location () const
Result run ()
 Run the Matcher object.
+virtual bool match ()=0
+virtual bool negated_match ()
Public Member Functions inherited from CppSpec::Pretty
+std::string name (const std::string &name) const
+std::string name_to_sentence (const std::string &name) const
template<typename O>
std::string inspect_object (const O &o)
 Generate a string of the class and data of an object.
+ + +

+Protected Member Functions

+bool actual_collection_includes (U expected_item)
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

Public Types inherited from CppSpec::Matchers::MatcherBase< A, E >
+using expected_t
Static Public Member Functions inherited from CppSpec::Pretty
+static std::string split_words (const std::string &sym)
+static std::string underscore (const std::string &camel_cased_word)
+static std::string last (const std::string &s, char delim)
+static std::string improve_hash_formatting (const std::string &inspect_string)
template<Util::is_streamable T>
static std::string to_word (const T &item)
 Formats an object as a string when operator<< is available.
+template<typename T>
static std::string to_word (const T &item)
+template<typename T>
static std::string to_word_type (const T &item)
template<typename A, typename E>
static std::string to_word (const Matchers::MatcherBase< A, E > &matcher)
template<class T>
static std::string to_sentence (const T &item)
 Take a single object and format it as a sentance.
template<class T>
static std::string to_sentence (const std::vector< T > &words)
+template<typename T>
static std::string inspect_object (const T &object)
+template<>
std::string to_word (const bool &item)
template<>
std::string inspect_object (const char *const &o)
 Specialization for C-style strings.
Public Attributes inherited from CppSpec::Pretty
+std::string _name
Protected Attributes inherited from CppSpec::Matchers::MatcherBase< A, E >
+E expected_
+Expectation< A > & expectation_
+

Detailed Description

+
template<typename A, typename E, typename U>
+class CppSpec::Matchers::ContainBase< A, E, U >

The abstract base class for the Include matcher. See template specializations below.

+

Member Function Documentation

+ +

◆ description()

+ +
+
+
+template<typename A, typename E, typename U>
+ + + + + +
+ + + + + + + +
std::string CppSpec::Matchers::ContainBase< A, E, U >::description ()
+
+overridevirtual
+
+ +

Get the description of the Matcher.

+
Returns
the description
+ +

Reimplemented from CppSpec::Matchers::MatcherBase< A, E >.

+ +
+
+ +

◆ failure_message()

+ +
+
+
+template<typename A, typename E, typename U>
+ + + + + +
+ + + + + + + +
std::string CppSpec::Matchers::ContainBase< A, E, U >::failure_message ()
+
+overridevirtual
+
+ +

Get message to give on match failure.

+
Returns
the message
+ +

Reimplemented from CppSpec::Matchers::MatcherBase< A, E >.

+ +
+
+ +

◆ failure_message_when_negated()

+ +
+
+
+template<typename A, typename E, typename U>
+ + + + + +
+ + + + + + + +
std::string CppSpec::Matchers::ContainBase< A, E, U >::failure_message_when_negated ()
+
+overridevirtual
+
+ +

Get message to give on match failure when negated.

+
Returns
the message
+ +

Reimplemented from CppSpec::Matchers::MatcherBase< A, E >.

+ +
+
+ +

◆ verb()

+ +
+
+
+template<typename A, typename E, typename U>
+ + + + + +
+ + + + + + + +
std::string CppSpec::Matchers::ContainBase< A, E, U >::verb ()
+
+inlineoverridevirtual
+
+ +

Reimplemented from CppSpec::Matchers::MatcherBase< A, E >.

+ +
+
+
The documentation for this class was generated from the following file: +
+
+ +
+ + + + diff --git a/doxygen/classCppSpec_1_1Matchers_1_1ContainBase.js b/doxygen/classCppSpec_1_1Matchers_1_1ContainBase.js new file mode 100644 index 0000000..88d4b7a --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1ContainBase.js @@ -0,0 +1,6 @@ +var classCppSpec_1_1Matchers_1_1ContainBase = +[ + [ "description", "classCppSpec_1_1Matchers_1_1ContainBase.html#ac9dca89183183342e88717af373d484c", null ], + [ "failure_message", "classCppSpec_1_1Matchers_1_1ContainBase.html#a0cace43b1d2962d89204122e58addc75", null ], + [ "failure_message_when_negated", "classCppSpec_1_1Matchers_1_1ContainBase.html#a7504cd327944aab333109cb3706b65ee", null ] +]; \ No newline at end of file diff --git a/doxygen/classCppSpec_1_1Matchers_1_1ContainBase__coll__graph.map b/doxygen/classCppSpec_1_1Matchers_1_1ContainBase__coll__graph.map new file mode 100644 index 0000000..d968f3a --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1ContainBase__coll__graph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/doxygen/classCppSpec_1_1Matchers_1_1ContainBase__coll__graph.md5 b/doxygen/classCppSpec_1_1Matchers_1_1ContainBase__coll__graph.md5 new file mode 100644 index 0000000..a2ab510 --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1ContainBase__coll__graph.md5 @@ -0,0 +1 @@ +d273c99e0a2b5062ce7c42984ba7c8ea \ No newline at end of file diff --git a/doxygen/classCppSpec_1_1Matchers_1_1ContainBase__coll__graph.png b/doxygen/classCppSpec_1_1Matchers_1_1ContainBase__coll__graph.png new file mode 100644 index 0000000..f3d4efd Binary files /dev/null and b/doxygen/classCppSpec_1_1Matchers_1_1ContainBase__coll__graph.png differ diff --git a/doxygen/classCppSpec_1_1Matchers_1_1ContainBase__inherit__graph.map b/doxygen/classCppSpec_1_1Matchers_1_1ContainBase__inherit__graph.map new file mode 100644 index 0000000..2cab7ea --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1ContainBase__inherit__graph.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/doxygen/classCppSpec_1_1Matchers_1_1ContainBase__inherit__graph.md5 b/doxygen/classCppSpec_1_1Matchers_1_1ContainBase__inherit__graph.md5 new file mode 100644 index 0000000..94ca4e0 --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1ContainBase__inherit__graph.md5 @@ -0,0 +1 @@ +ab7dd9716c83f805aa6c013d24538d03 \ No newline at end of file diff --git a/doxygen/classCppSpec_1_1Matchers_1_1ContainBase__inherit__graph.png b/doxygen/classCppSpec_1_1Matchers_1_1ContainBase__inherit__graph.png new file mode 100644 index 0000000..1e52c33 Binary files /dev/null and b/doxygen/classCppSpec_1_1Matchers_1_1ContainBase__inherit__graph.png differ diff --git a/doxygen/classCppSpec_1_1Matchers_1_1Contain_3_01A_00_01U_00_01U_01_4-members.html b/doxygen/classCppSpec_1_1Matchers_1_1Contain_3_01A_00_01U_00_01U_01_4-members.html new file mode 100644 index 0000000..39e706a --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1Contain_3_01A_00_01U_00_01U_01_4-members.html @@ -0,0 +1,135 @@ + + + + + + + +C++Spec: Member List + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
CppSpec::Matchers::Contain< A, U, U > Member List
+
+
+ +

This is the complete list of members for CppSpec::Matchers::Contain< A, U, U >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
_name (defined in CppSpec::Pretty)CppSpec::Pretty
Contain(Expectation< A > &expectation, U expected) (defined in CppSpec::Matchers::Contain< A, U, U >)CppSpec::Matchers::Contain< A, U, U >inline
description() overrideCppSpec::Matchers::ContainBase< A, U, U >virtual
failure_message() overrideCppSpec::Matchers::ContainBase< A, U, U >virtual
failure_message_when_negated() overrideCppSpec::Matchers::ContainBase< A, U, U >virtual
improve_hash_formatting(const std::string &inspect_string) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
inspect_object(const T &object) (defined in CppSpec::Pretty)CppSpec::Prettystatic
inspect_object(const O &o)CppSpec::Prettyinline
inspect_object(const char *const &o)CppSpec::Prettyinlinestatic
last(const std::string &s, char delim) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
match() override (defined in CppSpec::Matchers::Contain< A, U, U >)CppSpec::Matchers::Contain< A, U, U >virtual
name(const std::string &name) const (defined in CppSpec::Pretty)CppSpec::Prettyinline
name_to_sentence(const std::string &name) const (defined in CppSpec::Pretty)CppSpec::Prettyinline
negated_match() override (defined in CppSpec::Matchers::Contain< A, U, U >)CppSpec::Matchers::Contain< A, U, U >virtual
perform_match(Predicate predicate, Predicate hash_subset_predicate) (defined in CppSpec::Matchers::Contain< A, U, U >)CppSpec::Matchers::Contain< A, U, U >protected
run()CppSpec::Matchers::MatcherBase< A, U >
set_message(std::string message)CppSpec::Matchers::MatcherBase< A, U >virtual
split_words(const std::string &sym) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
to_sentence(const T &item)CppSpec::Prettyinlinestatic
to_sentence(const std::vector< T > &words)CppSpec::Prettyinlinestatic
to_word(const T &item)CppSpec::Prettyinlinestatic
to_word(const T &item) (defined in CppSpec::Pretty)CppSpec::Prettystatic
to_word(const Matchers::MatcherBase< A, E > &matcher)CppSpec::Prettyinlinestatic
to_word(const bool &item) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
to_word_type(const T &item) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
underscore(const std::string &camel_cased_word) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
+
+
+ + + + diff --git a/doxygen/classCppSpec_1_1Matchers_1_1Contain_3_01A_00_01U_00_01U_01_4.html b/doxygen/classCppSpec_1_1Matchers_1_1Contain_3_01A_00_01U_00_01U_01_4.html new file mode 100644 index 0000000..74b21ac --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1Contain_3_01A_00_01U_00_01U_01_4.html @@ -0,0 +1,308 @@ + + + + + + + +C++Spec: CppSpec::Matchers::Contain< A, U, U > Class Template Reference + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
CppSpec::Matchers::Contain< A, U, U > Class Template Reference
+
+
+ +

#include <contain.hpp>

+
+Inheritance diagram for CppSpec::Matchers::Contain< A, U, U >:
+
+
Inheritance graph
+ + + + + + + + + + +
[legend]
+
+Collaboration diagram for CppSpec::Matchers::Contain< A, U, U >:
+
+
Collaboration graph
+ + + + + + + + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

Contain (Expectation< A > &expectation, U expected)
bool match () override
bool negated_match () override
Public Member Functions inherited from CppSpec::Matchers::ContainBase< A, U, U >
std::string verb () override
std::string description () override
 Get the description of the Matcher.
std::string failure_message () override
 Get message to give on match failure.
std::string failure_message_when_negated () override
 Get message to give on match failure when negated.
+virtual bool diffable ()
ContainBase (Expectation< A > &expectation, std::initializer_list< U > expected)
Public Member Functions inherited from CppSpec::Matchers::MatcherBase< A, U >
MatcherBase (MatcherBase< A, U > const &copy)=default
+constexpr A & actual ()
+U & expected ()
+Expectation< A > & expectation ()
virtual MatcherBase & set_message (std::string message)
 Set a custom failure message.
+std::source_location get_location () const
Result run ()
 Run the Matcher object.
Public Member Functions inherited from CppSpec::Pretty
+std::string name (const std::string &name) const
+std::string name_to_sentence (const std::string &name) const
template<typename O>
std::string inspect_object (const O &o)
 Generate a string of the class and data of an object.
+ + + + +

+Protected Member Functions

+bool perform_match (Predicate predicate, Predicate hash_subset_predicate)
Protected Member Functions inherited from CppSpec::Matchers::ContainBase< A, U, U >
+bool actual_collection_includes (U expected_item)
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

Public Types inherited from CppSpec::Matchers::MatcherBase< A, U >
+using expected_t
Static Public Member Functions inherited from CppSpec::Pretty
+static std::string split_words (const std::string &sym)
+static std::string underscore (const std::string &camel_cased_word)
+static std::string last (const std::string &s, char delim)
+static std::string improve_hash_formatting (const std::string &inspect_string)
template<Util::is_streamable T>
static std::string to_word (const T &item)
 Formats an object as a string when operator<< is available.
+template<typename T>
static std::string to_word (const T &item)
+template<typename T>
static std::string to_word_type (const T &item)
template<typename A, typename E>
static std::string to_word (const Matchers::MatcherBase< A, E > &matcher)
template<class T>
static std::string to_sentence (const T &item)
 Take a single object and format it as a sentance.
template<class T>
static std::string to_sentence (const std::vector< T > &words)
+template<typename T>
static std::string inspect_object (const T &object)
+template<>
std::string to_word (const bool &item)
template<>
std::string inspect_object (const char *const &o)
 Specialization for C-style strings.
Public Attributes inherited from CppSpec::Pretty
+std::string _name
Protected Attributes inherited from CppSpec::Matchers::MatcherBase< A, U >
+U expected_
+Expectation< A > & expectation_
+

Detailed Description

+
template<typename A, typename U>
+class CppSpec::Matchers::Contain< A, U, U >

The template specialization of Include that permits matching of a single element (i.e. expected({1,2,3,4}).to_include(4) )

+

Member Function Documentation

+ +

◆ match()

+ +
+
+
+template<typename A, typename U>
+ + + + + +
+ + + + + + + +
bool CppSpec::Matchers::Contain< A, U, U >::match ()
+
+overridevirtual
+
+
+ +

◆ negated_match()

+ +
+
+ + + + + +
+ + + + + + + +
bool CppSpec::Matchers::Contain< A, U, U >::negated_match ()
+
+overridevirtual
+
+ +

Reimplemented from CppSpec::Matchers::MatcherBase< A, U >.

+ +
+
+
The documentation for this class was generated from the following file: +
+
+ +
+ + + + diff --git a/doxygen/classCppSpec_1_1Matchers_1_1Contain_3_01A_00_01U_00_01U_01_4__coll__graph.map b/doxygen/classCppSpec_1_1Matchers_1_1Contain_3_01A_00_01U_00_01U_01_4__coll__graph.map new file mode 100644 index 0000000..710d7fe --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1Contain_3_01A_00_01U_00_01U_01_4__coll__graph.map @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/doxygen/classCppSpec_1_1Matchers_1_1Contain_3_01A_00_01U_00_01U_01_4__coll__graph.md5 b/doxygen/classCppSpec_1_1Matchers_1_1Contain_3_01A_00_01U_00_01U_01_4__coll__graph.md5 new file mode 100644 index 0000000..6b2d802 --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1Contain_3_01A_00_01U_00_01U_01_4__coll__graph.md5 @@ -0,0 +1 @@ +3b5b7dd09e72934a7edcb5501470a7c0 \ No newline at end of file diff --git a/doxygen/classCppSpec_1_1Matchers_1_1Contain_3_01A_00_01U_00_01U_01_4__coll__graph.png b/doxygen/classCppSpec_1_1Matchers_1_1Contain_3_01A_00_01U_00_01U_01_4__coll__graph.png new file mode 100644 index 0000000..85899fe Binary files /dev/null and b/doxygen/classCppSpec_1_1Matchers_1_1Contain_3_01A_00_01U_00_01U_01_4__coll__graph.png differ diff --git a/doxygen/classCppSpec_1_1Matchers_1_1Contain_3_01A_00_01U_00_01U_01_4__inherit__graph.map b/doxygen/classCppSpec_1_1Matchers_1_1Contain_3_01A_00_01U_00_01U_01_4__inherit__graph.map new file mode 100644 index 0000000..710d7fe --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1Contain_3_01A_00_01U_00_01U_01_4__inherit__graph.map @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/doxygen/classCppSpec_1_1Matchers_1_1Contain_3_01A_00_01U_00_01U_01_4__inherit__graph.md5 b/doxygen/classCppSpec_1_1Matchers_1_1Contain_3_01A_00_01U_00_01U_01_4__inherit__graph.md5 new file mode 100644 index 0000000..6b2d802 --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1Contain_3_01A_00_01U_00_01U_01_4__inherit__graph.md5 @@ -0,0 +1 @@ +3b5b7dd09e72934a7edcb5501470a7c0 \ No newline at end of file diff --git a/doxygen/classCppSpec_1_1Matchers_1_1Contain_3_01A_00_01U_00_01U_01_4__inherit__graph.png b/doxygen/classCppSpec_1_1Matchers_1_1Contain_3_01A_00_01U_00_01U_01_4__inherit__graph.png new file mode 100644 index 0000000..85899fe Binary files /dev/null and b/doxygen/classCppSpec_1_1Matchers_1_1Contain_3_01A_00_01U_00_01U_01_4__inherit__graph.png differ diff --git a/doxygen/classCppSpec_1_1Matchers_1_1Contain__coll__graph.map b/doxygen/classCppSpec_1_1Matchers_1_1Contain__coll__graph.map new file mode 100644 index 0000000..4a1784b --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1Contain__coll__graph.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/doxygen/classCppSpec_1_1Matchers_1_1Contain__coll__graph.md5 b/doxygen/classCppSpec_1_1Matchers_1_1Contain__coll__graph.md5 new file mode 100644 index 0000000..fa2be09 --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1Contain__coll__graph.md5 @@ -0,0 +1 @@ +7b2c4a6f9d3f7e4910f5307d249af11d \ No newline at end of file diff --git a/doxygen/classCppSpec_1_1Matchers_1_1Contain__coll__graph.png b/doxygen/classCppSpec_1_1Matchers_1_1Contain__coll__graph.png new file mode 100644 index 0000000..8abd35f Binary files /dev/null and b/doxygen/classCppSpec_1_1Matchers_1_1Contain__coll__graph.png differ diff --git a/doxygen/classCppSpec_1_1Matchers_1_1Contain__inherit__graph.map b/doxygen/classCppSpec_1_1Matchers_1_1Contain__inherit__graph.map new file mode 100644 index 0000000..4a1784b --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1Contain__inherit__graph.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/doxygen/classCppSpec_1_1Matchers_1_1Contain__inherit__graph.md5 b/doxygen/classCppSpec_1_1Matchers_1_1Contain__inherit__graph.md5 new file mode 100644 index 0000000..fa2be09 --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1Contain__inherit__graph.md5 @@ -0,0 +1 @@ +7b2c4a6f9d3f7e4910f5307d249af11d \ No newline at end of file diff --git a/doxygen/classCppSpec_1_1Matchers_1_1Contain__inherit__graph.png b/doxygen/classCppSpec_1_1Matchers_1_1Contain__inherit__graph.png new file mode 100644 index 0000000..8abd35f Binary files /dev/null and b/doxygen/classCppSpec_1_1Matchers_1_1Contain__inherit__graph.png differ diff --git a/doxygen/classCppSpec_1_1Matchers_1_1EndWith-members.html b/doxygen/classCppSpec_1_1Matchers_1_1EndWith-members.html new file mode 100644 index 0000000..e43e3ae --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1EndWith-members.html @@ -0,0 +1,134 @@ + + + + + + + +C++Spec: Member List + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
CppSpec::Matchers::EndWith< A, E > Member List
+
+
+ +

This is the complete list of members for CppSpec::Matchers::EndWith< A, E >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
_name (defined in CppSpec::Pretty)CppSpec::Pretty
description()CppSpec::Matchers::MatcherBase< A, E >virtual
EndWith(Expectation< A > &expectation, E start) (defined in CppSpec::Matchers::EndWith< A, E >)CppSpec::Matchers::EndWith< A, E >inline
failure_message()CppSpec::Matchers::MatcherBase< A, E >virtual
failure_message_when_negated()CppSpec::Matchers::MatcherBase< A, E >virtual
improve_hash_formatting(const std::string &inspect_string) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
inspect_object(const T &object) (defined in CppSpec::Pretty)CppSpec::Prettystatic
inspect_object(const O &o)CppSpec::Prettyinline
inspect_object(const char *const &o)CppSpec::Prettyinlinestatic
last(const std::string &s, char delim) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
match() override (defined in CppSpec::Matchers::EndWith< A, E >)CppSpec::Matchers::EndWith< A, E >inlinevirtual
name(const std::string &name) const (defined in CppSpec::Pretty)CppSpec::Prettyinline
name_to_sentence(const std::string &name) const (defined in CppSpec::Pretty)CppSpec::Prettyinline
run()CppSpec::Matchers::MatcherBase< A, E >
set_message(std::string message)CppSpec::Matchers::MatcherBase< A, E >virtual
split_words(const std::string &sym) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
to_sentence(const T &item)CppSpec::Prettyinlinestatic
to_sentence(const std::vector< T > &words)CppSpec::Prettyinlinestatic
to_word(const T &item)CppSpec::Prettyinlinestatic
to_word(const T &item) (defined in CppSpec::Pretty)CppSpec::Prettystatic
to_word(const Matchers::MatcherBase< A, E > &matcher)CppSpec::Prettyinlinestatic
to_word(const bool &item) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
to_word_type(const T &item) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
underscore(const std::string &camel_cased_word) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
verb() override (defined in CppSpec::Matchers::EndWith< A, E >)CppSpec::Matchers::EndWith< A, E >inlinevirtual
+
+
+ + + + diff --git a/doxygen/classCppSpec_1_1Matchers_1_1EndWith.html b/doxygen/classCppSpec_1_1Matchers_1_1EndWith.html new file mode 100644 index 0000000..ab73e4f --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1EndWith.html @@ -0,0 +1,287 @@ + + + + + + + +C++Spec: CppSpec::Matchers::EndWith< A, E > Class Template Reference + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
CppSpec::Matchers::EndWith< A, E > Class Template Reference
+
+
+
+Inheritance diagram for CppSpec::Matchers::EndWith< A, E >:
+
+
Inheritance graph
+ + + + + + + +
[legend]
+
+Collaboration diagram for CppSpec::Matchers::EndWith< A, E >:
+
+
Collaboration graph
+ + + + + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

EndWith (Expectation< A > &expectation, E start)
std::string verb () override
bool match () override
Public Member Functions inherited from CppSpec::Matchers::MatcherBase< A, E >
MatcherBase (MatcherBase< A, E > const &copy)=default
virtual std::string failure_message ()
 Get message to give on match failure.
virtual std::string failure_message_when_negated ()
 Get message to give on match failure when negated.
virtual std::string description ()
 Get the description of the Matcher.
+constexpr A & actual ()
+E & expected ()
+Expectation< A > & expectation ()
virtual MatcherBase & set_message (std::string message)
 Set a custom failure message.
+std::source_location get_location () const
Result run ()
 Run the Matcher object.
+virtual bool negated_match ()
Public Member Functions inherited from CppSpec::Pretty
+std::string name (const std::string &name) const
+std::string name_to_sentence (const std::string &name) const
template<typename O>
std::string inspect_object (const O &o)
 Generate a string of the class and data of an object.
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

Public Types inherited from CppSpec::Matchers::MatcherBase< A, E >
+using expected_t
Static Public Member Functions inherited from CppSpec::Pretty
+static std::string split_words (const std::string &sym)
+static std::string underscore (const std::string &camel_cased_word)
+static std::string last (const std::string &s, char delim)
+static std::string improve_hash_formatting (const std::string &inspect_string)
template<Util::is_streamable T>
static std::string to_word (const T &item)
 Formats an object as a string when operator<< is available.
+template<typename T>
static std::string to_word (const T &item)
+template<typename T>
static std::string to_word_type (const T &item)
template<typename A, typename E>
static std::string to_word (const Matchers::MatcherBase< A, E > &matcher)
template<class T>
static std::string to_sentence (const T &item)
 Take a single object and format it as a sentance.
template<class T>
static std::string to_sentence (const std::vector< T > &words)
+template<typename T>
static std::string inspect_object (const T &object)
+template<>
std::string to_word (const bool &item)
template<>
std::string inspect_object (const char *const &o)
 Specialization for C-style strings.
Public Attributes inherited from CppSpec::Pretty
+std::string _name
Protected Attributes inherited from CppSpec::Matchers::MatcherBase< A, E >
+E expected_
+Expectation< A > & expectation_
+

Member Function Documentation

+ +

◆ match()

+ +
+
+
+template<std::ranges::range A, std::ranges::range E>
+ + + + + +
+ + + + + + + +
bool CppSpec::Matchers::EndWith< A, E >::match ()
+
+inlineoverridevirtual
+
+
+ +

◆ verb()

+ +
+
+
+template<std::ranges::range A, std::ranges::range E>
+ + + + + +
+ + + + + + + +
std::string CppSpec::Matchers::EndWith< A, E >::verb ()
+
+inlineoverridevirtual
+
+ +

Reimplemented from CppSpec::Matchers::MatcherBase< A, E >.

+ +
+
+
The documentation for this class was generated from the following file: +
+
+ +
+ + + + diff --git a/doxygen/classCppSpec_1_1Matchers_1_1EndWith__coll__graph.map b/doxygen/classCppSpec_1_1Matchers_1_1EndWith__coll__graph.map new file mode 100644 index 0000000..2e1155f --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1EndWith__coll__graph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/doxygen/classCppSpec_1_1Matchers_1_1EndWith__coll__graph.md5 b/doxygen/classCppSpec_1_1Matchers_1_1EndWith__coll__graph.md5 new file mode 100644 index 0000000..b73e13f --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1EndWith__coll__graph.md5 @@ -0,0 +1 @@ +418008708fbdb744439a5e4ef4cfafab \ No newline at end of file diff --git a/doxygen/classCppSpec_1_1Matchers_1_1EndWith__coll__graph.png b/doxygen/classCppSpec_1_1Matchers_1_1EndWith__coll__graph.png new file mode 100644 index 0000000..87f5867 Binary files /dev/null and b/doxygen/classCppSpec_1_1Matchers_1_1EndWith__coll__graph.png differ diff --git a/doxygen/classCppSpec_1_1Matchers_1_1EndWith__inherit__graph.map b/doxygen/classCppSpec_1_1Matchers_1_1EndWith__inherit__graph.map new file mode 100644 index 0000000..2e1155f --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1EndWith__inherit__graph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/doxygen/classCppSpec_1_1Matchers_1_1EndWith__inherit__graph.md5 b/doxygen/classCppSpec_1_1Matchers_1_1EndWith__inherit__graph.md5 new file mode 100644 index 0000000..b73e13f --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1EndWith__inherit__graph.md5 @@ -0,0 +1 @@ +418008708fbdb744439a5e4ef4cfafab \ No newline at end of file diff --git a/doxygen/classCppSpec_1_1Matchers_1_1EndWith__inherit__graph.png b/doxygen/classCppSpec_1_1Matchers_1_1EndWith__inherit__graph.png new file mode 100644 index 0000000..87f5867 Binary files /dev/null and b/doxygen/classCppSpec_1_1Matchers_1_1EndWith__inherit__graph.png differ diff --git a/doxygen/classCppSpec_1_1Matchers_1_1Equal-members.html b/doxygen/classCppSpec_1_1Matchers_1_1Equal-members.html new file mode 100644 index 0000000..d1e845e --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1Equal-members.html @@ -0,0 +1,138 @@ + + + + + + + +C++Spec: Member List + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
CppSpec::Matchers::Equal< A, E > Member List
+
+
+ +

This is the complete list of members for CppSpec::Matchers::Equal< A, E >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
_name (defined in CppSpec::Pretty)CppSpec::Pretty
actual_inspected() (defined in CppSpec::Matchers::Equal< A, E >)CppSpec::Matchers::Equal< A, E >protected
description()CppSpec::Matchers::MatcherBase< A, E >virtual
diffable() (defined in CppSpec::Matchers::Equal< A, E >)CppSpec::Matchers::Equal< A, E >
Equal(Expectation< A > &expectation, E expected) (defined in CppSpec::Matchers::Equal< A, E >)CppSpec::Matchers::Equal< A, E >inline
expected_is_a_literal() (defined in CppSpec::Matchers::Equal< A, E >)CppSpec::Matchers::Equal< A, E >protected
failure_message() overrideCppSpec::Matchers::Equal< A, E >virtual
failure_message_when_negated() overrideCppSpec::Matchers::Equal< A, E >virtual
improve_hash_formatting(const std::string &inspect_string) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
inspect_object(const T &object) (defined in CppSpec::Pretty)CppSpec::Prettystatic
inspect_object(const O &o)CppSpec::Prettyinline
inspect_object(const char *const &o)CppSpec::Prettyinlinestatic
last(const std::string &s, char delim) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
match() override (defined in CppSpec::Matchers::Equal< A, E >)CppSpec::Matchers::Equal< A, E >protectedvirtual
name(const std::string &name) const (defined in CppSpec::Pretty)CppSpec::Prettyinline
name_to_sentence(const std::string &name) const (defined in CppSpec::Pretty)CppSpec::Prettyinline
run()CppSpec::Matchers::MatcherBase< A, E >
set_message(std::string message)CppSpec::Matchers::MatcherBase< A, E >virtual
simple_failure_message() (defined in CppSpec::Matchers::Equal< A, E >)CppSpec::Matchers::Equal< A, E >protected
split_words(const std::string &sym) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
to_sentence(const T &item)CppSpec::Prettyinlinestatic
to_sentence(const std::vector< T > &words)CppSpec::Prettyinlinestatic
to_word(const T &item)CppSpec::Prettyinlinestatic
to_word(const T &item) (defined in CppSpec::Pretty)CppSpec::Prettystatic
to_word(const Matchers::MatcherBase< A, E > &matcher)CppSpec::Prettyinlinestatic
to_word(const bool &item) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
to_word_type(const T &item) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
underscore(const std::string &camel_cased_word) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
verb() override (defined in CppSpec::Matchers::Equal< A, E >)CppSpec::Matchers::Equal< A, E >inlinevirtual
+
+
+ + + + diff --git a/doxygen/classCppSpec_1_1Matchers_1_1Equal.html b/doxygen/classCppSpec_1_1Matchers_1_1Equal.html new file mode 100644 index 0000000..d3e8f19 --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1Equal.html @@ -0,0 +1,377 @@ + + + + + + + +C++Spec: CppSpec::Matchers::Equal< A, E > Class Template Reference + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
CppSpec::Matchers::Equal< A, E > Class Template Reference
+
+
+ +

The equal matcher. + More...

+ +

#include <equal.hpp>

+
+Inheritance diagram for CppSpec::Matchers::Equal< A, E >:
+
+
Inheritance graph
+ + + + + + + +
[legend]
+
+Collaboration diagram for CppSpec::Matchers::Equal< A, E >:
+
+
Collaboration graph
+ + + + + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

Equal (Expectation< A > &expectation, E expected)
std::string verb () override
std::string failure_message () override
 Get message to give on match failure.
std::string failure_message_when_negated () override
 Get message to give on match failure when negated.
+bool diffable ()
Public Member Functions inherited from CppSpec::Matchers::MatcherBase< A, E >
MatcherBase (MatcherBase< A, E > const &copy)=default
virtual std::string description ()
 Get the description of the Matcher.
+constexpr A & actual ()
+E & expected ()
+Expectation< A > & expectation ()
virtual MatcherBase & set_message (std::string message)
 Set a custom failure message.
+std::source_location get_location () const
Result run ()
 Run the Matcher object.
+virtual bool negated_match ()
Public Member Functions inherited from CppSpec::Pretty
+std::string name (const std::string &name) const
+std::string name_to_sentence (const std::string &name) const
template<typename O>
std::string inspect_object (const O &o)
 Generate a string of the class and data of an object.
+ + + + + +

+Protected Member Functions

bool match () override
+bool expected_is_a_literal ()
+std::string actual_inspected ()
+std::string simple_failure_message ()
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

Public Types inherited from CppSpec::Matchers::MatcherBase< A, E >
+using expected_t
Static Public Member Functions inherited from CppSpec::Pretty
+static std::string split_words (const std::string &sym)
+static std::string underscore (const std::string &camel_cased_word)
+static std::string last (const std::string &s, char delim)
+static std::string improve_hash_formatting (const std::string &inspect_string)
template<Util::is_streamable T>
static std::string to_word (const T &item)
 Formats an object as a string when operator<< is available.
+template<typename T>
static std::string to_word (const T &item)
+template<typename T>
static std::string to_word_type (const T &item)
template<typename A, typename E>
static std::string to_word (const Matchers::MatcherBase< A, E > &matcher)
template<class T>
static std::string to_sentence (const T &item)
 Take a single object and format it as a sentance.
template<class T>
static std::string to_sentence (const std::vector< T > &words)
+template<typename T>
static std::string inspect_object (const T &object)
+template<>
std::string to_word (const bool &item)
template<>
std::string inspect_object (const char *const &o)
 Specialization for C-style strings.
Public Attributes inherited from CppSpec::Pretty
+std::string _name
Protected Attributes inherited from CppSpec::Matchers::MatcherBase< A, E >
+E expected_
+Expectation< A > & expectation_
+

Detailed Description

+
template<typename A, typename E>
+class CppSpec::Matchers::Equal< A, E >

The equal matcher.

+
Template Parameters
+ + + +
Athe type of the actual value
Ethe type of the expected value
+
+
+

Member Function Documentation

+ +

◆ failure_message()

+ +
+
+
+template<typename A, typename E>
+ + + + + +
+ + + + + + + +
std::string CppSpec::Matchers::Equal< A, E >::failure_message ()
+
+overridevirtual
+
+ +

Get message to give on match failure.

+
Returns
the message
+ +

Reimplemented from CppSpec::Matchers::MatcherBase< A, E >.

+ +
+
+ +

◆ failure_message_when_negated()

+ +
+
+
+template<typename A, typename E>
+ + + + + +
+ + + + + + + +
std::string CppSpec::Matchers::Equal< A, E >::failure_message_when_negated ()
+
+overridevirtual
+
+ +

Get message to give on match failure when negated.

+
Returns
the message
+ +

Reimplemented from CppSpec::Matchers::MatcherBase< A, E >.

+ +
+
+ +

◆ match()

+ +
+
+
+template<typename A, typename E>
+ + + + + +
+ + + + + + + +
bool CppSpec::Matchers::Equal< A, E >::match ()
+
+overrideprotectedvirtual
+
+
+ +

◆ verb()

+ +
+
+
+template<typename A, typename E>
+ + + + + +
+ + + + + + + +
std::string CppSpec::Matchers::Equal< A, E >::verb ()
+
+inlineoverridevirtual
+
+ +

Reimplemented from CppSpec::Matchers::MatcherBase< A, E >.

+ +
+
+
The documentation for this class was generated from the following file: +
+
+ +
+ + + + diff --git a/doxygen/classCppSpec_1_1Matchers_1_1Equal.js b/doxygen/classCppSpec_1_1Matchers_1_1Equal.js new file mode 100644 index 0000000..ff9c1da --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1Equal.js @@ -0,0 +1,5 @@ +var classCppSpec_1_1Matchers_1_1Equal = +[ + [ "failure_message", "classCppSpec_1_1Matchers_1_1Equal.html#a80ddc4dad17e5115b265c30cee78a9b7", null ], + [ "failure_message_when_negated", "classCppSpec_1_1Matchers_1_1Equal.html#a69de3e052e734081fb7f834af8b292e8", null ] +]; \ No newline at end of file diff --git a/doxygen/classCppSpec_1_1Matchers_1_1Equal__coll__graph.map b/doxygen/classCppSpec_1_1Matchers_1_1Equal__coll__graph.map new file mode 100644 index 0000000..09ab70b --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1Equal__coll__graph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/doxygen/classCppSpec_1_1Matchers_1_1Equal__coll__graph.md5 b/doxygen/classCppSpec_1_1Matchers_1_1Equal__coll__graph.md5 new file mode 100644 index 0000000..2603a0a --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1Equal__coll__graph.md5 @@ -0,0 +1 @@ +383fb0c334a854c4d924b6c487893734 \ No newline at end of file diff --git a/doxygen/classCppSpec_1_1Matchers_1_1Equal__coll__graph.png b/doxygen/classCppSpec_1_1Matchers_1_1Equal__coll__graph.png new file mode 100644 index 0000000..c2cf5aa Binary files /dev/null and b/doxygen/classCppSpec_1_1Matchers_1_1Equal__coll__graph.png differ diff --git a/doxygen/classCppSpec_1_1Matchers_1_1Equal__inherit__graph.map b/doxygen/classCppSpec_1_1Matchers_1_1Equal__inherit__graph.map new file mode 100644 index 0000000..09ab70b --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1Equal__inherit__graph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/doxygen/classCppSpec_1_1Matchers_1_1Equal__inherit__graph.md5 b/doxygen/classCppSpec_1_1Matchers_1_1Equal__inherit__graph.md5 new file mode 100644 index 0000000..2603a0a --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1Equal__inherit__graph.md5 @@ -0,0 +1 @@ +383fb0c334a854c4d924b6c487893734 \ No newline at end of file diff --git a/doxygen/classCppSpec_1_1Matchers_1_1Equal__inherit__graph.png b/doxygen/classCppSpec_1_1Matchers_1_1Equal__inherit__graph.png new file mode 100644 index 0000000..c2cf5aa Binary files /dev/null and b/doxygen/classCppSpec_1_1Matchers_1_1Equal__inherit__graph.png differ diff --git a/doxygen/classCppSpec_1_1Matchers_1_1Fail-members.html b/doxygen/classCppSpec_1_1Matchers_1_1Fail-members.html new file mode 100644 index 0000000..4d78d0e --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1Fail-members.html @@ -0,0 +1,134 @@ + + + + + + + +C++Spec: Member List + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
CppSpec::Matchers::Fail< A > Member List
+
+
+ +

This is the complete list of members for CppSpec::Matchers::Fail< A >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
_name (defined in CppSpec::Pretty)CppSpec::Pretty
description()CppSpec::Matchers::MatcherBase< A, void * >virtual
Fail(Expectation< A > &expectation) (defined in CppSpec::Matchers::Fail< A >)CppSpec::Matchers::Fail< A >inlineexplicit
failure_message()CppSpec::Matchers::MatcherBase< A, void * >virtual
failure_message_when_negated()CppSpec::Matchers::MatcherBase< A, void * >virtual
improve_hash_formatting(const std::string &inspect_string) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
inspect_object(const T &object) (defined in CppSpec::Pretty)CppSpec::Prettystatic
inspect_object(const O &o)CppSpec::Prettyinline
inspect_object(const char *const &o)CppSpec::Prettyinlinestatic
last(const std::string &s, char delim) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
match() override (defined in CppSpec::Matchers::Fail< A >)CppSpec::Matchers::Fail< A >inlinevirtual
name(const std::string &name) const (defined in CppSpec::Pretty)CppSpec::Prettyinline
name_to_sentence(const std::string &name) const (defined in CppSpec::Pretty)CppSpec::Prettyinline
run()CppSpec::Matchers::MatcherBase< A, void * >
set_message(std::string message)CppSpec::Matchers::MatcherBase< A, void * >virtual
split_words(const std::string &sym) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
to_sentence(const T &item)CppSpec::Prettyinlinestatic
to_sentence(const std::vector< T > &words)CppSpec::Prettyinlinestatic
to_word(const T &item)CppSpec::Prettyinlinestatic
to_word(const T &item) (defined in CppSpec::Pretty)CppSpec::Prettystatic
to_word(const Matchers::MatcherBase< A, E > &matcher)CppSpec::Prettyinlinestatic
to_word(const bool &item) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
to_word_type(const T &item) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
underscore(const std::string &camel_cased_word) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
verb() override (defined in CppSpec::Matchers::Fail< A >)CppSpec::Matchers::Fail< A >inlinevirtual
+
+
+ + + + diff --git a/doxygen/classCppSpec_1_1Matchers_1_1Fail.html b/doxygen/classCppSpec_1_1Matchers_1_1Fail.html new file mode 100644 index 0000000..a2b4791 --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1Fail.html @@ -0,0 +1,287 @@ + + + + + + + +C++Spec: CppSpec::Matchers::Fail< A > Class Template Reference + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
CppSpec::Matchers::Fail< A > Class Template Reference
+
+
+
+Inheritance diagram for CppSpec::Matchers::Fail< A >:
+
+
Inheritance graph
+ + + + + + + +
[legend]
+
+Collaboration diagram for CppSpec::Matchers::Fail< A >:
+
+
Collaboration graph
+ + + + + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

Fail (Expectation< A > &expectation)
std::string verb () override
bool match () override
Public Member Functions inherited from CppSpec::Matchers::MatcherBase< A, void * >
MatcherBase (MatcherBase< A, void * > const &copy)=default
virtual std::string failure_message ()
 Get message to give on match failure.
virtual std::string failure_message_when_negated ()
 Get message to give on match failure when negated.
virtual std::string description ()
 Get the description of the Matcher.
+constexpr A & actual ()
+void *& expected ()
+Expectation< A > & expectation ()
virtual MatcherBase & set_message (std::string message)
 Set a custom failure message.
+std::source_location get_location () const
Result run ()
 Run the Matcher object.
+virtual bool negated_match ()
Public Member Functions inherited from CppSpec::Pretty
+std::string name (const std::string &name) const
+std::string name_to_sentence (const std::string &name) const
template<typename O>
std::string inspect_object (const O &o)
 Generate a string of the class and data of an object.
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

Public Types inherited from CppSpec::Matchers::MatcherBase< A, void * >
+using expected_t
Static Public Member Functions inherited from CppSpec::Pretty
+static std::string split_words (const std::string &sym)
+static std::string underscore (const std::string &camel_cased_word)
+static std::string last (const std::string &s, char delim)
+static std::string improve_hash_formatting (const std::string &inspect_string)
template<Util::is_streamable T>
static std::string to_word (const T &item)
 Formats an object as a string when operator<< is available.
+template<typename T>
static std::string to_word (const T &item)
+template<typename T>
static std::string to_word_type (const T &item)
template<typename A, typename E>
static std::string to_word (const Matchers::MatcherBase< A, E > &matcher)
template<class T>
static std::string to_sentence (const T &item)
 Take a single object and format it as a sentance.
template<class T>
static std::string to_sentence (const std::vector< T > &words)
+template<typename T>
static std::string inspect_object (const T &object)
+template<>
std::string to_word (const bool &item)
template<>
std::string inspect_object (const char *const &o)
 Specialization for C-style strings.
Public Attributes inherited from CppSpec::Pretty
+std::string _name
Protected Attributes inherited from CppSpec::Matchers::MatcherBase< A, void * >
+void * expected_
+Expectation< A > & expectation_
+

Member Function Documentation

+ +

◆ match()

+ +
+
+
+template<typename A>
+ + + + + +
+ + + + + + + +
bool CppSpec::Matchers::Fail< A >::match ()
+
+inlineoverridevirtual
+
+
+ +

◆ verb()

+ +
+
+
+template<typename A>
+ + + + + +
+ + + + + + + +
std::string CppSpec::Matchers::Fail< A >::verb ()
+
+inlineoverridevirtual
+
+
+
The documentation for this class was generated from the following file: +
+
+ +
+ + + + diff --git a/doxygen/classCppSpec_1_1Matchers_1_1FailWith-members.html b/doxygen/classCppSpec_1_1Matchers_1_1FailWith-members.html new file mode 100644 index 0000000..e415b47 --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1FailWith-members.html @@ -0,0 +1,134 @@ + + + + + + + +C++Spec: Member List + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
CppSpec::Matchers::FailWith< A > Member List
+
+
+ +

This is the complete list of members for CppSpec::Matchers::FailWith< A >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
_name (defined in CppSpec::Pretty)CppSpec::Pretty
description() overrideCppSpec::Matchers::FailWith< A >inlinevirtual
failure_message()CppSpec::Matchers::MatcherBase< A, std::string >virtual
failure_message_when_negated()CppSpec::Matchers::MatcherBase< A, std::string >virtual
FailWith(Expectation< A > &expectation, std::string expected) (defined in CppSpec::Matchers::FailWith< A >)CppSpec::Matchers::FailWith< A >inline
improve_hash_formatting(const std::string &inspect_string) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
inspect_object(const T &object) (defined in CppSpec::Pretty)CppSpec::Prettystatic
inspect_object(const O &o)CppSpec::Prettyinline
inspect_object(const char *const &o)CppSpec::Prettyinlinestatic
last(const std::string &s, char delim) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
match() override (defined in CppSpec::Matchers::FailWith< A >)CppSpec::Matchers::FailWith< A >inlinevirtual
name(const std::string &name) const (defined in CppSpec::Pretty)CppSpec::Prettyinline
name_to_sentence(const std::string &name) const (defined in CppSpec::Pretty)CppSpec::Prettyinline
run()CppSpec::Matchers::MatcherBase< A, std::string >
set_message(std::string message)CppSpec::Matchers::MatcherBase< A, std::string >virtual
split_words(const std::string &sym) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
to_sentence(const T &item)CppSpec::Prettyinlinestatic
to_sentence(const std::vector< T > &words)CppSpec::Prettyinlinestatic
to_word(const T &item)CppSpec::Prettyinlinestatic
to_word(const T &item) (defined in CppSpec::Pretty)CppSpec::Prettystatic
to_word(const Matchers::MatcherBase< A, E > &matcher)CppSpec::Prettyinlinestatic
to_word(const bool &item) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
to_word_type(const T &item) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
underscore(const std::string &camel_cased_word) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
verb() override (defined in CppSpec::Matchers::FailWith< A >)CppSpec::Matchers::FailWith< A >inlinevirtual
+
+
+ + + + diff --git a/doxygen/classCppSpec_1_1Matchers_1_1FailWith.html b/doxygen/classCppSpec_1_1Matchers_1_1FailWith.html new file mode 100644 index 0000000..8d0c371 --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1FailWith.html @@ -0,0 +1,319 @@ + + + + + + + +C++Spec: CppSpec::Matchers::FailWith< A > Class Template Reference + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
CppSpec::Matchers::FailWith< A > Class Template Reference
+
+
+
+Inheritance diagram for CppSpec::Matchers::FailWith< A >:
+
+
Inheritance graph
+ + + + + + + +
[legend]
+
+Collaboration diagram for CppSpec::Matchers::FailWith< A >:
+
+
Collaboration graph
+ + + + + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

FailWith (Expectation< A > &expectation, std::string expected)
std::string verb () override
std::string description () override
 Get the description of the Matcher.
bool match () override
Public Member Functions inherited from CppSpec::Matchers::MatcherBase< A, std::string >
MatcherBase (MatcherBase< A, std::string > const &copy)=default
virtual std::string failure_message ()
 Get message to give on match failure.
virtual std::string failure_message_when_negated ()
 Get message to give on match failure when negated.
+constexpr A & actual ()
+std::string & expected ()
+Expectation< A > & expectation ()
virtual MatcherBase & set_message (std::string message)
 Set a custom failure message.
+std::source_location get_location () const
Result run ()
 Run the Matcher object.
+virtual bool negated_match ()
Public Member Functions inherited from CppSpec::Pretty
+std::string name (const std::string &name) const
+std::string name_to_sentence (const std::string &name) const
template<typename O>
std::string inspect_object (const O &o)
 Generate a string of the class and data of an object.
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

Public Types inherited from CppSpec::Matchers::MatcherBase< A, std::string >
+using expected_t
Static Public Member Functions inherited from CppSpec::Pretty
+static std::string split_words (const std::string &sym)
+static std::string underscore (const std::string &camel_cased_word)
+static std::string last (const std::string &s, char delim)
+static std::string improve_hash_formatting (const std::string &inspect_string)
template<Util::is_streamable T>
static std::string to_word (const T &item)
 Formats an object as a string when operator<< is available.
+template<typename T>
static std::string to_word (const T &item)
+template<typename T>
static std::string to_word_type (const T &item)
template<typename A, typename E>
static std::string to_word (const Matchers::MatcherBase< A, E > &matcher)
template<class T>
static std::string to_sentence (const T &item)
 Take a single object and format it as a sentance.
template<class T>
static std::string to_sentence (const std::vector< T > &words)
+template<typename T>
static std::string inspect_object (const T &object)
+template<>
std::string to_word (const bool &item)
template<>
std::string inspect_object (const char *const &o)
 Specialization for C-style strings.
Public Attributes inherited from CppSpec::Pretty
+std::string _name
Protected Attributes inherited from CppSpec::Matchers::MatcherBase< A, std::string >
+std::string expected_
+Expectation< A > & expectation_
+

Member Function Documentation

+ +

◆ description()

+ +
+
+
+template<typename A>
+ + + + + +
+ + + + + + + +
std::string CppSpec::Matchers::FailWith< A >::description ()
+
+inlineoverridevirtual
+
+ +

Get the description of the Matcher.

+
Returns
the description
+ +

Reimplemented from CppSpec::Matchers::MatcherBase< A, std::string >.

+ +
+
+ +

◆ match()

+ +
+
+
+template<typename A>
+ + + + + +
+ + + + + + + +
bool CppSpec::Matchers::FailWith< A >::match ()
+
+inlineoverridevirtual
+
+
+ +

◆ verb()

+ +
+
+
+template<typename A>
+ + + + + +
+ + + + + + + +
std::string CppSpec::Matchers::FailWith< A >::verb ()
+
+inlineoverridevirtual
+
+
+
The documentation for this class was generated from the following file: +
+
+ +
+ + + + diff --git a/doxygen/classCppSpec_1_1Matchers_1_1FailWith.js b/doxygen/classCppSpec_1_1Matchers_1_1FailWith.js new file mode 100644 index 0000000..b665e56 --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1FailWith.js @@ -0,0 +1,4 @@ +var classCppSpec_1_1Matchers_1_1FailWith = +[ + [ "description", "classCppSpec_1_1Matchers_1_1FailWith.html#a5e51dca4f13b364b6bf934bc08582973", null ] +]; \ No newline at end of file diff --git a/doxygen/classCppSpec_1_1Matchers_1_1FailWith__coll__graph.map b/doxygen/classCppSpec_1_1Matchers_1_1FailWith__coll__graph.map new file mode 100644 index 0000000..5f3dd87 --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1FailWith__coll__graph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/doxygen/classCppSpec_1_1Matchers_1_1FailWith__coll__graph.md5 b/doxygen/classCppSpec_1_1Matchers_1_1FailWith__coll__graph.md5 new file mode 100644 index 0000000..45f8776 --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1FailWith__coll__graph.md5 @@ -0,0 +1 @@ +e09d219beeebe940b10ea88e67feb1fa \ No newline at end of file diff --git a/doxygen/classCppSpec_1_1Matchers_1_1FailWith__coll__graph.png b/doxygen/classCppSpec_1_1Matchers_1_1FailWith__coll__graph.png new file mode 100644 index 0000000..7e7b6a8 Binary files /dev/null and b/doxygen/classCppSpec_1_1Matchers_1_1FailWith__coll__graph.png differ diff --git a/doxygen/classCppSpec_1_1Matchers_1_1FailWith__inherit__graph.map b/doxygen/classCppSpec_1_1Matchers_1_1FailWith__inherit__graph.map new file mode 100644 index 0000000..5f3dd87 --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1FailWith__inherit__graph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/doxygen/classCppSpec_1_1Matchers_1_1FailWith__inherit__graph.md5 b/doxygen/classCppSpec_1_1Matchers_1_1FailWith__inherit__graph.md5 new file mode 100644 index 0000000..45f8776 --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1FailWith__inherit__graph.md5 @@ -0,0 +1 @@ +e09d219beeebe940b10ea88e67feb1fa \ No newline at end of file diff --git a/doxygen/classCppSpec_1_1Matchers_1_1FailWith__inherit__graph.png b/doxygen/classCppSpec_1_1Matchers_1_1FailWith__inherit__graph.png new file mode 100644 index 0000000..7e7b6a8 Binary files /dev/null and b/doxygen/classCppSpec_1_1Matchers_1_1FailWith__inherit__graph.png differ diff --git a/doxygen/classCppSpec_1_1Matchers_1_1Fail__coll__graph.map b/doxygen/classCppSpec_1_1Matchers_1_1Fail__coll__graph.map new file mode 100644 index 0000000..6346425 --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1Fail__coll__graph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/doxygen/classCppSpec_1_1Matchers_1_1Fail__coll__graph.md5 b/doxygen/classCppSpec_1_1Matchers_1_1Fail__coll__graph.md5 new file mode 100644 index 0000000..a497064 --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1Fail__coll__graph.md5 @@ -0,0 +1 @@ +1ba57b9cbd11f65464b843f696b19023 \ No newline at end of file diff --git a/doxygen/classCppSpec_1_1Matchers_1_1Fail__coll__graph.png b/doxygen/classCppSpec_1_1Matchers_1_1Fail__coll__graph.png new file mode 100644 index 0000000..a820302 Binary files /dev/null and b/doxygen/classCppSpec_1_1Matchers_1_1Fail__coll__graph.png differ diff --git a/doxygen/classCppSpec_1_1Matchers_1_1Fail__inherit__graph.map b/doxygen/classCppSpec_1_1Matchers_1_1Fail__inherit__graph.map new file mode 100644 index 0000000..6346425 --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1Fail__inherit__graph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/doxygen/classCppSpec_1_1Matchers_1_1Fail__inherit__graph.md5 b/doxygen/classCppSpec_1_1Matchers_1_1Fail__inherit__graph.md5 new file mode 100644 index 0000000..a497064 --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1Fail__inherit__graph.md5 @@ -0,0 +1 @@ +1ba57b9cbd11f65464b843f696b19023 \ No newline at end of file diff --git a/doxygen/classCppSpec_1_1Matchers_1_1Fail__inherit__graph.png b/doxygen/classCppSpec_1_1Matchers_1_1Fail__inherit__graph.png new file mode 100644 index 0000000..a820302 Binary files /dev/null and b/doxygen/classCppSpec_1_1Matchers_1_1Fail__inherit__graph.png differ diff --git a/doxygen/classCppSpec_1_1Matchers_1_1HaveError-members.html b/doxygen/classCppSpec_1_1Matchers_1_1HaveError-members.html new file mode 100644 index 0000000..841da85 --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1HaveError-members.html @@ -0,0 +1,134 @@ + + + + + + + +C++Spec: Member List + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
CppSpec::Matchers::HaveError< T > Member List
+
+
+ +

This is the complete list of members for CppSpec::Matchers::HaveError< T >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
_name (defined in CppSpec::Pretty)CppSpec::Pretty
description() overrideCppSpec::Matchers::HaveError< T >inlinevirtual
failure_message()CppSpec::Matchers::MatcherBase< T, void * >virtual
failure_message_when_negated()CppSpec::Matchers::MatcherBase< T, void * >virtual
HaveError(Expectation< T > &expectation) (defined in CppSpec::Matchers::HaveError< T >)CppSpec::Matchers::HaveError< T >inline
improve_hash_formatting(const std::string &inspect_string) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
inspect_object(const T &object) (defined in CppSpec::Pretty)CppSpec::Prettystatic
inspect_object(const O &o)CppSpec::Prettyinline
inspect_object(const char *const &o)CppSpec::Prettyinlinestatic
last(const std::string &s, char delim) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
match() override (defined in CppSpec::Matchers::HaveError< T >)CppSpec::Matchers::HaveError< T >inlinevirtual
name(const std::string &name) const (defined in CppSpec::Pretty)CppSpec::Prettyinline
name_to_sentence(const std::string &name) const (defined in CppSpec::Pretty)CppSpec::Prettyinline
run()CppSpec::Matchers::MatcherBase< T, void * >
set_message(std::string message)CppSpec::Matchers::MatcherBase< T, void * >virtual
split_words(const std::string &sym) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
to_sentence(const T &item)CppSpec::Prettyinlinestatic
to_sentence(const std::vector< T > &words)CppSpec::Prettyinlinestatic
to_word(const T &item)CppSpec::Prettyinlinestatic
to_word(const T &item) (defined in CppSpec::Pretty)CppSpec::Prettystatic
to_word(const Matchers::MatcherBase< A, E > &matcher)CppSpec::Prettyinlinestatic
to_word(const bool &item) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
to_word_type(const T &item) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
underscore(const std::string &camel_cased_word) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
verb() override (defined in CppSpec::Matchers::HaveError< T >)CppSpec::Matchers::HaveError< T >inlinevirtual
+
+
+ + + + diff --git a/doxygen/classCppSpec_1_1Matchers_1_1HaveError.html b/doxygen/classCppSpec_1_1Matchers_1_1HaveError.html new file mode 100644 index 0000000..ec95ecc --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1HaveError.html @@ -0,0 +1,321 @@ + + + + + + + +C++Spec: CppSpec::Matchers::HaveError< T > Class Template Reference + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
CppSpec::Matchers::HaveError< T > Class Template Reference
+
+
+
+Inheritance diagram for CppSpec::Matchers::HaveError< T >:
+
+
Inheritance graph
+ + + + + + + +
[legend]
+
+Collaboration diagram for CppSpec::Matchers::HaveError< T >:
+
+
Collaboration graph
+ + + + + + + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

HaveError (Expectation< T > &expectation)
std::string verb () override
std::string description () override
 Get the description of the Matcher.
bool match () override
Public Member Functions inherited from CppSpec::Matchers::MatcherBase< T, void * >
MatcherBase (MatcherBase< T, void * > const &copy)=default
virtual std::string failure_message ()
 Get message to give on match failure.
virtual std::string failure_message_when_negated ()
 Get message to give on match failure when negated.
+constexpr T & actual ()
+void *& expected ()
+Expectation< T > & expectation ()
virtual MatcherBase & set_message (std::string message)
 Set a custom failure message.
+std::source_location get_location () const
Result run ()
 Run the Matcher object.
+virtual bool negated_match ()
Public Member Functions inherited from CppSpec::Pretty
+std::string name (const std::string &name) const
+std::string name_to_sentence (const std::string &name) const
template<typename O>
std::string inspect_object (const O &o)
 Generate a string of the class and data of an object.
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

Public Types inherited from CppSpec::Matchers::MatcherBase< T, void * >
+using expected_t
Static Public Member Functions inherited from CppSpec::Pretty
+static std::string split_words (const std::string &sym)
+static std::string underscore (const std::string &camel_cased_word)
+static std::string last (const std::string &s, char delim)
+static std::string improve_hash_formatting (const std::string &inspect_string)
template<Util::is_streamable T>
static std::string to_word (const T &item)
 Formats an object as a string when operator<< is available.
+template<typename T>
static std::string to_word (const T &item)
+template<typename T>
static std::string to_word_type (const T &item)
template<typename A, typename E>
static std::string to_word (const Matchers::MatcherBase< A, E > &matcher)
template<class T>
static std::string to_sentence (const T &item)
 Take a single object and format it as a sentance.
template<class T>
static std::string to_sentence (const std::vector< T > &words)
+template<typename T>
static std::string inspect_object (const T &object)
+template<>
std::string to_word (const bool &item)
template<>
std::string inspect_object (const char *const &o)
 Specialization for C-style strings.
Public Attributes inherited from CppSpec::Pretty
+std::string _name
Protected Attributes inherited from CppSpec::Matchers::MatcherBase< T, void * >
+void * expected_
+Expectation< T > & expectation_
+

Member Function Documentation

+ +

◆ description()

+ +
+
+
+template<expected T>
+ + + + + +
+ + + + + + + +
std::string CppSpec::Matchers::HaveError< T >::description ()
+
+inlineoverridevirtual
+
+ +

Get the description of the Matcher.

+
Returns
the description
+ +

Reimplemented from CppSpec::Matchers::MatcherBase< T, void * >.

+ +
+
+ +

◆ match()

+ +
+
+
+template<expected T>
+ + + + + +
+ + + + + + + +
bool CppSpec::Matchers::HaveError< T >::match ()
+
+inlineoverridevirtual
+
+
+ +

◆ verb()

+ +
+
+
+template<expected T>
+ + + + + +
+ + + + + + + +
std::string CppSpec::Matchers::HaveError< T >::verb ()
+
+inlineoverridevirtual
+
+
+
The documentation for this class was generated from the following file: +
+
+ +
+ + + + diff --git a/doxygen/classCppSpec_1_1Matchers_1_1HaveError.js b/doxygen/classCppSpec_1_1Matchers_1_1HaveError.js new file mode 100644 index 0000000..19d6e99 --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1HaveError.js @@ -0,0 +1,4 @@ +var classCppSpec_1_1Matchers_1_1HaveError = +[ + [ "description", "classCppSpec_1_1Matchers_1_1HaveError.html#aa512a4b62291bf03dd71123c410ab0c2", null ] +]; \ No newline at end of file diff --git a/doxygen/classCppSpec_1_1Matchers_1_1HaveErrorEqualTo-members.html b/doxygen/classCppSpec_1_1Matchers_1_1HaveErrorEqualTo-members.html new file mode 100644 index 0000000..771afbd --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1HaveErrorEqualTo-members.html @@ -0,0 +1,133 @@ + + + + + + + +C++Spec: Member List + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
CppSpec::Matchers::HaveErrorEqualTo< T, E > Member List
+
+
+ +

This is the complete list of members for CppSpec::Matchers::HaveErrorEqualTo< T, E >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + +
_name (defined in CppSpec::Pretty)CppSpec::Pretty
description()CppSpec::Matchers::MatcherBase< T, E >virtual
failure_message()CppSpec::Matchers::MatcherBase< T, E >virtual
failure_message_when_negated()CppSpec::Matchers::MatcherBase< T, E >virtual
HaveErrorEqualTo(Expectation< T > &expectation, E expected) (defined in CppSpec::Matchers::HaveErrorEqualTo< T, E >)CppSpec::Matchers::HaveErrorEqualTo< T, E >inline
improve_hash_formatting(const std::string &inspect_string) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
inspect_object(const T &object) (defined in CppSpec::Pretty)CppSpec::Prettystatic
inspect_object(const O &o)CppSpec::Prettyinline
inspect_object(const char *const &o)CppSpec::Prettyinlinestatic
last(const std::string &s, char delim) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
match() (defined in CppSpec::Matchers::HaveErrorEqualTo< T, E >)CppSpec::Matchers::HaveErrorEqualTo< T, E >inlinevirtual
name(const std::string &name) const (defined in CppSpec::Pretty)CppSpec::Prettyinline
name_to_sentence(const std::string &name) const (defined in CppSpec::Pretty)CppSpec::Prettyinline
run()CppSpec::Matchers::MatcherBase< T, E >
set_message(std::string message)CppSpec::Matchers::MatcherBase< T, E >virtual
split_words(const std::string &sym) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
to_sentence(const T &item)CppSpec::Prettyinlinestatic
to_sentence(const std::vector< T > &words)CppSpec::Prettyinlinestatic
to_word(const T &item)CppSpec::Prettyinlinestatic
to_word(const T &item) (defined in CppSpec::Pretty)CppSpec::Prettystatic
to_word(const Matchers::MatcherBase< A, E > &matcher)CppSpec::Prettyinlinestatic
to_word(const bool &item) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
to_word_type(const T &item) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
underscore(const std::string &camel_cased_word) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
+
+
+ + + + diff --git a/doxygen/classCppSpec_1_1Matchers_1_1HaveErrorEqualTo.html b/doxygen/classCppSpec_1_1Matchers_1_1HaveErrorEqualTo.html new file mode 100644 index 0000000..b84eb0b --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1HaveErrorEqualTo.html @@ -0,0 +1,261 @@ + + + + + + + +C++Spec: CppSpec::Matchers::HaveErrorEqualTo< T, E > Class Template Reference + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
CppSpec::Matchers::HaveErrorEqualTo< T, E > Class Template Reference
+
+
+
+Inheritance diagram for CppSpec::Matchers::HaveErrorEqualTo< T, E >:
+
+
Inheritance graph
+ + + + + + + +
[legend]
+
+Collaboration diagram for CppSpec::Matchers::HaveErrorEqualTo< T, E >:
+
+
Collaboration graph
+ + + + + + + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

HaveErrorEqualTo (Expectation< T > &expectation, E expected)
bool match ()
Public Member Functions inherited from CppSpec::Matchers::MatcherBase< T, E >
MatcherBase (MatcherBase< T, E > const &copy)=default
virtual std::string failure_message ()
 Get message to give on match failure.
virtual std::string failure_message_when_negated ()
 Get message to give on match failure when negated.
virtual std::string description ()
 Get the description of the Matcher.
+virtual std::string verb ()
+constexpr T & actual ()
+E & expected ()
+Expectation< T > & expectation ()
virtual MatcherBase & set_message (std::string message)
 Set a custom failure message.
+std::source_location get_location () const
Result run ()
 Run the Matcher object.
+virtual bool negated_match ()
Public Member Functions inherited from CppSpec::Pretty
+std::string name (const std::string &name) const
+std::string name_to_sentence (const std::string &name) const
template<typename O>
std::string inspect_object (const O &o)
 Generate a string of the class and data of an object.
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

Public Types inherited from CppSpec::Matchers::MatcherBase< T, E >
+using expected_t
Static Public Member Functions inherited from CppSpec::Pretty
+static std::string split_words (const std::string &sym)
+static std::string underscore (const std::string &camel_cased_word)
+static std::string last (const std::string &s, char delim)
+static std::string improve_hash_formatting (const std::string &inspect_string)
template<Util::is_streamable T>
static std::string to_word (const T &item)
 Formats an object as a string when operator<< is available.
+template<typename T>
static std::string to_word (const T &item)
+template<typename T>
static std::string to_word_type (const T &item)
template<typename A, typename E>
static std::string to_word (const Matchers::MatcherBase< A, E > &matcher)
template<class T>
static std::string to_sentence (const T &item)
 Take a single object and format it as a sentance.
template<class T>
static std::string to_sentence (const std::vector< T > &words)
+template<typename T>
static std::string inspect_object (const T &object)
+template<>
std::string to_word (const bool &item)
template<>
std::string inspect_object (const char *const &o)
 Specialization for C-style strings.
Public Attributes inherited from CppSpec::Pretty
+std::string _name
Protected Attributes inherited from CppSpec::Matchers::MatcherBase< T, E >
+E expected_
+Expectation< T > & expectation_
+

Member Function Documentation

+ +

◆ match()

+ +
+
+
+template<expected T, typename E>
+ + + + + +
+ + + + + + + +
bool CppSpec::Matchers::HaveErrorEqualTo< T, E >::match ()
+
+inlinevirtual
+
+
+
The documentation for this class was generated from the following file: +
+
+ +
+ + + + diff --git a/doxygen/classCppSpec_1_1Matchers_1_1HaveErrorEqualTo__coll__graph.map b/doxygen/classCppSpec_1_1Matchers_1_1HaveErrorEqualTo__coll__graph.map new file mode 100644 index 0000000..b2191c3 --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1HaveErrorEqualTo__coll__graph.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/doxygen/classCppSpec_1_1Matchers_1_1HaveErrorEqualTo__coll__graph.md5 b/doxygen/classCppSpec_1_1Matchers_1_1HaveErrorEqualTo__coll__graph.md5 new file mode 100644 index 0000000..bef48d1 --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1HaveErrorEqualTo__coll__graph.md5 @@ -0,0 +1 @@ +65de6d122bd334ee65eabb76a48bc218 \ No newline at end of file diff --git a/doxygen/classCppSpec_1_1Matchers_1_1HaveErrorEqualTo__coll__graph.png b/doxygen/classCppSpec_1_1Matchers_1_1HaveErrorEqualTo__coll__graph.png new file mode 100644 index 0000000..5c612e0 Binary files /dev/null and b/doxygen/classCppSpec_1_1Matchers_1_1HaveErrorEqualTo__coll__graph.png differ diff --git a/doxygen/classCppSpec_1_1Matchers_1_1HaveErrorEqualTo__inherit__graph.map b/doxygen/classCppSpec_1_1Matchers_1_1HaveErrorEqualTo__inherit__graph.map new file mode 100644 index 0000000..5f6a6ec --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1HaveErrorEqualTo__inherit__graph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/doxygen/classCppSpec_1_1Matchers_1_1HaveErrorEqualTo__inherit__graph.md5 b/doxygen/classCppSpec_1_1Matchers_1_1HaveErrorEqualTo__inherit__graph.md5 new file mode 100644 index 0000000..9fc4a34 --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1HaveErrorEqualTo__inherit__graph.md5 @@ -0,0 +1 @@ +d47e0a2b827556aaea9fd9a8759cc434 \ No newline at end of file diff --git a/doxygen/classCppSpec_1_1Matchers_1_1HaveErrorEqualTo__inherit__graph.png b/doxygen/classCppSpec_1_1Matchers_1_1HaveErrorEqualTo__inherit__graph.png new file mode 100644 index 0000000..c757e83 Binary files /dev/null and b/doxygen/classCppSpec_1_1Matchers_1_1HaveErrorEqualTo__inherit__graph.png differ diff --git a/doxygen/classCppSpec_1_1Matchers_1_1HaveError__coll__graph.map b/doxygen/classCppSpec_1_1Matchers_1_1HaveError__coll__graph.map new file mode 100644 index 0000000..f1d65c1 --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1HaveError__coll__graph.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/doxygen/classCppSpec_1_1Matchers_1_1HaveError__coll__graph.md5 b/doxygen/classCppSpec_1_1Matchers_1_1HaveError__coll__graph.md5 new file mode 100644 index 0000000..d2ebfb2 --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1HaveError__coll__graph.md5 @@ -0,0 +1 @@ +d7904df6a8318ea852b6a74e506c8711 \ No newline at end of file diff --git a/doxygen/classCppSpec_1_1Matchers_1_1HaveError__coll__graph.png b/doxygen/classCppSpec_1_1Matchers_1_1HaveError__coll__graph.png new file mode 100644 index 0000000..a9a3662 Binary files /dev/null and b/doxygen/classCppSpec_1_1Matchers_1_1HaveError__coll__graph.png differ diff --git a/doxygen/classCppSpec_1_1Matchers_1_1HaveError__inherit__graph.map b/doxygen/classCppSpec_1_1Matchers_1_1HaveError__inherit__graph.map new file mode 100644 index 0000000..cf47079 --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1HaveError__inherit__graph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/doxygen/classCppSpec_1_1Matchers_1_1HaveError__inherit__graph.md5 b/doxygen/classCppSpec_1_1Matchers_1_1HaveError__inherit__graph.md5 new file mode 100644 index 0000000..276215c --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1HaveError__inherit__graph.md5 @@ -0,0 +1 @@ +46d6df68cee03b8e0426433ca1252023 \ No newline at end of file diff --git a/doxygen/classCppSpec_1_1Matchers_1_1HaveError__inherit__graph.png b/doxygen/classCppSpec_1_1Matchers_1_1HaveError__inherit__graph.png new file mode 100644 index 0000000..508b642 Binary files /dev/null and b/doxygen/classCppSpec_1_1Matchers_1_1HaveError__inherit__graph.png differ diff --git a/doxygen/classCppSpec_1_1Matchers_1_1HaveValue-members.html b/doxygen/classCppSpec_1_1Matchers_1_1HaveValue-members.html new file mode 100644 index 0000000..f3ee6a6 --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1HaveValue-members.html @@ -0,0 +1,134 @@ + + + + + + + +C++Spec: Member List + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
CppSpec::Matchers::HaveValue< T > Member List
+
+
+ +

This is the complete list of members for CppSpec::Matchers::HaveValue< T >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
_name (defined in CppSpec::Pretty)CppSpec::Pretty
description() overrideCppSpec::Matchers::HaveValue< T >inlinevirtual
failure_message()CppSpec::Matchers::MatcherBase< T, void * >virtual
failure_message_when_negated()CppSpec::Matchers::MatcherBase< T, void * >virtual
HaveValue(Expectation< T > &expectation) (defined in CppSpec::Matchers::HaveValue< T >)CppSpec::Matchers::HaveValue< T >inline
improve_hash_formatting(const std::string &inspect_string) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
inspect_object(const T &object) (defined in CppSpec::Pretty)CppSpec::Prettystatic
inspect_object(const O &o)CppSpec::Prettyinline
inspect_object(const char *const &o)CppSpec::Prettyinlinestatic
last(const std::string &s, char delim) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
match() override (defined in CppSpec::Matchers::HaveValue< T >)CppSpec::Matchers::HaveValue< T >inlinevirtual
name(const std::string &name) const (defined in CppSpec::Pretty)CppSpec::Prettyinline
name_to_sentence(const std::string &name) const (defined in CppSpec::Pretty)CppSpec::Prettyinline
run()CppSpec::Matchers::MatcherBase< T, void * >
set_message(std::string message)CppSpec::Matchers::MatcherBase< T, void * >virtual
split_words(const std::string &sym) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
to_sentence(const T &item)CppSpec::Prettyinlinestatic
to_sentence(const std::vector< T > &words)CppSpec::Prettyinlinestatic
to_word(const T &item)CppSpec::Prettyinlinestatic
to_word(const T &item) (defined in CppSpec::Pretty)CppSpec::Prettystatic
to_word(const Matchers::MatcherBase< A, E > &matcher)CppSpec::Prettyinlinestatic
to_word(const bool &item) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
to_word_type(const T &item) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
underscore(const std::string &camel_cased_word) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
verb() override (defined in CppSpec::Matchers::HaveValue< T >)CppSpec::Matchers::HaveValue< T >inlinevirtual
+
+
+ + + + diff --git a/doxygen/classCppSpec_1_1Matchers_1_1HaveValue.html b/doxygen/classCppSpec_1_1Matchers_1_1HaveValue.html new file mode 100644 index 0000000..25acac2 --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1HaveValue.html @@ -0,0 +1,321 @@ + + + + + + + +C++Spec: CppSpec::Matchers::HaveValue< T > Class Template Reference + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
CppSpec::Matchers::HaveValue< T > Class Template Reference
+
+
+
+Inheritance diagram for CppSpec::Matchers::HaveValue< T >:
+
+
Inheritance graph
+ + + + + + + +
[legend]
+
+Collaboration diagram for CppSpec::Matchers::HaveValue< T >:
+
+
Collaboration graph
+ + + + + + + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

HaveValue (Expectation< T > &expectation)
std::string verb () override
std::string description () override
 Get the description of the Matcher.
bool match () override
Public Member Functions inherited from CppSpec::Matchers::MatcherBase< T, void * >
MatcherBase (MatcherBase< T, void * > const &copy)=default
virtual std::string failure_message ()
 Get message to give on match failure.
virtual std::string failure_message_when_negated ()
 Get message to give on match failure when negated.
+constexpr T & actual ()
+void *& expected ()
+Expectation< T > & expectation ()
virtual MatcherBase & set_message (std::string message)
 Set a custom failure message.
+std::source_location get_location () const
Result run ()
 Run the Matcher object.
+virtual bool negated_match ()
Public Member Functions inherited from CppSpec::Pretty
+std::string name (const std::string &name) const
+std::string name_to_sentence (const std::string &name) const
template<typename O>
std::string inspect_object (const O &o)
 Generate a string of the class and data of an object.
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

Public Types inherited from CppSpec::Matchers::MatcherBase< T, void * >
+using expected_t
Static Public Member Functions inherited from CppSpec::Pretty
+static std::string split_words (const std::string &sym)
+static std::string underscore (const std::string &camel_cased_word)
+static std::string last (const std::string &s, char delim)
+static std::string improve_hash_formatting (const std::string &inspect_string)
template<Util::is_streamable T>
static std::string to_word (const T &item)
 Formats an object as a string when operator<< is available.
+template<typename T>
static std::string to_word (const T &item)
+template<typename T>
static std::string to_word_type (const T &item)
template<typename A, typename E>
static std::string to_word (const Matchers::MatcherBase< A, E > &matcher)
template<class T>
static std::string to_sentence (const T &item)
 Take a single object and format it as a sentance.
template<class T>
static std::string to_sentence (const std::vector< T > &words)
+template<typename T>
static std::string inspect_object (const T &object)
+template<>
std::string to_word (const bool &item)
template<>
std::string inspect_object (const char *const &o)
 Specialization for C-style strings.
Public Attributes inherited from CppSpec::Pretty
+std::string _name
Protected Attributes inherited from CppSpec::Matchers::MatcherBase< T, void * >
+void * expected_
+Expectation< T > & expectation_
+

Member Function Documentation

+ +

◆ description()

+ +
+
+
+template<optional T>
+ + + + + +
+ + + + + + + +
std::string CppSpec::Matchers::HaveValue< T >::description ()
+
+inlineoverridevirtual
+
+ +

Get the description of the Matcher.

+
Returns
the description
+ +

Reimplemented from CppSpec::Matchers::MatcherBase< T, void * >.

+ +
+
+ +

◆ match()

+ +
+
+
+template<optional T>
+ + + + + +
+ + + + + + + +
bool CppSpec::Matchers::HaveValue< T >::match ()
+
+inlineoverridevirtual
+
+
+ +

◆ verb()

+ +
+
+
+template<optional T>
+ + + + + +
+ + + + + + + +
std::string CppSpec::Matchers::HaveValue< T >::verb ()
+
+inlineoverridevirtual
+
+
+
The documentation for this class was generated from the following file: +
+
+ +
+ + + + diff --git a/doxygen/classCppSpec_1_1Matchers_1_1HaveValue.js b/doxygen/classCppSpec_1_1Matchers_1_1HaveValue.js new file mode 100644 index 0000000..2772c89 --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1HaveValue.js @@ -0,0 +1,4 @@ +var classCppSpec_1_1Matchers_1_1HaveValue = +[ + [ "description", "classCppSpec_1_1Matchers_1_1HaveValue.html#a01e1a593a0a7379fd0940f135b6364b2", null ] +]; \ No newline at end of file diff --git a/doxygen/classCppSpec_1_1Matchers_1_1HaveValueEqualTo-members.html b/doxygen/classCppSpec_1_1Matchers_1_1HaveValueEqualTo-members.html new file mode 100644 index 0000000..0dd4d42 --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1HaveValueEqualTo-members.html @@ -0,0 +1,133 @@ + + + + + + + +C++Spec: Member List + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
CppSpec::Matchers::HaveValueEqualTo< T, E > Member List
+
+
+ +

This is the complete list of members for CppSpec::Matchers::HaveValueEqualTo< T, E >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + +
_name (defined in CppSpec::Pretty)CppSpec::Pretty
description()CppSpec::Matchers::MatcherBase< T, E >virtual
failure_message() overrideCppSpec::Matchers::Equal< T, E >virtual
failure_message_when_negated() overrideCppSpec::Matchers::Equal< T, E >virtual
HaveValueEqualTo(Expectation< T > &expectation, E expected) (defined in CppSpec::Matchers::HaveValueEqualTo< T, E >)CppSpec::Matchers::HaveValueEqualTo< T, E >inline
improve_hash_formatting(const std::string &inspect_string) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
inspect_object(const T &object) (defined in CppSpec::Pretty)CppSpec::Prettystatic
inspect_object(const O &o)CppSpec::Prettyinline
inspect_object(const char *const &o)CppSpec::Prettyinlinestatic
last(const std::string &s, char delim) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
match() (defined in CppSpec::Matchers::HaveValueEqualTo< T, E >)CppSpec::Matchers::HaveValueEqualTo< T, E >inlinevirtual
name(const std::string &name) const (defined in CppSpec::Pretty)CppSpec::Prettyinline
name_to_sentence(const std::string &name) const (defined in CppSpec::Pretty)CppSpec::Prettyinline
run()CppSpec::Matchers::MatcherBase< T, E >
set_message(std::string message)CppSpec::Matchers::MatcherBase< T, E >virtual
split_words(const std::string &sym) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
to_sentence(const T &item)CppSpec::Prettyinlinestatic
to_sentence(const std::vector< T > &words)CppSpec::Prettyinlinestatic
to_word(const T &item)CppSpec::Prettyinlinestatic
to_word(const T &item) (defined in CppSpec::Pretty)CppSpec::Prettystatic
to_word(const Matchers::MatcherBase< A, E > &matcher)CppSpec::Prettyinlinestatic
to_word(const bool &item) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
to_word_type(const T &item) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
underscore(const std::string &camel_cased_word) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
+
+
+ + + + diff --git a/doxygen/classCppSpec_1_1Matchers_1_1HaveValueEqualTo.html b/doxygen/classCppSpec_1_1Matchers_1_1HaveValueEqualTo.html new file mode 100644 index 0000000..5f252fa --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1HaveValueEqualTo.html @@ -0,0 +1,276 @@ + + + + + + + +C++Spec: CppSpec::Matchers::HaveValueEqualTo< T, E > Class Template Reference + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
CppSpec::Matchers::HaveValueEqualTo< T, E > Class Template Reference
+
+
+
+Inheritance diagram for CppSpec::Matchers::HaveValueEqualTo< T, E >:
+
+
Inheritance graph
+ + + + + + + + + +
[legend]
+
+Collaboration diagram for CppSpec::Matchers::HaveValueEqualTo< T, E >:
+
+
Collaboration graph
+ + + + + + + + + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

HaveValueEqualTo (Expectation< T > &expectation, E expected)
bool match ()
Public Member Functions inherited from CppSpec::Matchers::Equal< T, E >
Equal (Expectation< T > &expectation, E expected)
std::string verb () override
std::string failure_message () override
 Get message to give on match failure.
std::string failure_message_when_negated () override
 Get message to give on match failure when negated.
+bool diffable ()
Public Member Functions inherited from CppSpec::Matchers::MatcherBase< T, E >
MatcherBase (MatcherBase< T, E > const &copy)=default
virtual std::string description ()
 Get the description of the Matcher.
+constexpr T & actual ()
+E & expected ()
+Expectation< T > & expectation ()
virtual MatcherBase & set_message (std::string message)
 Set a custom failure message.
+std::source_location get_location () const
Result run ()
 Run the Matcher object.
+virtual bool negated_match ()
Public Member Functions inherited from CppSpec::Pretty
+std::string name (const std::string &name) const
+std::string name_to_sentence (const std::string &name) const
template<typename O>
std::string inspect_object (const O &o)
 Generate a string of the class and data of an object.
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

Public Types inherited from CppSpec::Matchers::MatcherBase< T, E >
+using expected_t
Static Public Member Functions inherited from CppSpec::Pretty
+static std::string split_words (const std::string &sym)
+static std::string underscore (const std::string &camel_cased_word)
+static std::string last (const std::string &s, char delim)
+static std::string improve_hash_formatting (const std::string &inspect_string)
template<Util::is_streamable T>
static std::string to_word (const T &item)
 Formats an object as a string when operator<< is available.
+template<typename T>
static std::string to_word (const T &item)
+template<typename T>
static std::string to_word_type (const T &item)
template<typename A, typename E>
static std::string to_word (const Matchers::MatcherBase< A, E > &matcher)
template<class T>
static std::string to_sentence (const T &item)
 Take a single object and format it as a sentance.
template<class T>
static std::string to_sentence (const std::vector< T > &words)
+template<typename T>
static std::string inspect_object (const T &object)
+template<>
std::string to_word (const bool &item)
template<>
std::string inspect_object (const char *const &o)
 Specialization for C-style strings.
Public Attributes inherited from CppSpec::Pretty
+std::string _name
Protected Member Functions inherited from CppSpec::Matchers::Equal< T, E >
+bool expected_is_a_literal ()
+std::string actual_inspected ()
+std::string simple_failure_message ()
Protected Attributes inherited from CppSpec::Matchers::MatcherBase< T, E >
+E expected_
+Expectation< T > & expectation_
+

Member Function Documentation

+ +

◆ match()

+ +
+
+
+template<optional T, typename E>
+ + + + + +
+ + + + + + + +
bool CppSpec::Matchers::HaveValueEqualTo< T, E >::match ()
+
+inlinevirtual
+
+ +

Reimplemented from CppSpec::Matchers::Equal< T, E >.

+ +
+
+
The documentation for this class was generated from the following file: +
+
+ +
+ + + + diff --git a/doxygen/classCppSpec_1_1Matchers_1_1HaveValueEqualTo__coll__graph.map b/doxygen/classCppSpec_1_1Matchers_1_1HaveValueEqualTo__coll__graph.map new file mode 100644 index 0000000..99aba33 --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1HaveValueEqualTo__coll__graph.map @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/doxygen/classCppSpec_1_1Matchers_1_1HaveValueEqualTo__coll__graph.md5 b/doxygen/classCppSpec_1_1Matchers_1_1HaveValueEqualTo__coll__graph.md5 new file mode 100644 index 0000000..48ad530 --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1HaveValueEqualTo__coll__graph.md5 @@ -0,0 +1 @@ +a269097f9d95bc2d9e2c47e8b8ba6e83 \ No newline at end of file diff --git a/doxygen/classCppSpec_1_1Matchers_1_1HaveValueEqualTo__coll__graph.png b/doxygen/classCppSpec_1_1Matchers_1_1HaveValueEqualTo__coll__graph.png new file mode 100644 index 0000000..d1fbe46 Binary files /dev/null and b/doxygen/classCppSpec_1_1Matchers_1_1HaveValueEqualTo__coll__graph.png differ diff --git a/doxygen/classCppSpec_1_1Matchers_1_1HaveValueEqualTo__inherit__graph.map b/doxygen/classCppSpec_1_1Matchers_1_1HaveValueEqualTo__inherit__graph.map new file mode 100644 index 0000000..a8aa0df --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1HaveValueEqualTo__inherit__graph.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/doxygen/classCppSpec_1_1Matchers_1_1HaveValueEqualTo__inherit__graph.md5 b/doxygen/classCppSpec_1_1Matchers_1_1HaveValueEqualTo__inherit__graph.md5 new file mode 100644 index 0000000..0d05ab0 --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1HaveValueEqualTo__inherit__graph.md5 @@ -0,0 +1 @@ +f292de9ded3633e942d8013536ca12fa \ No newline at end of file diff --git a/doxygen/classCppSpec_1_1Matchers_1_1HaveValueEqualTo__inherit__graph.png b/doxygen/classCppSpec_1_1Matchers_1_1HaveValueEqualTo__inherit__graph.png new file mode 100644 index 0000000..26329c7 Binary files /dev/null and b/doxygen/classCppSpec_1_1Matchers_1_1HaveValueEqualTo__inherit__graph.png differ diff --git a/doxygen/classCppSpec_1_1Matchers_1_1HaveValue__coll__graph.map b/doxygen/classCppSpec_1_1Matchers_1_1HaveValue__coll__graph.map new file mode 100644 index 0000000..3b1e588 --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1HaveValue__coll__graph.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/doxygen/classCppSpec_1_1Matchers_1_1HaveValue__coll__graph.md5 b/doxygen/classCppSpec_1_1Matchers_1_1HaveValue__coll__graph.md5 new file mode 100644 index 0000000..de2998a --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1HaveValue__coll__graph.md5 @@ -0,0 +1 @@ +2fcd3427467d9c5f01863e6c50fbb2d9 \ No newline at end of file diff --git a/doxygen/classCppSpec_1_1Matchers_1_1HaveValue__coll__graph.png b/doxygen/classCppSpec_1_1Matchers_1_1HaveValue__coll__graph.png new file mode 100644 index 0000000..5efdd51 Binary files /dev/null and b/doxygen/classCppSpec_1_1Matchers_1_1HaveValue__coll__graph.png differ diff --git a/doxygen/classCppSpec_1_1Matchers_1_1HaveValue__inherit__graph.map b/doxygen/classCppSpec_1_1Matchers_1_1HaveValue__inherit__graph.map new file mode 100644 index 0000000..1baecda --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1HaveValue__inherit__graph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/doxygen/classCppSpec_1_1Matchers_1_1HaveValue__inherit__graph.md5 b/doxygen/classCppSpec_1_1Matchers_1_1HaveValue__inherit__graph.md5 new file mode 100644 index 0000000..f3a5986 --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1HaveValue__inherit__graph.md5 @@ -0,0 +1 @@ +d6302d639d244b65586c10e9d463d95b \ No newline at end of file diff --git a/doxygen/classCppSpec_1_1Matchers_1_1HaveValue__inherit__graph.png b/doxygen/classCppSpec_1_1Matchers_1_1HaveValue__inherit__graph.png new file mode 100644 index 0000000..681e2c3 Binary files /dev/null and b/doxygen/classCppSpec_1_1Matchers_1_1HaveValue__inherit__graph.png differ diff --git a/doxygen/classCppSpec_1_1Matchers_1_1Match-members.html b/doxygen/classCppSpec_1_1Matchers_1_1Match-members.html new file mode 100644 index 0000000..af4410c --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1Match-members.html @@ -0,0 +1,135 @@ + + + + + + + +C++Spec: Member List + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
CppSpec::Matchers::Match< A > Member List
+
+
+ +

This is the complete list of members for CppSpec::Matchers::Match< A >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
_name (defined in CppSpec::Pretty)CppSpec::Pretty
description()CppSpec::Matchers::MatcherBase< A, std::regex >virtual
failure_message()CppSpec::Matchers::MatcherBase< A, std::regex >virtual
failure_message_when_negated()CppSpec::Matchers::MatcherBase< A, std::regex >virtual
improve_hash_formatting(const std::string &inspect_string) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
inspect_object(const T &object) (defined in CppSpec::Pretty)CppSpec::Prettystatic
inspect_object(const O &o)CppSpec::Prettyinline
inspect_object(const char *const &o)CppSpec::Prettyinlinestatic
last(const std::string &s, char delim) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
Match(Expectation< A > &expectation, std::string expected) (defined in CppSpec::Matchers::Match< A >)CppSpec::Matchers::Match< A >inlineexplicit
Match(Expectation< A > &expectation, std::regex expected) (defined in CppSpec::Matchers::Match< A >)CppSpec::Matchers::Match< A >inlineexplicit
match() override (defined in CppSpec::Matchers::Match< A >)CppSpec::Matchers::Match< A >inlinevirtual
name(const std::string &name) const (defined in CppSpec::Pretty)CppSpec::Prettyinline
name_to_sentence(const std::string &name) const (defined in CppSpec::Pretty)CppSpec::Prettyinline
run()CppSpec::Matchers::MatcherBase< A, std::regex >
set_message(std::string message)CppSpec::Matchers::MatcherBase< A, std::regex >virtual
split_words(const std::string &sym) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
to_sentence(const T &item)CppSpec::Prettyinlinestatic
to_sentence(const std::vector< T > &words)CppSpec::Prettyinlinestatic
to_word(const T &item)CppSpec::Prettyinlinestatic
to_word(const T &item) (defined in CppSpec::Pretty)CppSpec::Prettystatic
to_word(const Matchers::MatcherBase< A, E > &matcher)CppSpec::Prettyinlinestatic
to_word(const bool &item) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
to_word_type(const T &item) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
underscore(const std::string &camel_cased_word) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
verb() override (defined in CppSpec::Matchers::Match< A >)CppSpec::Matchers::Match< A >inlinevirtual
+
+
+ + + + diff --git a/doxygen/classCppSpec_1_1Matchers_1_1Match.html b/doxygen/classCppSpec_1_1Matchers_1_1Match.html new file mode 100644 index 0000000..0bb1337 --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1Match.html @@ -0,0 +1,289 @@ + + + + + + + +C++Spec: CppSpec::Matchers::Match< A > Class Template Reference + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
CppSpec::Matchers::Match< A > Class Template Reference
+
+
+
+Inheritance diagram for CppSpec::Matchers::Match< A >:
+
+
Inheritance graph
+ + + + + + + +
[legend]
+
+Collaboration diagram for CppSpec::Matchers::Match< A >:
+
+
Collaboration graph
+ + + + + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

Match (Expectation< A > &expectation, std::string expected)
Match (Expectation< A > &expectation, std::regex expected)
std::string verb () override
bool match () override
Public Member Functions inherited from CppSpec::Matchers::MatcherBase< A, std::regex >
MatcherBase (MatcherBase< A, std::regex > const &copy)=default
virtual std::string failure_message ()
 Get message to give on match failure.
virtual std::string failure_message_when_negated ()
 Get message to give on match failure when negated.
virtual std::string description ()
 Get the description of the Matcher.
+constexpr A & actual ()
+std::regex & expected ()
+Expectation< A > & expectation ()
virtual MatcherBase & set_message (std::string message)
 Set a custom failure message.
+std::source_location get_location () const
Result run ()
 Run the Matcher object.
+virtual bool negated_match ()
Public Member Functions inherited from CppSpec::Pretty
+std::string name (const std::string &name) const
+std::string name_to_sentence (const std::string &name) const
template<typename O>
std::string inspect_object (const O &o)
 Generate a string of the class and data of an object.
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

Public Types inherited from CppSpec::Matchers::MatcherBase< A, std::regex >
+using expected_t
Static Public Member Functions inherited from CppSpec::Pretty
+static std::string split_words (const std::string &sym)
+static std::string underscore (const std::string &camel_cased_word)
+static std::string last (const std::string &s, char delim)
+static std::string improve_hash_formatting (const std::string &inspect_string)
template<Util::is_streamable T>
static std::string to_word (const T &item)
 Formats an object as a string when operator<< is available.
+template<typename T>
static std::string to_word (const T &item)
+template<typename T>
static std::string to_word_type (const T &item)
template<typename A, typename E>
static std::string to_word (const Matchers::MatcherBase< A, E > &matcher)
template<class T>
static std::string to_sentence (const T &item)
 Take a single object and format it as a sentance.
template<class T>
static std::string to_sentence (const std::vector< T > &words)
+template<typename T>
static std::string inspect_object (const T &object)
+template<>
std::string to_word (const bool &item)
template<>
std::string inspect_object (const char *const &o)
 Specialization for C-style strings.
Public Attributes inherited from CppSpec::Pretty
+std::string _name
Protected Attributes inherited from CppSpec::Matchers::MatcherBase< A, std::regex >
+std::regex expected_
+Expectation< A > & expectation_
+

Member Function Documentation

+ +

◆ match()

+ +
+
+
+template<typename A>
+ + + + + +
+ + + + + + + +
bool CppSpec::Matchers::Match< A >::match ()
+
+inlineoverridevirtual
+
+
+ +

◆ verb()

+ +
+
+
+template<typename A>
+ + + + + +
+ + + + + + + +
std::string CppSpec::Matchers::Match< A >::verb ()
+
+inlineoverridevirtual
+
+
+
The documentation for this class was generated from the following file: +
+
+ +
+ + + + diff --git a/doxygen/classCppSpec_1_1Matchers_1_1MatchPartial-members.html b/doxygen/classCppSpec_1_1Matchers_1_1MatchPartial-members.html new file mode 100644 index 0000000..be9dabd --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1MatchPartial-members.html @@ -0,0 +1,134 @@ + + + + + + + +C++Spec: Member List + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
CppSpec::Matchers::MatchPartial< A > Member List
+
+
+ +

This is the complete list of members for CppSpec::Matchers::MatchPartial< A >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
_name (defined in CppSpec::Pretty)CppSpec::Pretty
description() overrideCppSpec::Matchers::MatchPartial< A >inlinevirtual
failure_message()CppSpec::Matchers::MatcherBase< A, std::regex >virtual
failure_message_when_negated()CppSpec::Matchers::MatcherBase< A, std::regex >virtual
improve_hash_formatting(const std::string &inspect_string) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
inspect_object(const T &object) (defined in CppSpec::Pretty)CppSpec::Prettystatic
inspect_object(const O &o)CppSpec::Prettyinline
inspect_object(const char *const &o)CppSpec::Prettyinlinestatic
last(const std::string &s, char delim) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
match() override (defined in CppSpec::Matchers::MatchPartial< A >)CppSpec::Matchers::MatchPartial< A >inlinevirtual
MatchPartial(Expectation< A > &expectation, std::string expected) (defined in CppSpec::Matchers::MatchPartial< A >)CppSpec::Matchers::MatchPartial< A >inlineexplicit
MatchPartial(Expectation< A > &expectation, std::regex expected) (defined in CppSpec::Matchers::MatchPartial< A >)CppSpec::Matchers::MatchPartial< A >inlineexplicit
name(const std::string &name) const (defined in CppSpec::Pretty)CppSpec::Prettyinline
name_to_sentence(const std::string &name) const (defined in CppSpec::Pretty)CppSpec::Prettyinline
run()CppSpec::Matchers::MatcherBase< A, std::regex >
set_message(std::string message)CppSpec::Matchers::MatcherBase< A, std::regex >virtual
split_words(const std::string &sym) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
to_sentence(const T &item)CppSpec::Prettyinlinestatic
to_sentence(const std::vector< T > &words)CppSpec::Prettyinlinestatic
to_word(const T &item)CppSpec::Prettyinlinestatic
to_word(const T &item) (defined in CppSpec::Pretty)CppSpec::Prettystatic
to_word(const Matchers::MatcherBase< A, E > &matcher)CppSpec::Prettyinlinestatic
to_word(const bool &item) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
to_word_type(const T &item) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
underscore(const std::string &camel_cased_word) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
+
+
+ + + + diff --git a/doxygen/classCppSpec_1_1Matchers_1_1MatchPartial.html b/doxygen/classCppSpec_1_1Matchers_1_1MatchPartial.html new file mode 100644 index 0000000..d84d9a1 --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1MatchPartial.html @@ -0,0 +1,293 @@ + + + + + + + +C++Spec: CppSpec::Matchers::MatchPartial< A > Class Template Reference + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
CppSpec::Matchers::MatchPartial< A > Class Template Reference
+
+
+
+Inheritance diagram for CppSpec::Matchers::MatchPartial< A >:
+
+
Inheritance graph
+ + + + + + + +
[legend]
+
+Collaboration diagram for CppSpec::Matchers::MatchPartial< A >:
+
+
Collaboration graph
+ + + + + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

MatchPartial (Expectation< A > &expectation, std::string expected)
MatchPartial (Expectation< A > &expectation, std::regex expected)
std::string description () override
 Get the description of the Matcher.
bool match () override
Public Member Functions inherited from CppSpec::Matchers::MatcherBase< A, std::regex >
MatcherBase (MatcherBase< A, std::regex > const &copy)=default
virtual std::string failure_message ()
 Get message to give on match failure.
virtual std::string failure_message_when_negated ()
 Get message to give on match failure when negated.
+virtual std::string verb ()
+constexpr A & actual ()
+std::regex & expected ()
+Expectation< A > & expectation ()
virtual MatcherBase & set_message (std::string message)
 Set a custom failure message.
+std::source_location get_location () const
Result run ()
 Run the Matcher object.
+virtual bool negated_match ()
Public Member Functions inherited from CppSpec::Pretty
+std::string name (const std::string &name) const
+std::string name_to_sentence (const std::string &name) const
template<typename O>
std::string inspect_object (const O &o)
 Generate a string of the class and data of an object.
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

Public Types inherited from CppSpec::Matchers::MatcherBase< A, std::regex >
+using expected_t
Static Public Member Functions inherited from CppSpec::Pretty
+static std::string split_words (const std::string &sym)
+static std::string underscore (const std::string &camel_cased_word)
+static std::string last (const std::string &s, char delim)
+static std::string improve_hash_formatting (const std::string &inspect_string)
template<Util::is_streamable T>
static std::string to_word (const T &item)
 Formats an object as a string when operator<< is available.
+template<typename T>
static std::string to_word (const T &item)
+template<typename T>
static std::string to_word_type (const T &item)
template<typename A, typename E>
static std::string to_word (const Matchers::MatcherBase< A, E > &matcher)
template<class T>
static std::string to_sentence (const T &item)
 Take a single object and format it as a sentance.
template<class T>
static std::string to_sentence (const std::vector< T > &words)
+template<typename T>
static std::string inspect_object (const T &object)
+template<>
std::string to_word (const bool &item)
template<>
std::string inspect_object (const char *const &o)
 Specialization for C-style strings.
Public Attributes inherited from CppSpec::Pretty
+std::string _name
Protected Attributes inherited from CppSpec::Matchers::MatcherBase< A, std::regex >
+std::regex expected_
+Expectation< A > & expectation_
+

Member Function Documentation

+ +

◆ description()

+ +
+
+
+template<typename A>
+ + + + + +
+ + + + + + + +
std::string CppSpec::Matchers::MatchPartial< A >::description ()
+
+inlineoverridevirtual
+
+ +

Get the description of the Matcher.

+
Returns
the description
+ +

Reimplemented from CppSpec::Matchers::MatcherBase< A, std::regex >.

+ +
+
+ +

◆ match()

+ +
+
+
+template<typename A>
+ + + + + +
+ + + + + + + +
bool CppSpec::Matchers::MatchPartial< A >::match ()
+
+inlineoverridevirtual
+
+
+
The documentation for this class was generated from the following file: +
+
+ +
+ + + + diff --git a/doxygen/classCppSpec_1_1Matchers_1_1MatchPartial.js b/doxygen/classCppSpec_1_1Matchers_1_1MatchPartial.js new file mode 100644 index 0000000..e515636 --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1MatchPartial.js @@ -0,0 +1,4 @@ +var classCppSpec_1_1Matchers_1_1MatchPartial = +[ + [ "description", "classCppSpec_1_1Matchers_1_1MatchPartial.html#aec57c5140598b1584cef32b413de8038", null ] +]; \ No newline at end of file diff --git a/doxygen/classCppSpec_1_1Matchers_1_1MatchPartial__coll__graph.map b/doxygen/classCppSpec_1_1Matchers_1_1MatchPartial__coll__graph.map new file mode 100644 index 0000000..f365d6b --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1MatchPartial__coll__graph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/doxygen/classCppSpec_1_1Matchers_1_1MatchPartial__coll__graph.md5 b/doxygen/classCppSpec_1_1Matchers_1_1MatchPartial__coll__graph.md5 new file mode 100644 index 0000000..5f38f8f --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1MatchPartial__coll__graph.md5 @@ -0,0 +1 @@ +142958e1489486950ceea688aa191d9c \ No newline at end of file diff --git a/doxygen/classCppSpec_1_1Matchers_1_1MatchPartial__coll__graph.png b/doxygen/classCppSpec_1_1Matchers_1_1MatchPartial__coll__graph.png new file mode 100644 index 0000000..f43cfd3 Binary files /dev/null and b/doxygen/classCppSpec_1_1Matchers_1_1MatchPartial__coll__graph.png differ diff --git a/doxygen/classCppSpec_1_1Matchers_1_1MatchPartial__inherit__graph.map b/doxygen/classCppSpec_1_1Matchers_1_1MatchPartial__inherit__graph.map new file mode 100644 index 0000000..f365d6b --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1MatchPartial__inherit__graph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/doxygen/classCppSpec_1_1Matchers_1_1MatchPartial__inherit__graph.md5 b/doxygen/classCppSpec_1_1Matchers_1_1MatchPartial__inherit__graph.md5 new file mode 100644 index 0000000..5f38f8f --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1MatchPartial__inherit__graph.md5 @@ -0,0 +1 @@ +142958e1489486950ceea688aa191d9c \ No newline at end of file diff --git a/doxygen/classCppSpec_1_1Matchers_1_1MatchPartial__inherit__graph.png b/doxygen/classCppSpec_1_1Matchers_1_1MatchPartial__inherit__graph.png new file mode 100644 index 0000000..f43cfd3 Binary files /dev/null and b/doxygen/classCppSpec_1_1Matchers_1_1MatchPartial__inherit__graph.png differ diff --git a/doxygen/classCppSpec_1_1Matchers_1_1Match__coll__graph.map b/doxygen/classCppSpec_1_1Matchers_1_1Match__coll__graph.map new file mode 100644 index 0000000..ccbb919 --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1Match__coll__graph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/doxygen/classCppSpec_1_1Matchers_1_1Match__coll__graph.md5 b/doxygen/classCppSpec_1_1Matchers_1_1Match__coll__graph.md5 new file mode 100644 index 0000000..4724758 --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1Match__coll__graph.md5 @@ -0,0 +1 @@ +d62a5e7356339a3ca5bcd6fb89b0942d \ No newline at end of file diff --git a/doxygen/classCppSpec_1_1Matchers_1_1Match__coll__graph.png b/doxygen/classCppSpec_1_1Matchers_1_1Match__coll__graph.png new file mode 100644 index 0000000..6c48846 Binary files /dev/null and b/doxygen/classCppSpec_1_1Matchers_1_1Match__coll__graph.png differ diff --git a/doxygen/classCppSpec_1_1Matchers_1_1Match__inherit__graph.map b/doxygen/classCppSpec_1_1Matchers_1_1Match__inherit__graph.map new file mode 100644 index 0000000..ccbb919 --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1Match__inherit__graph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/doxygen/classCppSpec_1_1Matchers_1_1Match__inherit__graph.md5 b/doxygen/classCppSpec_1_1Matchers_1_1Match__inherit__graph.md5 new file mode 100644 index 0000000..4724758 --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1Match__inherit__graph.md5 @@ -0,0 +1 @@ +d62a5e7356339a3ca5bcd6fb89b0942d \ No newline at end of file diff --git a/doxygen/classCppSpec_1_1Matchers_1_1Match__inherit__graph.png b/doxygen/classCppSpec_1_1Matchers_1_1Match__inherit__graph.png new file mode 100644 index 0000000..6c48846 Binary files /dev/null and b/doxygen/classCppSpec_1_1Matchers_1_1Match__inherit__graph.png differ diff --git a/doxygen/classCppSpec_1_1Matchers_1_1MatcherBase-members.html b/doxygen/classCppSpec_1_1Matchers_1_1MatcherBase-members.html new file mode 100644 index 0000000..3a38103 --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1MatcherBase-members.html @@ -0,0 +1,145 @@ + + + + + + + +C++Spec: Member List + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
CppSpec::Matchers::MatcherBase< Actual, Expected > Member List
+
+
+ +

This is the complete list of members for CppSpec::Matchers::MatcherBase< Actual, Expected >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
_name (defined in CppSpec::Pretty)CppSpec::Pretty
actual() (defined in CppSpec::Matchers::MatcherBase< Actual, Expected >)CppSpec::Matchers::MatcherBase< Actual, Expected >inline
description()CppSpec::Matchers::MatcherBase< Actual, Expected >virtual
expectation() (defined in CppSpec::Matchers::MatcherBase< Actual, Expected >)CppSpec::Matchers::MatcherBase< Actual, Expected >inline
expectation_ (defined in CppSpec::Matchers::MatcherBase< Actual, Expected >)CppSpec::Matchers::MatcherBase< Actual, Expected >protected
expected() (defined in CppSpec::Matchers::MatcherBase< Actual, Expected >)CppSpec::Matchers::MatcherBase< Actual, Expected >inline
expected_ (defined in CppSpec::Matchers::MatcherBase< Actual, Expected >)CppSpec::Matchers::MatcherBase< Actual, Expected >protected
expected_t typedef (defined in CppSpec::Matchers::MatcherBase< Actual, Expected >)CppSpec::Matchers::MatcherBase< Actual, Expected >
failure_message()CppSpec::Matchers::MatcherBase< Actual, Expected >virtual
failure_message_when_negated()CppSpec::Matchers::MatcherBase< Actual, Expected >virtual
get_location() const (defined in CppSpec::Matchers::MatcherBase< Actual, Expected >)CppSpec::Matchers::MatcherBase< Actual, Expected >inline
improve_hash_formatting(const std::string &inspect_string) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
inspect_object(const T &object) (defined in CppSpec::Pretty)CppSpec::Prettystatic
inspect_object(const O &o)CppSpec::Prettyinline
inspect_object(const char *const &o)CppSpec::Prettyinlinestatic
last(const std::string &s, char delim) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
match()=0 (defined in CppSpec::Matchers::MatcherBase< Actual, Expected >)CppSpec::Matchers::MatcherBase< Actual, Expected >pure virtual
MatcherBase(MatcherBase< Actual, Expected > const &copy)=default (defined in CppSpec::Matchers::MatcherBase< Actual, Expected >)CppSpec::Matchers::MatcherBase< Actual, Expected >
MatcherBase(Expectation< Actual > &expectation) (defined in CppSpec::Matchers::MatcherBase< Actual, Expected >)CppSpec::Matchers::MatcherBase< Actual, Expected >inlineexplicit
MatcherBase(Expectation< Actual > &expectation, Expected expected) (defined in CppSpec::Matchers::MatcherBase< Actual, Expected >)CppSpec::Matchers::MatcherBase< Actual, Expected >inline
name(const std::string &name) const (defined in CppSpec::Pretty)CppSpec::Prettyinline
name_to_sentence(const std::string &name) const (defined in CppSpec::Pretty)CppSpec::Prettyinline
negated_match() (defined in CppSpec::Matchers::MatcherBase< Actual, Expected >)CppSpec::Matchers::MatcherBase< Actual, Expected >inlinevirtual
run()CppSpec::Matchers::MatcherBase< Actual, Expected >
set_message(std::string message)CppSpec::Matchers::MatcherBase< Actual, Expected >virtual
split_words(const std::string &sym) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
to_sentence(const T &item)CppSpec::Prettyinlinestatic
to_sentence(const std::vector< T > &words)CppSpec::Prettyinlinestatic
to_word(const T &item)CppSpec::Prettyinlinestatic
to_word(const T &item) (defined in CppSpec::Pretty)CppSpec::Prettystatic
to_word(const Matchers::MatcherBase< A, E > &matcher)CppSpec::Prettyinlinestatic
to_word(const bool &item) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
to_word_type(const T &item) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
underscore(const std::string &camel_cased_word) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
verb() (defined in CppSpec::Matchers::MatcherBase< Actual, Expected >)CppSpec::Matchers::MatcherBase< Actual, Expected >inlinevirtual
~MatcherBase()=default (defined in CppSpec::Matchers::MatcherBase< Actual, Expected >)CppSpec::Matchers::MatcherBase< Actual, Expected >virtual
+
+
+ + + + diff --git a/doxygen/classCppSpec_1_1Matchers_1_1MatcherBase.html b/doxygen/classCppSpec_1_1Matchers_1_1MatcherBase.html new file mode 100644 index 0000000..44f0616 --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1MatcherBase.html @@ -0,0 +1,409 @@ + + + + + + + +C++Spec: CppSpec::Matchers::MatcherBase< Actual, Expected > Class Template Reference + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
CppSpec::Matchers::MatcherBase< Actual, Expected > Class Template Referenceabstract
+
+
+ +

the base class for all Matcher classes and objects + More...

+ +

#include <matcher_base.hpp>

+
+Inheritance diagram for CppSpec::Matchers::MatcherBase< Actual, Expected >:
+
+
Inheritance graph
+ + + + + +
[legend]
+
+Collaboration diagram for CppSpec::Matchers::MatcherBase< Actual, Expected >:
+
+
Collaboration graph
+ + + + + + + +
[legend]
+ + + +

+Public Types

+using expected_t = Expected
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

MatcherBase (MatcherBase< Actual, Expected > const &copy)=default
MatcherBase (Expectation< Actual > &expectation)
MatcherBase (Expectation< Actual > &expectation, Expected expected)
virtual std::string failure_message ()
 Get message to give on match failure.
virtual std::string failure_message_when_negated ()
 Get message to give on match failure when negated.
virtual std::string description ()
 Get the description of the Matcher.
+virtual std::string verb ()
+constexpr Actual & actual ()
+Expected & expected ()
+Expectation< Actual > & expectation ()
virtual MatcherBase & set_message (std::string message)
 Set a custom failure message.
+std::source_location get_location () const
Result run ()
 Run the Matcher object.
+virtual bool match ()=0
+virtual bool negated_match ()
Public Member Functions inherited from CppSpec::Pretty
+std::string name (const std::string &name) const
+std::string name_to_sentence (const std::string &name) const
template<typename O>
std::string inspect_object (const O &o)
 Generate a string of the class and data of an object.
+ + + +

+Protected Attributes

+Expected expected_
+Expectation< Actual > & expectation_
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

Static Public Member Functions inherited from CppSpec::Pretty
+static std::string split_words (const std::string &sym)
+static std::string underscore (const std::string &camel_cased_word)
+static std::string last (const std::string &s, char delim)
+static std::string improve_hash_formatting (const std::string &inspect_string)
template<Util::is_streamable T>
static std::string to_word (const T &item)
 Formats an object as a string when operator<< is available.
+template<typename T>
static std::string to_word (const T &item)
+template<typename T>
static std::string to_word_type (const T &item)
template<typename A, typename E>
static std::string to_word (const Matchers::MatcherBase< A, E > &matcher)
template<class T>
static std::string to_sentence (const T &item)
 Take a single object and format it as a sentance.
template<class T>
static std::string to_sentence (const std::vector< T > &words)
+template<typename T>
static std::string inspect_object (const T &object)
+template<>
std::string to_word (const bool &item)
template<>
std::string inspect_object (const char *const &o)
 Specialization for C-style strings.
Public Attributes inherited from CppSpec::Pretty
+std::string _name
+

Detailed Description

+
template<typename Actual, typename Expected>
+class CppSpec::Matchers::MatcherBase< Actual, Expected >

the base class for all Matcher classes and objects

+
Template Parameters
+ + + +
Actualthe type of Actual 'thing' to match against in the context of expect(2), it would be int
Expectedthe type of Expected 'thing' to match for in the contet of expect(2).to_equal(2.0), it would be float
+
+
+

Member Function Documentation

+ +

◆ description()

+ + + +

◆ failure_message()

+ +
+
+
+template<typename A, typename E>
+ + + + + +
+ + + + + + + +
std::string CppSpec::Matchers::MatcherBase< A, E >::failure_message ()
+
+virtual
+
+
+ +

◆ failure_message_when_negated()

+ +
+
+
+template<typename A, typename E>
+ + + + + +
+ + + + + + + +
std::string CppSpec::Matchers::MatcherBase< A, E >::failure_message_when_negated ()
+
+virtual
+
+
+ +

◆ run()

+ +
+
+
+template<typename A, typename E>
+ + + + + + + +
Result CppSpec::Matchers::MatcherBase< A, E >::run ()
+
+ +

Run the Matcher object.

+
Parameters
+ + +
printerthe formatter to print using
+
+
+
Returns
the Result of running the Matcher
+ +
+
+ +

◆ set_message()

+ +
+
+
+template<typename A, typename E>
+ + + + + +
+ + + + + + + +
MatcherBase< A, E > & CppSpec::Matchers::MatcherBase< A, E >::set_message (std::string message)
+
+virtual
+
+ +

Set a custom failure message.

+
Parameters
+ + +
messagethe message to give
+
+
+
Returns
the modified Matcher
+ +
+
+
The documentation for this class was generated from the following file: +
+
+ +
+ + + + diff --git a/doxygen/classCppSpec_1_1Matchers_1_1MatcherBase.js b/doxygen/classCppSpec_1_1Matchers_1_1MatcherBase.js new file mode 100644 index 0000000..6344efe --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1MatcherBase.js @@ -0,0 +1,8 @@ +var classCppSpec_1_1Matchers_1_1MatcherBase = +[ + [ "description", "classCppSpec_1_1Matchers_1_1MatcherBase.html#a37687815b711874d613d6c5f6b1603cd", null ], + [ "failure_message", "classCppSpec_1_1Matchers_1_1MatcherBase.html#aac2ae323ec0a6f753e00dbda3222b087", null ], + [ "failure_message_when_negated", "classCppSpec_1_1Matchers_1_1MatcherBase.html#a78f11f0e90ffa5f1dc9bc292e4fa77de", null ], + [ "run", "classCppSpec_1_1Matchers_1_1MatcherBase.html#a5439ce1a1bc97679eed33d3caf72e239", null ], + [ "set_message", "classCppSpec_1_1Matchers_1_1MatcherBase.html#ad069c3479755788671ec9620b757753e", null ] +]; \ No newline at end of file diff --git a/doxygen/classCppSpec_1_1Matchers_1_1MatcherBase__coll__graph.map b/doxygen/classCppSpec_1_1Matchers_1_1MatcherBase__coll__graph.map new file mode 100644 index 0000000..2adf32e --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1MatcherBase__coll__graph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/doxygen/classCppSpec_1_1Matchers_1_1MatcherBase__coll__graph.md5 b/doxygen/classCppSpec_1_1Matchers_1_1MatcherBase__coll__graph.md5 new file mode 100644 index 0000000..62e90dc --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1MatcherBase__coll__graph.md5 @@ -0,0 +1 @@ +f68dff0436c11da6aec51e9527e82854 \ No newline at end of file diff --git a/doxygen/classCppSpec_1_1Matchers_1_1MatcherBase__coll__graph.png b/doxygen/classCppSpec_1_1Matchers_1_1MatcherBase__coll__graph.png new file mode 100644 index 0000000..871fd17 Binary files /dev/null and b/doxygen/classCppSpec_1_1Matchers_1_1MatcherBase__coll__graph.png differ diff --git a/doxygen/classCppSpec_1_1Matchers_1_1MatcherBase__inherit__graph.map b/doxygen/classCppSpec_1_1Matchers_1_1MatcherBase__inherit__graph.map new file mode 100644 index 0000000..57e3c5b --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1MatcherBase__inherit__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/doxygen/classCppSpec_1_1Matchers_1_1MatcherBase__inherit__graph.md5 b/doxygen/classCppSpec_1_1Matchers_1_1MatcherBase__inherit__graph.md5 new file mode 100644 index 0000000..dad4bd0 --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1MatcherBase__inherit__graph.md5 @@ -0,0 +1 @@ +957ecad27b396fd4b7858ae4d3011f7d \ No newline at end of file diff --git a/doxygen/classCppSpec_1_1Matchers_1_1MatcherBase__inherit__graph.png b/doxygen/classCppSpec_1_1Matchers_1_1MatcherBase__inherit__graph.png new file mode 100644 index 0000000..b11dbc2 Binary files /dev/null and b/doxygen/classCppSpec_1_1Matchers_1_1MatcherBase__inherit__graph.png differ diff --git a/doxygen/classCppSpec_1_1Matchers_1_1Satisfy-members.html b/doxygen/classCppSpec_1_1Matchers_1_1Satisfy-members.html new file mode 100644 index 0000000..b1ea2b9 --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1Satisfy-members.html @@ -0,0 +1,134 @@ + + + + + + + +C++Spec: Member List + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
CppSpec::Matchers::Satisfy< A > Member List
+
+
+ +

This is the complete list of members for CppSpec::Matchers::Satisfy< A >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
_name (defined in CppSpec::Pretty)CppSpec::Pretty
description()CppSpec::Matchers::MatcherBase< A, bool >virtual
failure_message() overrideCppSpec::Matchers::Satisfy< A >virtual
failure_message_when_negated() overrideCppSpec::Matchers::Satisfy< A >virtual
improve_hash_formatting(const std::string &inspect_string) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
inspect_object(const T &object) (defined in CppSpec::Pretty)CppSpec::Prettystatic
inspect_object(const O &o)CppSpec::Prettyinline
inspect_object(const char *const &o)CppSpec::Prettyinlinestatic
last(const std::string &s, char delim) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
match() override (defined in CppSpec::Matchers::Satisfy< A >)CppSpec::Matchers::Satisfy< A >virtual
name(const std::string &name) const (defined in CppSpec::Pretty)CppSpec::Prettyinline
name_to_sentence(const std::string &name) const (defined in CppSpec::Pretty)CppSpec::Prettyinline
run()CppSpec::Matchers::MatcherBase< A, bool >
Satisfy(Expectation< A > &expectation, std::function< bool(A)> test) (defined in CppSpec::Matchers::Satisfy< A >)CppSpec::Matchers::Satisfy< A >inline
set_message(std::string message)CppSpec::Matchers::MatcherBase< A, bool >virtual
split_words(const std::string &sym) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
to_sentence(const T &item)CppSpec::Prettyinlinestatic
to_sentence(const std::vector< T > &words)CppSpec::Prettyinlinestatic
to_word(const T &item)CppSpec::Prettyinlinestatic
to_word(const T &item) (defined in CppSpec::Pretty)CppSpec::Prettystatic
to_word(const Matchers::MatcherBase< A, E > &matcher)CppSpec::Prettyinlinestatic
to_word(const bool &item) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
to_word_type(const T &item) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
underscore(const std::string &camel_cased_word) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
verb() override (defined in CppSpec::Matchers::Satisfy< A >)CppSpec::Matchers::Satisfy< A >inlinevirtual
+
+
+ + + + diff --git a/doxygen/classCppSpec_1_1Matchers_1_1Satisfy.html b/doxygen/classCppSpec_1_1Matchers_1_1Satisfy.html new file mode 100644 index 0000000..0d2fdda --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1Satisfy.html @@ -0,0 +1,351 @@ + + + + + + + +C++Spec: CppSpec::Matchers::Satisfy< A > Class Template Reference + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
CppSpec::Matchers::Satisfy< A > Class Template Reference
+
+
+
+Inheritance diagram for CppSpec::Matchers::Satisfy< A >:
+
+
Inheritance graph
+ + + + + + + +
[legend]
+
+Collaboration diagram for CppSpec::Matchers::Satisfy< A >:
+
+
Collaboration graph
+ + + + + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

Satisfy (Expectation< A > &expectation, std::function< bool(A)> test)
std::string failure_message () override
 Get message to give on match failure.
std::string failure_message_when_negated () override
 Get message to give on match failure when negated.
std::string verb () override
bool match () override
Public Member Functions inherited from CppSpec::Matchers::MatcherBase< A, bool >
MatcherBase (MatcherBase< A, bool > const &copy)=default
virtual std::string description ()
 Get the description of the Matcher.
+constexpr A & actual ()
+bool & expected ()
+Expectation< A > & expectation ()
virtual MatcherBase & set_message (std::string message)
 Set a custom failure message.
+std::source_location get_location () const
Result run ()
 Run the Matcher object.
+virtual bool negated_match ()
Public Member Functions inherited from CppSpec::Pretty
+std::string name (const std::string &name) const
+std::string name_to_sentence (const std::string &name) const
template<typename O>
std::string inspect_object (const O &o)
 Generate a string of the class and data of an object.
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

Public Types inherited from CppSpec::Matchers::MatcherBase< A, bool >
+using expected_t
Static Public Member Functions inherited from CppSpec::Pretty
+static std::string split_words (const std::string &sym)
+static std::string underscore (const std::string &camel_cased_word)
+static std::string last (const std::string &s, char delim)
+static std::string improve_hash_formatting (const std::string &inspect_string)
template<Util::is_streamable T>
static std::string to_word (const T &item)
 Formats an object as a string when operator<< is available.
+template<typename T>
static std::string to_word (const T &item)
+template<typename T>
static std::string to_word_type (const T &item)
template<typename A, typename E>
static std::string to_word (const Matchers::MatcherBase< A, E > &matcher)
template<class T>
static std::string to_sentence (const T &item)
 Take a single object and format it as a sentance.
template<class T>
static std::string to_sentence (const std::vector< T > &words)
+template<typename T>
static std::string inspect_object (const T &object)
+template<>
std::string to_word (const bool &item)
template<>
std::string inspect_object (const char *const &o)
 Specialization for C-style strings.
Public Attributes inherited from CppSpec::Pretty
+std::string _name
Protected Attributes inherited from CppSpec::Matchers::MatcherBase< A, bool >
+bool expected_
+Expectation< A > & expectation_
+

Member Function Documentation

+ +

◆ failure_message()

+ +
+
+
+template<typename A>
+ + + + + +
+ + + + + + + +
std::string CppSpec::Matchers::Satisfy< A >::failure_message ()
+
+overridevirtual
+
+ +

Get message to give on match failure.

+
Returns
the message
+ +

Reimplemented from CppSpec::Matchers::MatcherBase< A, bool >.

+ +
+
+ +

◆ failure_message_when_negated()

+ +
+
+
+template<typename A>
+ + + + + +
+ + + + + + + +
std::string CppSpec::Matchers::Satisfy< A >::failure_message_when_negated ()
+
+overridevirtual
+
+ +

Get message to give on match failure when negated.

+
Returns
the message
+ +

Reimplemented from CppSpec::Matchers::MatcherBase< A, bool >.

+ +
+
+ +

◆ match()

+ +
+
+
+template<typename A>
+ + + + + +
+ + + + + + + +
bool CppSpec::Matchers::Satisfy< A >::match ()
+
+overridevirtual
+
+
+ +

◆ verb()

+ +
+
+
+template<typename A>
+ + + + + +
+ + + + + + + +
std::string CppSpec::Matchers::Satisfy< A >::verb ()
+
+inlineoverridevirtual
+
+ +

Reimplemented from CppSpec::Matchers::MatcherBase< A, bool >.

+ +
+
+
The documentation for this class was generated from the following file: +
+
+ +
+ + + + diff --git a/doxygen/classCppSpec_1_1Matchers_1_1Satisfy.js b/doxygen/classCppSpec_1_1Matchers_1_1Satisfy.js new file mode 100644 index 0000000..26a01c7 --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1Satisfy.js @@ -0,0 +1,5 @@ +var classCppSpec_1_1Matchers_1_1Satisfy = +[ + [ "failure_message", "classCppSpec_1_1Matchers_1_1Satisfy.html#a0d78cd0b417db6d8ceb5434e3f29b299", null ], + [ "failure_message_when_negated", "classCppSpec_1_1Matchers_1_1Satisfy.html#a808c1e1b9c38b21935650ba5ad0b1a65", null ] +]; \ No newline at end of file diff --git a/doxygen/classCppSpec_1_1Matchers_1_1Satisfy__coll__graph.map b/doxygen/classCppSpec_1_1Matchers_1_1Satisfy__coll__graph.map new file mode 100644 index 0000000..846e0bc --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1Satisfy__coll__graph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/doxygen/classCppSpec_1_1Matchers_1_1Satisfy__coll__graph.md5 b/doxygen/classCppSpec_1_1Matchers_1_1Satisfy__coll__graph.md5 new file mode 100644 index 0000000..df044ba --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1Satisfy__coll__graph.md5 @@ -0,0 +1 @@ +4d9ddedfd2ee5e4a63e5fc6ef342e5ff \ No newline at end of file diff --git a/doxygen/classCppSpec_1_1Matchers_1_1Satisfy__coll__graph.png b/doxygen/classCppSpec_1_1Matchers_1_1Satisfy__coll__graph.png new file mode 100644 index 0000000..a59c1c6 Binary files /dev/null and b/doxygen/classCppSpec_1_1Matchers_1_1Satisfy__coll__graph.png differ diff --git a/doxygen/classCppSpec_1_1Matchers_1_1Satisfy__inherit__graph.map b/doxygen/classCppSpec_1_1Matchers_1_1Satisfy__inherit__graph.map new file mode 100644 index 0000000..846e0bc --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1Satisfy__inherit__graph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/doxygen/classCppSpec_1_1Matchers_1_1Satisfy__inherit__graph.md5 b/doxygen/classCppSpec_1_1Matchers_1_1Satisfy__inherit__graph.md5 new file mode 100644 index 0000000..df044ba --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1Satisfy__inherit__graph.md5 @@ -0,0 +1 @@ +4d9ddedfd2ee5e4a63e5fc6ef342e5ff \ No newline at end of file diff --git a/doxygen/classCppSpec_1_1Matchers_1_1Satisfy__inherit__graph.png b/doxygen/classCppSpec_1_1Matchers_1_1Satisfy__inherit__graph.png new file mode 100644 index 0000000..a59c1c6 Binary files /dev/null and b/doxygen/classCppSpec_1_1Matchers_1_1Satisfy__inherit__graph.png differ diff --git a/doxygen/classCppSpec_1_1Matchers_1_1StartWith-members.html b/doxygen/classCppSpec_1_1Matchers_1_1StartWith-members.html new file mode 100644 index 0000000..c05f16c --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1StartWith-members.html @@ -0,0 +1,134 @@ + + + + + + + +C++Spec: Member List + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
CppSpec::Matchers::StartWith< A, E > Member List
+
+
+ +

This is the complete list of members for CppSpec::Matchers::StartWith< A, E >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
_name (defined in CppSpec::Pretty)CppSpec::Pretty
description()CppSpec::Matchers::MatcherBase< A, E >virtual
failure_message()CppSpec::Matchers::MatcherBase< A, E >virtual
failure_message_when_negated()CppSpec::Matchers::MatcherBase< A, E >virtual
improve_hash_formatting(const std::string &inspect_string) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
inspect_object(const T &object) (defined in CppSpec::Pretty)CppSpec::Prettystatic
inspect_object(const O &o)CppSpec::Prettyinline
inspect_object(const char *const &o)CppSpec::Prettyinlinestatic
last(const std::string &s, char delim) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
match() override (defined in CppSpec::Matchers::StartWith< A, E >)CppSpec::Matchers::StartWith< A, E >inlinevirtual
name(const std::string &name) const (defined in CppSpec::Pretty)CppSpec::Prettyinline
name_to_sentence(const std::string &name) const (defined in CppSpec::Pretty)CppSpec::Prettyinline
run()CppSpec::Matchers::MatcherBase< A, E >
set_message(std::string message)CppSpec::Matchers::MatcherBase< A, E >virtual
split_words(const std::string &sym) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
StartWith(Expectation< A > &expectation, E start) (defined in CppSpec::Matchers::StartWith< A, E >)CppSpec::Matchers::StartWith< A, E >inline
to_sentence(const T &item)CppSpec::Prettyinlinestatic
to_sentence(const std::vector< T > &words)CppSpec::Prettyinlinestatic
to_word(const T &item)CppSpec::Prettyinlinestatic
to_word(const T &item) (defined in CppSpec::Pretty)CppSpec::Prettystatic
to_word(const Matchers::MatcherBase< A, E > &matcher)CppSpec::Prettyinlinestatic
to_word(const bool &item) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
to_word_type(const T &item) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
underscore(const std::string &camel_cased_word) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
verb() override (defined in CppSpec::Matchers::StartWith< A, E >)CppSpec::Matchers::StartWith< A, E >inlinevirtual
+
+
+ + + + diff --git a/doxygen/classCppSpec_1_1Matchers_1_1StartWith.html b/doxygen/classCppSpec_1_1Matchers_1_1StartWith.html new file mode 100644 index 0000000..bd4b6b1 --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1StartWith.html @@ -0,0 +1,287 @@ + + + + + + + +C++Spec: CppSpec::Matchers::StartWith< A, E > Class Template Reference + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
CppSpec::Matchers::StartWith< A, E > Class Template Reference
+
+
+
+Inheritance diagram for CppSpec::Matchers::StartWith< A, E >:
+
+
Inheritance graph
+ + + + + + + +
[legend]
+
+Collaboration diagram for CppSpec::Matchers::StartWith< A, E >:
+
+
Collaboration graph
+ + + + + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

StartWith (Expectation< A > &expectation, E start)
std::string verb () override
bool match () override
Public Member Functions inherited from CppSpec::Matchers::MatcherBase< A, E >
MatcherBase (MatcherBase< A, E > const &copy)=default
virtual std::string failure_message ()
 Get message to give on match failure.
virtual std::string failure_message_when_negated ()
 Get message to give on match failure when negated.
virtual std::string description ()
 Get the description of the Matcher.
+constexpr A & actual ()
+E & expected ()
+Expectation< A > & expectation ()
virtual MatcherBase & set_message (std::string message)
 Set a custom failure message.
+std::source_location get_location () const
Result run ()
 Run the Matcher object.
+virtual bool negated_match ()
Public Member Functions inherited from CppSpec::Pretty
+std::string name (const std::string &name) const
+std::string name_to_sentence (const std::string &name) const
template<typename O>
std::string inspect_object (const O &o)
 Generate a string of the class and data of an object.
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

Public Types inherited from CppSpec::Matchers::MatcherBase< A, E >
+using expected_t
Static Public Member Functions inherited from CppSpec::Pretty
+static std::string split_words (const std::string &sym)
+static std::string underscore (const std::string &camel_cased_word)
+static std::string last (const std::string &s, char delim)
+static std::string improve_hash_formatting (const std::string &inspect_string)
template<Util::is_streamable T>
static std::string to_word (const T &item)
 Formats an object as a string when operator<< is available.
+template<typename T>
static std::string to_word (const T &item)
+template<typename T>
static std::string to_word_type (const T &item)
template<typename A, typename E>
static std::string to_word (const Matchers::MatcherBase< A, E > &matcher)
template<class T>
static std::string to_sentence (const T &item)
 Take a single object and format it as a sentance.
template<class T>
static std::string to_sentence (const std::vector< T > &words)
+template<typename T>
static std::string inspect_object (const T &object)
+template<>
std::string to_word (const bool &item)
template<>
std::string inspect_object (const char *const &o)
 Specialization for C-style strings.
Public Attributes inherited from CppSpec::Pretty
+std::string _name
Protected Attributes inherited from CppSpec::Matchers::MatcherBase< A, E >
+E expected_
+Expectation< A > & expectation_
+

Member Function Documentation

+ +

◆ match()

+ +
+
+
+template<std::ranges::range A, std::ranges::range E>
+ + + + + +
+ + + + + + + +
bool CppSpec::Matchers::StartWith< A, E >::match ()
+
+inlineoverridevirtual
+
+
+ +

◆ verb()

+ +
+
+
+template<std::ranges::range A, std::ranges::range E>
+ + + + + +
+ + + + + + + +
std::string CppSpec::Matchers::StartWith< A, E >::verb ()
+
+inlineoverridevirtual
+
+ +

Reimplemented from CppSpec::Matchers::MatcherBase< A, E >.

+ +
+
+
The documentation for this class was generated from the following file: +
+
+ +
+ + + + diff --git a/doxygen/classCppSpec_1_1Matchers_1_1StartWith__coll__graph.map b/doxygen/classCppSpec_1_1Matchers_1_1StartWith__coll__graph.map new file mode 100644 index 0000000..1b20f14 --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1StartWith__coll__graph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/doxygen/classCppSpec_1_1Matchers_1_1StartWith__coll__graph.md5 b/doxygen/classCppSpec_1_1Matchers_1_1StartWith__coll__graph.md5 new file mode 100644 index 0000000..78b7bcd --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1StartWith__coll__graph.md5 @@ -0,0 +1 @@ +ed04622a3d27a653c6d7dcc840894422 \ No newline at end of file diff --git a/doxygen/classCppSpec_1_1Matchers_1_1StartWith__coll__graph.png b/doxygen/classCppSpec_1_1Matchers_1_1StartWith__coll__graph.png new file mode 100644 index 0000000..fbecc86 Binary files /dev/null and b/doxygen/classCppSpec_1_1Matchers_1_1StartWith__coll__graph.png differ diff --git a/doxygen/classCppSpec_1_1Matchers_1_1StartWith__inherit__graph.map b/doxygen/classCppSpec_1_1Matchers_1_1StartWith__inherit__graph.map new file mode 100644 index 0000000..1b20f14 --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1StartWith__inherit__graph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/doxygen/classCppSpec_1_1Matchers_1_1StartWith__inherit__graph.md5 b/doxygen/classCppSpec_1_1Matchers_1_1StartWith__inherit__graph.md5 new file mode 100644 index 0000000..78b7bcd --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1StartWith__inherit__graph.md5 @@ -0,0 +1 @@ +ed04622a3d27a653c6d7dcc840894422 \ No newline at end of file diff --git a/doxygen/classCppSpec_1_1Matchers_1_1StartWith__inherit__graph.png b/doxygen/classCppSpec_1_1Matchers_1_1StartWith__inherit__graph.png new file mode 100644 index 0000000..fbecc86 Binary files /dev/null and b/doxygen/classCppSpec_1_1Matchers_1_1StartWith__inherit__graph.png differ diff --git a/doxygen/classCppSpec_1_1Matchers_1_1Throw-members.html b/doxygen/classCppSpec_1_1Matchers_1_1Throw-members.html new file mode 100644 index 0000000..7ba18cb --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1Throw-members.html @@ -0,0 +1,134 @@ + + + + + + + +C++Spec: Member List + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
CppSpec::Matchers::Throw< A, Ex > Member List
+
+
+ +

This is the complete list of members for CppSpec::Matchers::Throw< A, Ex >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
_name (defined in CppSpec::Pretty)CppSpec::Pretty
description() overrideCppSpec::Matchers::Throw< A, Ex >virtual
failure_message() overrideCppSpec::Matchers::Throw< A, Ex >virtual
failure_message_when_negated() overrideCppSpec::Matchers::Throw< A, Ex >virtual
improve_hash_formatting(const std::string &inspect_string) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
inspect_object(const T &object) (defined in CppSpec::Pretty)CppSpec::Prettystatic
inspect_object(const O &o)CppSpec::Prettyinline
inspect_object(const char *const &o)CppSpec::Prettyinlinestatic
last(const std::string &s, char delim) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
match() override (defined in CppSpec::Matchers::Throw< A, Ex >)CppSpec::Matchers::Throw< A, Ex >virtual
name(const std::string &name) const (defined in CppSpec::Pretty)CppSpec::Prettyinline
name_to_sentence(const std::string &name) const (defined in CppSpec::Pretty)CppSpec::Prettyinline
run()CppSpec::Matchers::MatcherBase< A, void * >
set_message(std::string message)CppSpec::Matchers::MatcherBase< A, void * >virtual
split_words(const std::string &sym) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
Throw(Expectation< A > &expectation) (defined in CppSpec::Matchers::Throw< A, Ex >)CppSpec::Matchers::Throw< A, Ex >inlineexplicit
to_sentence(const T &item)CppSpec::Prettyinlinestatic
to_sentence(const std::vector< T > &words)CppSpec::Prettyinlinestatic
to_word(const T &item)CppSpec::Prettyinlinestatic
to_word(const T &item) (defined in CppSpec::Pretty)CppSpec::Prettystatic
to_word(const Matchers::MatcherBase< A, E > &matcher)CppSpec::Prettyinlinestatic
to_word(const bool &item) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
to_word_type(const T &item) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
underscore(const std::string &camel_cased_word) (defined in CppSpec::Pretty)CppSpec::Prettyinlinestatic
verb() override (defined in CppSpec::Matchers::Throw< A, Ex >)CppSpec::Matchers::Throw< A, Ex >inlinevirtual
+
+
+ + + + diff --git a/doxygen/classCppSpec_1_1Matchers_1_1Throw.html b/doxygen/classCppSpec_1_1Matchers_1_1Throw.html new file mode 100644 index 0000000..1b87ff4 --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1Throw.html @@ -0,0 +1,383 @@ + + + + + + + +C++Spec: CppSpec::Matchers::Throw< A, Ex > Class Template Reference + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
CppSpec::Matchers::Throw< A, Ex > Class Template Reference
+
+
+
+Inheritance diagram for CppSpec::Matchers::Throw< A, Ex >:
+
+
Inheritance graph
+ + + + + + + +
[legend]
+
+Collaboration diagram for CppSpec::Matchers::Throw< A, Ex >:
+
+
Collaboration graph
+ + + + + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

Throw (Expectation< A > &expectation)
bool match () override
std::string verb () override
std::string description () override
 Get the description of the Matcher.
std::string failure_message () override
 Get message to give on match failure.
std::string failure_message_when_negated () override
 Get message to give on match failure when negated.
Public Member Functions inherited from CppSpec::Matchers::MatcherBase< A, void * >
MatcherBase (MatcherBase< A, void * > const &copy)=default
+constexpr A & actual ()
+void *& expected ()
+Expectation< A > & expectation ()
virtual MatcherBase & set_message (std::string message)
 Set a custom failure message.
+std::source_location get_location () const
Result run ()
 Run the Matcher object.
+virtual bool negated_match ()
Public Member Functions inherited from CppSpec::Pretty
+std::string name (const std::string &name) const
+std::string name_to_sentence (const std::string &name) const
template<typename O>
std::string inspect_object (const O &o)
 Generate a string of the class and data of an object.
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

Public Types inherited from CppSpec::Matchers::MatcherBase< A, void * >
+using expected_t
Static Public Member Functions inherited from CppSpec::Pretty
+static std::string split_words (const std::string &sym)
+static std::string underscore (const std::string &camel_cased_word)
+static std::string last (const std::string &s, char delim)
+static std::string improve_hash_formatting (const std::string &inspect_string)
template<Util::is_streamable T>
static std::string to_word (const T &item)
 Formats an object as a string when operator<< is available.
+template<typename T>
static std::string to_word (const T &item)
+template<typename T>
static std::string to_word_type (const T &item)
template<typename A, typename E>
static std::string to_word (const Matchers::MatcherBase< A, E > &matcher)
template<class T>
static std::string to_sentence (const T &item)
 Take a single object and format it as a sentance.
template<class T>
static std::string to_sentence (const std::vector< T > &words)
+template<typename T>
static std::string inspect_object (const T &object)
+template<>
std::string to_word (const bool &item)
template<>
std::string inspect_object (const char *const &o)
 Specialization for C-style strings.
Public Attributes inherited from CppSpec::Pretty
+std::string _name
Protected Attributes inherited from CppSpec::Matchers::MatcherBase< A, void * >
+void * expected_
+Expectation< A > & expectation_
+

Member Function Documentation

+ +

◆ description()

+ +
+
+
+template<typename A, typename Ex>
+ + + + + +
+ + + + + + + +
std::string CppSpec::Matchers::Throw< A, Ex >::description ()
+
+overridevirtual
+
+ +

Get the description of the Matcher.

+
Returns
the description
+ +

Reimplemented from CppSpec::Matchers::MatcherBase< A, void * >.

+ +
+
+ +

◆ failure_message()

+ +
+
+
+template<typename A, typename Ex>
+ + + + + +
+ + + + + + + +
std::string CppSpec::Matchers::Throw< A, Ex >::failure_message ()
+
+overridevirtual
+
+ +

Get message to give on match failure.

+
Returns
the message
+ +

Reimplemented from CppSpec::Matchers::MatcherBase< A, void * >.

+ +
+
+ +

◆ failure_message_when_negated()

+ +
+
+
+template<typename A, typename Ex>
+ + + + + +
+ + + + + + + +
std::string CppSpec::Matchers::Throw< A, Ex >::failure_message_when_negated ()
+
+overridevirtual
+
+ +

Get message to give on match failure when negated.

+
Returns
the message
+ +

Reimplemented from CppSpec::Matchers::MatcherBase< A, void * >.

+ +
+
+ +

◆ match()

+ +
+
+
+template<class A, class Ex>
+ + + + + +
+ + + + + + + +
bool CppSpec::Matchers::Throw< A, Ex >::match ()
+
+overridevirtual
+
+
+ +

◆ verb()

+ +
+
+
+template<class A, class Ex>
+ + + + + +
+ + + + + + + +
std::string CppSpec::Matchers::Throw< A, Ex >::verb ()
+
+inlineoverridevirtual
+
+
+
The documentation for this class was generated from the following file: +
+
+ +
+ + + + diff --git a/doxygen/classCppSpec_1_1Matchers_1_1Throw.js b/doxygen/classCppSpec_1_1Matchers_1_1Throw.js new file mode 100644 index 0000000..abd681c --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1Throw.js @@ -0,0 +1,6 @@ +var classCppSpec_1_1Matchers_1_1Throw = +[ + [ "description", "classCppSpec_1_1Matchers_1_1Throw.html#aef53d3272e3a97b8721fdb222e823ec0", null ], + [ "failure_message", "classCppSpec_1_1Matchers_1_1Throw.html#a8d6b1eec9c58c22385addc8081a55a50", null ], + [ "failure_message_when_negated", "classCppSpec_1_1Matchers_1_1Throw.html#a967e7cdde3e4cc3db7425f39dfef9125", null ] +]; \ No newline at end of file diff --git a/doxygen/classCppSpec_1_1Matchers_1_1Throw__coll__graph.map b/doxygen/classCppSpec_1_1Matchers_1_1Throw__coll__graph.map new file mode 100644 index 0000000..f6d2c6c --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1Throw__coll__graph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/doxygen/classCppSpec_1_1Matchers_1_1Throw__coll__graph.md5 b/doxygen/classCppSpec_1_1Matchers_1_1Throw__coll__graph.md5 new file mode 100644 index 0000000..58ad941 --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1Throw__coll__graph.md5 @@ -0,0 +1 @@ +7d6ac6b9385203251a4b16f7fa480b19 \ No newline at end of file diff --git a/doxygen/classCppSpec_1_1Matchers_1_1Throw__coll__graph.png b/doxygen/classCppSpec_1_1Matchers_1_1Throw__coll__graph.png new file mode 100644 index 0000000..02e972c Binary files /dev/null and b/doxygen/classCppSpec_1_1Matchers_1_1Throw__coll__graph.png differ diff --git a/doxygen/classCppSpec_1_1Matchers_1_1Throw__inherit__graph.map b/doxygen/classCppSpec_1_1Matchers_1_1Throw__inherit__graph.map new file mode 100644 index 0000000..f6d2c6c --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1Throw__inherit__graph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/doxygen/classCppSpec_1_1Matchers_1_1Throw__inherit__graph.md5 b/doxygen/classCppSpec_1_1Matchers_1_1Throw__inherit__graph.md5 new file mode 100644 index 0000000..58ad941 --- /dev/null +++ b/doxygen/classCppSpec_1_1Matchers_1_1Throw__inherit__graph.md5 @@ -0,0 +1 @@ +7d6ac6b9385203251a4b16f7fa480b19 \ No newline at end of file diff --git a/doxygen/classCppSpec_1_1Matchers_1_1Throw__inherit__graph.png b/doxygen/classCppSpec_1_1Matchers_1_1Throw__inherit__graph.png new file mode 100644 index 0000000..02e972c Binary files /dev/null and b/doxygen/classCppSpec_1_1Matchers_1_1Throw__inherit__graph.png differ diff --git a/doxygen/classCppSpec_1_1Result-members.html b/doxygen/classCppSpec_1_1Result-members.html new file mode 100644 index 0000000..2e013f3 --- /dev/null +++ b/doxygen/classCppSpec_1_1Result-members.html @@ -0,0 +1,133 @@ + + + + + + + +C++Spec: Member List + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
CppSpec::Result Member List
+
+
+ +

This is the complete list of members for CppSpec::Result, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + +
error(std::source_location location) noexcept (defined in CppSpec::Result)CppSpec::Resultinlinestatic
error_with(std::source_location location, std::string error_message) noexcept (defined in CppSpec::Result)CppSpec::Resultinlinestatic
failure(std::source_location location) noexcept (defined in CppSpec::Result)CppSpec::Resultinlinestatic
failure_with(std::source_location location, std::string failure_message) noexcept (defined in CppSpec::Result)CppSpec::Resultinlinestatic
get_location() const noexcept (defined in CppSpec::Result)CppSpec::Resultinline
get_location_string() const noexcept (defined in CppSpec::Result)CppSpec::Resultinline
get_message() const noexcept (defined in CppSpec::Result)CppSpec::Resultinline
get_type() const noexcept (defined in CppSpec::Result)CppSpec::Resultinline
is_error() const noexcept (defined in CppSpec::Result)CppSpec::Resultinline
is_failure() const noexcept (defined in CppSpec::Result)CppSpec::Resultinline
is_success() const noexcept (defined in CppSpec::Result)CppSpec::Resultinline
operator<< (defined in CppSpec::Result)CppSpec::Resultfriend
reduce(const Result &lhs, const Result &rhs) noexcept (defined in CppSpec::Result)CppSpec::Resultinlinestatic
Result()=default (defined in CppSpec::Result)CppSpec::Result
set_message(std::string message) noexcept (defined in CppSpec::Result)CppSpec::Resultinline
set_status(Status status) noexcept (defined in CppSpec::Result)CppSpec::Resultinline
set_type(std::string type) noexcept (defined in CppSpec::Result)CppSpec::Resultinline
skipped() const noexcept (defined in CppSpec::Result)CppSpec::Resultinline
skipped(std::source_location location) noexcept (defined in CppSpec::Result)CppSpec::Resultinlinestatic
skipped_with(std::source_location location, std::string skipped_message) noexcept (defined in CppSpec::Result)CppSpec::Resultinlinestatic
Status enum name (defined in CppSpec::Result)CppSpec::Result
status() const noexcept (defined in CppSpec::Result)CppSpec::Resultinline
success(std::source_location location) noexcept (defined in CppSpec::Result)CppSpec::Resultinlinestatic
success_with(std::source_location location, std::string success_message) noexcept (defined in CppSpec::Result)CppSpec::Resultinlinestatic
+
+
+ + + + diff --git a/doxygen/classCppSpec_1_1Result.html b/doxygen/classCppSpec_1_1Result.html new file mode 100644 index 0000000..a977812 --- /dev/null +++ b/doxygen/classCppSpec_1_1Result.html @@ -0,0 +1,179 @@ + + + + + + + +C++Spec: CppSpec::Result Class Reference + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
CppSpec::Result Class Reference
+
+
+ + + +

+Public Types

enum class  Status { Success +, Failure +, Error +, Skipped + }
+ + + + + + + + + + + + + +

+Public Member Functions

+void set_status (Status status) noexcept
+Status status () const noexcept
+bool is_success () const noexcept
+bool is_failure () const noexcept
+bool skipped () const noexcept
+bool is_error () const noexcept
+std::source_location get_location () const noexcept
+std::string get_location_string () const noexcept
+std::string get_type () const noexcept
+void set_type (std::string type) noexcept
+std::string get_message () const noexcept
+Result & set_message (std::string message) noexcept
+ + + + + + + + + + +

+Static Public Member Functions

+static Result reduce (const Result &lhs, const Result &rhs) noexcept
+static Result success (std::source_location location) noexcept
+static Result failure (std::source_location location) noexcept
+static Result success_with (std::source_location location, std::string success_message) noexcept
+static Result failure_with (std::source_location location, std::string failure_message) noexcept
+static Result error (std::source_location location) noexcept
+static Result error_with (std::source_location location, std::string error_message) noexcept
+static Result skipped (std::source_location location) noexcept
+static Result skipped_with (std::source_location location, std::string skipped_message) noexcept
+ + +

+Friends

+std::ostream & operator<< (std::ostream &os, const Result &res)
+
The documentation for this class was generated from the following file: +
+
+ +
+ + + + diff --git a/doxygen/classCppSpec_1_1Runnable-members.html b/doxygen/classCppSpec_1_1Runnable-members.html new file mode 100644 index 0000000..60efc74 --- /dev/null +++ b/doxygen/classCppSpec_1_1Runnable-members.html @@ -0,0 +1,130 @@ + + + + + + + +C++Spec: Member List + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
CppSpec::Runnable Member List
+
+
+ +

This is the complete list of members for CppSpec::Runnable, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + +
get_children() noexcept (defined in CppSpec::Runnable)CppSpec::Runnableinline
get_children() const noexcept (defined in CppSpec::Runnable)CppSpec::Runnableinline
get_location() const noexcept (defined in CppSpec::Runnable)CppSpec::Runnableinline
get_parent() noexceptCppSpec::Runnableinline
get_parent() const noexcept (defined in CppSpec::Runnable)CppSpec::Runnableinline
get_parent_as() noexcept (defined in CppSpec::Runnable)CppSpec::Runnableinline
get_parent_as() const noexcept (defined in CppSpec::Runnable)CppSpec::Runnableinline
get_result() const (defined in CppSpec::Runnable)CppSpec::Runnableinlinevirtual
get_runtime() const (defined in CppSpec::Runnable)CppSpec::Runnableinline
get_start_time() const (defined in CppSpec::Runnable)CppSpec::Runnableinline
has_parent() noexceptCppSpec::Runnableinline
has_parent() const noexcept (defined in CppSpec::Runnable)CppSpec::Runnableinline
make_child(Args &&... args) (defined in CppSpec::Runnable)CppSpec::Runnableinline
num_failures() const noexcept (defined in CppSpec::Runnable)CppSpec::Runnableinline
num_tests() const noexcept (defined in CppSpec::Runnable)CppSpec::Runnableinline
padding() const noexceptCppSpec::Runnableinline
run()=0 (defined in CppSpec::Runnable)CppSpec::Runnablepure virtual
Runnable(std::source_location location) (defined in CppSpec::Runnable)CppSpec::Runnableinline
set_location(std::source_location location) noexcept (defined in CppSpec::Runnable)CppSpec::Runnableinline
timed_run() (defined in CppSpec::Runnable)CppSpec::Runnableinlinevirtual
~Runnable()=default (defined in CppSpec::Runnable)CppSpec::Runnablevirtual
+
+
+ + + + diff --git a/doxygen/classCppSpec_1_1Runnable.html b/doxygen/classCppSpec_1_1Runnable.html new file mode 100644 index 0000000..b95ed65 --- /dev/null +++ b/doxygen/classCppSpec_1_1Runnable.html @@ -0,0 +1,221 @@ + + + + + + + +C++Spec: CppSpec::Runnable Class Reference + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
CppSpec::Runnable Class Referenceabstract
+
+
+ +

Base class for all objects in the execution tree. + More...

+ +

#include <runnable.hpp>

+
+Inheritance diagram for CppSpec::Runnable:
+
+
Inheritance graph
+ + + + + + + + + + + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

Runnable (std::source_location location)
+bool has_parent () noexcept
 Check to see if the Runnable has a parent.
+bool has_parent () const noexcept
+Runnable * get_parent () noexcept
 Get the Runnable's parent.
+const Runnable * get_parent () const noexcept
+std::list< std::shared_ptr< Runnable > > & get_children () noexcept
+const std::list< std::shared_ptr< Runnable > > & get_children () const noexcept
+template<class C>
C * get_parent_as () noexcept
+template<class C>
const C * get_parent_as () const noexcept
+template<typename T, typename... Args>
T * make_child (Args &&... args)
std::string padding () const noexcept
 Generate padding (indentation) fore the current object.
+std::source_location get_location () const noexcept
+void set_location (std::source_location location) noexcept
+virtual void run ()=0
+virtual void timed_run ()
+std::chrono::duration< double > get_runtime () const
+std::chrono::time_point< std::chrono::system_clock > get_start_time () const
+virtual Result get_result () const
+size_t num_tests () const noexcept
+size_t num_failures () const noexcept
+

Detailed Description

+

Base class for all objects in the execution tree.

+

A base class for all objects that comprise some abstract structure with a nesting concept. Used to propogate ('pass') failures from leaf to root without exceptions (and/or code-jumping), thus allowing execution to continue virtually uninterrupted.

+

Member Function Documentation

+ +

◆ padding()

+ +
+
+ + + + + +
+ + + + + + + +
std::string CppSpec::Runnable::padding () const
+
+inlinenodiscardnoexcept
+
+ +

Generate padding (indentation) fore the current object.

+
Returns
A string of spaces for use in pretty-printing.
+ +
+
+
The documentation for this class was generated from the following file: +
+
+ +
+ + + + diff --git a/doxygen/classCppSpec_1_1Runnable.js b/doxygen/classCppSpec_1_1Runnable.js new file mode 100644 index 0000000..3ae6543 --- /dev/null +++ b/doxygen/classCppSpec_1_1Runnable.js @@ -0,0 +1,6 @@ +var classCppSpec_1_1Runnable = +[ + [ "get_parent", "classCppSpec_1_1Runnable.html#a171d4bd2bf59d1bd30a5703d60d7e711", null ], + [ "has_parent", "classCppSpec_1_1Runnable.html#a577ef926f752c8f41a60f48e0cea88b4", null ], + [ "padding", "classCppSpec_1_1Runnable.html#a31c0f37f68ef934bbd94b6413d777695", null ] +]; \ No newline at end of file diff --git a/doxygen/classCppSpec_1_1Runnable__inherit__graph.map b/doxygen/classCppSpec_1_1Runnable__inherit__graph.map new file mode 100644 index 0000000..f33d77d --- /dev/null +++ b/doxygen/classCppSpec_1_1Runnable__inherit__graph.map @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/doxygen/classCppSpec_1_1Runnable__inherit__graph.md5 b/doxygen/classCppSpec_1_1Runnable__inherit__graph.md5 new file mode 100644 index 0000000..ae6caae --- /dev/null +++ b/doxygen/classCppSpec_1_1Runnable__inherit__graph.md5 @@ -0,0 +1 @@ +633999344d0e51fe5f1e29a1073565c4 \ No newline at end of file diff --git a/doxygen/classCppSpec_1_1Runnable__inherit__graph.png b/doxygen/classCppSpec_1_1Runnable__inherit__graph.png new file mode 100644 index 0000000..69e5c0a Binary files /dev/null and b/doxygen/classCppSpec_1_1Runnable__inherit__graph.png differ diff --git a/doxygen/classCppSpec_1_1Runner-members.html b/doxygen/classCppSpec_1_1Runner-members.html new file mode 100644 index 0000000..fbfce6d --- /dev/null +++ b/doxygen/classCppSpec_1_1Runner-members.html @@ -0,0 +1,115 @@ + + + + + + + +C++Spec: Member List + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
CppSpec::Runner Member List
+
+
+ +

This is the complete list of members for CppSpec::Runner, including all inherited members.

+ + + + + + + +
add_spec(Description &spec)CppSpec::Runnerinline
add_specs(Specs &... specs) (defined in CppSpec::Runner)CppSpec::Runnerinline
exec() (defined in CppSpec::Runner)CppSpec::Runnerinline
run(std::source_location location=std::source_location::current()) (defined in CppSpec::Runner)CppSpec::Runnerinline
Runner(Formatters &&... formatters) (defined in CppSpec::Runner)CppSpec::Runnerinlineexplicit
Runner(std::list< std::shared_ptr< Formatters::BaseFormatter > > &&formatters) (defined in CppSpec::Runner)CppSpec::Runnerinlineexplicit
+
+
+ + + + diff --git a/doxygen/classCppSpec_1_1Runner.html b/doxygen/classCppSpec_1_1Runner.html new file mode 100644 index 0000000..acfd8fd --- /dev/null +++ b/doxygen/classCppSpec_1_1Runner.html @@ -0,0 +1,177 @@ + + + + + + + +C++Spec: CppSpec::Runner Class Reference + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
CppSpec::Runner Class Reference
+
+
+ +

A collection of Descriptions that are run in sequence. + More...

+ +

#include <runner.hpp>

+ + + + + + + + + + + +

+Public Member Functions

+template<typename... Formatters>
 Runner (Formatters &&... formatters)
Runner (std::list< std::shared_ptr< Formatters::BaseFormatter > > &&formatters)
Runner & add_spec (Description &spec)
 Add a Description object.
+template<typename... Specs>
Runner & add_specs (Specs &... specs)
+Result run (std::source_location location=std::source_location::current())
+Result exec ()
+

Detailed Description

+

A collection of Descriptions that are run in sequence.

+

Member Function Documentation

+ +

◆ add_spec()

+ +
+
+ + + + + +
+ + + + + + + +
Runner & CppSpec::Runner::add_spec (Description & spec)
+
+inline
+
+ +

Add a Description object.

+
Parameters
+ + +
specthe spec to be added
+
+
+
Returns
a reference to the modified Runner
+ +
+
+
The documentation for this class was generated from the following file: +
+
+ +
+ + + + diff --git a/doxygen/classCppSpec_1_1Runner.js b/doxygen/classCppSpec_1_1Runner.js new file mode 100644 index 0000000..dd1e106 --- /dev/null +++ b/doxygen/classCppSpec_1_1Runner.js @@ -0,0 +1,4 @@ +var classCppSpec_1_1Runner = +[ + [ "add_spec", "classCppSpec_1_1Runner.html#ad990a37936514288a892460e7eb87dd1", null ] +]; \ No newline at end of file diff --git a/doxygen/class__description_8hpp.html b/doxygen/class__description_8hpp.html new file mode 100644 index 0000000..4fb76b2 --- /dev/null +++ b/doxygen/class__description_8hpp.html @@ -0,0 +1,309 @@ + + + + + + + +C++Spec: include/class_description.hpp File Reference + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
class_description.hpp File Reference
+
+
+
#include <source_location>
+#include <string>
+#include "description.hpp"
+
+Include dependency graph for class_description.hpp:
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+This graph shows which files directly or indirectly include this file:
+
+
+ + + + + +
+
+

Go to the source code of this file.

+ + + + +

+Classes

class  CppSpec::ClassDescription< T >
 A Description with a defined subject. More...
+ + + +

+Typedefs

+template<class T>
using CppSpec::ClassContext = ClassDescription<T>
+ + + + + +

+Functions

+template<Util::not_c_string U>
 CppSpec::ClassDescription (U &, std::function< void(ClassDescription< U > &)>, std::source_location) -> ClassDescription< U >
+template<Util::not_c_string U>
 CppSpec::ClassDescription (U &&, std::function< void(ClassDescription< U > &)>, std::source_location) -> ClassDescription< U >
+
+
+ +
+ + + + diff --git a/doxygen/class__description_8hpp.js b/doxygen/class__description_8hpp.js new file mode 100644 index 0000000..b264014 --- /dev/null +++ b/doxygen/class__description_8hpp.js @@ -0,0 +1,4 @@ +var class__description_8hpp = +[ + [ "CppSpec::ClassDescription< T >", "classCppSpec_1_1ClassDescription.html", "classCppSpec_1_1ClassDescription" ] +]; \ No newline at end of file diff --git a/doxygen/class__description_8hpp__dep__incl.map b/doxygen/class__description_8hpp__dep__incl.map new file mode 100644 index 0000000..8578eb5 --- /dev/null +++ b/doxygen/class__description_8hpp__dep__incl.map @@ -0,0 +1,5 @@ + + + + + diff --git a/doxygen/class__description_8hpp__dep__incl.md5 b/doxygen/class__description_8hpp__dep__incl.md5 new file mode 100644 index 0000000..0332a48 --- /dev/null +++ b/doxygen/class__description_8hpp__dep__incl.md5 @@ -0,0 +1 @@ +179b5e7faeb65cca5c1a20427c30be89 \ No newline at end of file diff --git a/doxygen/class__description_8hpp__dep__incl.png b/doxygen/class__description_8hpp__dep__incl.png new file mode 100644 index 0000000..dd74733 Binary files /dev/null and b/doxygen/class__description_8hpp__dep__incl.png differ diff --git a/doxygen/class__description_8hpp__incl.map b/doxygen/class__description_8hpp__incl.map new file mode 100644 index 0000000..b6eb293 --- /dev/null +++ b/doxygen/class__description_8hpp__incl.map @@ -0,0 +1,154 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doxygen/class__description_8hpp__incl.md5 b/doxygen/class__description_8hpp__incl.md5 new file mode 100644 index 0000000..4897110 --- /dev/null +++ b/doxygen/class__description_8hpp__incl.md5 @@ -0,0 +1 @@ +18257b2d0546cad576d1e12ad9acc3e7 \ No newline at end of file diff --git a/doxygen/class__description_8hpp__incl.png b/doxygen/class__description_8hpp__incl.png new file mode 100644 index 0000000..a97e67a Binary files /dev/null and b/doxygen/class__description_8hpp__incl.png differ diff --git a/doxygen/class__description_8hpp_source.html b/doxygen/class__description_8hpp_source.html new file mode 100644 index 0000000..765ed51 --- /dev/null +++ b/doxygen/class__description_8hpp_source.html @@ -0,0 +1,356 @@ + + + + + + + +C++Spec: include/class_description.hpp Source File + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
class_description.hpp
+
+
+Go to the documentation of this file.
1
+
2#pragma once
+
3#include <source_location>
+
4#include <string>
+
5
+
6#include "description.hpp"
+
7
+
8namespace CppSpec {
+
9
+
21template <class T>
+
+
22class ClassDescription : public Description {
+
23 using Block = std::function<void(ClassDescription<T>&)>;
+
24
+
25 Block block;
+
26 std::string type;
+
27
+
28 public:
+
29 T subject; // subject field public for usage in `expect([self.]subject)`
+
30
+
31 // Constructor
+
32 // if there's no explicit subject given, then use
+
33 // the default constructor of the given type as the implicit subject.
+
34 ClassDescription(Block block, std::source_location location = std::source_location::current())
+
35 : Description(location, Pretty::to_word(subject)),
+
36 block(block),
+
37 type(" : " + Util::demangle(typeid(T).name())),
+
38 subject(T()) {}
+
39
+
40 ClassDescription(const char* description,
+
41 Block block,
+
42 std::source_location location = std::source_location::current())
+
43 : Description(location, description), block(block), subject(T()) {}
+
44
+
45 ClassDescription(const char* description,
+
46 T& subject,
+
47 Block block,
+
48 std::source_location location = std::source_location::current())
+
49 : Description(location, description), block(block), subject(subject) {}
+
50
+
51 template <Util::not_c_string U>
+
52 ClassDescription(U& subject, Block block, std::source_location location = std::source_location::current())
+
53 : Description(location, Pretty::to_word(subject)),
+
54 block(block),
+
55 type(" : " + Util::demangle(typeid(T).name())),
+
56 subject(subject) {}
+
57
+
58 ClassDescription(const char* description,
+
59 T&& subject,
+
60 Block block,
+
61 std::source_location location = std::source_location::current())
+
62 : Description(location, description), block(block), subject(std::move(subject)) {}
+
63
+
64 template <Util::not_c_string U>
+
65 ClassDescription(U&& subject, Block block, std::source_location location = std::source_location::current())
+
66 : Description(location, Pretty::to_word(subject)),
+
67 block(block),
+
68 type(" : " + Util::demangle(typeid(T).name())),
+
69 subject(std::forward<U>(subject)) {}
+
70
+
71 template <typename U>
+
72 ClassDescription(std::initializer_list<U> init_list,
+
73 Block block,
+
74 std::source_location location = std::source_location::current())
+
75 : Description(location, Pretty::to_word(subject)),
+
76 block(block),
+
77 type(" : " + Util::demangle(typeid(T).name())),
+
78 subject(T(init_list)) {}
+
79
+
80 template <typename U>
+
81 ClassDescription(const char* description,
+
82 std::initializer_list<U> init_list,
+
83 Block block,
+
84 std::source_location location = std::source_location::current())
+
85 : Description(location, description), block(block), subject(T(init_list)) {}
+
86
+
87 ItCD<T>& it(const char* name,
+
88 std::function<void(ItCD<T>&)> block,
+
89 std::source_location location = std::source_location::current());
+
90 ItCD<T>& it(std::function<void(ItCD<T>&)> block, std::source_location location = std::source_location::current());
+
91
+
92 template <class U = std::nullptr_t, class B>
+
93 ClassDescription<T>& context(const char* description,
+
94 B block,
+
95 std::source_location location = std::source_location::current());
+
96
+
97 template <class U, class B>
+
98 ClassDescription<U>& context(const char* description,
+
99 U& subject,
+
100 B block,
+
101 std::source_location location = std::source_location::current());
+
102
+
103 template <class U, class B>
+
104 ClassDescription<U>& context(U& subject, B block, std::source_location location = std::source_location::current()) {
+
105 return this->context("", subject, block, location);
+
106 }
+
107
+
108 template <class U, class B>
+
109 ClassDescription<U>& context(const char* description,
+
110 U&& subject,
+
111 B block,
+
112 std::source_location location = std::source_location::current());
+
113
+
114 template <class U, class B>
+
115 ClassDescription<U>& context(U&& subject, B block, std::source_location location = std::source_location::current()) {
+
116 return this->context("", std::forward<U>(subject), block, location);
+
117 }
+
118 void run() override;
+
119
+
120 [[nodiscard]] std::string get_subject_type() const noexcept override { return type; }
+
121};
+
+
122
+
123template <Util::not_c_string U>
+
124ClassDescription(U&, std::function<void(ClassDescription<U>&)>, std::source_location) -> ClassDescription<U>;
+
125
+
126template <Util::not_c_string U>
+
127ClassDescription(U&&, std::function<void(ClassDescription<U>&)>, std::source_location) -> ClassDescription<U>;
+
128
+
129template <class T>
+
130using ClassContext = ClassDescription<T>;
+
131
+
132template <class T>
+
133template <class U, class B>
+
134ClassContext<U>& ClassDescription<T>::context(const char* description,
+
135 U& subject,
+
136 B block,
+
137 std::source_location location) {
+
138 auto* context = this->make_child<ClassContext<U>>(description, subject, block, location);
+
139 context->ClassContext<U>::before_eaches = this->before_eaches;
+
140 context->ClassContext<U>::after_eaches = this->after_eaches;
+
141 context->timed_run();
+
142 return *context;
+
143}
+
144
+
145template <class T>
+
146template <class U, class B>
+
147ClassContext<U>& ClassDescription<T>::context(const char* description,
+
148 U&& subject,
+
149 B block,
+
150 std::source_location location) {
+
151 auto* context = this->make_child<ClassContext<U>>(description, std::forward<U>(subject), block, location);
+
152 context->ClassContext<U>::before_eaches = this->before_eaches;
+
153 context->ClassContext<U>::after_eaches = this->after_eaches;
+
154 context->timed_run();
+
155 return *context;
+
156}
+
157
+
158template <class T>
+
159template <class U, class B>
+
160ClassContext<T>& ClassDescription<T>::context(const char* description, B block, std::source_location location) {
+
161 auto* context = this->make_child<ClassContext<T>>(description, this->subject, block, location);
+
162 context->before_eaches = this->before_eaches;
+
163 context->after_eaches = this->after_eaches;
+
164 context->timed_run();
+
165 return *context;
+
166}
+
167
+
168template <Util::not_c_string T, class B>
+
169ClassContext<T>& Description::context(T& subject, B block, std::source_location location) {
+
170 auto* context = this->make_child<ClassContext<T>>(subject, block, location);
+
171 context->before_eaches = this->before_eaches;
+
172 context->after_eaches = this->after_eaches;
+
173 context->timed_run();
+
174 return *context;
+
175}
+
176
+
177template <class T, class B>
+
178ClassContext<T>& Description::context(const char* description, T& subject, B block, std::source_location location) {
+
179 auto* context = this->make_child<ClassContext<T>>(description, subject, block, location);
+
180 context->before_eaches = this->before_eaches;
+
181 context->after_eaches = this->after_eaches;
+
182 context->timed_run();
+
183 return *context;
+
184}
+
185
+
186template <Util::not_c_string T, class B>
+
187ClassContext<T>& Description::context(T&& subject, B block, std::source_location location) {
+
188 auto* context = this->make_child<ClassContext<T>>(std::forward<T>(subject), block, location);
+
189 context->before_eaches = this->before_eaches;
+
190 context->after_eaches = this->after_eaches;
+
191 context->timed_run();
+
192 return *context;
+
193}
+
194
+
195template <class T, class B>
+
196ClassContext<T>& Description::context(const char* description, T&& subject, B block, std::source_location location) {
+
197 auto* context = this->make_child<ClassContext<T>>(description, std::forward<T>(subject), block, location);
+
198 context->before_eaches = this->before_eaches;
+
199 context->after_eaches = this->after_eaches;
+
200 context->timed_run();
+
201 return *context;
+
202}
+
203
+
204template <class T, typename U>
+
205ClassContext<T>& Description::context(std::initializer_list<U> init_list,
+
206 std::function<void(ClassDescription<T>&)> block,
+
207 std::source_location location) {
+
208 auto* context = this->make_child<ClassContext<T>>(T(init_list), block, location);
+
209 context->before_eaches = this->before_eaches;
+
210 context->after_eaches = this->after_eaches;
+
211 context->timed_run();
+
212 return *context;
+
213}
+
214
+
236template <class T>
+
+
237ItCD<T>& ClassDescription<T>::it(const char* name, std::function<void(ItCD<T>&)> block, std::source_location location) {
+
238 exec_before_eaches();
+
239 auto* it = this->make_child<ItCD<T>>(location, this->subject, name, block);
+
240 it->timed_run();
+
241 exec_after_eaches();
+
242 return *it;
+
243}
+
+
244
+
266template <class T>
+
+
267ItCD<T>& ClassDescription<T>::it(std::function<void(ItCD<T>&)> block, std::source_location location) {
+
268 exec_before_eaches();
+
269 auto* it = this->make_child<ItCD<T>>(location, this->subject, block);
+
270 it->timed_run();
+
271 exec_after_eaches();
+
272 return *it;
+
273}
+
+
274
+
275template <class T>
+
276void ClassDescription<T>::run() {
+
277 this->block(*this);
+
278 for (const auto& a : after_alls) {
+
279 a();
+
280 }
+
281}
+
282
+
283template <class T>
+
284void ItCD<T>::run() {
+
285 this->block(*this);
+
286 auto* cd = this->get_parent_as<ClassDescription<T>>();
+
287 cd->reset_lets();
+
288}
+
289
+
290} // namespace CppSpec
+
A Description with a defined subject.
Definition class_description.hpp:22
+
ItCD< T > & it(const char *name, std::function< void(ItCD< T > &)> block, std::source_location location=std::source_location::current())
Definition class_description.hpp:237
+
An it embedded in a ClassDescription.
Definition it.hpp:89
+
Defines the Description class and associated functions.
+
static std::string to_word(const T &item)
Formats an object as a string when operator<< is available.
Definition pretty_matchers.hpp:122
+
std::string demangle(const char *name)
Definition util.hpp:38
+
+
+
+ + + + diff --git a/doxygen/classes.html b/doxygen/classes.html new file mode 100644 index 0000000..87c0976 --- /dev/null +++ b/doxygen/classes.html @@ -0,0 +1,157 @@ + + + + + + + +C++Spec: Class Index + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Class Index
+
+
+
B | C | D | E | F | H | I | J | L | M | N | P | R | S | T | V
+
+
+
B
+
BaseFormatter (CppSpec::Formatters)
BeBetween (CppSpec::Matchers)
BeGreaterThan (CppSpec::Matchers)
BeLessThan (CppSpec::Matchers)
BeNullptr (CppSpec::Matchers)
BeWithin (CppSpec::Matchers)
BeWithinHelper (CppSpec::Matchers)
+
+
C
+
ClassDescription (CppSpec)
Contain (CppSpec::Matchers)
Contain< A, U, U > (CppSpec::Matchers)
ContainBase (CppSpec::Matchers)
+
+
D
+
Description (CppSpec)
+
+
E
+
EndWith (CppSpec::Matchers)
Equal (CppSpec::Matchers)
Expectation (CppSpec)
ExpectationFunc (CppSpec)
ExpectationValue (CppSpec)
+
+
F
+
Fail (CppSpec::Matchers)
FailWith (CppSpec::Matchers)
+
+
H
+
HaveError (CppSpec::Matchers)
HaveErrorEqualTo (CppSpec::Matchers)
HaveValue (CppSpec::Matchers)
HaveValueEqualTo (CppSpec::Matchers)
+
+
I
+
ItBase (CppSpec)
ItCD (CppSpec)
ItD (CppSpec)
+
+
J
+
JUnitXML (CppSpec::Formatters)
+
+
L
+
LetBase (CppSpec)
+
+
M
+
Match (CppSpec::Matchers)
MatcherBase (CppSpec::Matchers)
MatchPartial (CppSpec::Matchers)
+
+
N
+
NegativeExpectationHandler (CppSpec)
+
+
P
+
PositiveExpectationHandler (CppSpec)
Pretty (CppSpec)
Progress (CppSpec::Formatters)
+
+
R
+
Result (CppSpec::Formatters::JUnitNodes)
Result (CppSpec)
Runnable (CppSpec)
Runner (CppSpec)
+
+
S
+
Satisfy (CppSpec::Matchers)
StartWith (CppSpec::Matchers)
+
+
T
+
TAP (CppSpec::Formatters)
TestCase (CppSpec::Formatters::JUnitNodes)
TestSuite (CppSpec::Formatters::JUnitNodes)
TestSuites (CppSpec::Formatters::JUnitNodes)
Throw (CppSpec::Matchers)
+
+
V
+
Verbose (CppSpec::Formatters)
verbose_assert (CppSpec::Util)
+
+
+
+
+ + + + diff --git a/doxygen/clipboard.js b/doxygen/clipboard.js new file mode 100644 index 0000000..9da9f3c --- /dev/null +++ b/doxygen/clipboard.js @@ -0,0 +1,61 @@ +/** + +The code below is based on the Doxygen Awesome project, see +https://github.com/jothepro/doxygen-awesome-css + +MIT License + +Copyright (c) 2021 - 2022 jothepro + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +*/ + +let clipboard_title = "Copy to clipboard" +let clipboard_icon = `` +let clipboard_successIcon = `` +let clipboard_successDuration = 1000 + +$(function() { + if(navigator.clipboard) { + const fragments = document.getElementsByClassName("fragment") + for(const fragment of fragments) { + const clipboard_div = document.createElement("div") + clipboard_div.classList.add("clipboard") + clipboard_div.innerHTML = clipboard_icon + clipboard_div.title = clipboard_title + $(clipboard_div).click(function() { + const content = this.parentNode.cloneNode(true) + // filter out line number and folded fragments from file listings + content.querySelectorAll(".lineno, .ttc, .foldclosed").forEach((node) => { node.remove() }) + let text = content.textContent + // remove trailing newlines and trailing spaces from empty lines + text = text.replace(/^\s*\n/gm,'\n').replace(/\n*$/,'') + navigator.clipboard.writeText(text); + this.classList.add("success") + this.innerHTML = clipboard_successIcon + window.setTimeout(() => { // switch back to normal icon after timeout + this.classList.remove("success") + this.innerHTML = clipboard_icon + }, clipboard_successDuration); + }) + fragment.insertBefore(clipboard_div, fragment.firstChild) + } + } +}) diff --git a/doxygen/conceptCppSpec_1_1Matchers_1_1expected.html b/doxygen/conceptCppSpec_1_1Matchers_1_1expected.html new file mode 100644 index 0000000..bb88c16 --- /dev/null +++ b/doxygen/conceptCppSpec_1_1Matchers_1_1expected.html @@ -0,0 +1,113 @@ + + + + + + + +C++Spec: CppSpec::Matchers::expected Concept Reference + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
CppSpec::Matchers::expected Concept Reference
+
+
+

Concept definition

+
template<typename T>
+
concept expected = requires(T t) {
+
{ t.error() } -> std::same_as<typename T::error_type&>;
+
}
+
Definition have_error.hpp:9
+
+
+
+ + + + diff --git a/doxygen/conceptCppSpec_1_1Matchers_1_1optional.html b/doxygen/conceptCppSpec_1_1Matchers_1_1optional.html new file mode 100644 index 0000000..ce0de51 --- /dev/null +++ b/doxygen/conceptCppSpec_1_1Matchers_1_1optional.html @@ -0,0 +1,113 @@ + + + + + + + +C++Spec: CppSpec::Matchers::optional Concept Reference + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
CppSpec::Matchers::optional Concept Reference
+
+
+

Concept definition

+
template<typename T>
+
concept optional = requires(T t) {
+
{ t.has_value() } -> std::same_as<bool>;
+
}
+
Definition have_value.hpp:9
+
+
+
+ + + + diff --git a/doxygen/conceptCppSpec_1_1Util_1_1is__container.html b/doxygen/conceptCppSpec_1_1Util_1_1is__container.html new file mode 100644 index 0000000..3376b6b --- /dev/null +++ b/doxygen/conceptCppSpec_1_1Util_1_1is__container.html @@ -0,0 +1,130 @@ + + + + + + + +C++Spec: CppSpec::Util::is_container Concept Reference + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
CppSpec::Util::is_container Concept Reference
+
+
+ +

Concept for checking whether T is a container type. +More...

+ +

#include <util.hpp>

+

Concept definition

+
template<typename C>
+
concept is_container = requires(C c) {
+
requires std::ranges::range<C>;
+
{ c.max_size() } -> std::integral;
+
{ c.empty() } -> std::convertible_to<bool>;
+
}
+
Concept for checking whether T is a container type.
Definition util.hpp:65
+

Detailed Description

+

Concept for checking whether T is a container type.

+

Provides the member constant value which is equal to true, if T is a container type. Otherwise, value is equal to false.

+

A container is defined by having the functions begin, end, max_size, and empty.

+
Template Parameters
+ + +
Ta type to check
+
+
+
+
+
+ + + + diff --git a/doxygen/conceptCppSpec_1_1Util_1_1is__functional.html b/doxygen/conceptCppSpec_1_1Util_1_1is__functional.html new file mode 100644 index 0000000..c20423a --- /dev/null +++ b/doxygen/conceptCppSpec_1_1Util_1_1is__functional.html @@ -0,0 +1,125 @@ + + + + + + + +C++Spec: CppSpec::Util::is_functional Concept Reference + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
CppSpec::Util::is_functional Concept Reference
+
+
+

Concept definition

+
template<typename C>
+
concept is_functional =
+
// The C++ reference says that all "functions" (not FunctionObjects) respond to
+
// std::is_function<T>
+
std::is_function_v<C> ||
+
+
// An alternative from Stack Overflow question 18107368. Anything that could
+
// possibly be "functional" should be able to be cast to std::function<void()>
+
std::is_convertible_v<C, std::function<void()>> ||
+
+
// The C++ reference also says that something qualifies as a FunctionObject iff
+
// std::is_object_v<T> is true and the object responds to the call operator()
+
requires(C func) {
+
requires std::is_object_v<C>;
+
{ func() } -> std::invocable<>;
+
}
+
Definition util.hpp:86
+
+
+
+ + + + diff --git a/doxygen/conceptCppSpec_1_1Util_1_1is__not__functional.html b/doxygen/conceptCppSpec_1_1Util_1_1is__not__functional.html new file mode 100644 index 0000000..c111444 --- /dev/null +++ b/doxygen/conceptCppSpec_1_1Util_1_1is__not__functional.html @@ -0,0 +1,112 @@ + + + + + + + +C++Spec: CppSpec::Util::is_not_functional Concept Reference + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
CppSpec::Util::is_not_functional Concept Reference
+
+
+

Concept definition

+
template<typename C>
+ +
Definition util.hpp:86
+
Definition util.hpp:103
+
+
+
+ + + + diff --git a/doxygen/conceptCppSpec_1_1Util_1_1is__streamable.html b/doxygen/conceptCppSpec_1_1Util_1_1is__streamable.html new file mode 100644 index 0000000..b79916c --- /dev/null +++ b/doxygen/conceptCppSpec_1_1Util_1_1is__streamable.html @@ -0,0 +1,127 @@ + + + + + + + +C++Spec: CppSpec::Util::is_streamable Concept Reference + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
CppSpec::Util::is_streamable Concept Reference
+
+
+ +

Checks whether T can be streamed. +More...

+ +

#include <util.hpp>

+

Concept definition

+
template<typename C>
+
concept is_streamable = requires(std::ostream& os, const C& obj) {
+
{ os << obj } -> std::same_as<std::ostream&>;
+
}
+
Checks whether T can be streamed.
Definition util.hpp:81
+

Detailed Description

+

Checks whether T can be streamed.

+

A streamable type is defined by having the operator<< defined in scope.

+
Template Parameters
+ + +
Ca type to check
+
+
+
+
+
+ + + + diff --git a/doxygen/conceptCppSpec_1_1Util_1_1not__c__string.html b/doxygen/conceptCppSpec_1_1Util_1_1not__c__string.html new file mode 100644 index 0000000..4a61384 --- /dev/null +++ b/doxygen/conceptCppSpec_1_1Util_1_1not__c__string.html @@ -0,0 +1,112 @@ + + + + + + + +C++Spec: CppSpec::Util::not_c_string Concept Reference + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
CppSpec::Util::not_c_string Concept Reference
+
+
+

Concept definition

+
template<typename T>
+
concept not_c_string = !std::is_same_v<T, const char*> && !std::is_same_v<T, char*> &&
+
!std::is_convertible_v<T, const char*> && !std::is_convertible_v<T, char*>
+
Definition util.hpp:106
+
+
+
+ + + + diff --git a/doxygen/conceptCppSpec_1_1is__result.html b/doxygen/conceptCppSpec_1_1is__result.html new file mode 100644 index 0000000..91aec57 --- /dev/null +++ b/doxygen/conceptCppSpec_1_1is__result.html @@ -0,0 +1,111 @@ + + + + + + + +C++Spec: CppSpec::is_result Concept Reference + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
CppSpec::is_result Concept Reference
+
+
+

Concept definition

+
template<typename T>
+
concept is_result = is_result_v<T>
+
Definition result.hpp:113
+
+
+
+ + + + diff --git a/doxygen/concepts.html b/doxygen/concepts.html new file mode 100644 index 0000000..0145b25 --- /dev/null +++ b/doxygen/concepts.html @@ -0,0 +1,121 @@ + + + + + + + +C++Spec: Concepts + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Concepts
+
+
+
Here is a list of all documented concepts with brief descriptions:
+
[detail level 123]
+ + + + + + + + + + + +
 NCppSpec
 NMatchers
 Rexpected
 Roptional
 NUtil
 Ris_containerConcept for checking whether T is a container type
 Ris_streamableChecks whether T can be streamed
 Ris_functional
 Ris_not_functional
 Rnot_c_string
 Ris_result
+
+
+
+
+ + + + diff --git a/doxygen/concepts.js b/doxygen/concepts.js new file mode 100644 index 0000000..023fe57 --- /dev/null +++ b/doxygen/concepts.js @@ -0,0 +1,17 @@ +var concepts = +[ + [ "CppSpec", null, [ + [ "Matchers", null, [ + [ "expected", "conceptCppSpec_1_1Matchers_1_1expected.html", null ], + [ "optional", "conceptCppSpec_1_1Matchers_1_1optional.html", null ] + ] ], + [ "Util", null, [ + [ "is_container", "conceptCppSpec_1_1Util_1_1is__container.html", null ], + [ "is_streamable", "conceptCppSpec_1_1Util_1_1is__streamable.html", null ], + [ "is_functional", "conceptCppSpec_1_1Util_1_1is__functional.html", null ], + [ "is_not_functional", "conceptCppSpec_1_1Util_1_1is__not__functional.html", null ], + [ "not_c_string", "conceptCppSpec_1_1Util_1_1not__c__string.html", null ] + ] ], + [ "is_result", "conceptCppSpec_1_1is__result.html", null ] + ] ] +]; \ No newline at end of file diff --git a/doxygen/contain_8hpp.html b/doxygen/contain_8hpp.html new file mode 100644 index 0000000..7bc95ee --- /dev/null +++ b/doxygen/contain_8hpp.html @@ -0,0 +1,239 @@ + + + + + + + +C++Spec: include/matchers/contain.hpp File Reference + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
contain.hpp File Reference
+
+
+
#include "matcher_base.hpp"
+
+Include dependency graph for contain.hpp:
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+This graph shows which files directly or indirectly include this file:
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

Go to the source code of this file.

+ + + + + +

+Classes

class  CppSpec::Matchers::ContainBase< A, E, U >
class  CppSpec::Matchers::Contain< A, E, U >
class  CppSpec::Matchers::Contain< A, U, U >
+
+
+ +
+ + + + diff --git a/doxygen/contain_8hpp.js b/doxygen/contain_8hpp.js new file mode 100644 index 0000000..4ee0af9 --- /dev/null +++ b/doxygen/contain_8hpp.js @@ -0,0 +1,6 @@ +var contain_8hpp = +[ + [ "CppSpec::Matchers::ContainBase< A, E, U >", "classCppSpec_1_1Matchers_1_1ContainBase.html", "classCppSpec_1_1Matchers_1_1ContainBase" ], + [ "CppSpec::Matchers::Contain< A, E, U >", "classCppSpec_1_1Matchers_1_1Contain.html", null ], + [ "CppSpec::Matchers::Contain< A, U, U >", "classCppSpec_1_1Matchers_1_1Contain_3_01A_00_01U_00_01U_01_4.html", null ] +]; \ No newline at end of file diff --git a/doxygen/contain_8hpp__dep__incl.map b/doxygen/contain_8hpp__dep__incl.map new file mode 100644 index 0000000..502ca45 --- /dev/null +++ b/doxygen/contain_8hpp__dep__incl.map @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doxygen/contain_8hpp__dep__incl.md5 b/doxygen/contain_8hpp__dep__incl.md5 new file mode 100644 index 0000000..d2adc80 --- /dev/null +++ b/doxygen/contain_8hpp__dep__incl.md5 @@ -0,0 +1 @@ +398aa7c844289193e95ea64620158dad \ No newline at end of file diff --git a/doxygen/contain_8hpp__dep__incl.png b/doxygen/contain_8hpp__dep__incl.png new file mode 100644 index 0000000..84afcb9 Binary files /dev/null and b/doxygen/contain_8hpp__dep__incl.png differ diff --git a/doxygen/contain_8hpp__incl.map b/doxygen/contain_8hpp__incl.map new file mode 100644 index 0000000..a6c5921 --- /dev/null +++ b/doxygen/contain_8hpp__incl.map @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doxygen/contain_8hpp__incl.md5 b/doxygen/contain_8hpp__incl.md5 new file mode 100644 index 0000000..a18cf15 --- /dev/null +++ b/doxygen/contain_8hpp__incl.md5 @@ -0,0 +1 @@ +6b8d7cf2b1ce8ee657c4cf95f56f8ce6 \ No newline at end of file diff --git a/doxygen/contain_8hpp__incl.png b/doxygen/contain_8hpp__incl.png new file mode 100644 index 0000000..d0fd526 Binary files /dev/null and b/doxygen/contain_8hpp__incl.png differ diff --git a/doxygen/contain_8hpp_source.html b/doxygen/contain_8hpp_source.html new file mode 100644 index 0000000..c5ac575 --- /dev/null +++ b/doxygen/contain_8hpp_source.html @@ -0,0 +1,258 @@ + + + + + + + +C++Spec: include/matchers/contain.hpp Source File + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
contain.hpp
+
+
+Go to the documentation of this file.
1
+
2#pragma once
+
3#include "matcher_base.hpp"
+
4
+
5namespace CppSpec::Matchers {
+
6
+
11template <typename A, typename E, typename U>
+
+
12class ContainBase : public MatcherBase<A, E> {
+
13 A actual_;
+
14
+
15 public:
+
16 std::string verb() override { return "contain"; }
+
+
17 std::string description() override;
+
+
18 std::string failure_message() override;
+
+
19 std::string failure_message_when_negated() override;
+
20 virtual bool diffable() { return true; }
+
21
+
22 ContainBase(Expectation<A>& expectation, std::initializer_list<U> expected)
+
23 : MatcherBase<A, std::vector<U>>(expectation, std::vector<U>(expected)), actual_(this->actual()) {};
+
24 ContainBase(Expectation<A>& expectation, U expected)
+
25 : MatcherBase<A, U>(expectation, expected), actual_(this->actual()) {};
+
26
+
27 protected:
+
28 bool actual_collection_includes(U expected_item);
+
29};
+
30
+
31template <typename A, typename E, typename U>
+
+ +
33 // std::vector<E> described_items;
+
34 return Pretty::improve_hash_formatting(verb() + Pretty::to_sentence(this->expected()));
+
35}
+
+
36
+
37template <typename A, typename E, typename U>
+
+ +
39 return Pretty::improve_hash_formatting(MatcherBase<A, E>::failure_message());
+
40}
+
+
41
+
42template <typename A, typename E, typename U>
+
+ +
44 return Pretty::improve_hash_formatting(MatcherBase<A, E>::failure_message_when_negated());
+
45}
+
+
+
46
+
47template <typename A, typename E, typename U>
+
48bool ContainBase<A, E, U>::actual_collection_includes(U expected_item) {
+
49 auto actual = this->actual();
+
50 auto last = *(actual.begin());
+
51 static_assert(Util::verbose_assert<std::is_convertible_v<U, decltype(last)>>::value,
+
52 "Expected item is not comparable against what is inside container.");
+
53 return std::ranges::find(actual, expected_item) != actual.end();
+
54}
+
55
+
60template <typename A, typename E, typename U>
+
+
61class Contain : public ContainBase<A, E, U> {
+
62 enum class Predicate { any, all, none };
+
63
+
64 public:
+
65 bool match() override;
+
66 bool negated_match() override;
+
67 using ContainBase<A, E, U>::ContainBase;
+
68
+
69 protected:
+
70 bool perform_match(Predicate predicate, Predicate hash_subset_predicate);
+
71};
+
+
72
+
73template <typename A, typename E, typename U>
+
74bool Contain<A, E, U>::match() {
+
75 return perform_match(Predicate::all, Predicate::all);
+
76}
+
77
+
78template <typename A, typename E, typename U>
+
79bool Contain<A, E, U>::negated_match() {
+
80 return perform_match(Predicate::none, Predicate::any);
+
81}
+
82
+
83// TODO: support std::map<E,_>
+
84template <typename A, typename E, typename U>
+
85bool Contain<A, E, U>::perform_match(Predicate predicate, Predicate /*hash_subset_predicate*/) {
+
86 bool retval = true; // start off true
+
87 for (U expected_item : this->expected()) {
+
88 retval = retval && this->actual_collection_includes(expected_item);
+
89
+
90 // Based on our main predicate
+
91 switch (predicate) {
+
92 case Predicate::all:
+
93 if (retval) { // if the collection includes the item,
+
94 continue; // continue the loop
+
95 } else { // otherwise
+
96 return false; // immediately return false
+
97 }
+
98 case Predicate::none:
+
99 if (retval) { // if the collection includes the item
+
100 return false; // immediately return false
+
101 } else { // otherwise
+
102 continue; // continue the loop
+
103 }
+
104 case Predicate::any:
+
105 if (retval) { // if the collection includes the item
+
106 return true; // immediately return true
+
107 } else { // otherwise
+
108 continue; // continue the loop
+
109 }
+
110 }
+
111 }
+
112 return true;
+
113}
+
114
+
119template <typename A, typename U>
+
+
120class Contain<A, U, U> : public ContainBase<A, U, U> {
+
121 public:
+
122 Contain(Expectation<A>& expectation, U expected) : ContainBase<A, U, U>(expectation, expected) {};
+
123
+
124 bool match() override;
+
125};
+
+
126
+
127template <typename A, typename U>
+
128bool Contain<A, U, U>::match() {
+
129 return this->actual_collection_includes(this->expected());
+
130}
+
131
+
132} // namespace CppSpec::Matchers
+
+
+
+
Wraps the target of an expectation.
Definition expectation.hpp:48
+
Definition contain.hpp:12
+
std::string failure_message() override
Get message to give on match failure.
Definition contain.hpp:38
+
std::string failure_message_when_negated() override
Get message to give on match failure when negated.
Definition contain.hpp:43
+
std::string description() override
Get the description of the Matcher.
Definition contain.hpp:32
+
Definition contain.hpp:61
+
the base class for all Matcher classes and objects
Definition matcher_base.hpp:37
+
virtual std::string failure_message_when_negated()
Get message to give on match failure when negated.
Definition matcher_base.hpp:125
+
virtual std::string failure_message()
Get message to give on match failure.
Definition matcher_base.hpp:112
+
Definition have_error.hpp:9
+
Contains the base class for all Matchers.
+
static std::string to_sentence(const T &item)
Take a single object and format it as a sentance.
Definition pretty_matchers.hpp:106
+
Helper class for static assertions that has a built-in error string.
Definition util.hpp:47
+
+
+
+ + + + diff --git a/doxygen/cookie.js b/doxygen/cookie.js new file mode 100644 index 0000000..53ad21d --- /dev/null +++ b/doxygen/cookie.js @@ -0,0 +1,58 @@ +/*! + Cookie helper functions + Copyright (c) 2023 Dimitri van Heesch + Released under MIT license. +*/ +let Cookie = { + cookie_namespace: 'doxygen_', + + readSetting(cookie,defVal) { + if (window.chrome) { + const val = localStorage.getItem(this.cookie_namespace+cookie) || + sessionStorage.getItem(this.cookie_namespace+cookie); + if (val) return val; + } else { + let myCookie = this.cookie_namespace+cookie+"="; + if (document.cookie) { + const index = document.cookie.indexOf(myCookie); + if (index != -1) { + const valStart = index + myCookie.length; + let valEnd = document.cookie.indexOf(";", valStart); + if (valEnd == -1) { + valEnd = document.cookie.length; + } + return document.cookie.substring(valStart, valEnd); + } + } + } + return defVal; + }, + + writeSetting(cookie,val,days=10*365) { // default days='forever', 0=session cookie, -1=delete + if (window.chrome) { + if (days==0) { + sessionStorage.setItem(this.cookie_namespace+cookie,val); + } else { + localStorage.setItem(this.cookie_namespace+cookie,val); + } + } else { + let date = new Date(); + date.setTime(date.getTime()+(days*24*60*60*1000)); + const expiration = days!=0 ? "expires="+date.toGMTString()+";" : ""; + document.cookie = this.cookie_namespace + cookie + "=" + + val + "; SameSite=Lax;" + expiration + "path=/"; + } + }, + + eraseSetting(cookie) { + if (window.chrome) { + if (localStorage.getItem(this.cookie_namespace+cookie)) { + localStorage.removeItem(this.cookie_namespace+cookie); + } else if (sessionStorage.getItem(this.cookie_namespace+cookie)) { + sessionStorage.removeItem(this.cookie_namespace+cookie); + } + } else { + this.writeSetting(cookie,'',-1); + } + }, +} diff --git a/doxygen/cppspec_8hpp.html b/doxygen/cppspec_8hpp.html new file mode 100644 index 0000000..a92e8c0 --- /dev/null +++ b/doxygen/cppspec_8hpp.html @@ -0,0 +1,375 @@ + + + + + + + +C++Spec: include/cppspec.hpp File Reference + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
cppspec.hpp File Reference
+
+
+ +

The core header file for Cppspec. +More...

+
#include "argparse.hpp"
+#include "class_description.hpp"
+
+Include dependency graph for cppspec.hpp:
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

Go to the source code of this file.

+ + + + + + + + + + + + + + + + + + +

+Macros

+#define auto   & self) -> void
+#define _   [=](auto& self) mutable -> void
+#define it   self.it
+#define specify   it
+#define context   self.context
+#define expect   self.expect
+#define explain   context
+#define is_expected   self.is_expected
+#define subject   self.subject
+#define before_all   self.before_all
+#define before_each   self.before_each
+#define after_all   self.after_all
+#define after_each   self.after_each
#define let(name, body)
#define CPPSPEC_MAIN(...)
#define CPPSPEC_SPEC(spec_name)
+

Detailed Description

+

The core header file for Cppspec.

+

Macro Definition Documentation

+ +

◆ CPPSPEC_MAIN

+ +
+
+ + + + + + + +
#define CPPSPEC_MAIN( ...)
+
+Value:
int main(int argc, char** const argv) { \
+
return CppSpec::parse(argc, argv).add_specs(__VA_ARGS__).exec().is_success() ? EXIT_SUCCESS : EXIT_FAILURE; \
+
}
+
+
+
+ +

◆ CPPSPEC_SPEC

+ +
+
+ + + + + + + +
#define CPPSPEC_SPEC( spec_name)
+
+Value:
int spec_name##_spec(int argc, char** const argv) { \
+
return CppSpec::parse(argc, argv).add_spec(spec_name).exec().is_success() ? EXIT_SUCCESS : EXIT_FAILURE; \
+
}
+
+
+
+ +

◆ let

+ +
+
+ + + + + + + + + + + +
#define let( name,
body )
+
+Value:
auto& name = self.let(body);
+
+
+
+
+
+ +
+ + + + diff --git a/doxygen/cppspec_8hpp__incl.map b/doxygen/cppspec_8hpp__incl.map new file mode 100644 index 0000000..98461e1 --- /dev/null +++ b/doxygen/cppspec_8hpp__incl.map @@ -0,0 +1,151 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doxygen/cppspec_8hpp__incl.md5 b/doxygen/cppspec_8hpp__incl.md5 new file mode 100644 index 0000000..2d13214 --- /dev/null +++ b/doxygen/cppspec_8hpp__incl.md5 @@ -0,0 +1 @@ +c3e0a56c7f639b87471ed12bef796a38 \ No newline at end of file diff --git a/doxygen/cppspec_8hpp__incl.png b/doxygen/cppspec_8hpp__incl.png new file mode 100644 index 0000000..24899b2 Binary files /dev/null and b/doxygen/cppspec_8hpp__incl.png differ diff --git a/doxygen/cppspec_8hpp_source.html b/doxygen/cppspec_8hpp_source.html new file mode 100644 index 0000000..31e34f6 --- /dev/null +++ b/doxygen/cppspec_8hpp_source.html @@ -0,0 +1,173 @@ + + + + + + + +C++Spec: include/cppspec.hpp Source File + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
cppspec.hpp
+
+
+Go to the documentation of this file.
1
+
5#pragma once
+
6
+
7#include "argparse.hpp"
+ +
9
+
10#ifndef CPPSPEC_MACROLESS
+
11/*>>>>>>>>>>>>>>>>>>>> MACROS <<<<<<<<<<<<<<<<<<<<<<*/
+
12
+
13// For *some* reason, MSVC++ refuses to correctly deduce the types of
+
14// Description blocks unless the void return type is explicitly stated.
+
15// GCC and clang have no problem with it being omitted. Weird.
+
16#define $ [](auto& self) -> void
+
17#define _ [=](auto& self) mutable -> void
+
18
+
19#define it self.it
+
20#define specify it
+
21
+
22// Apparently MSVC++ doesn't conform to C++14 14.2/4. Annoying.
+
23#define context self.context
+
24#define expect self.expect
+
25#define explain context // Piggybacks off of the `context` macro
+
26
+
27#define is_expected self.is_expected
+
28#define subject self.subject
+
29
+
30#define before_all self.before_all
+
31#define before_each self.before_each
+
32#define after_all self.after_all
+
33#define after_each self.after_each
+
34#define let(name, body) auto& name = self.let(body);
+
35
+
36#ifdef CPPSPEC_SEMIHOSTED
+
37#define CPPSPEC_MAIN(...) \
+
38 int main(int argc, char** const argv) { \
+
39 return CppSpec::parse(argc, argv).add_specs(__VA_ARGS__).exec().is_success() ? EXIT_SUCCESS : EXIT_FAILURE; \
+
40 } \
+
41 extern "C" int _getentropy(void* buf, size_t buflen) { \
+
42 return -1; \
+
43 }
+
44
+
45#else
+
46#define CPPSPEC_MAIN(...) \
+
47 int main(int argc, char** const argv) { \
+
48 return CppSpec::parse(argc, argv).add_specs(__VA_ARGS__).exec().is_success() ? EXIT_SUCCESS : EXIT_FAILURE; \
+
49 }
+
50#endif
+
51
+
52#define CPPSPEC_SPEC(spec_name) \
+
53 int spec_name##_spec(int argc, char** const argv) { \
+
54 return CppSpec::parse(argc, argv).add_spec(spec_name).exec().is_success() ? EXIT_SUCCESS : EXIT_FAILURE; \
+
55 }
+
56
+
57#endif
+
58/*>>>>>>>>>>>>>>>>>>> TYPEDEFS <<<<<<<<<<<<<<<<<<<<<*/
+
59
+
60using describe = CppSpec::Description;
+
61
+
62template <class T>
+
63using describe_a = CppSpec::ClassDescription<T>;
+
64
+
65template <class T>
+
66using describe_an = CppSpec::ClassDescription<T>;
+
A Description with a defined subject.
Definition class_description.hpp:22
+
Definition description.hpp:22
+ +
+
+
+ + + + diff --git a/doxygen/description_8hpp.html b/doxygen/description_8hpp.html new file mode 100644 index 0000000..113a846 --- /dev/null +++ b/doxygen/description_8hpp.html @@ -0,0 +1,326 @@ + + + + + + + +C++Spec: include/description.hpp File Reference + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
description.hpp File Reference
+
+
+ +

Defines the Description class and associated functions. +More...

+
#include <deque>
+#include <forward_list>
+#include <list>
+#include <memory>
+#include <source_location>
+#include <string>
+#include <utility>
+#include "it.hpp"
+
+Include dependency graph for description.hpp:
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+This graph shows which files directly or indirectly include this file:
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

Go to the source code of this file.

+ + + +

+Classes

class  CppSpec::Description
+ + +

+Typedefs

+using CppSpec::Context = Description
+

Detailed Description

+

Defines the Description class and associated functions.

+
+
+ +
+ + + + diff --git a/doxygen/description_8hpp.js b/doxygen/description_8hpp.js new file mode 100644 index 0000000..1d44ee1 --- /dev/null +++ b/doxygen/description_8hpp.js @@ -0,0 +1,4 @@ +var description_8hpp = +[ + [ "CppSpec::Description", "classCppSpec_1_1Description.html", null ] +]; \ No newline at end of file diff --git a/doxygen/description_8hpp__dep__incl.map b/doxygen/description_8hpp__dep__incl.map new file mode 100644 index 0000000..0da2dfd --- /dev/null +++ b/doxygen/description_8hpp__dep__incl.map @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doxygen/description_8hpp__dep__incl.md5 b/doxygen/description_8hpp__dep__incl.md5 new file mode 100644 index 0000000..bbd2bf0 --- /dev/null +++ b/doxygen/description_8hpp__dep__incl.md5 @@ -0,0 +1 @@ +491eab513fcda2d777b5319c90684ac9 \ No newline at end of file diff --git a/doxygen/description_8hpp__dep__incl.png b/doxygen/description_8hpp__dep__incl.png new file mode 100644 index 0000000..767c0b1 Binary files /dev/null and b/doxygen/description_8hpp__dep__incl.png differ diff --git a/doxygen/description_8hpp__incl.map b/doxygen/description_8hpp__incl.map new file mode 100644 index 0000000..368a94a --- /dev/null +++ b/doxygen/description_8hpp__incl.map @@ -0,0 +1,150 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doxygen/description_8hpp__incl.md5 b/doxygen/description_8hpp__incl.md5 new file mode 100644 index 0000000..3585e51 --- /dev/null +++ b/doxygen/description_8hpp__incl.md5 @@ -0,0 +1 @@ +1ca48f0f165a2f37de194cd34c9c7e29 \ No newline at end of file diff --git a/doxygen/description_8hpp__incl.png b/doxygen/description_8hpp__incl.png new file mode 100644 index 0000000..7d1b460 Binary files /dev/null and b/doxygen/description_8hpp__incl.png differ diff --git a/doxygen/description_8hpp_source.html b/doxygen/description_8hpp_source.html new file mode 100644 index 0000000..ca7f397 --- /dev/null +++ b/doxygen/description_8hpp_source.html @@ -0,0 +1,337 @@ + + + + + + + +C++Spec: include/description.hpp Source File + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
description.hpp
+
+
+Go to the documentation of this file.
1
+
5#pragma once
+
6
+
7#include <deque>
+
8#include <forward_list>
+
9#include <list>
+
10#include <memory>
+
11#include <source_location>
+
12#include <string>
+
13#include <utility>
+
14
+
15#include "it.hpp"
+
16
+
17namespace CppSpec {
+
18
+
19template <class T>
+
20class ClassDescription; // forward-declaration for ClassDescription
+
21
+
+
22class Description : public Runnable {
+
23 using VoidBlock = std::function<void()>;
+
24
+
25 public:
+
26 using Block = std::function<void(Description&)>;
+
27
+
28 std::forward_list<LetBase*> lets;
+
29 std::deque<VoidBlock> after_alls;
+
30 std::deque<VoidBlock> before_eaches;
+
31 std::deque<VoidBlock> after_eaches;
+
32
+
33 private:
+
34 Block block;
+
35 std::list<std::unique_ptr<LetBase>> owned_lets_;
+
36
+
37 protected:
+
38 std::string description;
+
39
+
40 void exec_before_eaches();
+
41 void exec_after_eaches();
+
42
+
43 public:
+
44 // Primary constructor. Entry of all specs.
+
45 Description(const char* description,
+
46 Block block,
+
47 std::source_location location = std::source_location::current()) noexcept
+
48 : Runnable(location), block(std::move(block)), description(description) {
+
49 this->set_location(location);
+
50 }
+
51
+
52 Description(std::source_location location, std::string&& description) noexcept
+
53 : Runnable(location), description(std::move(description)) {}
+
54
+
55 Description(std::source_location location, const char* description, Block block) noexcept
+
56 : Runnable(location), block(std::move(block)), description(description) {}
+
57
+
58 /********* Specify/It *********/
+
59
+
60 ItD& it(const char* name, ItD::Block body, std::source_location location = std::source_location::current());
+
61 ItD& it(ItD::Block body, std::source_location location = std::source_location::current());
+
62
+
63 /********* Context ***********/
+
64
+
65 template <class T = std::nullptr_t>
+
66 Description& context(const char* description,
+
67 Block body,
+
68 std::source_location location = std::source_location::current());
+
69
+
70 template <Util::not_c_string T, class B>
+
71 ClassDescription<T>& context(T& subject, B block, std::source_location location = std::source_location::current());
+
72
+
73 template <class T, class B>
+
74 ClassDescription<T>& context(const char* description,
+
75 T& subject,
+
76 B block,
+
77 std::source_location location = std::source_location::current());
+
78
+
79 template <Util::not_c_string T, class B>
+
80 ClassDescription<T>& context(T&& subject, B block, std::source_location location = std::source_location::current());
+
81
+
82 template <class T, class B>
+
83 ClassDescription<T>& context(const char* description,
+
84 T&& subject,
+
85 B block,
+
86 std::source_location location = std::source_location::current());
+
87
+
88 template <class T, typename U>
+
89 ClassDescription<T>& context(std::initializer_list<U> init_list,
+
90 std::function<void(ClassDescription<T>&)> block,
+
91 std::source_location location = std::source_location::current());
+
92
+
93 /********* Each/All *********/
+
94
+
95 void before_each(VoidBlock block);
+
96 void before_all(VoidBlock block);
+
97 void after_each(VoidBlock block);
+
98 void after_all(VoidBlock block);
+
99
+
100 /********* Let *********/
+
101
+
102 template <typename F>
+
103 auto& let(F factory);
+
104 void reset_lets() noexcept;
+
105
+
106 /********* Standard getters *********/
+
107
+
108 [[nodiscard]] virtual std::string get_description() const noexcept { return description; }
+
109 [[nodiscard]] virtual std::string get_subject_type() const noexcept { return ""; }
+
110
+
111 /********* Run *********/
+
112
+
113 void run() override;
+
114 // std::function<int(int, char **)>
+
115 template <typename Formatter>
+
116 inline auto as_main();
+
117};
+
+
118
+
119using Context = Description;
+
120
+
121/*>>>>>>>>>>>>>>>>>>>> Description <<<<<<<<<<<<<<<<<<<<<<<<<*/
+
122
+
123/*========= Description::it =========*/
+
124
+
125inline ItD& Description::it(const char* description, ItD::Block block, std::source_location location) {
+
126 exec_before_eaches();
+
127 auto* it = this->make_child<ItD>(location, description, block);
+
128 it->timed_run();
+
129 exec_after_eaches();
+
130 return *it;
+
131}
+
132
+
133inline ItD& Description::it(ItD::Block block, std::source_location location) {
+
134 exec_before_eaches();
+
135 auto* it = this->make_child<ItD>(location, block);
+
136 it->timed_run();
+
137 exec_after_eaches();
+
138 return *it;
+
139}
+
140
+
141/*========= Description::context =========*/
+
142
+
143template <class T>
+
144inline Context& Description::context(const char* description, Block body, std::source_location location) {
+
145 auto* context = this->make_child<Context>(location, description, body);
+
146 context->before_eaches = this->before_eaches;
+
147 context->after_eaches = this->after_eaches;
+
148 context->timed_run();
+
149 return *context;
+
150}
+
151
+
152/*========= Description:: each/alls =========*/
+
153
+
154inline void Description::before_each(VoidBlock b) {
+
155 before_eaches.push_back(std::move(b));
+
156}
+
157
+
158inline void Description::before_all(VoidBlock b) {
+
159 b();
+
160}
+
161
+
162inline void Description::after_each(VoidBlock b) {
+
163 after_eaches.push_back(b);
+
164}
+
165
+
166inline void Description::after_all(VoidBlock b) {
+
167 after_alls.push_back(b);
+
168}
+
169
+
170/*----------- private -------------*/
+
171
+
172inline void Description::exec_before_eaches() {
+
173 for (VoidBlock& b : before_eaches) {
+
174 b();
+
175 }
+
176}
+
177
+
178inline void Description::exec_after_eaches() {
+
179 for (VoidBlock& b : after_eaches) {
+
180 b();
+
181 }
+
182}
+
183
+
184/*========= Description::let =========*/
+
185
+
186template <typename F>
+
187auto& Description::let(F factory) {
+
188 using T = decltype(std::declval<F>()());
+
189 auto ptr = std::make_unique<Let<T>>(std::move(factory));
+
190 auto* raw = ptr.get();
+
191 owned_lets_.push_back(std::move(ptr));
+
192 lets.push_front(raw);
+
193 return *raw;
+
194}
+
195
+
196inline void Description::reset_lets() noexcept {
+
197 // For every let in our list, reset it.
+
198 for (auto& let : lets) {
+
199 let->reset();
+
200 }
+
201
+
202 // Recursively reset all the lets in the family tree
+
203 if (this->has_parent()) {
+
204 this->get_parent_as<Description>()->reset_lets();
+
205 }
+
206}
+
207
+
208/*========= Description::run =========*/
+
209
+
210inline void Description::run() {
+
211 block(*this); // Run the block
+
212 for (VoidBlock& a : after_alls) {
+
213 a(); // Run all our after_alls
+
214 }
+
215}
+
216
+
217/*>>>>>>>>>>>>>>>>>>>> ItD <<<<<<<<<<<<<<<<<<<<<<<<<*/
+
218
+
219/*========= ItD::run =========*/
+
220
+
221inline void ItD::run() {
+
222 block(*this);
+
223 this->get_parent_as<Description>()->reset_lets();
+
224}
+
225
+
226} // namespace CppSpec
+
A Description with a defined subject.
Definition class_description.hpp:22
+
Definition description.hpp:22
+
An it embedded in a Description.
Definition it.hpp:27
+
bool has_parent() noexcept
Check to see if the Runnable has a parent.
Definition runnable.hpp:56
+ +
+
+
+ + + + diff --git a/doxygen/dir_000001_000004.html b/doxygen/dir_000001_000004.html new file mode 100644 index 0000000..5705047 --- /dev/null +++ b/doxygen/dir_000001_000004.html @@ -0,0 +1,111 @@ + + + + + + + +C++Spec: include/expectations -> matchers Relation + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+

expectations → matchers Relation

File in includeexpectationsIncludes file in includematchers
expectation.hppnumeric / be_between.hpp
expectation.hppnumeric / be_greater_than.hpp
expectation.hppnumeric / be_less_than.hpp
expectation.hppbe_nullptr.hpp
expectation.hppcontain.hpp
expectation.hppstrings / end_with.hpp
expectation.hppequal.hpp
expectation.hppstrings / match.hpp
expectation.hppsatisfy.hpp
expectation.hppstrings / start_with.hpp
+
+ +
+ + + + diff --git a/doxygen/dir_000003_000002.html b/doxygen/dir_000003_000002.html new file mode 100644 index 0000000..940a8e1 --- /dev/null +++ b/doxygen/dir_000003_000002.html @@ -0,0 +1,111 @@ + + + + + + + +C++Spec: include -> formatters Relation + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+

include → formatters Relation

File in includeIncludes file in includeformatters
argparse.hppprogress.hpp
argparse.hpptap.hpp
argparse.hppverbose.hpp
runner.hppformatters_base.hpp
+
+ +
+ + + + diff --git a/doxygen/dir_000004_000001.html b/doxygen/dir_000004_000001.html new file mode 100644 index 0000000..66bafb8 --- /dev/null +++ b/doxygen/dir_000004_000001.html @@ -0,0 +1,111 @@ + + + + + + + +C++Spec: include/matchers -> expectations Relation + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+

matchers → expectations Relation

File in includematchersIncludes file in includeexpectations
matcher_base.hpphandler.hpp
+
+ +
+ + + + diff --git a/doxygen/dir_21a7b9390333b38a57129f1b4a0c951c.html b/doxygen/dir_21a7b9390333b38a57129f1b4a0c951c.html new file mode 100644 index 0000000..4505de5 --- /dev/null +++ b/doxygen/dir_21a7b9390333b38a57129f1b4a0c951c.html @@ -0,0 +1,133 @@ + + + + + + + +C++Spec: include/expectations Directory Reference + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
expectations Directory Reference
+
+
+
+Directory dependency graph for expectations:
+
+
include/expectations
+ + + + + + + +
+ + + + + +

+Files

 
expectation.hpp
 
handler.hpp
 Contains the primary handlers for running Matchers.
+
+
+ +
+ + + + diff --git a/doxygen/dir_21a7b9390333b38a57129f1b4a0c951c.js b/doxygen/dir_21a7b9390333b38a57129f1b4a0c951c.js new file mode 100644 index 0000000..cd37aee --- /dev/null +++ b/doxygen/dir_21a7b9390333b38a57129f1b4a0c951c.js @@ -0,0 +1,5 @@ +var dir_21a7b9390333b38a57129f1b4a0c951c = +[ + [ "expectation.hpp", "expectation_8hpp_source.html", null ], + [ "handler.hpp", "handler_8hpp.html", "handler_8hpp" ] +]; \ No newline at end of file diff --git a/doxygen/dir_21a7b9390333b38a57129f1b4a0c951c_dep.map b/doxygen/dir_21a7b9390333b38a57129f1b4a0c951c_dep.map new file mode 100644 index 0000000..e7541cd --- /dev/null +++ b/doxygen/dir_21a7b9390333b38a57129f1b4a0c951c_dep.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/doxygen/dir_21a7b9390333b38a57129f1b4a0c951c_dep.md5 b/doxygen/dir_21a7b9390333b38a57129f1b4a0c951c_dep.md5 new file mode 100644 index 0000000..5289578 --- /dev/null +++ b/doxygen/dir_21a7b9390333b38a57129f1b4a0c951c_dep.md5 @@ -0,0 +1 @@ +e6479b555a9d6615d43905bae5ac9656 \ No newline at end of file diff --git a/doxygen/dir_21a7b9390333b38a57129f1b4a0c951c_dep.png b/doxygen/dir_21a7b9390333b38a57129f1b4a0c951c_dep.png new file mode 100644 index 0000000..b11e2d0 Binary files /dev/null and b/doxygen/dir_21a7b9390333b38a57129f1b4a0c951c_dep.png differ diff --git a/doxygen/dir_3effca0fa804a4bbb80c3afa317ad289.html b/doxygen/dir_3effca0fa804a4bbb80c3afa317ad289.html new file mode 100644 index 0000000..4cf70a2 --- /dev/null +++ b/doxygen/dir_3effca0fa804a4bbb80c3afa317ad289.html @@ -0,0 +1,131 @@ + + + + + + + +C++Spec: include/matchers/numeric Directory Reference + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
numeric Directory Reference
+
+
+
+Directory dependency graph for numeric:
+
+
include/matchers/numeric
+ + + + +
+ + + + + + +

+Files

 
be_between.hpp
 
be_greater_than.hpp
 
be_less_than.hpp
 
be_within.hpp
+
+
+ +
+ + + + diff --git a/doxygen/dir_3effca0fa804a4bbb80c3afa317ad289.js b/doxygen/dir_3effca0fa804a4bbb80c3afa317ad289.js new file mode 100644 index 0000000..0223870 --- /dev/null +++ b/doxygen/dir_3effca0fa804a4bbb80c3afa317ad289.js @@ -0,0 +1,7 @@ +var dir_3effca0fa804a4bbb80c3afa317ad289 = +[ + [ "be_between.hpp", "be__between_8hpp.html", "be__between_8hpp" ], + [ "be_greater_than.hpp", "be__greater__than_8hpp.html", "be__greater__than_8hpp" ], + [ "be_less_than.hpp", "be__less__than_8hpp.html", "be__less__than_8hpp" ], + [ "be_within.hpp", "be__within_8hpp_source.html", null ] +]; \ No newline at end of file diff --git a/doxygen/dir_3effca0fa804a4bbb80c3afa317ad289_dep.map b/doxygen/dir_3effca0fa804a4bbb80c3afa317ad289_dep.map new file mode 100644 index 0000000..7b6b600 --- /dev/null +++ b/doxygen/dir_3effca0fa804a4bbb80c3afa317ad289_dep.map @@ -0,0 +1,4 @@ + + + + diff --git a/doxygen/dir_3effca0fa804a4bbb80c3afa317ad289_dep.md5 b/doxygen/dir_3effca0fa804a4bbb80c3afa317ad289_dep.md5 new file mode 100644 index 0000000..8708ea1 --- /dev/null +++ b/doxygen/dir_3effca0fa804a4bbb80c3afa317ad289_dep.md5 @@ -0,0 +1 @@ +a844c3466a6d07f6ea18053b01f5dea0 \ No newline at end of file diff --git a/doxygen/dir_3effca0fa804a4bbb80c3afa317ad289_dep.png b/doxygen/dir_3effca0fa804a4bbb80c3afa317ad289_dep.png new file mode 100644 index 0000000..869fa6a Binary files /dev/null and b/doxygen/dir_3effca0fa804a4bbb80c3afa317ad289_dep.png differ diff --git a/doxygen/dir_57c6f2a1e78cadcf3f067b4b371ed2bb.html b/doxygen/dir_57c6f2a1e78cadcf3f067b4b371ed2bb.html new file mode 100644 index 0000000..c51fbae --- /dev/null +++ b/doxygen/dir_57c6f2a1e78cadcf3f067b4b371ed2bb.html @@ -0,0 +1,133 @@ + + + + + + + +C++Spec: include/formatters Directory Reference + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
formatters Directory Reference
+
+
+
+Directory dependency graph for formatters:
+
+
include/formatters
+ + + + +
+ + + + + + + + +

+Files

 
formatters_base.hpp
 
junit_xml.hpp
 
progress.hpp
 
tap.hpp
 
term_colors.hpp
 
verbose.hpp
+
+
+ +
+ + + + diff --git a/doxygen/dir_57c6f2a1e78cadcf3f067b4b371ed2bb.js b/doxygen/dir_57c6f2a1e78cadcf3f067b4b371ed2bb.js new file mode 100644 index 0000000..46a0616 --- /dev/null +++ b/doxygen/dir_57c6f2a1e78cadcf3f067b4b371ed2bb.js @@ -0,0 +1,9 @@ +var dir_57c6f2a1e78cadcf3f067b4b371ed2bb = +[ + [ "formatters_base.hpp", "formatters__base_8hpp.html", "formatters__base_8hpp" ], + [ "junit_xml.hpp", "junit__xml_8hpp_source.html", null ], + [ "progress.hpp", "progress_8hpp.html", "progress_8hpp" ], + [ "tap.hpp", "tap_8hpp.html", "tap_8hpp" ], + [ "term_colors.hpp", "term__colors_8hpp.html", null ], + [ "verbose.hpp", "verbose_8hpp.html", "verbose_8hpp" ] +]; \ No newline at end of file diff --git a/doxygen/dir_57c6f2a1e78cadcf3f067b4b371ed2bb_dep.map b/doxygen/dir_57c6f2a1e78cadcf3f067b4b371ed2bb_dep.map new file mode 100644 index 0000000..38bc8c1 --- /dev/null +++ b/doxygen/dir_57c6f2a1e78cadcf3f067b4b371ed2bb_dep.map @@ -0,0 +1,4 @@ + + + + diff --git a/doxygen/dir_57c6f2a1e78cadcf3f067b4b371ed2bb_dep.md5 b/doxygen/dir_57c6f2a1e78cadcf3f067b4b371ed2bb_dep.md5 new file mode 100644 index 0000000..aa38929 --- /dev/null +++ b/doxygen/dir_57c6f2a1e78cadcf3f067b4b371ed2bb_dep.md5 @@ -0,0 +1 @@ +d1d0946bf21a354bd0463374bb0d797a \ No newline at end of file diff --git a/doxygen/dir_57c6f2a1e78cadcf3f067b4b371ed2bb_dep.png b/doxygen/dir_57c6f2a1e78cadcf3f067b4b371ed2bb_dep.png new file mode 100644 index 0000000..8f52be8 Binary files /dev/null and b/doxygen/dir_57c6f2a1e78cadcf3f067b4b371ed2bb_dep.png differ diff --git a/doxygen/dir_ac924fada280fe236a103de4de9a1e11.html b/doxygen/dir_ac924fada280fe236a103de4de9a1e11.html new file mode 100644 index 0000000..9b79908 --- /dev/null +++ b/doxygen/dir_ac924fada280fe236a103de4de9a1e11.html @@ -0,0 +1,130 @@ + + + + + + + +C++Spec: include/matchers/strings Directory Reference + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
strings Directory Reference
+
+
+
+Directory dependency graph for strings:
+
+
include/matchers/strings
+ + + + +
+ + + + + +

+Files

 
end_with.hpp
 
match.hpp
 
start_with.hpp
+
+
+ +
+ + + + diff --git a/doxygen/dir_ac924fada280fe236a103de4de9a1e11.js b/doxygen/dir_ac924fada280fe236a103de4de9a1e11.js new file mode 100644 index 0000000..98c85e1 --- /dev/null +++ b/doxygen/dir_ac924fada280fe236a103de4de9a1e11.js @@ -0,0 +1,6 @@ +var dir_ac924fada280fe236a103de4de9a1e11 = +[ + [ "end_with.hpp", "end__with_8hpp.html", "end__with_8hpp" ], + [ "match.hpp", "match_8hpp.html", "match_8hpp" ], + [ "start_with.hpp", "start__with_8hpp.html", "start__with_8hpp" ] +]; \ No newline at end of file diff --git a/doxygen/dir_ac924fada280fe236a103de4de9a1e11_dep.map b/doxygen/dir_ac924fada280fe236a103de4de9a1e11_dep.map new file mode 100644 index 0000000..2b8591b --- /dev/null +++ b/doxygen/dir_ac924fada280fe236a103de4de9a1e11_dep.map @@ -0,0 +1,4 @@ + + + + diff --git a/doxygen/dir_ac924fada280fe236a103de4de9a1e11_dep.md5 b/doxygen/dir_ac924fada280fe236a103de4de9a1e11_dep.md5 new file mode 100644 index 0000000..e7e3a50 --- /dev/null +++ b/doxygen/dir_ac924fada280fe236a103de4de9a1e11_dep.md5 @@ -0,0 +1 @@ +73b11611215d34a5875977656dff3658 \ No newline at end of file diff --git a/doxygen/dir_ac924fada280fe236a103de4de9a1e11_dep.png b/doxygen/dir_ac924fada280fe236a103de4de9a1e11_dep.png new file mode 100644 index 0000000..6da0ed8 Binary files /dev/null and b/doxygen/dir_ac924fada280fe236a103de4de9a1e11_dep.png differ diff --git a/doxygen/dir_ae2c003418692dc95b12e24c623dfbc8.html b/doxygen/dir_ae2c003418692dc95b12e24c623dfbc8.html new file mode 100644 index 0000000..e716966 --- /dev/null +++ b/doxygen/dir_ae2c003418692dc95b12e24c623dfbc8.html @@ -0,0 +1,146 @@ + + + + + + + +C++Spec: include/matchers Directory Reference + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
matchers Directory Reference
+
+
+
+Directory dependency graph for matchers:
+
+
include/matchers
+ + + + + + + + + + +
+ + + + + +

+Directories

 
errors
 
numeric
 
strings
+ + + + + + + + +

+Files

 
be_nullptr.hpp
 
contain.hpp
 
equal.hpp
 
matcher_base.hpp
 Contains the base class for all Matchers.
 
pretty_matchers.hpp
 
satisfy.hpp
+
+
+ +
+ + + + diff --git a/doxygen/dir_ae2c003418692dc95b12e24c623dfbc8.js b/doxygen/dir_ae2c003418692dc95b12e24c623dfbc8.js new file mode 100644 index 0000000..10229b1 --- /dev/null +++ b/doxygen/dir_ae2c003418692dc95b12e24c623dfbc8.js @@ -0,0 +1,12 @@ +var dir_ae2c003418692dc95b12e24c623dfbc8 = +[ + [ "errors", "dir_b2691ac737a848598f2aaaa257eea499.html", "dir_b2691ac737a848598f2aaaa257eea499" ], + [ "numeric", "dir_3effca0fa804a4bbb80c3afa317ad289.html", "dir_3effca0fa804a4bbb80c3afa317ad289" ], + [ "strings", "dir_ac924fada280fe236a103de4de9a1e11.html", "dir_ac924fada280fe236a103de4de9a1e11" ], + [ "be_nullptr.hpp", "be__nullptr_8hpp.html", "be__nullptr_8hpp" ], + [ "contain.hpp", "contain_8hpp.html", "contain_8hpp" ], + [ "equal.hpp", "equal_8hpp.html", "equal_8hpp" ], + [ "matcher_base.hpp", "matcher__base_8hpp.html", "matcher__base_8hpp" ], + [ "pretty_matchers.hpp", "pretty__matchers_8hpp.html", "pretty__matchers_8hpp" ], + [ "satisfy.hpp", "satisfy_8hpp.html", "satisfy_8hpp" ] +]; \ No newline at end of file diff --git a/doxygen/dir_ae2c003418692dc95b12e24c623dfbc8_dep.map b/doxygen/dir_ae2c003418692dc95b12e24c623dfbc8_dep.map new file mode 100644 index 0000000..4d57e98 --- /dev/null +++ b/doxygen/dir_ae2c003418692dc95b12e24c623dfbc8_dep.map @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/doxygen/dir_ae2c003418692dc95b12e24c623dfbc8_dep.md5 b/doxygen/dir_ae2c003418692dc95b12e24c623dfbc8_dep.md5 new file mode 100644 index 0000000..a23c394 --- /dev/null +++ b/doxygen/dir_ae2c003418692dc95b12e24c623dfbc8_dep.md5 @@ -0,0 +1 @@ +38d7f9faf4d911257610ee60f4031cf0 \ No newline at end of file diff --git a/doxygen/dir_ae2c003418692dc95b12e24c623dfbc8_dep.png b/doxygen/dir_ae2c003418692dc95b12e24c623dfbc8_dep.png new file mode 100644 index 0000000..2e2c822 Binary files /dev/null and b/doxygen/dir_ae2c003418692dc95b12e24c623dfbc8_dep.png differ diff --git a/doxygen/dir_b2691ac737a848598f2aaaa257eea499.html b/doxygen/dir_b2691ac737a848598f2aaaa257eea499.html new file mode 100644 index 0000000..ab86a0c --- /dev/null +++ b/doxygen/dir_b2691ac737a848598f2aaaa257eea499.html @@ -0,0 +1,131 @@ + + + + + + + +C++Spec: include/matchers/errors Directory Reference + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
errors Directory Reference
+
+
+
+Directory dependency graph for errors:
+
+
include/matchers/errors
+ + + + +
+ + + + + + +

+Files

 
fail.hpp
 
have_error.hpp
 
have_value.hpp
 
throw.hpp
+
+
+ +
+ + + + diff --git a/doxygen/dir_b2691ac737a848598f2aaaa257eea499.js b/doxygen/dir_b2691ac737a848598f2aaaa257eea499.js new file mode 100644 index 0000000..5f64993 --- /dev/null +++ b/doxygen/dir_b2691ac737a848598f2aaaa257eea499.js @@ -0,0 +1,7 @@ +var dir_b2691ac737a848598f2aaaa257eea499 = +[ + [ "fail.hpp", "fail_8hpp_source.html", null ], + [ "have_error.hpp", "have__error_8hpp_source.html", null ], + [ "have_value.hpp", "have__value_8hpp_source.html", null ], + [ "throw.hpp", "throw_8hpp_source.html", null ] +]; \ No newline at end of file diff --git a/doxygen/dir_b2691ac737a848598f2aaaa257eea499_dep.map b/doxygen/dir_b2691ac737a848598f2aaaa257eea499_dep.map new file mode 100644 index 0000000..734affa --- /dev/null +++ b/doxygen/dir_b2691ac737a848598f2aaaa257eea499_dep.map @@ -0,0 +1,4 @@ + + + + diff --git a/doxygen/dir_b2691ac737a848598f2aaaa257eea499_dep.md5 b/doxygen/dir_b2691ac737a848598f2aaaa257eea499_dep.md5 new file mode 100644 index 0000000..9bc6b62 --- /dev/null +++ b/doxygen/dir_b2691ac737a848598f2aaaa257eea499_dep.md5 @@ -0,0 +1 @@ +b4243d9f806f8cfe7c41587928fd07e5 \ No newline at end of file diff --git a/doxygen/dir_b2691ac737a848598f2aaaa257eea499_dep.png b/doxygen/dir_b2691ac737a848598f2aaaa257eea499_dep.png new file mode 100644 index 0000000..05f5770 Binary files /dev/null and b/doxygen/dir_b2691ac737a848598f2aaaa257eea499_dep.png differ diff --git a/doxygen/dir_d44c64559bbebec7f509842c48db8b23.html b/doxygen/dir_d44c64559bbebec7f509842c48db8b23.html new file mode 100644 index 0000000..df68c02 --- /dev/null +++ b/doxygen/dir_d44c64559bbebec7f509842c48db8b23.html @@ -0,0 +1,155 @@ + + + + + + + +C++Spec: include Directory Reference + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
include Directory Reference
+
+
+
+Directory dependency graph for include:
+
+
include
+ + + + + + + + + + + + +
+ + + + + +

+Directories

 
expectations
 
formatters
 
matchers
+ + + + + + + + + + + + + + + +

+Files

 
argparse.hpp
 
class_description.hpp
 
cppspec.hpp
 The core header file for Cppspec.
 
description.hpp
 Defines the Description class and associated functions.
 
it.hpp
 
it_base.hpp
 
let.hpp
 
result.hpp
 
runnable.hpp
 
runner.hpp
 
util.hpp
 Utility functions and classes.
+
+
+ +
+ + + + diff --git a/doxygen/dir_d44c64559bbebec7f509842c48db8b23.js b/doxygen/dir_d44c64559bbebec7f509842c48db8b23.js new file mode 100644 index 0000000..ee880c7 --- /dev/null +++ b/doxygen/dir_d44c64559bbebec7f509842c48db8b23.js @@ -0,0 +1,17 @@ +var dir_d44c64559bbebec7f509842c48db8b23 = +[ + [ "expectations", "dir_21a7b9390333b38a57129f1b4a0c951c.html", "dir_21a7b9390333b38a57129f1b4a0c951c" ], + [ "formatters", "dir_57c6f2a1e78cadcf3f067b4b371ed2bb.html", "dir_57c6f2a1e78cadcf3f067b4b371ed2bb" ], + [ "matchers", "dir_ae2c003418692dc95b12e24c623dfbc8.html", "dir_ae2c003418692dc95b12e24c623dfbc8" ], + [ "argparse.hpp", "argparse_8hpp_source.html", null ], + [ "class_description.hpp", "class__description_8hpp.html", "class__description_8hpp" ], + [ "cppspec.hpp", "cppspec_8hpp.html", null ], + [ "description.hpp", "description_8hpp.html", "description_8hpp" ], + [ "it.hpp", "it_8hpp.html", "it_8hpp" ], + [ "it_base.hpp", "it__base_8hpp.html", "it__base_8hpp" ], + [ "let.hpp", "let_8hpp.html", "let_8hpp" ], + [ "result.hpp", "result_8hpp.html", "result_8hpp" ], + [ "runnable.hpp", "runnable_8hpp_source.html", null ], + [ "runner.hpp", "runner_8hpp.html", "runner_8hpp" ], + [ "util.hpp", "util_8hpp.html", "util_8hpp" ] +]; \ No newline at end of file diff --git a/doxygen/dir_d44c64559bbebec7f509842c48db8b23_dep.map b/doxygen/dir_d44c64559bbebec7f509842c48db8b23_dep.map new file mode 100644 index 0000000..083c7c6 --- /dev/null +++ b/doxygen/dir_d44c64559bbebec7f509842c48db8b23_dep.map @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/doxygen/dir_d44c64559bbebec7f509842c48db8b23_dep.md5 b/doxygen/dir_d44c64559bbebec7f509842c48db8b23_dep.md5 new file mode 100644 index 0000000..9137349 --- /dev/null +++ b/doxygen/dir_d44c64559bbebec7f509842c48db8b23_dep.md5 @@ -0,0 +1 @@ +ff1806b822de2fd7caf7bd4b7c7f84f3 \ No newline at end of file diff --git a/doxygen/dir_d44c64559bbebec7f509842c48db8b23_dep.png b/doxygen/dir_d44c64559bbebec7f509842c48db8b23_dep.png new file mode 100644 index 0000000..f1eaa1b Binary files /dev/null and b/doxygen/dir_d44c64559bbebec7f509842c48db8b23_dep.png differ diff --git a/doxygen/doxygen-awesome.css b/doxygen/doxygen-awesome.css new file mode 100644 index 0000000..c2f4114 --- /dev/null +++ b/doxygen/doxygen-awesome.css @@ -0,0 +1,2681 @@ +/** + +Doxygen Awesome +https://github.com/jothepro/doxygen-awesome-css + +MIT License + +Copyright (c) 2021 - 2023 jothepro + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +*/ + +html { + /* primary theme color. This will affect the entire websites color scheme: links, arrows, labels, ... */ + --primary-color: #1779c4; + --primary-dark-color: #335c80; + --primary-light-color: #70b1e9; + + /* page base colors */ + --page-background-color: #ffffff; + --page-foreground-color: #2f4153; + --page-secondary-foreground-color: #6f7e8e; + + /* color for all separators on the website: hr, borders, ... */ + --separator-color: #dedede; + + /* border radius for all rounded components. Will affect many components, like dropdowns, memitems, codeblocks, ... */ + --border-radius-large: 8px; + --border-radius-small: 4px; + --border-radius-medium: 6px; + + /* default spacings. Most components reference these values for spacing, to provide uniform spacing on the page. */ + --spacing-small: 5px; + --spacing-medium: 10px; + --spacing-large: 16px; + + /* default box shadow used for raising an element above the normal content. Used in dropdowns, search result, ... */ + --box-shadow: 0 2px 8px 0 rgba(0,0,0,.075); + + --odd-color: rgba(0,0,0,.028); + + /* font-families. will affect all text on the website + * font-family: the normal font for text, headlines, menus + * font-family-monospace: used for preformatted text in memtitle, code, fragments + */ + --font-family: -apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif; + --font-family-monospace: ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace; + + /* font sizes */ + --page-font-size: 15.6px; + --navigation-font-size: 14.4px; + --toc-font-size: 13.4px; + --code-font-size: 14px; /* affects code, fragment */ + --title-font-size: 22px; + + /* content text properties. These only affect the page content, not the navigation or any other ui elements */ + --content-line-height: 27px; + /* The content is centered and constraint in it's width. To make the content fill the whole page, set the variable to auto.*/ + --content-maxwidth: 1050px; + --table-line-height: 24px; + --toc-sticky-top: var(--spacing-medium); + --toc-width: 200px; + --toc-max-height: calc(100vh - 2 * var(--spacing-medium) - 85px); + + /* colors for various content boxes: @warning, @note, @deprecated @bug */ + --warning-color: #faf3d8; + --warning-color-dark: #f3a600; + --warning-color-darker: #5f4204; + --note-color: #e4f3ff; + --note-color-dark: #1879C4; + --note-color-darker: #274a5c; + --todo-color: #e4dafd; + --todo-color-dark: #5b2bdd; + --todo-color-darker: #2a0d72; + --deprecated-color: #ecf0f3; + --deprecated-color-dark: #5b6269; + --deprecated-color-darker: #43454a; + --bug-color: #f8d1cc; + --bug-color-dark: #b61825; + --bug-color-darker: #75070f; + --invariant-color: #d8f1e3; + --invariant-color-dark: #44b86f; + --invariant-color-darker: #265532; + + /* blockquote colors */ + --blockquote-background: #f8f9fa; + --blockquote-foreground: #636568; + + /* table colors */ + --tablehead-background: #f1f1f1; + --tablehead-foreground: var(--page-foreground-color); + + /* menu-display: block | none + * Visibility of the top navigation on screens >= 768px. On smaller screen the menu is always visible. + * `GENERATE_TREEVIEW` MUST be enabled! + */ + --menu-display: block; + + --menu-focus-foreground: var(--page-background-color); + --menu-focus-background: var(--primary-color); + --menu-selected-background: rgba(0,0,0,.05); + + + --header-background: var(--page-background-color); + --header-foreground: var(--page-foreground-color); + + /* searchbar colors */ + --searchbar-background: var(--side-nav-background); + --searchbar-foreground: var(--page-foreground-color); + + /* searchbar size + * (`searchbar-width` is only applied on screens >= 768px. + * on smaller screens the searchbar will always fill the entire screen width) */ + --searchbar-height: 33px; + --searchbar-width: 210px; + --searchbar-border-radius: var(--searchbar-height); + + /* code block colors */ + --code-background: #f5f5f5; + --code-foreground: var(--page-foreground-color); + + /* fragment colors */ + --fragment-background: #F8F9FA; + --fragment-foreground: #37474F; + --fragment-keyword: #bb6bb2; + --fragment-keywordtype: #8258b3; + --fragment-keywordflow: #d67c3b; + --fragment-token: #438a59; + --fragment-comment: #969696; + --fragment-link: #5383d6; + --fragment-preprocessor: #46aaa5; + --fragment-linenumber-color: #797979; + --fragment-linenumber-background: #f4f4f5; + --fragment-linenumber-border: #e3e5e7; + --fragment-lineheight: 20px; + + /* sidebar navigation (treeview) colors */ + --side-nav-background: #fbfbfb; + --side-nav-foreground: var(--page-foreground-color); + --side-nav-arrow-opacity: 0; + --side-nav-arrow-hover-opacity: 0.9; + + --toc-background: var(--side-nav-background); + --toc-foreground: var(--side-nav-foreground); + + /* height of an item in any tree / collapsible table */ + --tree-item-height: 30px; + + --memname-font-size: var(--code-font-size); + --memtitle-font-size: 18px; + + --webkit-scrollbar-size: 7px; + --webkit-scrollbar-padding: 4px; + --webkit-scrollbar-color: var(--separator-color); + + --animation-duration: .12s +} + +@media screen and (max-width: 767px) { + html { + --page-font-size: 16px; + --navigation-font-size: 16px; + --toc-font-size: 15px; + --code-font-size: 15px; /* affects code, fragment */ + --title-font-size: 22px; + } +} + +@media (prefers-color-scheme: dark) { + html:not(.light-mode) { + color-scheme: dark; + + --primary-color: #1982d2; + --primary-dark-color: #86a9c4; + --primary-light-color: #4779ac; + + --box-shadow: 0 2px 8px 0 rgba(0,0,0,.35); + + --odd-color: rgba(100,100,100,.06); + + --menu-selected-background: rgba(0,0,0,.4); + + --page-background-color: #1C1D1F; + --page-foreground-color: #d2dbde; + --page-secondary-foreground-color: #859399; + --separator-color: #38393b; + --side-nav-background: #252628; + + --code-background: #2a2c2f; + + --tablehead-background: #2a2c2f; + + --blockquote-background: #222325; + --blockquote-foreground: #7e8c92; + + --warning-color: #3b2e04; + --warning-color-dark: #f1b602; + --warning-color-darker: #ceb670; + --note-color: #163750; + --note-color-dark: #1982D2; + --note-color-darker: #dcf0fa; + --todo-color: #2a2536; + --todo-color-dark: #7661b3; + --todo-color-darker: #ae9ed6; + --deprecated-color: #2e323b; + --deprecated-color-dark: #738396; + --deprecated-color-darker: #abb0bd; + --bug-color: #2e1917; + --bug-color-dark: #ad2617; + --bug-color-darker: #f5b1aa; + --invariant-color: #303a35; + --invariant-color-dark: #76ce96; + --invariant-color-darker: #cceed5; + + --fragment-background: #282c34; + --fragment-foreground: #dbe4eb; + --fragment-keyword: #cc99cd; + --fragment-keywordtype: #ab99cd; + --fragment-keywordflow: #e08000; + --fragment-token: #7ec699; + --fragment-comment: #999999; + --fragment-link: #98c0e3; + --fragment-preprocessor: #65cabe; + --fragment-linenumber-color: #cccccc; + --fragment-linenumber-background: #35393c; + --fragment-linenumber-border: #1f1f1f; + } +} + +/* dark mode variables are defined twice, to support both the dark-mode without and with doxygen-awesome-darkmode-toggle.js */ +html.dark-mode { + color-scheme: dark; + + --primary-color: #1982d2; + --primary-dark-color: #86a9c4; + --primary-light-color: #4779ac; + + --box-shadow: 0 2px 8px 0 rgba(0,0,0,.30); + + --odd-color: rgba(100,100,100,.06); + + --menu-selected-background: rgba(0,0,0,.4); + + --page-background-color: #1C1D1F; + --page-foreground-color: #d2dbde; + --page-secondary-foreground-color: #859399; + --separator-color: #38393b; + --side-nav-background: #252628; + + --code-background: #2a2c2f; + + --tablehead-background: #2a2c2f; + + --blockquote-background: #222325; + --blockquote-foreground: #7e8c92; + + --warning-color: #3b2e04; + --warning-color-dark: #f1b602; + --warning-color-darker: #ceb670; + --note-color: #163750; + --note-color-dark: #1982D2; + --note-color-darker: #dcf0fa; + --todo-color: #2a2536; + --todo-color-dark: #7661b3; + --todo-color-darker: #ae9ed6; + --deprecated-color: #2e323b; + --deprecated-color-dark: #738396; + --deprecated-color-darker: #abb0bd; + --bug-color: #2e1917; + --bug-color-dark: #ad2617; + --bug-color-darker: #f5b1aa; + --invariant-color: #303a35; + --invariant-color-dark: #76ce96; + --invariant-color-darker: #cceed5; + + --fragment-background: #282c34; + --fragment-foreground: #dbe4eb; + --fragment-keyword: #cc99cd; + --fragment-keywordtype: #ab99cd; + --fragment-keywordflow: #e08000; + --fragment-token: #7ec699; + --fragment-comment: #999999; + --fragment-link: #98c0e3; + --fragment-preprocessor: #65cabe; + --fragment-linenumber-color: #cccccc; + --fragment-linenumber-background: #35393c; + --fragment-linenumber-border: #1f1f1f; +} + +body { + color: var(--page-foreground-color); + background-color: var(--page-background-color); + font-size: var(--page-font-size); +} + +body, table, div, p, dl, #nav-tree .label, .title, +.sm-dox a, .sm-dox a:hover, .sm-dox a:focus, #projectname, +.SelectItem, #MSearchField, .navpath li.navelem a, +.navpath li.navelem a:hover, p.reference, p.definition, div.toc li, div.toc h3 { + font-family: var(--font-family); +} + +h1, h2, h3, h4, h5 { + margin-top: 1em; + font-weight: 600; + line-height: initial; +} + +p, div, table, dl, p.reference, p.definition { + font-size: var(--page-font-size); +} + +p.reference, p.definition { + color: var(--page-secondary-foreground-color); +} + +a:link, a:visited, a:hover, a:focus, a:active { + color: var(--primary-color) !important; + font-weight: 500; + background: none; +} + +a.anchor { + scroll-margin-top: var(--spacing-large); + display: block; +} + +/* + Title and top navigation + */ + +#top { + background: var(--header-background); + border-bottom: 1px solid var(--separator-color); +} + +@media screen and (min-width: 768px) { + #top { + display: flex; + flex-wrap: wrap; + justify-content: space-between; + align-items: center; + } +} + +#main-nav { + flex-grow: 5; + padding: var(--spacing-small) var(--spacing-medium); +} + +#titlearea { + width: auto; + padding: var(--spacing-medium) var(--spacing-large); + background: none; + color: var(--header-foreground); + border-bottom: none; +} + +@media screen and (max-width: 767px) { + #titlearea { + padding-bottom: var(--spacing-small); + } +} + +#titlearea table tbody tr { + height: auto !important; +} + +#projectname { + font-size: var(--title-font-size); + font-weight: 600; +} + +#projectnumber { + font-family: inherit; + font-size: 60%; +} + +#projectbrief { + font-family: inherit; + font-size: 80%; +} + +#projectlogo { + vertical-align: middle; +} + +#projectlogo img { + max-height: calc(var(--title-font-size) * 2); + margin-right: var(--spacing-small); +} + +.sm-dox, .tabs, .tabs2, .tabs3 { + background: none; + padding: 0; +} + +.tabs, .tabs2, .tabs3 { + border-bottom: 1px solid var(--separator-color); + margin-bottom: -1px; +} + +.main-menu-btn-icon, .main-menu-btn-icon:before, .main-menu-btn-icon:after { + background: var(--page-secondary-foreground-color); +} + +@media screen and (max-width: 767px) { + .sm-dox a span.sub-arrow { + background: var(--code-background); + } + + #main-menu a.has-submenu span.sub-arrow { + color: var(--page-secondary-foreground-color); + border-radius: var(--border-radius-medium); + } + + #main-menu a.has-submenu:hover span.sub-arrow { + color: var(--page-foreground-color); + } +} + +@media screen and (min-width: 768px) { + .sm-dox li, .tablist li { + display: var(--menu-display); + } + + .sm-dox a span.sub-arrow { + border-color: var(--header-foreground) transparent transparent transparent; + } + + .sm-dox a:hover span.sub-arrow { + border-color: var(--menu-focus-foreground) transparent transparent transparent; + } + + .sm-dox ul a span.sub-arrow { + border-color: transparent transparent transparent var(--page-foreground-color); + } + + .sm-dox ul a:hover span.sub-arrow { + border-color: transparent transparent transparent var(--menu-focus-foreground); + } +} + +.sm-dox ul { + background: var(--page-background-color); + box-shadow: var(--box-shadow); + border: 1px solid var(--separator-color); + border-radius: var(--border-radius-medium) !important; + padding: var(--spacing-small); + animation: ease-out 150ms slideInMenu; +} + +@keyframes slideInMenu { + from { + opacity: 0; + transform: translate(0px, -2px); + } + + to { + opacity: 1; + transform: translate(0px, 0px); + } +} + +.sm-dox ul a { + color: var(--page-foreground-color) !important; + background: var(--page-background-color); + font-size: var(--navigation-font-size); +} + +.sm-dox>li>ul:after { + border-bottom-color: var(--page-background-color) !important; +} + +.sm-dox>li>ul:before { + border-bottom-color: var(--separator-color) !important; +} + +.sm-dox ul a:hover, .sm-dox ul a:active, .sm-dox ul a:focus { + font-size: var(--navigation-font-size) !important; + color: var(--menu-focus-foreground) !important; + text-shadow: none; + background-color: var(--menu-focus-background); + border-radius: var(--border-radius-small) !important; +} + +.sm-dox a, .sm-dox a:focus, .tablist li, .tablist li a, .tablist li.current a { + text-shadow: none; + background: transparent; + background-image: none !important; + color: var(--header-foreground) !important; + font-weight: normal; + font-size: var(--navigation-font-size); + border-radius: var(--border-radius-small) !important; +} + +.sm-dox a:focus { + outline: auto; +} + +.sm-dox a:hover, .sm-dox a:active, .tablist li a:hover { + text-shadow: none; + font-weight: normal; + background: var(--menu-focus-background); + color: var(--menu-focus-foreground) !important; + border-radius: var(--border-radius-small) !important; + font-size: var(--navigation-font-size); +} + +.tablist li.current { + border-radius: var(--border-radius-small); + background: var(--menu-selected-background); +} + +.tablist li { + margin: var(--spacing-small) 0 var(--spacing-small) var(--spacing-small); +} + +.tablist a { + padding: 0 var(--spacing-large); +} + + +/* + Search box + */ + +#MSearchBox { + height: var(--searchbar-height); + background: var(--searchbar-background); + border-radius: var(--searchbar-border-radius); + border: 1px solid var(--separator-color); + overflow: hidden; + width: var(--searchbar-width); + position: relative; + box-shadow: none; + display: block; + margin-top: 0; +} + +/* until Doxygen 1.9.4 */ +.left img#MSearchSelect { + left: 0; + user-select: none; + padding-left: 8px; +} + +/* Doxygen 1.9.5 */ +.left span#MSearchSelect { + left: 0; + user-select: none; + margin-left: 8px; + padding: 0; +} + +.left #MSearchSelect[src$=".png"] { + padding-left: 0 +} + +.SelectionMark { + user-select: none; +} + +.tabs .left #MSearchSelect { + padding-left: 0; +} + +.tabs #MSearchBox { + position: absolute; + right: var(--spacing-medium); +} + +@media screen and (max-width: 767px) { + .tabs #MSearchBox { + position: relative; + right: 0; + margin-left: var(--spacing-medium); + margin-top: 0; + } +} + +#MSearchSelectWindow, #MSearchResultsWindow { + z-index: 9999; +} + +#MSearchBox.MSearchBoxActive { + border-color: var(--primary-color); + box-shadow: inset 0 0 0 1px var(--primary-color); +} + +#main-menu > li:last-child { + margin-right: 0; +} + +@media screen and (max-width: 767px) { + #main-menu > li:last-child { + height: 50px; + } +} + +#MSearchField { + font-size: var(--navigation-font-size); + height: calc(var(--searchbar-height) - 2px); + background: transparent; + width: calc(var(--searchbar-width) - 64px); +} + +.MSearchBoxActive #MSearchField { + color: var(--searchbar-foreground); +} + +#MSearchSelect { + top: calc(calc(var(--searchbar-height) / 2) - 11px); +} + +#MSearchBox span.left, #MSearchBox span.right { + background: none; + background-image: none; +} + +#MSearchBox span.right { + padding-top: calc(calc(var(--searchbar-height) / 2) - 12px); + position: absolute; + right: var(--spacing-small); +} + +.tabs #MSearchBox span.right { + top: calc(calc(var(--searchbar-height) / 2) - 12px); +} + +@keyframes slideInSearchResults { + from { + opacity: 0; + transform: translate(0, 15px); + } + + to { + opacity: 1; + transform: translate(0, 20px); + } +} + +#MSearchResultsWindow { + left: auto !important; + right: var(--spacing-medium); + border-radius: var(--border-radius-large); + border: 1px solid var(--separator-color); + transform: translate(0, 20px); + box-shadow: var(--box-shadow); + animation: ease-out 280ms slideInSearchResults; + background: var(--page-background-color); +} + +iframe#MSearchResults { + margin: 4px; +} + +iframe { + color-scheme: normal; +} + +@media (prefers-color-scheme: dark) { + html:not(.light-mode) iframe#MSearchResults { + filter: invert() hue-rotate(180deg); + } +} + +html.dark-mode iframe#MSearchResults { + filter: invert() hue-rotate(180deg); +} + +#MSearchResults .SRPage { + background-color: transparent; +} + +#MSearchResults .SRPage .SREntry { + font-size: 10pt; + padding: var(--spacing-small) var(--spacing-medium); +} + +#MSearchSelectWindow { + border: 1px solid var(--separator-color); + border-radius: var(--border-radius-medium); + box-shadow: var(--box-shadow); + background: var(--page-background-color); + padding-top: var(--spacing-small); + padding-bottom: var(--spacing-small); +} + +#MSearchSelectWindow a.SelectItem { + font-size: var(--navigation-font-size); + line-height: var(--content-line-height); + margin: 0 var(--spacing-small); + border-radius: var(--border-radius-small); + color: var(--page-foreground-color) !important; + font-weight: normal; +} + +#MSearchSelectWindow a.SelectItem:hover { + background: var(--menu-focus-background); + color: var(--menu-focus-foreground) !important; +} + +@media screen and (max-width: 767px) { + #MSearchBox { + margin-top: var(--spacing-medium); + margin-bottom: var(--spacing-medium); + width: calc(100vw - 30px); + } + + #main-menu > li:last-child { + float: none !important; + } + + #MSearchField { + width: calc(100vw - 110px); + } + + @keyframes slideInSearchResultsMobile { + from { + opacity: 0; + transform: translate(0, 15px); + } + + to { + opacity: 1; + transform: translate(0, 20px); + } + } + + #MSearchResultsWindow { + left: var(--spacing-medium) !important; + right: var(--spacing-medium); + overflow: auto; + transform: translate(0, 20px); + animation: ease-out 280ms slideInSearchResultsMobile; + width: auto !important; + } + + /* + * Overwrites for fixing the searchbox on mobile in doxygen 1.9.2 + */ + label.main-menu-btn ~ #searchBoxPos1 { + top: 3px !important; + right: 6px !important; + left: 45px; + display: flex; + } + + label.main-menu-btn ~ #searchBoxPos1 > #MSearchBox { + margin-top: 0; + margin-bottom: 0; + flex-grow: 2; + float: left; + } +} + +/* + Tree view + */ + +#side-nav { + padding: 0 !important; + background: var(--side-nav-background); + min-width: 8px; + max-width: 50vw; +} + +@media screen and (max-width: 767px) { + #side-nav { + display: none; + } + + #doc-content { + margin-left: 0 !important; + } +} + +#nav-tree { + background: transparent; + margin-right: 1px; +} + +#nav-tree .label { + font-size: var(--navigation-font-size); +} + +#nav-tree .item { + height: var(--tree-item-height); + line-height: var(--tree-item-height); + overflow: hidden; + text-overflow: ellipsis; +} + +#nav-tree .item > a:focus { + outline: none; +} + +#nav-sync { + bottom: 12px; + right: 12px; + top: auto !important; + user-select: none; +} + +#nav-tree .selected { + text-shadow: none; + background-image: none; + background-color: transparent; + position: relative; + color: var(--primary-color) !important; + font-weight: 500; +} + +#nav-tree .selected::after { + content: ""; + position: absolute; + top: 1px; + bottom: 1px; + left: 0; + width: 4px; + border-radius: 0 var(--border-radius-small) var(--border-radius-small) 0; + background: var(--primary-color); +} + + +#nav-tree a { + color: var(--side-nav-foreground) !important; + font-weight: normal; +} + +#nav-tree a:focus { + outline-style: auto; +} + +#nav-tree .arrow { + opacity: var(--side-nav-arrow-opacity); + background: none; +} + +.arrow { + color: inherit; + cursor: pointer; + font-size: 45%; + vertical-align: middle; + margin-right: 2px; + font-family: serif; + height: auto; + text-align: right; +} + +#nav-tree div.item:hover .arrow, #nav-tree a:focus .arrow { + opacity: var(--side-nav-arrow-hover-opacity); +} + +#nav-tree .selected a { + color: var(--primary-color) !important; + font-weight: bolder; + font-weight: 600; +} + +.ui-resizable-e { + width: 4px; + background: transparent; + box-shadow: inset -1px 0 0 0 var(--separator-color); +} + +/* + Contents + */ + +div.header { + border-bottom: 1px solid var(--separator-color); + background-color: var(--page-background-color); + background-image: none; +} + +@media screen and (min-width: 1000px) { + #doc-content > div > div.contents, + .PageDoc > div.contents { + display: flex; + flex-direction: row-reverse; + flex-wrap: nowrap; + align-items: flex-start; + } + + div.contents .textblock { + min-width: 200px; + flex-grow: 1; + } +} + +div.contents, div.header .title, div.header .summary { + max-width: var(--content-maxwidth); +} + +div.contents, div.header .title { + line-height: initial; + margin: calc(var(--spacing-medium) + .2em) auto var(--spacing-medium) auto; +} + +div.header .summary { + margin: var(--spacing-medium) auto 0 auto; +} + +div.headertitle { + padding: 0; +} + +div.header .title { + font-weight: 600; + font-size: 225%; + padding: var(--spacing-medium) var(--spacing-large); + word-break: break-word; +} + +div.header .summary { + width: auto; + display: block; + float: none; + padding: 0 var(--spacing-large); +} + +td.memSeparator { + border-color: var(--separator-color); +} + +span.mlabel { + background: var(--primary-color); + border: none; + padding: 4px 9px; + border-radius: 12px; + margin-right: var(--spacing-medium); +} + +span.mlabel:last-of-type { + margin-right: 2px; +} + +div.contents { + padding: 0 var(--spacing-large); +} + +div.contents p, div.contents li { + line-height: var(--content-line-height); +} + +div.contents div.dyncontent { + margin: var(--spacing-medium) 0; +} + +@media (prefers-color-scheme: dark) { + html:not(.light-mode) div.contents div.dyncontent img, + html:not(.light-mode) div.contents center img, + html:not(.light-mode) div.contents > table img, + html:not(.light-mode) div.contents div.dyncontent iframe, + html:not(.light-mode) div.contents center iframe, + html:not(.light-mode) div.contents table iframe, + html:not(.light-mode) div.contents .dotgraph iframe { + filter: brightness(89%) hue-rotate(180deg) invert(); + } +} + +html.dark-mode div.contents div.dyncontent img, +html.dark-mode div.contents center img, +html.dark-mode div.contents > table img, +html.dark-mode div.contents div.dyncontent iframe, +html.dark-mode div.contents center iframe, +html.dark-mode div.contents table iframe, +html.dark-mode div.contents .dotgraph iframe + { + filter: brightness(89%) hue-rotate(180deg) invert(); +} + +h2.groupheader { + border-bottom: 0px; + color: var(--page-foreground-color); + box-shadow: + 100px 0 var(--page-background-color), + -100px 0 var(--page-background-color), + 100px 0.75px var(--separator-color), + -100px 0.75px var(--separator-color), + 500px 0 var(--page-background-color), + -500px 0 var(--page-background-color), + 500px 0.75px var(--separator-color), + -500px 0.75px var(--separator-color), + 900px 0 var(--page-background-color), + -900px 0 var(--page-background-color), + 900px 0.75px var(--separator-color), + -900px 0.75px var(--separator-color), + 1400px 0 var(--page-background-color), + -1400px 0 var(--page-background-color), + 1400px 0.75px var(--separator-color), + -1400px 0.75px var(--separator-color), + 1900px 0 var(--page-background-color), + -1900px 0 var(--page-background-color), + 1900px 0.75px var(--separator-color), + -1900px 0.75px var(--separator-color); +} + +blockquote { + margin: 0 var(--spacing-medium) 0 var(--spacing-medium); + padding: var(--spacing-small) var(--spacing-large); + background: var(--blockquote-background); + color: var(--blockquote-foreground); + border-left: 0; + overflow: visible; + border-radius: var(--border-radius-medium); + overflow: visible; + position: relative; +} + +blockquote::before, blockquote::after { + font-weight: bold; + font-family: serif; + font-size: 360%; + opacity: .15; + position: absolute; +} + +blockquote::before { + content: "“"; + left: -10px; + top: 4px; +} + +blockquote::after { + content: "”"; + right: -8px; + bottom: -25px; +} + +blockquote p { + margin: var(--spacing-small) 0 var(--spacing-medium) 0; +} +.paramname, .paramname em { + font-weight: 600; + color: var(--primary-dark-color); +} + +.paramname > code { + border: 0; +} + +table.params .paramname { + font-weight: 600; + font-family: var(--font-family-monospace); + font-size: var(--code-font-size); + padding-right: var(--spacing-small); + line-height: var(--table-line-height); +} + +h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow { + text-shadow: 0 0 15px var(--primary-light-color); +} + +.alphachar a { + color: var(--page-foreground-color); +} + +.dotgraph { + max-width: 100%; + overflow-x: scroll; +} + +.dotgraph .caption { + position: sticky; + left: 0; +} + +/* Wrap Graphviz graphs with the `interactive_dotgraph` class if `INTERACTIVE_SVG = YES` */ +.interactive_dotgraph .dotgraph iframe { + max-width: 100%; +} + +/* + Table of Contents + */ + +div.contents .toc { + max-height: var(--toc-max-height); + min-width: var(--toc-width); + border: 0; + border-left: 1px solid var(--separator-color); + border-radius: 0; + background-color: var(--page-background-color); + box-shadow: none; + position: sticky; + top: var(--toc-sticky-top); + padding: 0 var(--spacing-large); + margin: var(--spacing-small) 0 var(--spacing-large) var(--spacing-large); +} + +div.toc h3 { + color: var(--toc-foreground); + font-size: var(--navigation-font-size); + margin: var(--spacing-large) 0 var(--spacing-medium) 0; +} + +div.toc li { + padding: 0; + background: none; + line-height: var(--toc-font-size); + margin: var(--toc-font-size) 0 0 0; +} + +div.toc li::before { + display: none; +} + +div.toc ul { + margin-top: 0 +} + +div.toc li a { + font-size: var(--toc-font-size); + color: var(--page-foreground-color) !important; + text-decoration: none; +} + +div.toc li a:hover, div.toc li a.active { + color: var(--primary-color) !important; +} + +div.toc li a.aboveActive { + color: var(--page-secondary-foreground-color) !important; +} + + +@media screen and (max-width: 999px) { + div.contents .toc { + max-height: 45vh; + float: none; + width: auto; + margin: 0 0 var(--spacing-medium) 0; + position: relative; + top: 0; + position: relative; + border: 1px solid var(--separator-color); + border-radius: var(--border-radius-medium); + background-color: var(--toc-background); + box-shadow: var(--box-shadow); + } + + div.contents .toc.interactive { + max-height: calc(var(--navigation-font-size) + 2 * var(--spacing-large)); + overflow: hidden; + } + + div.contents .toc > h3 { + -webkit-tap-highlight-color: transparent; + cursor: pointer; + position: sticky; + top: 0; + background-color: var(--toc-background); + margin: 0; + padding: var(--spacing-large) 0; + display: block; + } + + div.contents .toc.interactive > h3::before { + content: ""; + width: 0; + height: 0; + border-left: 4px solid transparent; + border-right: 4px solid transparent; + border-top: 5px solid var(--primary-color); + display: inline-block; + margin-right: var(--spacing-small); + margin-bottom: calc(var(--navigation-font-size) / 4); + transform: rotate(-90deg); + transition: transform var(--animation-duration) ease-out; + } + + div.contents .toc.interactive.open > h3::before { + transform: rotate(0deg); + } + + div.contents .toc.interactive.open { + max-height: 45vh; + overflow: auto; + transition: max-height 0.2s ease-in-out; + } + + div.contents .toc a, div.contents .toc a.active { + color: var(--primary-color) !important; + } + + div.contents .toc a:hover { + text-decoration: underline; + } +} + +/* + Code & Fragments + */ + +code, div.fragment, pre.fragment { + border-radius: var(--border-radius-small); + border: 1px solid var(--separator-color); + overflow: hidden; +} + +code { + display: inline; + background: var(--code-background); + color: var(--code-foreground); + padding: 2px 6px; +} + +div.fragment, pre.fragment { + margin: var(--spacing-medium) 0; + padding: calc(var(--spacing-large) - (var(--spacing-large) / 6)) var(--spacing-large); + background: var(--fragment-background); + color: var(--fragment-foreground); + overflow-x: auto; +} + +@media screen and (max-width: 767px) { + div.fragment, pre.fragment { + border-top-right-radius: 0; + border-bottom-right-radius: 0; + border-right: 0; + } + + .contents > div.fragment, + .textblock > div.fragment, + .textblock > pre.fragment, + .textblock > .tabbed > ul > li > div.fragment, + .textblock > .tabbed > ul > li > pre.fragment, + .contents > .doxygen-awesome-fragment-wrapper > div.fragment, + .textblock > .doxygen-awesome-fragment-wrapper > div.fragment, + .textblock > .doxygen-awesome-fragment-wrapper > pre.fragment, + .textblock > .tabbed > ul > li > .doxygen-awesome-fragment-wrapper > div.fragment, + .textblock > .tabbed > ul > li > .doxygen-awesome-fragment-wrapper > pre.fragment { + margin: var(--spacing-medium) calc(0px - var(--spacing-large)); + border-radius: 0; + border-left: 0; + } + + .textblock li > .fragment, + .textblock li > .doxygen-awesome-fragment-wrapper > .fragment { + margin: var(--spacing-medium) calc(0px - var(--spacing-large)); + } + + .memdoc li > .fragment, + .memdoc li > .doxygen-awesome-fragment-wrapper > .fragment { + margin: var(--spacing-medium) calc(0px - var(--spacing-medium)); + } + + .textblock ul, .memdoc ul { + overflow: initial; + } + + .memdoc > div.fragment, + .memdoc > pre.fragment, + dl dd > div.fragment, + dl dd pre.fragment, + .memdoc > .doxygen-awesome-fragment-wrapper > div.fragment, + .memdoc > .doxygen-awesome-fragment-wrapper > pre.fragment, + dl dd > .doxygen-awesome-fragment-wrapper > div.fragment, + dl dd .doxygen-awesome-fragment-wrapper > pre.fragment { + margin: var(--spacing-medium) calc(0px - var(--spacing-medium)); + border-radius: 0; + border-left: 0; + } +} + +code, code a, pre.fragment, div.fragment, div.fragment .line, div.fragment span, div.fragment .line a, div.fragment .line span { + font-family: var(--font-family-monospace); + font-size: var(--code-font-size) !important; +} + +div.line:after { + margin-right: var(--spacing-medium); +} + +div.fragment .line, pre.fragment { + white-space: pre; + word-wrap: initial; + line-height: var(--fragment-lineheight); +} + +div.fragment span.keyword { + color: var(--fragment-keyword); +} + +div.fragment span.keywordtype { + color: var(--fragment-keywordtype); +} + +div.fragment span.keywordflow { + color: var(--fragment-keywordflow); +} + +div.fragment span.stringliteral { + color: var(--fragment-token) +} + +div.fragment span.comment { + color: var(--fragment-comment); +} + +div.fragment a.code { + color: var(--fragment-link) !important; +} + +div.fragment span.preprocessor { + color: var(--fragment-preprocessor); +} + +div.fragment span.lineno { + display: inline-block; + width: 27px; + border-right: none; + background: var(--fragment-linenumber-background); + color: var(--fragment-linenumber-color); +} + +div.fragment span.lineno a { + background: none; + color: var(--fragment-link) !important; +} + +div.fragment > .line:first-child .lineno { + box-shadow: -999999px 0px 0 999999px var(--fragment-linenumber-background), -999998px 0px 0 999999px var(--fragment-linenumber-border); + background-color: var(--fragment-linenumber-background) !important; +} + +div.line { + border-radius: var(--border-radius-small); +} + +div.line.glow { + background-color: var(--primary-light-color); + box-shadow: none; +} + +/* + dl warning, attention, note, deprecated, bug, ... + */ + +dl.bug dt a, dl.deprecated dt a, dl.todo dt a { + font-weight: bold !important; +} + +dl.warning, dl.attention, dl.note, dl.deprecated, dl.bug, dl.invariant, dl.pre, dl.post, dl.todo, dl.remark { + padding: var(--spacing-medium); + margin: var(--spacing-medium) 0; + color: var(--page-background-color); + overflow: hidden; + margin-left: 0; + border-radius: var(--border-radius-small); +} + +dl.section dd { + margin-bottom: 2px; +} + +dl.warning, dl.attention { + background: var(--warning-color); + border-left: 8px solid var(--warning-color-dark); + color: var(--warning-color-darker); +} + +dl.warning dt, dl.attention dt { + color: var(--warning-color-dark); +} + +dl.note, dl.remark { + background: var(--note-color); + border-left: 8px solid var(--note-color-dark); + color: var(--note-color-darker); +} + +dl.note dt, dl.remark dt { + color: var(--note-color-dark); +} + +dl.todo { + background: var(--todo-color); + border-left: 8px solid var(--todo-color-dark); + color: var(--todo-color-darker); +} + +dl.todo dt a { + color: var(--todo-color-dark) !important; +} + +dl.bug dt a { + color: var(--todo-color-dark) !important; +} + +dl.bug { + background: var(--bug-color); + border-left: 8px solid var(--bug-color-dark); + color: var(--bug-color-darker); +} + +dl.bug dt a { + color: var(--bug-color-dark) !important; +} + +dl.deprecated { + background: var(--deprecated-color); + border-left: 8px solid var(--deprecated-color-dark); + color: var(--deprecated-color-darker); +} + +dl.deprecated dt a { + color: var(--deprecated-color-dark) !important; +} + +dl.section dd, dl.bug dd, dl.deprecated dd, dl.todo dd { + margin-inline-start: 0px; +} + +dl.invariant, dl.pre, dl.post { + background: var(--invariant-color); + border-left: 8px solid var(--invariant-color-dark); + color: var(--invariant-color-darker); +} + +dl.invariant dt, dl.pre dt, dl.post dt { + color: var(--invariant-color-dark); +} + +/* + memitem + */ + +div.memdoc, div.memproto, h2.memtitle { + box-shadow: none; + background-image: none; + border: none; +} + +div.memdoc { + padding: 0 var(--spacing-medium); + background: var(--page-background-color); +} + +h2.memtitle, div.memitem { + border: 1px solid var(--separator-color); + box-shadow: var(--box-shadow); +} + +h2.memtitle { + box-shadow: 0px var(--spacing-medium) 0 -1px var(--fragment-background), var(--box-shadow); +} + +div.memitem { + transition: none; +} + +div.memproto, h2.memtitle { + background: var(--fragment-background); +} + +h2.memtitle { + font-weight: 500; + font-size: var(--memtitle-font-size); + font-family: var(--font-family-monospace); + border-bottom: none; + border-top-left-radius: var(--border-radius-medium); + border-top-right-radius: var(--border-radius-medium); + word-break: break-all; + position: relative; +} + +h2.memtitle:after { + content: ""; + display: block; + background: var(--fragment-background); + height: var(--spacing-medium); + bottom: calc(0px - var(--spacing-medium)); + left: 0; + right: -14px; + position: absolute; + border-top-right-radius: var(--border-radius-medium); +} + +h2.memtitle > span.permalink { + font-size: inherit; +} + +h2.memtitle > span.permalink > a { + text-decoration: none; + padding-left: 3px; + margin-right: -4px; + user-select: none; + display: inline-block; + margin-top: -6px; +} + +h2.memtitle > span.permalink > a:hover { + color: var(--primary-dark-color) !important; +} + +a:target + h2.memtitle, a:target + h2.memtitle + div.memitem { + border-color: var(--primary-light-color); +} + +div.memitem { + border-top-right-radius: var(--border-radius-medium); + border-bottom-right-radius: var(--border-radius-medium); + border-bottom-left-radius: var(--border-radius-medium); + overflow: hidden; + display: block !important; +} + +div.memdoc { + border-radius: 0; +} + +div.memproto { + border-radius: 0 var(--border-radius-small) 0 0; + overflow: auto; + border-bottom: 1px solid var(--separator-color); + padding: var(--spacing-medium); + margin-bottom: -1px; +} + +div.memtitle { + border-top-right-radius: var(--border-radius-medium); + border-top-left-radius: var(--border-radius-medium); +} + +div.memproto table.memname { + font-family: var(--font-family-monospace); + color: var(--page-foreground-color); + font-size: var(--memname-font-size); + text-shadow: none; +} + +div.memproto div.memtemplate { + font-family: var(--font-family-monospace); + color: var(--primary-dark-color); + font-size: var(--memname-font-size); + margin-left: 2px; + text-shadow: none; +} + +table.mlabels, table.mlabels > tbody { + display: block; +} + +td.mlabels-left { + width: auto; +} + +td.mlabels-right { + margin-top: 3px; + position: sticky; + left: 0; +} + +table.mlabels > tbody > tr:first-child { + display: flex; + justify-content: space-between; + flex-wrap: wrap; +} + +.memname, .memitem span.mlabels { + margin: 0 +} + +/* + reflist + */ + +dl.reflist { + box-shadow: var(--box-shadow); + border-radius: var(--border-radius-medium); + border: 1px solid var(--separator-color); + overflow: hidden; + padding: 0; +} + + +dl.reflist dt, dl.reflist dd { + box-shadow: none; + text-shadow: none; + background-image: none; + border: none; + padding: 12px; +} + + +dl.reflist dt { + font-weight: 500; + border-radius: 0; + background: var(--code-background); + border-bottom: 1px solid var(--separator-color); + color: var(--page-foreground-color) +} + + +dl.reflist dd { + background: none; +} + +/* + Table + */ + +.contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname), +.contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) tbody { + display: inline-block; + max-width: 100%; +} + +.contents > table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname):not(.classindex) { + margin-left: calc(0px - var(--spacing-large)); + margin-right: calc(0px - var(--spacing-large)); + max-width: calc(100% + 2 * var(--spacing-large)); +} + +table.fieldtable, +table.markdownTable tbody, +table.doxtable tbody { + border: none; + margin: var(--spacing-medium) 0; + box-shadow: 0 0 0 1px var(--separator-color); + border-radius: var(--border-radius-small); +} + +table.markdownTable, table.doxtable, table.fieldtable { + padding: 1px; +} + +table.doxtable caption { + display: block; +} + +table.fieldtable { + border-collapse: collapse; + width: 100%; +} + +th.markdownTableHeadLeft, +th.markdownTableHeadRight, +th.markdownTableHeadCenter, +th.markdownTableHeadNone, +table.doxtable th { + background: var(--tablehead-background); + color: var(--tablehead-foreground); + font-weight: 600; + font-size: var(--page-font-size); +} + +th.markdownTableHeadLeft:first-child, +th.markdownTableHeadRight:first-child, +th.markdownTableHeadCenter:first-child, +th.markdownTableHeadNone:first-child, +table.doxtable tr th:first-child { + border-top-left-radius: var(--border-radius-small); +} + +th.markdownTableHeadLeft:last-child, +th.markdownTableHeadRight:last-child, +th.markdownTableHeadCenter:last-child, +th.markdownTableHeadNone:last-child, +table.doxtable tr th:last-child { + border-top-right-radius: var(--border-radius-small); +} + +table.markdownTable td, +table.markdownTable th, +table.fieldtable td, +table.fieldtable th, +table.doxtable td, +table.doxtable th { + border: 1px solid var(--separator-color); + padding: var(--spacing-small) var(--spacing-medium); +} + +table.markdownTable td:last-child, +table.markdownTable th:last-child, +table.fieldtable td:last-child, +table.fieldtable th:last-child, +table.doxtable td:last-child, +table.doxtable th:last-child { + border-right: none; +} + +table.markdownTable td:first-child, +table.markdownTable th:first-child, +table.fieldtable td:first-child, +table.fieldtable th:first-child, +table.doxtable td:first-child, +table.doxtable th:first-child { + border-left: none; +} + +table.markdownTable tr:first-child td, +table.markdownTable tr:first-child th, +table.fieldtable tr:first-child td, +table.fieldtable tr:first-child th, +table.doxtable tr:first-child td, +table.doxtable tr:first-child th { + border-top: none; +} + +table.markdownTable tr:last-child td, +table.markdownTable tr:last-child th, +table.fieldtable tr:last-child td, +table.fieldtable tr:last-child th, +table.doxtable tr:last-child td, +table.doxtable tr:last-child th { + border-bottom: none; +} + +table.markdownTable tr, table.doxtable tr { + border-bottom: 1px solid var(--separator-color); +} + +table.markdownTable tr:last-child, table.doxtable tr:last-child { + border-bottom: none; +} + +.full_width_table table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) { + display: block; +} + +.full_width_table table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) tbody { + display: table; + width: 100%; +} + +table.fieldtable th { + font-size: var(--page-font-size); + font-weight: 600; + background-image: none; + background-color: var(--tablehead-background); + color: var(--tablehead-foreground); +} + +table.fieldtable td.fieldtype, .fieldtable td.fieldname, .fieldtable td.fieldinit, .fieldtable td.fielddoc, .fieldtable th { + border-bottom: 1px solid var(--separator-color); + border-right: 1px solid var(--separator-color); +} + +table.fieldtable tr:last-child td:first-child { + border-bottom-left-radius: var(--border-radius-small); +} + +table.fieldtable tr:last-child td:last-child { + border-bottom-right-radius: var(--border-radius-small); +} + +.memberdecls td.glow, .fieldtable tr.glow { + background-color: var(--primary-light-color); + box-shadow: none; +} + +table.memberdecls { + display: block; + -webkit-tap-highlight-color: transparent; +} + +table.memberdecls tr[class^='memitem'] { + font-family: var(--font-family-monospace); + font-size: var(--code-font-size); +} + +table.memberdecls tr[class^='memitem'] .memTemplParams { + font-family: var(--font-family-monospace); + font-size: var(--code-font-size); + color: var(--primary-dark-color); + white-space: normal; +} + +table.memberdecls .memItemLeft, +table.memberdecls .memItemRight, +table.memberdecls .memTemplItemLeft, +table.memberdecls .memTemplItemRight, +table.memberdecls .memTemplParams { + transition: none; + padding-top: var(--spacing-small); + padding-bottom: var(--spacing-small); + border-top: 1px solid var(--separator-color); + border-bottom: 1px solid var(--separator-color); + background-color: var(--fragment-background); +} + +table.memberdecls .memTemplItemLeft, +table.memberdecls .memTemplItemRight { + padding-top: 2px; +} + +table.memberdecls .memTemplParams { + border-bottom: 0; + border-left: 1px solid var(--separator-color); + border-right: 1px solid var(--separator-color); + border-radius: var(--border-radius-small) var(--border-radius-small) 0 0; + padding-bottom: var(--spacing-small); +} + +table.memberdecls .memTemplItemLeft { + border-radius: 0 0 0 var(--border-radius-small); + border-left: 1px solid var(--separator-color); + border-top: 0; +} + +table.memberdecls .memTemplItemRight { + border-radius: 0 0 var(--border-radius-small) 0; + border-right: 1px solid var(--separator-color); + padding-left: 0; + border-top: 0; +} + +table.memberdecls .memItemLeft { + border-radius: var(--border-radius-small) 0 0 var(--border-radius-small); + border-left: 1px solid var(--separator-color); + padding-left: var(--spacing-medium); + padding-right: 0; +} + +table.memberdecls .memItemRight { + border-radius: 0 var(--border-radius-small) var(--border-radius-small) 0; + border-right: 1px solid var(--separator-color); + padding-right: var(--spacing-medium); + padding-left: 0; + +} + +table.memberdecls .mdescLeft, table.memberdecls .mdescRight { + background: none; + color: var(--page-foreground-color); + padding: var(--spacing-small) 0; +} + +table.memberdecls .memItemLeft, +table.memberdecls .memTemplItemLeft { + padding-right: var(--spacing-medium); +} + +table.memberdecls .memSeparator { + background: var(--page-background-color); + height: var(--spacing-large); + border: 0; + transition: none; +} + +table.memberdecls .groupheader { + margin-bottom: var(--spacing-large); +} + +table.memberdecls .inherit_header td { + padding: 0 0 var(--spacing-medium) 0; + text-indent: -12px; + color: var(--page-secondary-foreground-color); +} + +table.memberdecls img[src="closed.png"], +table.memberdecls img[src="open.png"], +div.dynheader img[src="open.png"], +div.dynheader img[src="closed.png"] { + width: 0; + height: 0; + border-left: 4px solid transparent; + border-right: 4px solid transparent; + border-top: 5px solid var(--primary-color); + margin-top: 8px; + display: block; + float: left; + margin-left: -10px; + transition: transform var(--animation-duration) ease-out; +} + +table.memberdecls img { + margin-right: 10px; +} + +table.memberdecls img[src="closed.png"], +div.dynheader img[src="closed.png"] { + transform: rotate(-90deg); + +} + +.compoundTemplParams { + font-family: var(--font-family-monospace); + color: var(--primary-dark-color); + font-size: var(--code-font-size); +} + +@media screen and (max-width: 767px) { + + table.memberdecls .memItemLeft, + table.memberdecls .memItemRight, + table.memberdecls .mdescLeft, + table.memberdecls .mdescRight, + table.memberdecls .memTemplItemLeft, + table.memberdecls .memTemplItemRight, + table.memberdecls .memTemplParams { + display: block; + text-align: left; + padding-left: var(--spacing-large); + margin: 0 calc(0px - var(--spacing-large)) 0 calc(0px - var(--spacing-large)); + border-right: none; + border-left: none; + border-radius: 0; + white-space: normal; + } + + table.memberdecls .memItemLeft, + table.memberdecls .mdescLeft, + table.memberdecls .memTemplItemLeft { + border-bottom: 0; + padding-bottom: 0; + } + + table.memberdecls .memTemplItemLeft { + padding-top: 0; + } + + table.memberdecls .mdescLeft { + margin-bottom: calc(0px - var(--page-font-size)); + } + + table.memberdecls .memItemRight, + table.memberdecls .mdescRight, + table.memberdecls .memTemplItemRight { + border-top: 0; + padding-top: 0; + padding-right: var(--spacing-large); + overflow-x: auto; + } + + table.memberdecls tr[class^='memitem']:not(.inherit) { + display: block; + width: calc(100vw - 2 * var(--spacing-large)); + } + + table.memberdecls .mdescRight { + color: var(--page-foreground-color); + } + + table.memberdecls tr.inherit { + visibility: hidden; + } + + table.memberdecls tr[style="display: table-row;"] { + display: block !important; + visibility: visible; + width: calc(100vw - 2 * var(--spacing-large)); + animation: fade .5s; + } + + @keyframes fade { + 0% { + opacity: 0; + max-height: 0; + } + + 100% { + opacity: 1; + max-height: 200px; + } + } +} + + +/* + Horizontal Rule + */ + +hr { + margin-top: var(--spacing-large); + margin-bottom: var(--spacing-large); + height: 1px; + background-color: var(--separator-color); + border: 0; +} + +.contents hr { + box-shadow: 100px 0 var(--separator-color), + -100px 0 var(--separator-color), + 500px 0 var(--separator-color), + -500px 0 var(--separator-color), + 900px 0 var(--separator-color), + -900px 0 var(--separator-color), + 1400px 0 var(--separator-color), + -1400px 0 var(--separator-color), + 1900px 0 var(--separator-color), + -1900px 0 var(--separator-color); +} + +.contents img, .contents .center, .contents center, .contents div.image object { + max-width: 100%; + overflow: auto; +} + +@media screen and (max-width: 767px) { + .contents .dyncontent > .center, .contents > center { + margin-left: calc(0px - var(--spacing-large)); + margin-right: calc(0px - var(--spacing-large)); + max-width: calc(100% + 2 * var(--spacing-large)); + } +} + +/* + Directories + */ +div.directory { + border-top: 1px solid var(--separator-color); + border-bottom: 1px solid var(--separator-color); + width: auto; +} + +table.directory { + font-family: var(--font-family); + font-size: var(--page-font-size); + font-weight: normal; + width: 100%; +} + +table.directory td.entry, table.directory td.desc { + padding: calc(var(--spacing-small) / 2) var(--spacing-small); + line-height: var(--table-line-height); +} + +table.directory tr.even td:last-child { + border-radius: 0 var(--border-radius-small) var(--border-radius-small) 0; +} + +table.directory tr.even td:first-child { + border-radius: var(--border-radius-small) 0 0 var(--border-radius-small); +} + +table.directory tr.even:last-child td:last-child { + border-radius: 0 var(--border-radius-small) 0 0; +} + +table.directory tr.even:last-child td:first-child { + border-radius: var(--border-radius-small) 0 0 0; +} + +table.directory td.desc { + min-width: 250px; +} + +table.directory tr.even { + background-color: var(--odd-color); +} + +table.directory tr.odd { + background-color: transparent; +} + +.icona { + width: auto; + height: auto; + margin: 0 var(--spacing-small); +} + +.icon { + background: var(--primary-color); + border-radius: var(--border-radius-small); + font-size: var(--page-font-size); + padding: calc(var(--page-font-size) / 5); + line-height: var(--page-font-size); + transform: scale(0.8); + height: auto; + width: var(--page-font-size); + user-select: none; +} + +.iconfopen, .icondoc, .iconfclosed { + background-position: center; + margin-bottom: 0; + height: var(--table-line-height); +} + +.icondoc { + filter: saturate(0.2); +} + +@media screen and (max-width: 767px) { + div.directory { + margin-left: calc(0px - var(--spacing-large)); + margin-right: calc(0px - var(--spacing-large)); + } +} + +@media (prefers-color-scheme: dark) { + html:not(.light-mode) .iconfopen, html:not(.light-mode) .iconfclosed { + filter: hue-rotate(180deg) invert(); + } +} + +html.dark-mode .iconfopen, html.dark-mode .iconfclosed { + filter: hue-rotate(180deg) invert(); +} + +/* + Class list + */ + +.classindex dl.odd { + background: var(--odd-color); + border-radius: var(--border-radius-small); +} + +.classindex dl.even { + background-color: transparent; +} + +/* + Class Index Doxygen 1.8 +*/ + +table.classindex { + margin-left: 0; + margin-right: 0; + width: 100%; +} + +table.classindex table div.ah { + background-image: none; + background-color: initial; + border-color: var(--separator-color); + color: var(--page-foreground-color); + box-shadow: var(--box-shadow); + border-radius: var(--border-radius-large); + padding: var(--spacing-small); +} + +div.qindex { + background-color: var(--odd-color); + border-radius: var(--border-radius-small); + border: 1px solid var(--separator-color); + padding: var(--spacing-small) 0; +} + +/* + Footer and nav-path + */ + +#nav-path { + width: 100%; +} + +#nav-path ul { + background-image: none; + background: var(--page-background-color); + border: none; + border-top: 1px solid var(--separator-color); + border-bottom: 1px solid var(--separator-color); + border-bottom: 0; + box-shadow: 0 0.75px 0 var(--separator-color); + font-size: var(--navigation-font-size); +} + +img.footer { + width: 60px; +} + +.navpath li.footer { + color: var(--page-secondary-foreground-color); +} + +address.footer { + color: var(--page-secondary-foreground-color); + margin-bottom: var(--spacing-large); +} + +#nav-path li.navelem { + background-image: none; + display: flex; + align-items: center; +} + +.navpath li.navelem a { + text-shadow: none; + display: inline-block; + color: var(--primary-color) !important; +} + +.navpath li.navelem b { + color: var(--primary-dark-color); + font-weight: 500; +} + +li.navelem { + padding: 0; + margin-left: -8px; +} + +li.navelem:first-child { + margin-left: var(--spacing-large); +} + +li.navelem:first-child:before { + display: none; +} + +#nav-path li.navelem:after { + content: ''; + border: 5px solid var(--page-background-color); + border-bottom-color: transparent; + border-right-color: transparent; + border-top-color: transparent; + transform: translateY(-1px) scaleY(4.2); + z-index: 10; + margin-left: 6px; +} + +#nav-path li.navelem:before { + content: ''; + border: 5px solid var(--separator-color); + border-bottom-color: transparent; + border-right-color: transparent; + border-top-color: transparent; + transform: translateY(-1px) scaleY(3.2); + margin-right: var(--spacing-small); +} + +.navpath li.navelem a:hover { + color: var(--primary-color); +} + +/* + Scrollbars for Webkit +*/ + +#nav-tree::-webkit-scrollbar, +div.fragment::-webkit-scrollbar, +pre.fragment::-webkit-scrollbar, +div.memproto::-webkit-scrollbar, +.contents center::-webkit-scrollbar, +.contents .center::-webkit-scrollbar, +.contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) tbody::-webkit-scrollbar, +div.contents .toc::-webkit-scrollbar, +.contents .dotgraph::-webkit-scrollbar, +.contents .tabs-overview-container::-webkit-scrollbar { + background: transparent; + width: calc(var(--webkit-scrollbar-size) + var(--webkit-scrollbar-padding) + var(--webkit-scrollbar-padding)); + height: calc(var(--webkit-scrollbar-size) + var(--webkit-scrollbar-padding) + var(--webkit-scrollbar-padding)); +} + +#nav-tree::-webkit-scrollbar-thumb, +div.fragment::-webkit-scrollbar-thumb, +pre.fragment::-webkit-scrollbar-thumb, +div.memproto::-webkit-scrollbar-thumb, +.contents center::-webkit-scrollbar-thumb, +.contents .center::-webkit-scrollbar-thumb, +.contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) tbody::-webkit-scrollbar-thumb, +div.contents .toc::-webkit-scrollbar-thumb, +.contents .dotgraph::-webkit-scrollbar-thumb, +.contents .tabs-overview-container::-webkit-scrollbar-thumb { + background-color: transparent; + border: var(--webkit-scrollbar-padding) solid transparent; + border-radius: calc(var(--webkit-scrollbar-padding) + var(--webkit-scrollbar-padding)); + background-clip: padding-box; +} + +#nav-tree:hover::-webkit-scrollbar-thumb, +div.fragment:hover::-webkit-scrollbar-thumb, +pre.fragment:hover::-webkit-scrollbar-thumb, +div.memproto:hover::-webkit-scrollbar-thumb, +.contents center:hover::-webkit-scrollbar-thumb, +.contents .center:hover::-webkit-scrollbar-thumb, +.contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) tbody:hover::-webkit-scrollbar-thumb, +div.contents .toc:hover::-webkit-scrollbar-thumb, +.contents .dotgraph:hover::-webkit-scrollbar-thumb, +.contents .tabs-overview-container:hover::-webkit-scrollbar-thumb { + background-color: var(--webkit-scrollbar-color); +} + +#nav-tree::-webkit-scrollbar-track, +div.fragment::-webkit-scrollbar-track, +pre.fragment::-webkit-scrollbar-track, +div.memproto::-webkit-scrollbar-track, +.contents center::-webkit-scrollbar-track, +.contents .center::-webkit-scrollbar-track, +.contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) tbody::-webkit-scrollbar-track, +div.contents .toc::-webkit-scrollbar-track, +.contents .dotgraph::-webkit-scrollbar-track, +.contents .tabs-overview-container::-webkit-scrollbar-track { + background: transparent; +} + +#nav-tree::-webkit-scrollbar-corner { + background-color: var(--side-nav-background); +} + +#nav-tree, +div.fragment, +pre.fragment, +div.memproto, +.contents center, +.contents .center, +.contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) tbody, +div.contents .toc { + overflow-x: auto; + overflow-x: overlay; +} + +#nav-tree { + overflow-x: auto; + overflow-y: auto; + overflow-y: overlay; +} + +/* + Scrollbars for Firefox +*/ + +#nav-tree, +div.fragment, +pre.fragment, +div.memproto, +.contents center, +.contents .center, +.contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) tbody, +div.contents .toc, +.contents .dotgraph, +.contents .tabs-overview-container { + scrollbar-width: thin; +} + +/* + Optional Dark mode toggle button +*/ + +doxygen-awesome-dark-mode-toggle { + display: inline-block; + margin: 0 0 0 var(--spacing-small); + padding: 0; + width: var(--searchbar-height); + height: var(--searchbar-height); + background: none; + border: none; + border-radius: var(--searchbar-height); + vertical-align: middle; + text-align: center; + line-height: var(--searchbar-height); + font-size: 22px; + display: flex; + align-items: center; + justify-content: center; + user-select: none; + cursor: pointer; +} + +doxygen-awesome-dark-mode-toggle > svg { + transition: transform var(--animation-duration) ease-in-out; +} + +doxygen-awesome-dark-mode-toggle:active > svg { + transform: scale(.5); +} + +doxygen-awesome-dark-mode-toggle:hover { + background-color: rgba(0,0,0,.03); +} + +html.dark-mode doxygen-awesome-dark-mode-toggle:hover { + background-color: rgba(0,0,0,.18); +} + +/* + Optional fragment copy button +*/ +.doxygen-awesome-fragment-wrapper { + position: relative; +} + +doxygen-awesome-fragment-copy-button { + opacity: 0; + background: var(--fragment-background); + width: 28px; + height: 28px; + position: absolute; + right: calc(var(--spacing-large) - (var(--spacing-large) / 2.5)); + top: calc(var(--spacing-large) - (var(--spacing-large) / 2.5)); + border: 1px solid var(--fragment-foreground); + cursor: pointer; + border-radius: var(--border-radius-small); + display: flex; + justify-content: center; + align-items: center; +} + +.doxygen-awesome-fragment-wrapper:hover doxygen-awesome-fragment-copy-button, doxygen-awesome-fragment-copy-button.success { + opacity: .28; +} + +doxygen-awesome-fragment-copy-button:hover, doxygen-awesome-fragment-copy-button.success { + opacity: 1 !important; +} + +doxygen-awesome-fragment-copy-button:active:not([class~=success]) svg { + transform: scale(.91); +} + +doxygen-awesome-fragment-copy-button svg { + fill: var(--fragment-foreground); + width: 18px; + height: 18px; +} + +doxygen-awesome-fragment-copy-button.success svg { + fill: rgb(14, 168, 14); +} + +doxygen-awesome-fragment-copy-button.success { + border-color: rgb(14, 168, 14); +} + +@media screen and (max-width: 767px) { + .textblock > .doxygen-awesome-fragment-wrapper > doxygen-awesome-fragment-copy-button, + .textblock li > .doxygen-awesome-fragment-wrapper > doxygen-awesome-fragment-copy-button, + .memdoc li > .doxygen-awesome-fragment-wrapper > doxygen-awesome-fragment-copy-button, + .memdoc > .doxygen-awesome-fragment-wrapper > doxygen-awesome-fragment-copy-button, + dl dd > .doxygen-awesome-fragment-wrapper > doxygen-awesome-fragment-copy-button { + right: 0; + } +} + +/* + Optional paragraph link button +*/ + +a.anchorlink { + font-size: 90%; + margin-left: var(--spacing-small); + color: var(--page-foreground-color) !important; + text-decoration: none; + opacity: .15; + display: none; + transition: opacity var(--animation-duration) ease-in-out, color var(--animation-duration) ease-in-out; +} + +a.anchorlink svg { + fill: var(--page-foreground-color); +} + +h3 a.anchorlink svg, h4 a.anchorlink svg { + margin-bottom: -3px; + margin-top: -4px; +} + +a.anchorlink:hover { + opacity: .45; +} + +h2:hover a.anchorlink, h1:hover a.anchorlink, h3:hover a.anchorlink, h4:hover a.anchorlink { + display: inline-block; +} + +/* + Optional tab feature +*/ + +.tabbed > ul { + padding-inline-start: 0px; + margin: 0; + padding: var(--spacing-small) 0; +} + +.tabbed > ul > li { + display: none; +} + +.tabbed > ul > li.selected { + display: block; +} + +.tabs-overview-container { + overflow-x: auto; + display: block; + overflow-y: visible; +} + +.tabs-overview { + border-bottom: 1px solid var(--separator-color); + display: flex; + flex-direction: row; +} + +@media screen and (max-width: 767px) { + .tabs-overview-container { + margin: 0 calc(0px - var(--spacing-large)); + } + .tabs-overview { + padding: 0 var(--spacing-large) + } +} + +.tabs-overview button.tab-button { + color: var(--page-foreground-color); + margin: 0; + border: none; + background: transparent; + padding: calc(var(--spacing-large) / 2) 0; + display: inline-block; + font-size: var(--page-font-size); + cursor: pointer; + box-shadow: 0 1px 0 0 var(--separator-color); + position: relative; + + -webkit-tap-highlight-color: transparent; +} + +.tabs-overview button.tab-button .tab-title::before { + display: block; + content: attr(title); + font-weight: 600; + height: 0; + overflow: hidden; + visibility: hidden; +} + +.tabs-overview button.tab-button .tab-title { + float: left; + white-space: nowrap; + font-weight: normal; + padding: calc(var(--spacing-large) / 2) var(--spacing-large); + border-radius: var(--border-radius-medium); + transition: background-color var(--animation-duration) ease-in-out, font-weight var(--animation-duration) ease-in-out; +} + +.tabs-overview button.tab-button:not(:last-child) .tab-title { + box-shadow: 8px 0 0 -7px var(--separator-color); +} + +.tabs-overview button.tab-button:hover .tab-title { + background: var(--separator-color); + box-shadow: none; +} + +.tabs-overview button.tab-button.active .tab-title { + font-weight: 600; +} + +.tabs-overview button.tab-button::after { + content: ''; + display: block; + position: absolute; + left: 0; + bottom: 0; + right: 0; + height: 0; + width: 0%; + margin: 0 auto; + border-radius: var(--border-radius-small) var(--border-radius-small) 0 0; + background-color: var(--primary-color); + transition: width var(--animation-duration) ease-in-out, height var(--animation-duration) ease-in-out; +} + +.tabs-overview button.tab-button.active::after { + width: 100%; + box-sizing: border-box; + height: 3px; +} + + +/* + Navigation Buttons +*/ + +.section_buttons:not(:empty) { + margin-top: calc(var(--spacing-large) * 3); +} + +.section_buttons table.markdownTable { + display: block; + width: 100%; +} + +.section_buttons table.markdownTable tbody { + display: table !important; + width: 100%; + box-shadow: none; + border-spacing: 10px; +} + +.section_buttons table.markdownTable td { + padding: 0; +} + +.section_buttons table.markdownTable th { + display: none; +} + +.section_buttons table.markdownTable tr.markdownTableHead { + border: none; +} + +.section_buttons tr th, .section_buttons tr td { + background: none; + border: none; + padding: var(--spacing-large) 0 var(--spacing-small); +} + +.section_buttons a { + display: inline-block; + border: 1px solid var(--separator-color); + border-radius: var(--border-radius-medium); + color: var(--page-secondary-foreground-color) !important; + text-decoration: none; + transition: color var(--animation-duration) ease-in-out, background-color var(--animation-duration) ease-in-out; +} + +.section_buttons a:hover { + color: var(--page-foreground-color) !important; + background-color: var(--odd-color); +} + +.section_buttons tr td.markdownTableBodyLeft a { + padding: var(--spacing-medium) var(--spacing-large) var(--spacing-medium) calc(var(--spacing-large) / 2); +} + +.section_buttons tr td.markdownTableBodyRight a { + padding: var(--spacing-medium) calc(var(--spacing-large) / 2) var(--spacing-medium) var(--spacing-large); +} + +.section_buttons tr td.markdownTableBodyLeft a::before, +.section_buttons tr td.markdownTableBodyRight a::after { + color: var(--page-secondary-foreground-color) !important; + display: inline-block; + transition: color .08s ease-in-out, transform .09s ease-in-out; +} + +.section_buttons tr td.markdownTableBodyLeft a::before { + content: '〈'; + padding-right: var(--spacing-large); +} + + +.section_buttons tr td.markdownTableBodyRight a::after { + content: '〉'; + padding-left: var(--spacing-large); +} + + +.section_buttons tr td.markdownTableBodyLeft a:hover::before { + color: var(--page-foreground-color) !important; + transform: translateX(-3px); +} + +.section_buttons tr td.markdownTableBodyRight a:hover::after { + color: var(--page-foreground-color) !important; + transform: translateX(3px); +} + +@media screen and (max-width: 450px) { + .section_buttons a { + width: 100%; + box-sizing: border-box; + } + + .section_buttons tr td:nth-of-type(1).markdownTableBodyLeft a { + border-radius: var(--border-radius-medium) 0 0 var(--border-radius-medium); + border-right: none; + } + + .section_buttons tr td:nth-of-type(2).markdownTableBodyRight a { + border-radius: 0 var(--border-radius-medium) var(--border-radius-medium) 0; + } +} diff --git a/doxygen/doxygen.css b/doxygen/doxygen.css new file mode 100644 index 0000000..be99c9f --- /dev/null +++ b/doxygen/doxygen.css @@ -0,0 +1,2131 @@ +/* The standard CSS for doxygen 1.16.1*/ + +body { + background-color: white; + color: black; +} + +body, table, div, p, dl { + font-weight: 400; + font-size: 14px; + font-family: system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol"; + line-height: 22px; +} + +body.resizing { + user-select: none; + -webkit-user-select: none; +} + +#doc-content { + scrollbar-width: thin; +} + +/* @group Heading Levels */ + +.title { + font-family: system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol"; + line-height: 28px; + font-size: 160%; + font-weight: 400; + margin: 10px 2px; +} + +h1.groupheader { + font-size: 150%; +} + +h2.groupheader { + box-shadow: 12px 0 white, + -12px 0 white, + 12px 1px #D9E0EE, + -12px 1px #D9E0EE; + color: #354C7B; + font-size: 150%; + font-weight: normal; + margin-top: 1.75em; + padding-top: 8px; + padding-bottom: 4px; + width: 100%; +} + +td h2.groupheader { + box-shadow: 13px 0 white, + -13px 0 white, + 13px 1px #D9E0EE, + -13px 1px #D9E0EE; +} + +h3.groupheader { + font-size: 100%; +} + +h1, h2, h3, h4, h5, h6 { + -webkit-transition: text-shadow 0.5s linear; + -moz-transition: text-shadow 0.5s linear; + -ms-transition: text-shadow 0.5s linear; + -o-transition: text-shadow 0.5s linear; + transition: text-shadow 0.5s linear; + margin-right: 15px; +} + +h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow { + text-shadow: 0 0 15px cyan; +} + +dt { + font-weight: bold; +} + +p.startli, p.startdd { + margin-top: 2px; + margin-bottom: 0px; +} + +th p.starttd, th p.intertd, th p.endtd { + font-size: 100%; + font-weight: 700; +} + +p.starttd { + margin-top: 0px; +} + +p.endli { + margin-bottom: 0px; +} + +p.enddd { + margin-bottom: 4px; +} + +p.endtd { + margin-bottom: 2px; +} + +p.interli { +} + +p.interdd { +} + +p.intertd { +} + +/* @end */ + +caption { + font-weight: bold; +} + +span.legend { + font-size: 70%; + text-align: center; +} + +h3.version { + font-size: 90%; + text-align: center; +} + +div.navtab { + margin-right: 6px; + padding-right: 6px; + text-align: right; + line-height: 110%; + background-color: #F9FAFC; +} + +div.navtab table { + border-spacing: 0; +} + +td.navtab { + padding-right: 6px; + padding-left: 6px; +} + +td.navtabHL { + padding-right: 6px; + padding-left: 6px; + border-radius: 0 6px 6px 0; + background-color: #DCE2EF; +} + +div.qindex{ + text-align: center; + width: 100%; + line-height: 140%; + font-size: 130%; + color: #A0A0A0; +} + +#main-menu a:focus { + outline: auto; + z-index: 10; + position: relative; +} + +dt.alphachar{ + font-size: 180%; + font-weight: bold; +} + +.alphachar a{ + color: black; +} + +.alphachar a:hover, .alphachar a:visited{ + text-decoration: none; +} + +.classindex dl { + padding: 25px; + column-count:1 +} + +.classindex dd { + display:inline-block; + margin-left: 50px; + width: 90%; + line-height: 1.15em; +} + +.classindex dl.even { + background-color: white; +} + +.classindex dl.odd { + background-color: #F8F9FC; +} + +@media(min-width: 1120px) { + .classindex dl { + column-count:2 + } +} + +@media(min-width: 1320px) { + .classindex dl { + column-count:3 + } +} + + +/* @group Link Styling */ + +a { + color: #3D578C; + font-weight: normal; + text-decoration: none; +} + +.contents a:visited { + color: #3D578C; +} + +span.label a:hover { + text-decoration: none; + background: linear-gradient(to bottom, transparent 0,transparent calc(100% - 1px), currentColor 100%); +} + +a.el { + font-weight: bold; +} + +a.elRef { +} + +a.el, a.el:visited, a.code, a.code:visited, a.line, a.line:visited { + color: #3D578C; +} + +a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited { + color: #334975; +} + +a.code.hl_class { /* style for links to class names in code snippets */ } +a.code.hl_struct { /* style for links to struct names in code snippets */ } +a.code.hl_union { /* style for links to union names in code snippets */ } +a.code.hl_interface { /* style for links to interface names in code snippets */ } +a.code.hl_protocol { /* style for links to protocol names in code snippets */ } +a.code.hl_category { /* style for links to category names in code snippets */ } +a.code.hl_exception { /* style for links to exception names in code snippets */ } +a.code.hl_service { /* style for links to service names in code snippets */ } +a.code.hl_singleton { /* style for links to singleton names in code snippets */ } +a.code.hl_concept { /* style for links to concept names in code snippets */ } +a.code.hl_namespace { /* style for links to namespace names in code snippets */ } +a.code.hl_package { /* style for links to package names in code snippets */ } +a.code.hl_define { /* style for links to macro names in code snippets */ } +a.code.hl_function { /* style for links to function names in code snippets */ } +a.code.hl_variable { /* style for links to variable names in code snippets */ } +a.code.hl_typedef { /* style for links to typedef names in code snippets */ } +a.code.hl_enumvalue { /* style for links to enum value names in code snippets */ } +a.code.hl_enumeration { /* style for links to enumeration names in code snippets */ } +a.code.hl_signal { /* style for links to Qt signal names in code snippets */ } +a.code.hl_slot { /* style for links to Qt slot names in code snippets */ } +a.code.hl_friend { /* style for links to friend names in code snippets */ } +a.code.hl_dcop { /* style for links to KDE3 DCOP names in code snippets */ } +a.code.hl_property { /* style for links to property names in code snippets */ } +a.code.hl_event { /* style for links to event names in code snippets */ } +a.code.hl_sequence { /* style for links to sequence names in code snippets */ } +a.code.hl_dictionary { /* style for links to dictionary names in code snippets */ } + +div.embeddoc { + font-family: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed; + padding-left: 10px; +} + +/* @end */ + +dl.el { + margin-left: -1cm; +} + +ul.check { + list-style: none; + padding-left: 40px; + margin: 0; +} + +ul.check li { + position: relative; +} + +li.unchecked::before, li.checked::before { + position: absolute; + left: -18px; + top: 0; +} + +li.unchecked::before { + content: "☐"; +} + +li.checked::before { + content: "☑"; +} + +ul.check li > p { + display: inline; +} + +ul.check li > p:not(:first-child) { + display: block; +} + +ol { + text-indent: 0px; +} + +ul { + text-indent: 0px; + overflow: visible; +} + +ul.multicol { + -moz-column-gap: 1em; + -webkit-column-gap: 1em; + column-gap: 1em; + -moz-column-count: 3; + -webkit-column-count: 3; + column-count: 3; + list-style-type: none; +} + +#side-nav ul { + overflow: visible; /* reset ul rule for scroll bar in GENERATE_TREEVIEW window */ +} + +#main-nav ul { + overflow: visible; /* reset ul rule for the navigation bar drop down lists */ +} + +.fragment { + text-align: left; + direction: ltr; + overflow-x: auto; + overflow-y: hidden; + position: relative; + min-height: 12px; + margin: 10px 0px; + padding: 10px 10px; + border: 1px solid #C4CFE5; + border-radius: 4px; + background-color: #FBFCFD; + color: black; +} + +pre.fragment { + word-wrap: break-word; + font-size: 10pt; + line-height: 125%; + font-family: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed; +} + +span.tt { + white-space: pre; + font-family: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed; + background-color: #FBFCFD; +} + +.clipboard { + width: 24px; + height: 24px; + right: 5px; + top: 5px; + opacity: 0; + position: absolute; + display: inline; + overflow: hidden; + justify-content: center; + align-items: center; + cursor: pointer; +} + +.clipboard.success { + border: 1px solid black; + border-radius: 4px; +} + +.fragment:hover .clipboard, .clipboard.success { + opacity: .4; +} + +.clipboard:hover, .clipboard.success { + opacity: 1 !important; +} + +.clipboard:active:not([class~=success]) svg { + transform: scale(.91); +} + +.clipboard.success svg { + fill: #2EC82E; +} + +.clipboard.success { + border-color: #2EC82E; +} + +div.line { + font-family: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed; + font-size: 13px; + min-height: 13px; + line-height: 1.2; + text-wrap: wrap; + word-break: break-all; + white-space: -moz-pre-wrap; /* Moz */ + white-space: -pre-wrap; /* Opera 4-6 */ + white-space: -o-pre-wrap; /* Opera 7 */ + white-space: pre-wrap; /* CSS3 */ + word-wrap: break-word; /* IE 5.5+ */ + text-indent: -62px; + padding-left: 62px; + padding-bottom: 0px; + margin: 0px; + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +div.line:after { + content:"\000A"; + white-space: pre; +} + +div.line.glow { + background-color: cyan; + box-shadow: 0 0 10px cyan; +} + +span.fold { + display: inline-block; + width: 12px; + height: 12px; + margin-left: 4px; + margin-right: 1px; +} + +span.foldnone { + display: inline-block; + position: relative; + cursor: pointer; + user-select: none; +} + +span.fold.plus, span.fold.minus { + width: 10px; + height: 10px; + background-color: #FBFCFD; + position: relative; + border: 1px solid #808080; + margin-right: 1px; +} + +span.fold.plus::before, span.fold.minus::before { + content: ''; + position: absolute; + background-color: #808080; +} + +span.fold.plus::before { + width: 2px; + height: 6px; + top: 2px; + left: 4px; +} + +span.fold.plus::after { + content: ''; + position: absolute; + width: 6px; + height: 2px; + top: 4px; + left: 2px; + background-color: #808080; +} + +span.fold.minus::before { + width: 6px; + height: 2px; + top: 4px; + left: 2px; +} + +span.lineno { + padding-right: 4px; + margin-right: 9px; + text-align: right; + border-right: 2px solid #00FF00; + color: black; + background-color: #E8E8E8; + white-space: pre; +} +span.lineno a, span.lineno a:visited { + color: #4665A2; + background-color: #D8D8D8; +} + +span.lineno a:hover { + color: #4665A2; + background-color: #C8C8C8; +} + +.lineno { + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +div.classindex ul { + list-style: none; + padding-left: 0; +} + +div.classindex span.ai { + display: inline-block; +} + +div.groupHeader { + box-shadow: 13px 0 white, + -13px 0 white, + 13px 1px #D9E0EE, + -13px 1px #D9E0EE; + color: #354C7B; + font-size: 110%; + font-weight: 500; + margin-left: 0px; + margin-top: 0em; + margin-bottom: 6px; + padding-top: 8px; + padding-bottom: 4px; +} + +div.groupText { + margin-left: 16px; + font-style: italic; +} + +body { + color: black; + margin: 0; +} + +div.contents { + margin-top: 10px; + margin-left: 12px; + margin-right: 12px; +} + +p.formulaDsp { + text-align: center; +} + +img.dark-mode-visible { + display: none; +} +img.light-mode-visible { + display: none; +} + +img.formulaInl, img.inline { + vertical-align: middle; +} + +div.center { + text-align: center; + margin-top: 0px; + margin-bottom: 0px; + padding: 0px; +} + +div.center img { + border: 0px; +} + +address.footer { + text-align: right; + padding-right: 12px; +} + +img.footer { + border: 0px; + vertical-align: middle; + width: 75px; +} + +.compoundTemplParams { + color: #4665A2; + font-size: 80%; + line-height: 120%; +} + +/* @group Code Colorization */ + +span.keyword { + color: #008000; +} + +span.keywordtype { + color: #604020; +} + +span.keywordflow { + color: #E08000; +} + +span.comment { + color: #800000; +} + +span.preprocessor { + color: #806020; +} + +span.stringliteral { + color: #002080; +} + +span.charliteral { + color: #008080; +} + +span.xmlcdata { + color: black; +} + +span.vhdldigit { + color: #FF00FF; +} + +span.vhdlchar { + color: #000000; +} + +span.vhdlkeyword { + color: #700070; +} + +span.vhdllogic { + color: #FF0000; +} + +blockquote { + background-color: #F7F8FB; + border-left: 2px solid #9CAFD4; + margin: 0 24px 0 4px; + padding: 0 12px 0 16px; +} + +/* @end */ + +td.tiny { + font-size: 75%; +} + +.dirtab { + padding: 4px; + border-collapse: collapse; + border: 1px solid #2D4068; +} + +th.dirtab { + background-color: #374F7F; + color: #FFFFFF; + font-weight: bold; +} + +hr { + border: none; + margin-top: 16px; + margin-bottom: 16px; + height: 1px; + box-shadow: 13px 0 white, + -13px 0 white, + 13px 1px #D9E0EE, + -13px 1px #D9E0EE; +} + +hr.footer { + height: 1px; +} + +/* @group Member Descriptions */ + +table.memberdecls { + border-spacing: 0px; + padding: 0px; +} + +.memberdecls td, .fieldtable tr { + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +.memberdecls td.glow, .fieldtable tr.glow { + background-color: cyan; + box-shadow: 0 0 15px cyan; +} + +.memberdecls tr[class^='memitem'] { + font-family: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed; +} + +.mdescLeft, .mdescRight, +.memItemLeft, .memItemRight { + padding-top: 2px; + padding-bottom: 2px; +} + +.memTemplParams { + padding-left: 10px; + padding-top: 5px; +} + +.memItemLeft, .memItemRight, .memTemplParams { + background-color: #F9FAFC; +} + +.mdescLeft, .mdescRight { + padding: 0px 8px 4px 8px; + color: #555; +} + +tr[class^='memdesc'] { + box-shadow: inset 0px 1px 3px 0px rgba(0,0,0,.075); +} + +.mdescLeft { + border-left: 1px solid #D5DDEC; + border-bottom: 1px solid #D5DDEC; +} + +.mdescRight { + border-right: 1px solid #D5DDEC; + border-bottom: 1px solid #D5DDEC; +} + +.memTemplParams { + color: #4665A2; + white-space: nowrap; + font-size: 80%; + border-left: 1px solid #D5DDEC; + border-right: 1px solid #D5DDEC; +} + +td.ititle { + border: 1px solid #D5DDEC; + border-top-left-radius: 4px; + border-top-right-radius: 4px; + padding-left: 10px; +} + +tr:not(:first-child) > td.ititle { + border-top: 0; + border-radius: 0; +} + +.memItemLeft { + white-space: nowrap; + border-left: 1px solid #D5DDEC; + border-bottom: 1px solid #D5DDEC; + padding-left: 10px; + transition: none; + vertical-align: top; + text-align: right; +} + +.memItemRight { + width: 100%; + border-right: 1px solid #D5DDEC; + border-bottom: 1px solid #D5DDEC; + padding-right: 10px; + transition: none; + vertical-align: bottom; +} + +tr.heading + tr[class^='memitem'] td.memItemLeft, +tr.groupHeader + tr[class^='memitem'] td.memItemLeft, +tr.inherit_header + tr[class^='memitem'] td.memItemLeft { + border-top: 1px solid #D5DDEC; + border-top-left-radius: 4px; +} + +tr.heading + tr[class^='memitem'] td.memItemRight, +tr.groupHeader + tr[class^='memitem'] td.memItemRight, +tr.inherit_header + tr[class^='memitem'] td.memItemRight { + border-top: 1px solid #D5DDEC; + border-top-right-radius: 4px; +} + +tr.heading + tr[class^='memitem'] td.memTemplParams, +tr.heading + tr td.ititle, +tr.groupHeader + tr[class^='memitem'] td.memTemplParams, +tr.groupHeader + tr td.ititle, +tr.inherit_header + tr[class^='memitem'] td.memTemplParams { + border-top: 1px solid #D5DDEC; + border-top-left-radius: 4px; + border-top-right-radius: 4px; +} + +table.memberdecls tr:last-child td.memItemLeft, +table.memberdecls tr:last-child td.mdescLeft, +table.memberdecls tr[class^='memitem']:has(+ tr.groupHeader) td.memItemLeft, +table.memberdecls tr[class^='memitem']:has(+ tr.inherit_header) td.memItemLeft, +table.memberdecls tr[class^='memdesc']:has(+ tr.groupHeader) td.mdescLeft, +table.memberdecls tr[class^='memdesc']:has(+ tr.inherit_header) td.mdescLeft { + border-bottom-left-radius: 4px; +} + +table.memberdecls tr:last-child td.memItemRight, +table.memberdecls tr:last-child td.mdescRight, +table.memberdecls tr[class^='memitem']:has(+ tr.groupHeader) td.memItemRight, +table.memberdecls tr[class^='memitem']:has(+ tr.inherit_header) td.memItemRight, +table.memberdecls tr[class^='memdesc']:has(+ tr.groupHeader) td.mdescRight, +table.memberdecls tr[class^='memdesc']:has(+ tr.inherit_header) td.mdescRight { + border-bottom-right-radius: 4px; +} + +tr.template .memItemLeft, tr.template .memItemRight { + border-top: none; + padding-top: 0; +} + + +/* @end */ + +/* @group Member Details */ + +/* Styles for detailed member documentation */ + +.memtitle { + padding: 8px; + border-top: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + border-top-right-radius: 4px; + border-top-left-radius: 4px; + margin-bottom: -1px; + background-color: #EEF1F7; + line-height: 1.25; + font-family: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed; + font-weight: 500; + font-size: 16px; + float:left; + box-shadow: 0 10px 0 -1px #EEF1F7, + 0 2px 8px 0 rgba(0,0,0,.075); + position: relative; +} + +.memtitle:after { + content: ''; + display: block; + background: #EEF1F7; + height: 10px; + bottom: -10px; + left: 0px; + right: -14px; + position: absolute; + border-top-right-radius: 6px; +} + +.permalink +{ + font-family: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed; + font-weight: 500; + line-height: 1.25; + font-size: 16px; + display: inline-block; + vertical-align: middle; +} + +.memtemplate { + font-size: 80%; + color: #4665A2; + font-family: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed; + font-weight: normal; + margin-left: 9px; +} + +.mempage { + width: 100%; +} + +.memitem { + padding: 0; + margin-bottom: 10px; + margin-right: 5px; + display: table !important; + width: 100%; + box-shadow: 0 2px 8px 0 rgba(0,0,0,.075); + border-radius: 4px; +} + +.memitem.glow { + box-shadow: 0 0 15px cyan; +} + +.memname { + font-family: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed; + font-size: 13px; + font-weight: 400; + margin-left: 6px; +} + +.memname td { + vertical-align: bottom; +} + +.memproto, dl.reflist dt { + border-top: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + padding: 6px 0px 6px 0px; + color: #253555; + font-weight: bold; + background-color: #EEF1F7; + border-top-right-radius: 4px; + border-bottom: 1px solid #A8B8D9; +} + +.overload { + font-family: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed; + font-size: 65%; +} + +.memdoc, dl.reflist dd { + border-bottom: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + padding: 6px 10px 2px 10px; + border-top-width: 0; + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; +} + +dl.reflist dt { + padding: 5px; +} + +dl.reflist dd { + margin: 0px 0px 10px 0px; + padding: 5px; +} + +.paramkey { + text-align: right; +} + +.paramtype { + white-space: nowrap; + padding: 0px; + padding-bottom: 1px; +} + +.paramname { + white-space: nowrap; + padding: 0px; + padding-bottom: 1px; + margin-left: 2px; +} + +.paramname em { + color: #602020; + font-style: normal; + margin-right: 1px; +} + +.paramname .paramdefval { + font-family: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed; +} + +.params, .retval, .exception, .tparams { + margin-left: 0px; + padding-left: 0px; +} + +.params .paramname, .retval .paramname, .tparams .paramname, .exception .paramname { + font-weight: bold; + vertical-align: top; +} + +.params .paramtype, .tparams .paramtype { + font-style: italic; + vertical-align: top; +} + +.params .paramdir, .tparams .paramdir { + font-family: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed; + vertical-align: top; +} + +table.mlabels { + border-spacing: 0px; +} + +td.mlabels-left { + width: 100%; + padding: 0px; +} + +td.mlabels-right { + vertical-align: bottom; + padding: 0px; + white-space: nowrap; +} + +span.mlabels { + margin-left: 8px; +} + +span.mlabel { + background-color: #728DC1; + border-top:1px solid #5373B4; + border-left:1px solid #5373B4; + border-right:1px solid #C4CFE5; + border-bottom:1px solid #C4CFE5; + text-shadow: none; + color: white; + margin-right: 4px; + padding: 2px 3px; + border-radius: 3px; + font-size: 7pt; + white-space: nowrap; + vertical-align: middle; +} + + + +/* @end */ + +/* these are for tree view inside a (index) page */ + +div.directory { + margin: 10px 0px; + width: 100%; +} + +.directory table { + border-collapse:collapse; +} + +.directory td { + margin: 0px; + padding: 0px; + vertical-align: top; +} + +.directory td.entry { + white-space: nowrap; + padding-right: 6px; + padding-top: 3px; +} + +.directory td.entry a { + outline:none; +} + +.directory td.entry a img { + border: none; +} + +.directory td.desc { + width: 100%; + padding-left: 6px; + padding-right: 6px; + padding-top: 3px; + border-left: 1px solid rgba(0,0,0,0.05); +} + +.directory tr.odd { + padding-left: 6px; + background-color: #F8F9FC; +} + +.directory tr.even { + padding-left: 6px; + background-color: white; +} + +.directory img { + vertical-align: -30%; +} + +.directory .levels { + white-space: nowrap; + width: 100%; + text-align: right; + font-size: 9pt; +} + +.directory .levels span { + cursor: pointer; + padding-left: 2px; + padding-right: 2px; + color: #3D578C; +} + +.arrow { + color: #F9FAFC; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + cursor: pointer; + font-size: 80%; + display: inline-block; + width: 16px; + height: 14px; + transition: opacity 0.3s ease; +} + +span.arrowhead { + position: relative; + padding: 0; + margin: 0 0 0 2px; + display: inline-block; + width: 5px; + height: 5px; + border-right: 2px solid #B6C4DF; + border-bottom: 2px solid #B6C4DF; + transform: rotate(-45deg); + transition: transform 0.3s ease; +} + +span.arrowhead.opened { + transform: rotate(45deg); +} + +.selected span.arrowhead { + border-right: 2px solid #90A5CE; + border-bottom: 2px solid #90A5CE; +} + +.icon { + font-family: Arial,Helvetica; + line-height: normal; + font-weight: bold; + font-size: 12px; + height: 14px; + width: 16px; + display: inline-block; + background-color: #728DC1; + color: white; + text-align: center; + border-radius: 4px; + margin-left: 2px; + margin-right: 2px; +} + +.icona { + width: 24px; + height: 22px; + display: inline-block; +} + +.iconfolder { + width: 24px; + height: 18px; + margin-top: 6px; + vertical-align:top; + display: inline-block; + position: relative; +} + +.icondoc { + width: 24px; + height: 18px; + margin-top: 3px; + vertical-align:top; + display: inline-block; + position: relative; +} + +.folder-icon { + width: 16px; + height: 11px; + background-color: #D8DFEE; + border: 1px solid #4665A2; + border-radius: 0 2px 2px 2px; + position: relative; + box-sizing: content-box; +} + +.folder-icon::after { + content: ''; + position: absolute; + top: 2px; + left: -1px; + width: 16px; + height: 7px; + background-color: #C4CFE5; + border: 1px solid #4665A2; + border-radius: 7px 7px 2px 2px; + transform-origin: top left; + opacity: 0; + transition: all 0.3s linear; +} + +.folder-icon::before { + content: ''; + position: absolute; + top: -3px; + left: -1px; + width: 6px; + height: 2px; + background-color: #D8DFEE; + border-top: 1px solid #4665A2; + border-left: 1px solid #4665A2; + border-right: 1px solid #4665A2; + border-radius: 2px 2px 0 0; +} + +.folder-icon.open::after { + top: 3px; + opacity: 1; +} + +.doc-icon { + left: 6px; + width: 12px; + height: 16px; + background-color: #4665A2; + clip-path: polygon(0 0, 66% 0, 100% 25%, 100% 100%, 0 100%); + position: relative; + display: inline-block; +} +.doc-icon::before { + content: ""; + left: 1px; + top: 1px; + width: 10px; + height: 14px; + background-color: #D8DFEE; + clip-path: polygon(0 0, 66% 0, 100% 25%, 100% 100%, 0 100%); + position: absolute; + box-sizing: border-box; +} +.doc-icon::after { + content: ""; + left: 7px; + top: 0px; + width: 3px; + height: 3px; + background-color: transparent; + position: absolute; + border: 1px solid #4665A2; +} + + + + +/* @end */ + +div.dynheader { + margin-top: 8px; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +span.dynarrow { + position: relative; + display: inline-block; + width: 12px; + bottom: 1px; +} + +address { + font-style: normal; + color: #2A3D61; +} + +table.doxtable caption { + caption-side: top; +} + +table.doxtable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.doxtable td, table.doxtable th { + border: 1px solid #2D4068; + padding: 3px 7px 2px; +} + +table.doxtable th { + background-color: #374F7F; + color: #FFFFFF; + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +table.fieldtable { + margin-bottom: 10px; + border: 1px solid #A8B8D9; + border-spacing: 0px; + border-radius: 4px; + box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); +} + +.fieldtable td, .fieldtable th { + padding: 3px 7px 2px; +} + +.fieldtable td.fieldtype, .fieldtable td.fieldname, .fieldtable td.fieldinit { + white-space: nowrap; + border-right: 1px solid #A8B8D9; + border-bottom: 1px solid #A8B8D9; + vertical-align: top; +} + +.fieldtable td.fieldname { + padding-top: 3px; +} + +.fieldtable td.fieldinit { + padding-top: 3px; + text-align: right; +} + +.fieldtable td.fielddoc { + border-bottom: 1px solid #A8B8D9; +} + +.fieldtable td.fielddoc p:first-child { + margin-top: 0px; +} + +.fieldtable td.fielddoc p:last-child { + margin-bottom: 2px; +} + +.fieldtable tr:last-child td { + border-bottom: none; +} + +.fieldtable th { + background-color: #E2E8F2; + font-size: 90%; + color: #253555; + padding-bottom: 4px; + padding-top: 5px; + text-align:left; + font-weight: 400; + border-top-left-radius: 4px; + border-top-right-radius: 4px; + border-bottom: 1px solid #A8B8D9; +} + +/* style requirements page */ + +div.req_title { + text-decoration-line: underline; + text-decoration-style: solid; + text-decoration-color: #2D4068; + text-decoration-thickness: 1px; + font-weight: bold; +} + +table.reqlist tr > td:first-child { + text-align: right; + font-weight: bold; +} + +div.missing_satisfies { + border-left: 8px solid #b61825; + border-radius: 4px; + background: #f8d1cc; + padding: 10px; + margin: 10px 0px; + overflow: hidden; + margin-left: 0; +} + +div.missing_verifies { + border-left: 8px solid #b61825; + border-radius: 4px; + background: #f8d1cc; + padding: 10px; + margin: 10px 0px; + overflow: hidden; + margin-left: 0; +} + +/* ----------- navigation breadcrumb styling ----------- */ + +#nav-path ul { + height: 30px; + line-height: 30px; + color: #283A5D; + overflow: hidden; + margin: 0px; + padding-left: 4px; + background-image: none; + background: white; + border-bottom: 1px solid #C4CFE5; + font-size: 13px; + font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; + position: relative; + z-index: 100; +} + +#main-nav { + border-bottom: 1px solid #C4CFE5; +} + +.navpath li { + list-style-type:none; + float:left; + color: #364D7C; +} + +.navpath li.footer { + list-style-type:none; + float:right; + padding-left:10px; + padding-right:15px; + background-image:none; + background-repeat:no-repeat; + background-position:right; + font-size: 8pt; + color: #2A3D61; +} + +#nav-path li.navelem { + background-image: none; + display: flex; + align-items: center; + padding-left: 15px; +} + +.navpath li.navelem a { + text-shadow: none; + display: inline-block; + color: #354C7B; + position: relative; + top: 0px; + height: 30px; + margin-right: -20px; +} + +#nav-path li.navelem:after { + content: ''; + display: inline-block; + position: relative; + top: 0; + right: -15px; + width: 30px; + height: 30px; + transform: scaleX(0.5) scale(0.707) rotate(45deg); + z-index: 10; + background: white; + box-shadow: 2px -2px 0 2px #C4CFE5; + border-radius: 0 5px 0 50px; +} + +#nav-path li.navelem:first-child { + margin-left: -6px; +} + +#nav-path li.navelem:hover, +#nav-path li.navelem:hover:after { + background-color: #EEF1F7; +} + +/* ---------------------- */ + +div.summary +{ + float: right; + font-size: 8pt; + padding-right: 5px; + width: 50%; + text-align: right; +} + +div.summary a +{ + white-space: nowrap; +} + +table.classindex +{ + margin: 10px; + white-space: nowrap; + margin-left: 3%; + margin-right: 3%; + width: 94%; + border: 0; + border-spacing: 0; + padding: 0; +} + +div.ingroups +{ + font-size: 8pt; + width: 50%; + text-align: left; +} + +div.ingroups a +{ + white-space: nowrap; +} + +div.header +{ + margin: 0px; + background-color: #F9FAFC; + border-bottom: 1px solid #C4CFE5; +} + +div.headertitle +{ + padding: 5px 5px 5px 10px; +} + +dl { + padding: 0 0 0 0; +} + +dl.bug dt a, dl.deprecated dt a, dl.todo dt a, dl.test a { + font-weight: bold !important; +} + +dl.warning, dl.attention, dl.important, dl.note, dl.deprecated, dl.bug, +dl.invariant, dl.pre, dl.post, dl.todo, dl.test, dl.remark { + padding: 10px; + margin: 10px 0px; + overflow: hidden; + margin-left: 0; + border-radius: 4px; +} + +dl.section dd { + margin-bottom: 2px; +} + +dl.warning, dl.attention, dl.important { + background: #f8d1cc; + border-left: 8px solid #b61825; + color: #75070f; +} + +dl.warning dt, dl.attention dt, dl.important dt { + color: #b61825; +} + +dl.warning .tt, dl.attention .tt, dl.important .tt { + background-color: hsl(from #f8d1cc h s calc(l + -3)); +} + +dl.note, dl.remark { + background: #faf3d8; + border-left: 8px solid #f3a600; + color: #5f4204; +} + +dl.note dt, dl.remark dt { + color: #f3a600; +} + +dl.note .tt, dl.remark .tt { + background-color: hsl(from #faf3d8 h s calc(l + -3)); +} + +dl.todo { + background: #e4f3ff; + border-left: 8px solid #1879C4; + color: #274a5c; +} + +dl.todo dt { + color: #1879C4; +} + +dl.todo .tt { + background-color: hsl(from #e4f3ff h s calc(l + -3)); +} + +dl.test { + background: #e8e8ff; + border-left: 8px solid #3939C4; + color: #1a1a5c; +} + +dl.test dt { + color: #3939C4; +} + +dl.test .tt { + background-color: hsl(from #e8e8ff h s calc(l + -3)); +} + +dl.bug dt a { + color: #5b2bdd !important; +} + +dl.bug { + background: #e4dafd; + border-left: 8px solid #5b2bdd; + color: #2a0d72; +} + +dl.bug dt a { + color: #5b2bdd !important; +} + +dl.bug .tt { + background-color: hsl(from #e4dafd h s calc(l + -3)); +} + +dl.deprecated { + background: #ecf0f3; + border-left: 8px solid #5b6269; + color: #43454a; +} + +dl.deprecated dt a { + color: #5b6269 !important; +} + +dl.deprecated .tt { + background-color: hsl(from #ecf0f3 h s calc(l + -3)); +} + + +dl.invariant, dl.pre, dl.post { + background: #d8f1e3; + border-left: 8px solid #44b86f; + color: #265532; +} + +dl.invariant dt, dl.pre dt, dl.post dt { + color: #44b86f; +} + +dl.invariant .tt, dl.pre .tt, dl.post .tt { + background-color: hsl(from #d8f1e3 h s calc(l + -3)); +} + +dl.note dd, dl.warning dd, dl.pre dd, dl.post dd, +dl.remark dd, dl.attention dd, dl.important dd, dl.invariant dd, +dl.bug dd, dl.deprecated dd, dl.todo dd, dl.test dd { + margin-inline-start: 0px; +} + + +#projectrow +{ + height: 56px; +} + +#projectlogo +{ + text-align: center; + vertical-align: bottom; + border-collapse: separate; +} + +#projectlogo img +{ + border: 0px none; +} + +#projectalign +{ + vertical-align: middle; + padding-left: 0.5em; +} + +#projectname +{ + font-size: 200%; + font-family: system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol"; + margin: 0; + padding: 0; +} + +#side-nav #projectname +{ + font-size: 130%; +} + +#projectbrief +{ + font-size: 90%; + font-family: system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol"; + margin: 0px; + padding: 0px; +} + +#projectnumber +{ + font-size: 50%; + font-family: system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol"; + margin: 0px; + padding: 0px; +} + +#titlearea +{ + padding: 0 0 0 5px; + margin: 0px; + border-bottom: 1px solid #C4CFE5; + background-color: white; +} + +.image +{ + text-align: center; +} + +.dotgraph +{ + text-align: center; +} + +.mscgraph +{ + text-align: center; +} + +.plantumlgraph +{ + text-align: center; +} + +.diagraph +{ + text-align: center; +} + +.caption +{ + font-weight: bold; +} + +dl.citelist { + margin-bottom:50px; +} + +dl.citelist dt { + color:#334975; + float:left; + font-weight:bold; + margin-right:10px; + padding:5px; + text-align:right; + width:52px; +} + +dl.citelist dd { + margin:2px 0 2px 72px; + padding:5px 0; +} + +div.toc { + padding: 14px 25px; + background-color: #F4F6FA; + border: 1px solid #D8DFEE; + border-radius: 7px 7px 7px 7px; + float: right; + height: auto; + margin: 0 8px 10px 10px; + width: 200px; +} + +div.toc li { + background: url("data:image/svg+xml;utf8,&%238595;") no-repeat scroll 0 5px transparent; + font: 10px/1.2 Verdana,'DejaVu Sans',Geneva,sans-serif; + margin-top: 5px; + padding-left: 10px; + padding-top: 2px; +} + +div.toc h3 { + font: bold 12px/1.2 Verdana,'DejaVu Sans',Geneva,sans-serif; + color: #4665A2; + border-bottom: 0 none; + margin: 0; +} + +div.toc ul { + list-style: none outside none; + border: medium none; + padding: 0px; +} + +div.toc li[class^='level'] { + margin-left: 15px; +} + +div.toc li.level1 { + margin-left: 0px; +} + +div.toc li.empty { + background-image: none; + margin-top: 0px; +} + +span.emoji { + /* font family used at the site: https://unicode.org/emoji/charts/full-emoji-list.html + * font-family: "Noto Color Emoji", "Apple Color Emoji", "Segoe UI Emoji", Times, Symbola, Aegyptus, Code2000, Code2001, Code2002, Musica, serif, LastResort; + */ +} + +span.obfuscator { + display: none; +} + +.inherit_header { + font-weight: 400; + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.inherit_header td { + padding: 6px 0 2px 0; +} + +.inherit { + display: none; +} + +tr.heading h2 { + margin-top: 12px; + margin-bottom: 12px; +} + +/* tooltip related style info */ + +.ttc { + position: absolute; + display: none; +} + +#powerTip { + cursor: default; + color: black; + background-color: rgba(255,255,255,0.8); + backdrop-filter: blur(3px); + -webkit-backdrop-filter: blur(3px); + border: 1px solid rgba(150,150,150,0.7); + border-radius: 4px; + box-shadow: 0 4px 8px 0 rgba(0,0,0,.25); + display: none; + font-size: smaller; + max-width: 80%; + padding: 1ex 1em 1em; + position: absolute; + z-index: 2147483647; +} + +#powerTip div.ttdoc { + color: grey; + font-style: italic; +} + +#powerTip div.ttname a { + font-weight: bold; +} + +#powerTip a { + color: #4665A2; +} + +#powerTip div.ttname { + font-weight: bold; +} + +#powerTip div.ttdeci { + color: #006318; +} + +#powerTip div { + margin: 0px; + padding: 0px; + font-size: 12px; + font-family: Roboto,sans-serif; + line-height: 16px; +} + +#powerTip:before, #powerTip:after { + content: ""; + position: absolute; + margin: 0px; +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.s:after, #powerTip.s:before, +#powerTip.w:after, #powerTip.w:before, +#powerTip.e:after, #powerTip.e:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.nw:after, #powerTip.nw:before, +#powerTip.sw:after, #powerTip.sw:before { + border: solid transparent; + content: " "; + height: 0; + width: 0; + position: absolute; +} + +#powerTip.n:after, #powerTip.s:after, +#powerTip.w:after, #powerTip.e:after, +#powerTip.nw:after, #powerTip.ne:after, +#powerTip.sw:after, #powerTip.se:after { + border-color: rgba(255, 255, 255, 0); +} + +#powerTip.n:before, #powerTip.s:before, +#powerTip.w:before, #powerTip.e:before, +#powerTip.nw:before, #powerTip.ne:before, +#powerTip.sw:before, #powerTip.se:before { + border-color: rgba(128, 128, 128, 0); +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.nw:after, #powerTip.nw:before { + top: 100%; +} + +#powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after { + border-top-color: white; + border-width: 10px; + margin: 0px -10px; +} +#powerTip.n:before, #powerTip.ne:before, #powerTip.nw:before { + border-top-color: rgba(150,150,150,0.7); + border-width: 11px; + margin: 0px -11px; +} +#powerTip.n:after, #powerTip.n:before { + left: 50%; +} + +#powerTip.nw:after, #powerTip.nw:before { + right: 14px; +} + +#powerTip.ne:after, #powerTip.ne:before { + left: 14px; +} + +#powerTip.s:after, #powerTip.s:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.sw:after, #powerTip.sw:before { + bottom: 100%; +} + +#powerTip.s:after, #powerTip.se:after, #powerTip.sw:after { + border-bottom-color: white; + border-width: 10px; + margin: 0px -10px; +} + +#powerTip.s:before, #powerTip.se:before, #powerTip.sw:before { + border-bottom-color: rgba(150,150,150,0.7); + border-width: 11px; + margin: 0px -11px; +} + +#powerTip.s:after, #powerTip.s:before { + left: 50%; +} + +#powerTip.sw:after, #powerTip.sw:before { + right: 14px; +} + +#powerTip.se:after, #powerTip.se:before { + left: 14px; +} + +#powerTip.e:after, #powerTip.e:before { + left: 100%; +} +#powerTip.e:after { + border-left-color: rgba(150,150,150,0.7); + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.e:before { + border-left-color: rgba(150,150,150,0.7); + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +#powerTip.w:after, #powerTip.w:before { + right: 100%; +} +#powerTip.w:after { + border-right-color: rgba(150,150,150,0.7); + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.w:before { + border-right-color: rgba(150,150,150,0.7); + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +@media print +{ + #top { display: none; } + #side-nav { display: none; } + #nav-path { display: none; } + body { overflow:visible; } + h1, h2, h3, h4, h5, h6 { page-break-after: avoid; } + .summary { display: none; } + .memitem { page-break-inside: avoid; } + #doc-content + { + margin-left:0 !important; + height:auto !important; + width:auto !important; + overflow:inherit; + display:inline; + } +} + +/* @group Markdown */ + +table.markdownTable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.markdownTable td, table.markdownTable th { + border: 1px solid #2D4068; + padding: 3px 7px 2px; +} + +table.markdownTable tr { +} + +th.markdownTableHeadLeft, th.markdownTableHeadRight, th.markdownTableHeadCenter, th.markdownTableHeadNone { + background-color: #374F7F; + color: #FFFFFF; + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +th.markdownTableHeadLeft, td.markdownTableBodyLeft { + text-align: left +} + +th.markdownTableHeadRight, td.markdownTableBodyRight { + text-align: right +} + +th.markdownTableHeadCenter, td.markdownTableBodyCenter { + text-align: center +} + +tt, code, kbd +{ + display: inline-block; +} +tt, code, kbd +{ + vertical-align: top; +} +/* @end */ + +u { + text-decoration: underline; +} + +details>summary { + list-style-type: none; +} + +details > summary::-webkit-details-marker { + display: none; +} + +details>summary::before { + content: "\25ba"; + padding-right:4px; + font-size: 80%; +} + +details[open]>summary::before { + content: "\25bc"; + padding-right:4px; + font-size: 80%; +} + diff --git a/doxygen/doxygen.svg b/doxygen/doxygen.svg new file mode 100644 index 0000000..79a7635 --- /dev/null +++ b/doxygen/doxygen.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doxygen/doxygen_crawl.html b/doxygen/doxygen_crawl.html new file mode 100644 index 0000000..b011b15 --- /dev/null +++ b/doxygen/doxygen_crawl.html @@ -0,0 +1,285 @@ + + + +Validator / crawler helper + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doxygen/dynsections.js b/doxygen/dynsections.js new file mode 100644 index 0000000..7e658ef --- /dev/null +++ b/doxygen/dynsections.js @@ -0,0 +1,191 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ + +function toggleVisibility(linkObj) { + return dynsection.toggleVisibility(linkObj); +} + +let dynsection = { + // helper function + updateStripes : function() { + $('table.directory tr'). + removeClass('even').filter(':visible:even').addClass('even'); + $('table.directory tr'). + removeClass('odd').filter(':visible:odd').addClass('odd'); + }, + + toggleVisibility : function(linkObj) { + const base = $(linkObj).attr('id'); + const summary = $('#'+base+'-summary'); + const content = $('#'+base+'-content'); + const trigger = $('#'+base+'-trigger'); + const src=$(trigger).attr('src'); + if (content.is(':visible')===true) { + content.slideUp('fast'); + summary.show(); + $(linkObj).find('.arrowhead').addClass('closed').removeClass('opened'); + } else { + content.slideDown('fast'); + summary.hide(); + $(linkObj).find('.arrowhead').removeClass('closed').addClass('opened'); + } + return false; + }, + + toggleLevel : function(level) { + $('table.directory tr').each(function() { + const l = this.id.split('_').length-1; + const i = $('#img'+this.id.substring(3)); + const a = $('#arr'+this.id.substring(3)); + if (l'); + // add vertical lines to other rows + $('span[class=lineno]').not(':eq(0)').append(''); + // add toggle controls to lines with fold divs + $('div[class=foldopen]').each(function() { + // extract specific id to use + const id = $(this).attr('id').replace('foldopen',''); + // extract start and end foldable fragment attributes + const start = $(this).attr('data-start'); + const end = $(this).attr('data-end'); + // replace normal fold span with controls for the first line of a foldable fragment + $(this).find('span[class=fold]:first').replaceWith(''); + // append div for folded (closed) representation + $(this).after(''); + // extract the first line from the "open" section to represent closed content + const line = $(this).children().first().clone(); + // remove any glow that might still be active on the original line + $(line).removeClass('glow'); + if (start) { + // if line already ends with a start marker (e.g. trailing {), remove it + $(line).html($(line).html().replace(new RegExp('\\s*'+start+'\\s*$','g'),'')); + } + // replace minus with plus symbol + $(line).find('span[class=fold]').addClass('plus').removeClass('minus'); + // append ellipsis + $(line).append(' '+start+''+end); + // insert constructed line into closed div + $('#foldclosed'+id).html(line); + }); + }, +}; +/* @license-end */ diff --git a/doxygen/end__with_8hpp.html b/doxygen/end__with_8hpp.html new file mode 100644 index 0000000..7bcaef5 --- /dev/null +++ b/doxygen/end__with_8hpp.html @@ -0,0 +1,241 @@ + + + + + + + +C++Spec: include/matchers/strings/end_with.hpp File Reference + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
end_with.hpp File Reference
+
+
+
#include <ranges>
+#include <string>
+#include "matchers/matcher_base.hpp"
+
+Include dependency graph for end_with.hpp:
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+This graph shows which files directly or indirectly include this file:
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

Go to the source code of this file.

+ + + +

+Classes

class  CppSpec::Matchers::EndWith< A, E >
+
+
+ +
+ + + + diff --git a/doxygen/end__with_8hpp.js b/doxygen/end__with_8hpp.js new file mode 100644 index 0000000..98a5978 --- /dev/null +++ b/doxygen/end__with_8hpp.js @@ -0,0 +1,4 @@ +var end__with_8hpp = +[ + [ "CppSpec::Matchers::EndWith< A, E >", "classCppSpec_1_1Matchers_1_1EndWith.html", null ] +]; \ No newline at end of file diff --git a/doxygen/end__with_8hpp__dep__incl.map b/doxygen/end__with_8hpp__dep__incl.map new file mode 100644 index 0000000..4f87c8f --- /dev/null +++ b/doxygen/end__with_8hpp__dep__incl.map @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doxygen/end__with_8hpp__dep__incl.md5 b/doxygen/end__with_8hpp__dep__incl.md5 new file mode 100644 index 0000000..057a4a4 --- /dev/null +++ b/doxygen/end__with_8hpp__dep__incl.md5 @@ -0,0 +1 @@ +a5ea1ec952d8d129355a59efdd54beec \ No newline at end of file diff --git a/doxygen/end__with_8hpp__dep__incl.png b/doxygen/end__with_8hpp__dep__incl.png new file mode 100644 index 0000000..b64a401 Binary files /dev/null and b/doxygen/end__with_8hpp__dep__incl.png differ diff --git a/doxygen/end__with_8hpp__incl.map b/doxygen/end__with_8hpp__incl.map new file mode 100644 index 0000000..0edfdae --- /dev/null +++ b/doxygen/end__with_8hpp__incl.map @@ -0,0 +1,74 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doxygen/end__with_8hpp__incl.md5 b/doxygen/end__with_8hpp__incl.md5 new file mode 100644 index 0000000..674177a --- /dev/null +++ b/doxygen/end__with_8hpp__incl.md5 @@ -0,0 +1 @@ +d01b51ec376ae0288d65eac72deff9cb \ No newline at end of file diff --git a/doxygen/end__with_8hpp__incl.png b/doxygen/end__with_8hpp__incl.png new file mode 100644 index 0000000..055a04e Binary files /dev/null and b/doxygen/end__with_8hpp__incl.png differ diff --git a/doxygen/end__with_8hpp_source.html b/doxygen/end__with_8hpp_source.html new file mode 100644 index 0000000..25496c3 --- /dev/null +++ b/doxygen/end__with_8hpp_source.html @@ -0,0 +1,137 @@ + + + + + + + +C++Spec: include/matchers/strings/end_with.hpp Source File + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
end_with.hpp
+
+
+Go to the documentation of this file.
1
+
2#pragma once
+
3
+
4#include <ranges>
+
5#include <string>
+
6
+ +
8
+
9namespace CppSpec::Matchers {
+
10
+
11template <std::ranges::range A, std::ranges::range E>
+
+
12class EndWith : public MatcherBase<A, E> {
+
13 public:
+
14 EndWith(Expectation<A>& expectation, E start) : MatcherBase<A, E>(expectation, start) {}
+
15
+
16 std::string verb() override { return "end with"; }
+
17
+
18 bool match() override {
+
19 A& actual = this->actual();
+
20 E& expected = this->expected();
+
21 return std::equal(std::ranges::rbegin(expected), std::ranges::rend(expected), std::ranges::rbegin(actual));
+
22 }
+
23};
+
+
24
+
25} // namespace CppSpec::Matchers
+
Wraps the target of an expectation.
Definition expectation.hpp:48
+
Definition have_error.hpp:9
+
Contains the base class for all Matchers.
+
+
+
+ + + + diff --git a/doxygen/equal_8hpp.html b/doxygen/equal_8hpp.html new file mode 100644 index 0000000..3b740f1 --- /dev/null +++ b/doxygen/equal_8hpp.html @@ -0,0 +1,243 @@ + + + + + + + +C++Spec: include/matchers/equal.hpp File Reference + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
equal.hpp File Reference
+
+
+
#include <string>
+#include "matcher_base.hpp"
+
+Include dependency graph for equal.hpp:
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+This graph shows which files directly or indirectly include this file:
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

Go to the source code of this file.

+ + + + +

+Classes

class  CppSpec::Matchers::Equal< A, E >
 The equal matcher. More...
+
+
+ +
+ + + + diff --git a/doxygen/equal_8hpp.js b/doxygen/equal_8hpp.js new file mode 100644 index 0000000..5a101dc --- /dev/null +++ b/doxygen/equal_8hpp.js @@ -0,0 +1,4 @@ +var equal_8hpp = +[ + [ "CppSpec::Matchers::Equal< A, E >", "classCppSpec_1_1Matchers_1_1Equal.html", "classCppSpec_1_1Matchers_1_1Equal" ] +]; \ No newline at end of file diff --git a/doxygen/equal_8hpp__dep__incl.map b/doxygen/equal_8hpp__dep__incl.map new file mode 100644 index 0000000..d49ce4c --- /dev/null +++ b/doxygen/equal_8hpp__dep__incl.map @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doxygen/equal_8hpp__dep__incl.md5 b/doxygen/equal_8hpp__dep__incl.md5 new file mode 100644 index 0000000..b893d17 --- /dev/null +++ b/doxygen/equal_8hpp__dep__incl.md5 @@ -0,0 +1 @@ +10a94366af373b990ae275eb93e82aa5 \ No newline at end of file diff --git a/doxygen/equal_8hpp__dep__incl.png b/doxygen/equal_8hpp__dep__incl.png new file mode 100644 index 0000000..5bfa7ef Binary files /dev/null and b/doxygen/equal_8hpp__dep__incl.png differ diff --git a/doxygen/equal_8hpp__incl.map b/doxygen/equal_8hpp__incl.map new file mode 100644 index 0000000..b4fd98e --- /dev/null +++ b/doxygen/equal_8hpp__incl.map @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doxygen/equal_8hpp__incl.md5 b/doxygen/equal_8hpp__incl.md5 new file mode 100644 index 0000000..f80cbbd --- /dev/null +++ b/doxygen/equal_8hpp__incl.md5 @@ -0,0 +1 @@ +c51dd74790a5793af311a6ec9b7925e4 \ No newline at end of file diff --git a/doxygen/equal_8hpp__incl.png b/doxygen/equal_8hpp__incl.png new file mode 100644 index 0000000..cd4f606 Binary files /dev/null and b/doxygen/equal_8hpp__incl.png differ diff --git a/doxygen/equal_8hpp_source.html b/doxygen/equal_8hpp_source.html new file mode 100644 index 0000000..75ea6cd --- /dev/null +++ b/doxygen/equal_8hpp_source.html @@ -0,0 +1,222 @@ + + + + + + + +C++Spec: include/matchers/equal.hpp Source File + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
equal.hpp
+
+
+Go to the documentation of this file.
1
+
2#pragma once
+
3
+
4#include <string>
+
5
+
6#include "matcher_base.hpp"
+
7
+
8namespace CppSpec::Matchers {
+
9
+
16template <typename A, typename E>
+
+
17class Equal : public MatcherBase<A, E> {
+
18 public:
+
19 Equal(Expectation<A>& expectation, E expected) : MatcherBase<A, E>(expectation, expected) {}
+
20
+
21 std::string verb() override { return "equal"; }
+
+
22 std::string failure_message() override;
+
+
23 std::string failure_message_when_negated() override;
+
24 bool diffable();
+
25
+
26 protected:
+
27 bool match() override;
+
28 bool expected_is_a_literal();
+
29 std::string actual_inspected();
+
30 std::string simple_failure_message();
+
31 // std::string detailed_failure_message();
+
32};
+
33
+
34template <typename A, typename E>
+
+ +
36 // if (expected_is_a_literal()) {
+
37 // return simple_failure_message();
+
38 // } else {
+
39 // return detailed_failure_message();
+
40 // }
+
41 return simple_failure_message();
+
42}
+
+
43
+
44template <typename A, typename E>
+
+ +
46 std::stringstream ss;
+
47 ss << "expected not " << Pretty::inspect_object(MatcherBase<A, E>::expected()) << std::endl;
+
48 ss << " got " << actual_inspected() << std::endl;
+
49 ss << "Compared using `==`";
+
50 return ss.str();
+
51}
+
+
+
52
+
53template <typename A, typename E>
+
54std::string Equal<A, E>::simple_failure_message() {
+
55 std::stringstream ss;
+
56 ss << "expected " << Pretty::inspect_object(MatcherBase<A, E>::expected()) << std::endl;
+
57 ss << " got " << actual_inspected() << std::endl;
+
58 ss << "Compared using `==`";
+
59 return ss.str();
+
60}
+
61
+
62template <typename A, typename E>
+
63bool Equal<A, E>::diffable() {
+
64 return !expected_is_a_literal();
+
65}
+
66
+
67template <typename A, typename E>
+
68bool Equal<A, E>::match() {
+
69 return this->expected() == this->actual();
+
70}
+
71
+
72template <typename A, typename E>
+
73bool Equal<A, E>::expected_is_a_literal() {
+
74 return (typeid(E) == typeid(bool));
+
75}
+
76
+
77// template <typename E>
+
78// std::string Equal<bool, E>::actual_inspected() {
+
79// std::stringstream ss;
+
80// ss << std::boolalpha << BaseMatcher<bool,E>::actual();
+
81// return ss.str();
+
82// }
+
83
+
84template <typename A, typename E>
+
85std::string Equal<A, E>::actual_inspected() {
+
86 return Pretty::inspect_object(MatcherBase<A, E>::actual());
+
87}
+
88
+
89// template <typename A, bool E>
+
90// std::string Equal<A, bool>::simple_failure_message() {
+
91// std::stringstream ss;
+
92// ss << "\nexpected " << std::boolalpha <<
+
93// BaseMatcher<A,bool>::expected() << "\n"
+
94// " got " << Equal<A,bool>::actual_inspected() << "\n";
+
95// return ss.str();
+
96// }
+
97
+
98// template <>
+
99// std::string Equal<bool>::inspect_object(bool o) {
+
100// std::stringstream ss;
+
101// ss << "#<#" << Util::demangle(typeid(o).name()) <<
+
102// "> => " << std::boolalpha << o;
+
103// return ss.str();
+
104// }
+
105
+
106} // namespace CppSpec::Matchers
+
+
+
Wraps the target of an expectation.
Definition expectation.hpp:48
+
std::string failure_message_when_negated() override
Get message to give on match failure when negated.
Definition equal.hpp:45
+
std::string failure_message() override
Get message to give on match failure.
Definition equal.hpp:35
+
Definition have_error.hpp:9
+
Contains the base class for all Matchers.
+
+
+
+ + + + diff --git a/doxygen/expectation_8hpp_source.html b/doxygen/expectation_8hpp_source.html new file mode 100644 index 0000000..272be57 --- /dev/null +++ b/doxygen/expectation_8hpp_source.html @@ -0,0 +1,570 @@ + + + + + + + +C++Spec: include/expectations/expectation.hpp Source File + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
expectation.hpp
+
+
+
1#pragma once
+
2
+
3#include <exception>
+
4#include <optional>
+
5#include <regex>
+
6#include <source_location>
+
7#include <string>
+
8#include <vector>
+
9
+ +
11#include "matchers/contain.hpp"
+
12#include "matchers/equal.hpp"
+
13#include "matchers/errors/fail.hpp"
+
14#include "matchers/errors/have_value.hpp"
+
15#include "matchers/errors/throw.hpp"
+ + + +
19#include "matchers/numeric/be_within.hpp"
+
20#include "matchers/satisfy.hpp"
+ + + +
24
+
25#ifdef __cpp_lib_expected
+
26#include "matchers/errors/have_error.hpp"
+
27#endif
+
28
+
29namespace CppSpec {
+
30
+
47template <class A>
+
+
48class Expectation {
+
49 ItBase* it = nullptr;
+
50 std::source_location location;
+
51
+
52 protected:
+
53 bool is_positive_ = true;
+
54 // Have we been negated?
+
55 bool ignore_ = false;
+
56
+
57 public:
+
58 Expectation() = default;
+
59 explicit Expectation(std::source_location location) : location(location) {}
+
60
+
68 explicit Expectation(ItBase& it, std::source_location location) : it(&it), location(location) {}
+
69
+
71 // virtual const A &get_target() const & { return target; }
+
72 virtual A& get_target() & = 0;
+
73
+
74 [[nodiscard]] ItBase* get_it() const { return it; }
+
75 [[nodiscard]] std::source_location get_location() const { return location; }
+
76
+
78 [[nodiscard]] constexpr bool positive() const { return is_positive_; }
+
79 [[nodiscard]] constexpr bool ignored() const { return ignore_; }
+
80
+
81 /********* Modifiers *********/
+
82
+
83 virtual Expectation& not_() = 0;
+
84 virtual Expectation& ignore() = 0;
+
85
+
86 /********* Matchers *********/
+
87
+
88 template <class M>
+
+
89 void to(M matcher, std::string msg = "");
+
90
+
91 /*-------- to be... ----------*/
+
92
+
+
93 void to_be_false(std::string msg = "");
+
+
94 void to_be_falsy(std::string msg = "");
+
+
95 void to_be_null(std::string msg = "");
+
+
96 void to_be_true(std::string msg = "");
+
+
97 void to_be_truthy(std::string msg = "");
+
98
+
99 template <typename E>
+
+
100 void to_be_between(E min, E max, Matchers::RangeMode mode = Matchers::RangeMode::inclusive, std::string msg = "");
+
101
+
102 template <typename E>
+
103 void to_be_greater_than(E rhs, std::string msg = "");
+
104
+
105 template <typename E>
+
106 void to_be_less_than(E rhs, std::string msg = "");
+
107
+
108 template <typename E>
+
+
109 Matchers::BeWithinHelper<A, E> to_be_within(E expected, std::string msg = "");
+
110
+
111 /*-------- to... ----------*/
+
112
+
113 void to_end_with(std::string ending, std::string msg = "");
+
114 void to_fail(std::string msg = "");
+
115 void to_fail_with(std::string failure_message, std::string msg = "");
+
116 void to_match(std::regex regex, std::string msg = "");
+
117 void to_match(std::string str, std::string msg = "");
+
118 void to_partially_match(std::regex regex, std::string msg = "");
+
119 void to_partially_match(std::string str, std::string msg = "");
+
120 template <typename F>
+
121 requires std::invocable<F, A> && std::convertible_to<std::invoke_result_t<F, A>, bool>
+
+
122 void to_satisfy(F test, std::string msg = "");
+
123 void to_start_with(std::string start, std::string msg = "");
+
124
+
125 template <typename U>
+
+
126 void to_contain(std::initializer_list<U> expected, std::string msg = "");
+
127
+
128 template <typename E>
+
129 void to_contain(E expected, std::string msg = "");
+
130
+
131 template <typename U>
+
132 void to_end_with(std::initializer_list<U> start, std::string msg = "");
+
133
+
134 template <typename E>
+
+
135 void to_equal(E expected, std::string msg = "");
+
136
+
137 template <typename U>
+
138 void to_start_with(std::initializer_list<U> start, std::string msg = "");
+
139
+
140 void to_have_value(std::string msg = "");
+
141#if __cpp_lib_expected
+
142 void to_have_error(std::string msg = "");
+
143#endif
+
144};
+
145
+
156template <typename A>
+
157template <class M>
+
+
158void Expectation<A>::to(M matcher, std::string msg) {
+
159 static_assert(std::is_base_of_v<Matchers::MatcherBase<A, typename M::expected_t>, M>,
+
160 "Matcher is not a subclass of BaseMatcher.");
+
161 // auto base_matcher = static_cast<Matchers::BaseMatcher<A,typename
+
162 // M::expected_t>>(matcher);
+
163 matcher.set_message(std::move(msg)).run();
+
164}
+
+
165
+
174template <typename A>
+
+
175void Expectation<A>::to_be_false(std::string msg) {
+
176 static_assert(std::is_same_v<A, bool>,
+
177 ".to_be_false() can only be used on booleans or functions that return booleans");
+
178 to_equal(false, msg);
+
179}
+
+
180
+
188template <typename A>
+
+
189void Expectation<A>::to_be_falsy(std::string msg) {
+
190 to_satisfy([](const A& t) { return !static_cast<bool>(t); }, msg);
+
191}
+
+
192
+
200template <typename A>
+
+
201void Expectation<A>::to_be_null(std::string msg) {
+
202 Matchers::BeNullptr<A>(*this).set_message(std::move(msg)).run();
+
203}
+
+
204
+
212template <typename A>
+
+
213void Expectation<A>::to_be_true(std::string msg) {
+
214 static_assert(std::is_same_v<A, bool>,
+
215 ".to_be_true() can only be used on booleans or functions that return booleans");
+
216 // return to_be([](A t) { return static_cast<bool>(t); }, msg);
+
217 to_equal(true, msg);
+
218}
+
+
219
+
228template <typename A>
+
+
229void Expectation<A>::to_be_truthy(std::string msg) {
+
230 to_satisfy([](const A& t) { return static_cast<bool>(t); }, msg);
+
231}
+
+
232
+
243template <typename A>
+
244template <typename E>
+
+
245void Expectation<A>::to_be_between(E min, E max, Matchers::RangeMode mode, std::string msg) {
+
246 Matchers::BeBetween<A, E>(*this, min, max, mode).set_message(std::move(msg)).run();
+
247}
+
+
248
+
249template <typename A>
+
250template <typename E>
+
251void Expectation<A>::to_be_less_than(E rhs, std::string msg) {
+
252 Matchers::BeLessThan<A, E>(*this, rhs).set_message(std::move(msg)).run();
+
253}
+
254
+
255template <typename A>
+
256template <typename E>
+
257void Expectation<A>::to_be_greater_than(E rhs, std::string msg) {
+
258 Matchers::BeGreaterThan<A, E>(*this, rhs).set_message(std::move(msg)).run();
+
259}
+
260
+
269template <typename A>
+
270template <typename U>
+
+
271void Expectation<A>::to_contain(std::initializer_list<U> expected, std::string msg) {
+
272 Matchers::Contain<A, std::vector<U>, U>(*this, expected).set_message(std::move(msg)).run();
+
273}
+
+
274
+
283template <typename A>
+
284template <typename E>
+
+
285void Expectation<A>::to_contain(E expected, std::string msg) {
+
286 Matchers::Contain<A, E, E>(*this, expected).set_message(std::move(msg)).run();
+
287}
+
+
288
+
297template <typename A>
+
298template <typename E>
+
+
299void Expectation<A>::to_equal(E expected, std::string msg) {
+
300 Matchers::Equal<A, E>(*this, expected).set_message(std::move(msg)).run();
+
301}
+
+
+
302
+
311template <typename A>
+
312template <typename E>
+
+ +
314 Matchers::BeWithinHelper<A, E> matcher(*this, expected);
+
315 matcher.set_message(std::move(msg));
+
316 return matcher;
+
317}
+
+
318
+
319template <typename A>
+
320void Expectation<A>::to_fail(std::string msg) {
+
321 static_assert(is_result_v<A>, ".to_fail() must be used on an expression that returns a Result.");
+
322 Matchers::Fail<Result>(*this).set_message(std::move(msg)).run();
+
323}
+
324
+
325template <typename A>
+
326void Expectation<A>::to_fail_with(std::string failure_message, std::string msg) {
+
327 static_assert(is_result_v<A>, ".to_fail_with() must be used on an expression that returns a Result.");
+
328 Matchers::FailWith<A>(*this, failure_message).set_message(std::move(msg)).run();
+
329}
+
330
+
331template <typename A>
+
332void Expectation<A>::to_match(std::string str, std::string msg) {
+
333 Matchers::Match<A>(*this, str).set_message(std::move(msg)).run();
+
334}
+
335
+
336template <typename A>
+
337void Expectation<A>::to_match(std::regex regex, std::string msg) {
+
338 Matchers::Match<A>(*this, regex).set_message(std::move(msg)).run();
+
339}
+
340
+
341template <typename A>
+
342void Expectation<A>::to_partially_match(std::string str, std::string msg) {
+
343 Matchers::MatchPartial<A>(*this, str).set_message(std::move(msg)).run();
+
344}
+
345
+
346template <typename A>
+
347void Expectation<A>::to_partially_match(std::regex regex, std::string msg) {
+
348 Matchers::MatchPartial<A>(*this, regex).set_message(std::move(msg)).run();
+
349}
+
350
+
360template <typename A>
+
361template <typename F>
+
362 requires std::invocable<F, A> && std::convertible_to<std::invoke_result_t<F, A>, bool>
+
+
363void Expectation<A>::to_satisfy(F test, std::string msg) {
+
364 Matchers::Satisfy<A>(*this, std::function<bool(A)>(std::move(test))).set_message(std::move(msg)).run();
+
365}
+
+
366
+
367template <typename A>
+
368void Expectation<A>::to_start_with(std::string start, std::string msg) {
+
369 Matchers::StartWith<std::string, std::string>(*this, start).set_message(std::move(msg)).run();
+
370}
+
371
+
372template <typename A>
+
373template <typename U>
+
374void Expectation<A>::to_start_with(std::initializer_list<U> start_sequence, std::string msg) {
+
375 Matchers::StartWith<A, std::initializer_list<U>>(*this, start_sequence).set_message(std::move(msg)).run();
+
376}
+
377
+
378template <typename A>
+
379void Expectation<A>::to_end_with(std::string ending, std::string msg) {
+
380 Matchers::EndWith<std::string, std::string>(*this, ending).set_message(std::move(msg)).run();
+
381}
+
382
+
383template <typename A>
+
384template <typename U>
+
385void Expectation<A>::to_end_with(std::initializer_list<U> end_sequence, std::string msg) {
+
386 Matchers::EndWith<A, std::initializer_list<U>>(*this, end_sequence).set_message(std::move(msg)).run();
+
387}
+
388
+
389template <typename A>
+
390void Expectation<A>::to_have_value(std::string msg) {
+
391 Matchers::HaveValue<A>(*this).set_message(std::move(msg)).run();
+
392}
+
393
+
394#if __cpp_lib_expected
+
395template <typename A>
+
396void Expectation<A>::to_have_error(std::string msg) {
+
397 Matchers::HaveError<A>(*this).set_message(std::move(msg)).run();
+
398}
+
399#endif
+
400
+
401template <typename A>
+
+
402class ExpectationValue : public Expectation<A> {
+
403 A value;
+
404
+
405 public:
+
413 ExpectationValue(ItBase& it, A value, std::source_location location) : Expectation<A>(it, location), value(value) {}
+
414 explicit ExpectationValue(A value, std::source_location location = std::source_location::current())
+
415 : Expectation<A>(location), value(value) {}
+
416
+
424 template <typename U>
+
+
425 ExpectationValue(ItBase& it, std::initializer_list<U> init_list, std::source_location location)
+
426 : Expectation<A>(it, location), value(std::vector<U>(init_list)) {}
+
+
427
+
429 A& get_target() & override { return value; }
+
430
+
431 ExpectationValue& not_() override {
+
432 this->is_positive_ = not this->is_positive_;
+
433 return *this;
+
434 }
+
435
+
436 ExpectationValue& ignore() override {
+
437 this->ignore_ = true;
+
438 return *this;
+
439 }
+
440};
+
+
441
+
442template <Util::is_functional F>
+
+
443class ExpectationFunc : public Expectation<decltype(std::declval<F>()())> {
+
444 using block_ret_t = decltype(std::declval<F>()());
+
445 F block;
+
446 std::optional<block_ret_t> computed = std::nullopt;
+
447
+
448 public:
+
449 ExpectationFunc(ExpectationFunc<F> const& copy, std::source_location location)
+
450 : Expectation<block_ret_t>(copy, location), block(copy.block) {}
+
451
+
+
459 ExpectationFunc(ItBase& it, F block, std::source_location location)
+
460 : Expectation<block_ret_t>(it, location), block(block) {}
+
+
461
+
473 // TODO: create a "lazy" parameter for differentiating between delayed and
+
474 // immediate execution
+
475 // ExpectationFunc(BaseIt &it, std::function<A()> block)
+
476 // : Expectation(it), block(block()){}; // block(block), has_block(true)
+
477 // {}
+
478
+
+
480 block_ret_t& get_target() & override {
+
481 if (!computed.has_value()) {
+
482 computed.emplace(block());
+
483 }
+
484 return *computed;
+
485 }
+
+
486
+
487 // auto get_target() & override -> decltype(std::declval<A>()()) & { return
+
488 // Expectation<A>::get_target()(); }
+
489
+
490 ExpectationFunc& not_() override {
+
491 this->is_positive_ = !this->is_positive_;
+
492 return *this;
+
493 }
+
494
+
495 ExpectationFunc& ignore() override {
+
496 this->ignore_ = true;
+
497 return *this;
+
498 }
+
499
+
500 Expectation<decltype(block())>& casted() { return static_cast<decltype(block())>(*this); }
+
501
+
502 template <typename Ex = std::exception>
+
503 void to_throw(std::string msg = "");
+
504};
+
+
505
+
506template <Util::is_functional F>
+
507template <typename Ex>
+
508void ExpectationFunc<F>::to_throw(std::string msg) {
+
509 Matchers::Throw<decltype(this->block.operator()()), Ex>(*this).set_message(std::move(msg)).run();
+
510}
+
511
+
512} // namespace CppSpec
+
+
+
+
+
+
+
+
+
+
+
+ + + + +
Definition expectation.hpp:443
+
block_ret_t & get_target() &override
Create an Expectation using a function.
Definition expectation.hpp:480
+
ExpectationFunc(ItBase &it, F block, std::source_location location)
Create an ExpectationValue using a value.
Definition expectation.hpp:459
+
Definition expectation.hpp:402
+
A & get_target() &override
Get the target of the expectation.
Definition expectation.hpp:429
+
ExpectationValue(ItBase &it, std::initializer_list< U > init_list, std::source_location location)
Create an Expectation using an initializer list.
Definition expectation.hpp:425
+
ExpectationValue(ItBase &it, A value, std::source_location location)
Create an ExpectationValue using a value.
Definition expectation.hpp:413
+
Wraps the target of an expectation.
Definition expectation.hpp:48
+
Expectation(ItBase &it, std::source_location location)
Create an Expectation using a value.
Definition expectation.hpp:68
+
constexpr bool positive() const
Get whether the expectation is normal or negated.
Definition expectation.hpp:78
+
void to(M matcher, std::string msg="")
Definition expectation.hpp:158
+
void to_be_false(std::string msg="")
Match using the Matchers::Be matcher, testing for falsy-ness.
Definition expectation.hpp:175
+
void to_contain(std::initializer_list< U > expected, std::string msg="")
Match using the Matchers::Include matcher, given an initializer list.
Definition expectation.hpp:271
+
void to_be_falsy(std::string msg="")
Definition expectation.hpp:189
+
void to_satisfy(F test, std::string msg="")
Match using the Matchers::Satisfy matcher.
Definition expectation.hpp:363
+
void to_be_true(std::string msg="")
Match using the Matchers::Be matcher, testing for truthy-ness.
Definition expectation.hpp:213
+
virtual A & get_target() &=0
Get the target of the expectation.
+
void to_be_truthy(std::string msg="")
Definition expectation.hpp:229
+
void to_equal(E expected, std::string msg="")
Match using the Matchers::Equal matcher.
Definition expectation.hpp:299
+
void to_be_between(E min, E max, Matchers::RangeMode mode=Matchers::RangeMode::inclusive, std::string msg="")
Match using the Matchers::BeBetween matcher, with an explicit range mode.
Definition expectation.hpp:245
+
Matchers::BeWithinHelper< A, E > to_be_within(E expected, std::string msg="")
Match using the Matchers::BeWithin matcher.
Definition expectation.hpp:313
+
void to_be_null(std::string msg="")
Match using the Matchers::BeNullptr matcher.
Definition expectation.hpp:201
+
Base class for it expressions.
Definition it_base.hpp:32
+
Definition be_between.hpp:11
+
Definition be_less_than.hpp:10
+
Definition be_nullptr.hpp:10
+
Definition be_within.hpp:10
+
Definition contain.hpp:61
+
Definition end_with.hpp:12
+
The equal matcher.
Definition equal.hpp:17
+
Definition fail.hpp:8
+
Definition have_error.hpp:14
+
Definition have_value.hpp:14
+
Definition match.hpp:28
+
Definition match.hpp:11
+
Result run()
Run the Matcher object.
Definition matcher_base.hpp:154
+
virtual MatcherBase & set_message(std::string message)
Set a custom failure message.
Definition matcher_base.hpp:101
+
Definition satisfy.hpp:21
+
Definition start_with.hpp:12
+
Definition throw.hpp:9
+ + + + + + +
+
+
+ + + + diff --git a/doxygen/fail_8hpp_source.html b/doxygen/fail_8hpp_source.html new file mode 100644 index 0000000..1363ba4 --- /dev/null +++ b/doxygen/fail_8hpp_source.html @@ -0,0 +1,146 @@ + + + + + + + +C++Spec: include/matchers/errors/fail.hpp Source File + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
fail.hpp
+
+
+
1#pragma once
+
2
+ +
4
+
5namespace CppSpec::Matchers {
+
6
+
7template <typename A>
+
+
8class Fail : public MatcherBase<A, void*> {
+
9 public:
+
10 static_assert(is_result_v<A>, ".fail must() be matched against a Matcher.");
+
11 explicit Fail(Expectation<A>& expectation) : MatcherBase<A, void*>(expectation, nullptr) {}
+
12 std::string verb() override { return "fail"; }
+
13 bool match() override { return this->actual().is_failure(); }
+
14};
+
+
15
+
16template <typename A>
+
+
17class FailWith : public MatcherBase<A, std::string> {
+
18 public:
+
19 static_assert(is_result_v<A>, ".fail_with() must be matched against a Result.");
+
20 FailWith(Expectation<A>& expectation, std::string expected) : MatcherBase<A, std::string>(expectation, expected) {}
+
21
+
22 std::string verb() override { return "fail with"; }
+
23 std::string description() override { return std::format(R"(fail with "{}")", this->expected()); }
+
24
+
25 bool match() override {
+
26 auto message = this->actual().get_message();
+
27 return this->actual().is_failure() && message == this->expected();
+
28 }
+
29};
+
+
30
+
31} // namespace CppSpec::Matchers
+
Wraps the target of an expectation.
Definition expectation.hpp:48
+
std::string description() override
Get the description of the Matcher.
Definition fail.hpp:23
+
Definition have_error.hpp:9
+
Contains the base class for all Matchers.
+
+
+
+ + + + diff --git a/doxygen/files.html b/doxygen/files.html new file mode 100644 index 0000000..bb44cc9 --- /dev/null +++ b/doxygen/files.html @@ -0,0 +1,153 @@ + + + + + + + +C++Spec: File List + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
File List
+
+
+
Here is a list of all documented files with brief descriptions:
+
[detail level 1234]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
 
include
 
expectations
 
expectation.hpp
 
handler.hpp
Contains the primary handlers for running Matchers
 
formatters
 
formatters_base.hpp
 
junit_xml.hpp
 
progress.hpp
 
tap.hpp
 
term_colors.hpp
 
verbose.hpp
 
matchers
 
errors
 
fail.hpp
 
have_error.hpp
 
have_value.hpp
 
throw.hpp
 
numeric
 
be_between.hpp
 
be_greater_than.hpp
 
be_less_than.hpp
 
be_within.hpp
 
strings
 
end_with.hpp
 
match.hpp
 
start_with.hpp
 
be_nullptr.hpp
 
contain.hpp
 
equal.hpp
 
matcher_base.hpp
Contains the base class for all Matchers
 
pretty_matchers.hpp
 
satisfy.hpp
 
argparse.hpp
 
class_description.hpp
 
cppspec.hpp
The core header file for Cppspec
 
description.hpp
Defines the Description class and associated functions
 
it.hpp
 
it_base.hpp
 
let.hpp
 
result.hpp
 
runnable.hpp
 
runner.hpp
 
util.hpp
Utility functions and classes
+
+
+
+
+ + + + diff --git a/doxygen/files_dup.js b/doxygen/files_dup.js new file mode 100644 index 0000000..f1749d9 --- /dev/null +++ b/doxygen/files_dup.js @@ -0,0 +1,4 @@ +var files_dup = +[ + [ "include", "dir_d44c64559bbebec7f509842c48db8b23.html", "dir_d44c64559bbebec7f509842c48db8b23" ] +]; \ No newline at end of file diff --git a/doxygen/formatters__base_8hpp.html b/doxygen/formatters__base_8hpp.html new file mode 100644 index 0000000..7af0c50 --- /dev/null +++ b/doxygen/formatters__base_8hpp.html @@ -0,0 +1,324 @@ + + + + + + + +C++Spec: include/formatters/formatters_base.hpp File Reference + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
formatters_base.hpp File Reference
+
+
+
#include <cstdio>
+#include <iostream>
+#include "description.hpp"
+#include "it_base.hpp"
+#include "runnable.hpp"
+#include "term_colors.hpp"
+#include <unistd.h>
+
+Include dependency graph for formatters_base.hpp:
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+This graph shows which files directly or indirectly include this file:
+
+
+ + + + + + + + + + + + + + + + + + + + + +
+
+

Go to the source code of this file.

+ + + +

+Classes

class  CppSpec::Formatters::BaseFormatter
+ + +

+Functions

+bool CppSpec::is_terminal ()
+
+
+ +
+ + + + diff --git a/doxygen/formatters__base_8hpp.js b/doxygen/formatters__base_8hpp.js new file mode 100644 index 0000000..66e1e06 --- /dev/null +++ b/doxygen/formatters__base_8hpp.js @@ -0,0 +1,4 @@ +var formatters__base_8hpp = +[ + [ "CppSpec::Formatters::BaseFormatter", "classCppSpec_1_1Formatters_1_1BaseFormatter.html", null ] +]; \ No newline at end of file diff --git a/doxygen/formatters__base_8hpp__dep__incl.map b/doxygen/formatters__base_8hpp__dep__incl.map new file mode 100644 index 0000000..2bdd31b --- /dev/null +++ b/doxygen/formatters__base_8hpp__dep__incl.map @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/doxygen/formatters__base_8hpp__dep__incl.md5 b/doxygen/formatters__base_8hpp__dep__incl.md5 new file mode 100644 index 0000000..7f5f5e7 --- /dev/null +++ b/doxygen/formatters__base_8hpp__dep__incl.md5 @@ -0,0 +1 @@ +0df7d2cabf7bb2a47f1083e7b0ce0004 \ No newline at end of file diff --git a/doxygen/formatters__base_8hpp__dep__incl.png b/doxygen/formatters__base_8hpp__dep__incl.png new file mode 100644 index 0000000..0fe4103 Binary files /dev/null and b/doxygen/formatters__base_8hpp__dep__incl.png differ diff --git a/doxygen/formatters__base_8hpp__incl.map b/doxygen/formatters__base_8hpp__incl.map new file mode 100644 index 0000000..bfed71b --- /dev/null +++ b/doxygen/formatters__base_8hpp__incl.map @@ -0,0 +1,160 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doxygen/formatters__base_8hpp__incl.md5 b/doxygen/formatters__base_8hpp__incl.md5 new file mode 100644 index 0000000..0241759 --- /dev/null +++ b/doxygen/formatters__base_8hpp__incl.md5 @@ -0,0 +1 @@ +19e0c0bbbd0e267b45a563424d32a840 \ No newline at end of file diff --git a/doxygen/formatters__base_8hpp__incl.png b/doxygen/formatters__base_8hpp__incl.png new file mode 100644 index 0000000..f36db4d Binary files /dev/null and b/doxygen/formatters__base_8hpp__incl.png differ diff --git a/doxygen/formatters__base_8hpp_source.html b/doxygen/formatters__base_8hpp_source.html new file mode 100644 index 0000000..0b254b5 --- /dev/null +++ b/doxygen/formatters__base_8hpp_source.html @@ -0,0 +1,223 @@ + + + + + + + +C++Spec: include/formatters/formatters_base.hpp Source File + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
formatters_base.hpp
+
+
+Go to the documentation of this file.
1
+
2#pragma once
+
3
+
4#include <cstdio>
+
5#include <iostream>
+
6
+
7#include "description.hpp"
+
8#include "it_base.hpp"
+
9#include "runnable.hpp"
+
10#include "term_colors.hpp"
+
11
+
12extern "C" {
+
13#ifdef _WIN32
+
14#include <io.h>
+
15#else
+
16#include <unistd.h>
+
17#endif
+
18}
+
19
+
20namespace CppSpec {
+
21class Description;
+
22class ItBase;
+
23
+
24inline bool is_terminal() {
+
25#ifdef _WIN32
+
26 return _isatty(_fileno(stdout)) != 0;
+
27#else
+
28 return isatty(fileno(stdout)) != 0;
+
29#endif
+
30}
+
31namespace Formatters {
+
32
+
+
33class BaseFormatter {
+
34 protected:
+
35 std::ostream& out_stream;
+
36 int test_counter = 1;
+
37 bool color_output;
+
38
+
39 public:
+
40 explicit BaseFormatter(std::ostream& out_stream = std::cout, bool color = is_terminal())
+
41 : out_stream(out_stream), color_output(color) {}
+
42 BaseFormatter(const BaseFormatter&) = default;
+
43 BaseFormatter(const BaseFormatter& copy, std::ostream& out_stream)
+
44 : out_stream(out_stream), test_counter(copy.test_counter), color_output(copy.color_output) {}
+
45
+
46 virtual ~BaseFormatter() = default;
+
47
+
48 void format(const Runnable& runnable) {
+
49 if (const auto* description = dynamic_cast<const Description*>(&runnable)) {
+
50 format(*description);
+
51 } else if (const auto* it = dynamic_cast<const ItBase*>(&runnable)) {
+
52 format(*it);
+
53 }
+
54 format_children(runnable);
+
55 }
+
56
+
57 void format_children(const Runnable& runnable) {
+
58 for (const auto& child : runnable.get_children()) {
+
59 if (const auto* runnable = dynamic_cast<const Runnable*>(child.get())) {
+
60 this->format(*runnable);
+
61 }
+
62 }
+
63 }
+
64
+
65 virtual void format(const Description& /* description */) {}
+
66 virtual void format(const ItBase& /* it */) {}
+
67 virtual void cleanup() {}
+
68
+
69 BaseFormatter& set_color_output(bool value);
+
70
+
71 int get_and_increment_test_counter() { return test_counter++; }
+
72 void reset_test_counter() { test_counter = 1; }
+
73
+
74 const char* set_color(const char* color) {
+
75 if (!color_output) {
+
76 return ""; // No color output
+
77 }
+
78 return color;
+
79 }
+
80
+
81 const char* status_color(Result::Status status) {
+
82 if (!color_output) {
+
83 return ""; // No color output
+
84 }
+
85 switch (status) {
+
86 case Result::Status::Success:
+
87 return GREEN;
+
88 case Result::Status::Failure:
+
89 return RED;
+
90 case Result::Status::Error:
+
91 return MAGENTA;
+
92 case Result::Status::Skipped:
+
93 return YELLOW;
+
94 }
+
95 return ""; // Default to no color
+
96 }
+
97
+
98 const char* reset_color() { return color_output ? RESET : ""; }
+
99};
+
+
100
+
101inline BaseFormatter& BaseFormatter::set_color_output(bool value) {
+
102 this->color_output = value;
+
103 return *this;
+
104}
+
105
+
106} // namespace Formatters
+
107} // namespace CppSpec
+
Definition description.hpp:22
+
Definition formatters_base.hpp:33
+
Base class for it expressions.
Definition it_base.hpp:32
+
Base class for all objects in the execution tree.
Definition runnable.hpp:25
+
Defines the Description class and associated functions.
+ + +
+
+
+ + + + diff --git a/doxygen/functions.html b/doxygen/functions.html new file mode 100644 index 0000000..c5a28a5 --- /dev/null +++ b/doxygen/functions.html @@ -0,0 +1,188 @@ + + + + + + + +C++Spec: Class Members + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- a -

+ + +

- d -

+ + +

- e -

+ + +

- f -

+ + +

- g -

+ + +

- h -

+ + +

- i -

+ + +

- n -

+ + +

- p -

+ + +

- r -

+ + +

- s -

+ + +

- t -

+
+
+
+ + + + diff --git a/doxygen/functions_func.html b/doxygen/functions_func.html new file mode 100644 index 0000000..e9da9c5 --- /dev/null +++ b/doxygen/functions_func.html @@ -0,0 +1,187 @@ + + + + + + + +C++Spec: Class Members - Functions + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented functions with links to the class documentation for each member:
+ +

- a -

+ + +

- d -

+ + +

- e -

+ + +

- f -

+ + +

- g -

+ + +

- h -

+ + +

- i -

+ + +

- n -

+ + +

- p -

+ + +

- r -

+ + +

- s -

+ + +

- t -

+
+
+
+ + + + diff --git a/doxygen/functions_vars.html b/doxygen/functions_vars.html new file mode 100644 index 0000000..5d16ec3 --- /dev/null +++ b/doxygen/functions_vars.html @@ -0,0 +1,106 @@ + + + + + + + +C++Spec: Class Members - Variables + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented variables with links to the class documentation for each member:
+
+
+
+ + + + diff --git a/doxygen/graph_legend.html b/doxygen/graph_legend.html new file mode 100644 index 0000000..a4d34d3 --- /dev/null +++ b/doxygen/graph_legend.html @@ -0,0 +1,166 @@ + + + + + + + +C++Spec: Graph Legend + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Graph Legend
+
+
+

This page explains how to interpret the graphs that are generated by doxygen.

+

Consider the following example:

/*! Invisible class because of truncation */
+
class Invisible { };
+
+
/*! Truncated class, inheritance relation is hidden */
+
class Truncated : public Invisible { };
+
+
/* Class not documented with doxygen comments */
+
class Undocumented { };
+
+
/*! Class that is inherited using public inheritance */
+
class PublicBase : public Truncated { };
+
+
/*! A template class */
+
template<class T> class Templ { };
+
+
/*! Class that is inherited using protected inheritance */
+
class ProtectedBase { };
+
+
/*! Class that is inherited using private inheritance */
+
class PrivateBase { };
+
+
/*! Class that is used by the Inherited class */
+
class Used { };
+
+
/*! Super class that inherits a number of other classes */
+
class Inherited : public PublicBase,
+
protected ProtectedBase,
+
private PrivateBase,
+
public Undocumented,
+
public Templ<int>
+
{
+
private:
+
Used *m_usedClass;
+
};
+

This will result in the following graph:

+

The boxes in the above graph have the following meaning:

+
    +
  • +A filled gray box represents the struct or class for which the graph is generated.
  • +
  • +A box with a black border denotes a documented struct or class.
  • +
  • +A box with a gray border denotes an undocumented struct or class.
  • +
  • +A box with a red border denotes a documented struct or class forwhich not all inheritance/containment relations are shown. A graph is truncated if it does not fit within the specified boundaries.
  • +
+

The arrows have the following meaning:

+
    +
  • +A blue arrow is used to visualize a public inheritance relation between two classes.
  • +
  • +A dark green arrow is used for protected inheritance.
  • +
  • +A dark red arrow is used for private inheritance.
  • +
  • +A purple dashed arrow is used if a class is contained or used by another class. The arrow is labeled with the variable(s) through which the pointed class or struct is accessible.
  • +
  • +A yellow dashed arrow denotes a relation between a template instance and the template class it was instantiated from. The arrow is labeled with the template parameters of the instance.
  • +
+
+
+
+ + + + diff --git a/doxygen/graph_legend.md5 b/doxygen/graph_legend.md5 new file mode 100644 index 0000000..da515da --- /dev/null +++ b/doxygen/graph_legend.md5 @@ -0,0 +1 @@ +f74606a252eb303675caf37987d0b7af \ No newline at end of file diff --git a/doxygen/graph_legend.png b/doxygen/graph_legend.png new file mode 100644 index 0000000..15bf62a Binary files /dev/null and b/doxygen/graph_legend.png differ diff --git a/doxygen/handler_8hpp.html b/doxygen/handler_8hpp.html new file mode 100644 index 0000000..3cec174 --- /dev/null +++ b/doxygen/handler_8hpp.html @@ -0,0 +1,243 @@ + + + + + + + +C++Spec: include/expectations/handler.hpp File Reference + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
handler.hpp File Reference
+
+
+ +

Contains the primary handlers for running Matchers. +More...

+
#include <exception>
+#include <string>
+#include "result.hpp"
+
+Include dependency graph for handler.hpp:
+
+
+ + + + + + + + + + + + + + + + + + + + +
+
+This graph shows which files directly or indirectly include this file:
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

Go to the source code of this file.

+ + + + + + +

+Classes

struct  CppSpec::PositiveExpectationHandler
 Handles "positive" expectations (i.e. non-negated). More...
struct  CppSpec::NegativeExpectationHandler
 Handles "negative" expectations (i.e. negated with '.not_(). More...
+

Detailed Description

+

Contains the primary handlers for running Matchers.

+

Copyright 2016 Katherine Whitlock

+
Author
Katherine Whitlock (toroidalcode)
+
+
+ +
+ + + + diff --git a/doxygen/handler_8hpp.js b/doxygen/handler_8hpp.js new file mode 100644 index 0000000..2012f60 --- /dev/null +++ b/doxygen/handler_8hpp.js @@ -0,0 +1,5 @@ +var handler_8hpp = +[ + [ "CppSpec::PositiveExpectationHandler", "structCppSpec_1_1PositiveExpectationHandler.html", null ], + [ "CppSpec::NegativeExpectationHandler", "structCppSpec_1_1NegativeExpectationHandler.html", null ] +]; \ No newline at end of file diff --git a/doxygen/handler_8hpp__dep__incl.map b/doxygen/handler_8hpp__dep__incl.map new file mode 100644 index 0000000..8ac9b36 --- /dev/null +++ b/doxygen/handler_8hpp__dep__incl.map @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doxygen/handler_8hpp__dep__incl.md5 b/doxygen/handler_8hpp__dep__incl.md5 new file mode 100644 index 0000000..f225a1b --- /dev/null +++ b/doxygen/handler_8hpp__dep__incl.md5 @@ -0,0 +1 @@ +9984901453d1a389407bc0b121ff1b0a \ No newline at end of file diff --git a/doxygen/handler_8hpp__dep__incl.png b/doxygen/handler_8hpp__dep__incl.png new file mode 100644 index 0000000..8778e44 Binary files /dev/null and b/doxygen/handler_8hpp__dep__incl.png differ diff --git a/doxygen/handler_8hpp__incl.map b/doxygen/handler_8hpp__incl.map new file mode 100644 index 0000000..99b10d0 --- /dev/null +++ b/doxygen/handler_8hpp__incl.map @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/doxygen/handler_8hpp__incl.md5 b/doxygen/handler_8hpp__incl.md5 new file mode 100644 index 0000000..42eaa99 --- /dev/null +++ b/doxygen/handler_8hpp__incl.md5 @@ -0,0 +1 @@ +983b89bc152471492a6955ed50f8ba68 \ No newline at end of file diff --git a/doxygen/handler_8hpp__incl.png b/doxygen/handler_8hpp__incl.png new file mode 100644 index 0000000..d509850 Binary files /dev/null and b/doxygen/handler_8hpp__incl.png differ diff --git a/doxygen/handler_8hpp_source.html b/doxygen/handler_8hpp_source.html new file mode 100644 index 0000000..6b891f6 --- /dev/null +++ b/doxygen/handler_8hpp_source.html @@ -0,0 +1,174 @@ + + + + + + + +C++Spec: include/expectations/handler.hpp Source File + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
handler.hpp
+
+
+Go to the documentation of this file.
1
+
9
+
10#pragma once
+
11
+
12#include <exception>
+
13#include <string>
+
14
+
15#include "result.hpp"
+
16
+
17namespace CppSpec {
+
18
+
+ +
21 template <class Matcher>
+
22 static Result handle_matcher(Matcher& matcher);
+
23 static std::string verb() { return "should"; }
+
24};
+
+
25
+
+ +
28 template <class Matcher>
+
29 static Result handle_matcher(Matcher& matcher);
+
30 static std::string verb() { return "should not"; }
+
31};
+
+
32
+
41template <class Matcher>
+
+ +
43 bool matched = false;
+
44 try {
+
45 matched = matcher.match();
+
46 } catch (std::exception& e) {
+
47 return Result::error_with(matcher.get_location(), e.what());
+
48 } catch (...) {
+
49 return Result::error_with(matcher.get_location(), "Unknown exception thrown during matcher execution.");
+
50 }
+
51
+
52 return !matched ? Result::failure_with(matcher.get_location(), matcher.failure_message())
+
53 : Result::success(matcher.get_location());
+
54}
+
+
55
+
64template <class Matcher>
+
+ +
66 bool matched = false;
+
67 try {
+
68 matched = matcher.negated_match();
+
69 } catch (std::exception& e) {
+
70 return Result::error_with(matcher.get_location(), e.what());
+
71 } catch (...) {
+
72 return Result::error_with(matcher.get_location(), "Unhandled exception thrown during matcher execution.");
+
73 }
+
74 return !matched ? Result::failure_with(matcher.get_location(), matcher.failure_message_when_negated())
+
75 : Result::success(matcher.get_location());
+
76}
+
+
77
+
78} // namespace CppSpec
+
Definition result.hpp:13
+ +
Handles "negative" expectations (i.e. negated with '.not_().
Definition handler.hpp:27
+
static Result handle_matcher(Matcher &matcher)
runs a negative expectation
Definition handler.hpp:65
+
Handles "positive" expectations (i.e. non-negated).
Definition handler.hpp:20
+
static Result handle_matcher(Matcher &matcher)
runs a positive expectation
Definition handler.hpp:42
+
+
+
+ + + + diff --git a/doxygen/have__error_8hpp_source.html b/doxygen/have__error_8hpp_source.html new file mode 100644 index 0000000..9b31936 --- /dev/null +++ b/doxygen/have__error_8hpp_source.html @@ -0,0 +1,150 @@ + + + + + + + +C++Spec: include/matchers/errors/have_error.hpp Source File + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
have_error.hpp
+
+
+
1#pragma once
+
2#include <expected>
+
3
+ +
5
+
6namespace CppSpec::Matchers {
+
7
+
8template <typename T>
+
+
9concept expected = requires(T t) {
+
10 { t.error() } -> std::same_as<typename T::error_type&>;
+
11};
+
+
12
+
13template <expected T>
+
+
14class HaveError : public MatcherBase<T, void*> {
+
15 public:
+
16 HaveError(Expectation<T>& expectation) : MatcherBase<T, void*>(expectation) {}
+
17
+
18 std::string verb() override { return "have an error"; }
+
19 std::string description() override { return verb(); }
+
20
+
21 bool match() override { return (!this->actual().has_value()); }
+
22};
+
+
23
+
24template <expected T, typename E>
+
+
25class HaveErrorEqualTo : public MatcherBase<T, E> {
+
26 public:
+
27 static_assert(std::is_same_v<typename T::error_type, E>, "the contained error_type must match the expected type");
+
28 HaveErrorEqualTo(Expectation<T>& expectation, E expected) : MatcherBase<T, E>(expectation, expected) {}
+
29
+
30 bool match() { return (this->actual().error() == this->expected()); }
+
31};
+
+
32
+
33} // namespace CppSpec::Matchers
+
Wraps the target of an expectation.
Definition expectation.hpp:48
+
std::string description() override
Get the description of the Matcher.
Definition have_error.hpp:19
+
Definition have_error.hpp:9
+
Contains the base class for all Matchers.
+
+
+
+ + + + diff --git a/doxygen/have__value_8hpp_source.html b/doxygen/have__value_8hpp_source.html new file mode 100644 index 0000000..41fbfa4 --- /dev/null +++ b/doxygen/have__value_8hpp_source.html @@ -0,0 +1,152 @@ + + + + + + + +C++Spec: include/matchers/errors/have_value.hpp Source File + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
have_value.hpp
+
+
+
1#pragma once
+
2
+
3#include "matchers/equal.hpp"
+ +
5
+
6namespace CppSpec::Matchers {
+
7
+
8template <typename T>
+
+
9concept optional = requires(T t) {
+
10 { t.has_value() } -> std::same_as<bool>;
+
11};
+
+
12
+
13template <optional T>
+
+
14class HaveValue : public MatcherBase<T, void*> {
+
15 public:
+
16 HaveValue(Expectation<T>& expectation) : MatcherBase<T, void*>(expectation) {}
+
17
+
18 std::string verb() override { return "have"; }
+
19 std::string description() override { return "have a value"; }
+
20
+
21 bool match() override { return (this->actual().has_value()); }
+
22};
+
+
23
+
24template <optional T, typename E>
+
+
25class HaveValueEqualTo : public Equal<T, E> {
+
26 public:
+
27 static_assert(std::is_same_v<typename T::value_type, E>, "the contained value_type must match the expected type");
+
28 HaveValueEqualTo(Expectation<T>& expectation, E expected) : Equal<T, E>(expectation, expected) {}
+
29
+
30 bool match() { return (this->actual().value() == this->expected()); }
+
31};
+
+
32
+
33} // namespace CppSpec::Matchers
+
Wraps the target of an expectation.
Definition expectation.hpp:48
+
std::string description() override
Get the description of the Matcher.
Definition have_value.hpp:19
+
Definition have_error.hpp:9
+
Definition have_value.hpp:9
+ +
Contains the base class for all Matchers.
+
+
+
+ + + + diff --git a/doxygen/hierarchy.html b/doxygen/hierarchy.html new file mode 100644 index 0000000..13e215d --- /dev/null +++ b/doxygen/hierarchy.html @@ -0,0 +1,173 @@ + + + + + + + +C++Spec: Class Hierarchy + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Class Hierarchy
+
+
+
+

Go to the graphical class hierarchy

+This inheritance list is sorted roughly, but not completely, alphabetically:
+
[detail level 1234]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
 CCppSpec::Formatters::BaseFormatter
 CCppSpec::Formatters::JUnitXML
 CCppSpec::Formatters::Progress
 CCppSpec::Formatters::TAP
 CCppSpec::Formatters::Verbose
 CCppSpec::Matchers::BeWithinHelper< A, E >
 CCppSpec::Expectation< A >Wraps the target of an expectation
 CCppSpec::ExpectationValue< A >
 CCppSpec::Expectation< decltype(std::declval< F >()())>
 CCppSpec::ExpectationFunc< F >
 CCppSpec::LetBaseBase class for lets to abstract away the template arguments
 CCppSpec::NegativeExpectationHandlerHandles "negative" expectations (i.e. negated with '.not_()
 CCppSpec::PositiveExpectationHandlerHandles "positive" expectations (i.e. non-negated)
 CCppSpec::PrettyA helper base class that assists in pretty-printing various objects
 CCppSpec::Matchers::MatcherBase< A, E >
 CCppSpec::Matchers::BeBetween< A, E >
 CCppSpec::Matchers::BeGreaterThan< A, E >
 CCppSpec::Matchers::BeLessThan< A, E >
 CCppSpec::Matchers::BeWithin< A, E >
 CCppSpec::Matchers::ContainBase< A, E, U >
 CCppSpec::Matchers::Contain< A, E, U >
 CCppSpec::Matchers::EndWith< A, E >
 CCppSpec::Matchers::Equal< A, E >The equal matcher
 CCppSpec::Matchers::StartWith< A, E >
 CCppSpec::Matchers::MatcherBase< A, std::nullptr_t >
 CCppSpec::Matchers::BeNullptr< A >
 CCppSpec::Matchers::MatcherBase< A, U >
 CCppSpec::Matchers::ContainBase< A, U, U >
 CCppSpec::Matchers::Contain< A, U, U >
 CCppSpec::Matchers::Contain< A, U, U >
 CCppSpec::Matchers::MatcherBase< A, void * >
 CCppSpec::Matchers::Fail< A >
 CCppSpec::Matchers::Throw< A, Ex >
 CCppSpec::Matchers::MatcherBase< A, std::string >
 CCppSpec::Matchers::FailWith< A >
 CCppSpec::Matchers::MatcherBase< T, void * >
 CCppSpec::Matchers::HaveError< T >
 CCppSpec::Matchers::HaveValue< T >
 CCppSpec::Matchers::MatcherBase< T, E >
 CCppSpec::Matchers::Equal< T, E >
 CCppSpec::Matchers::HaveValueEqualTo< T, E >
 CCppSpec::Matchers::HaveErrorEqualTo< T, E >
 CCppSpec::Matchers::MatcherBase< A, std::regex >
 CCppSpec::Matchers::Match< A >
 CCppSpec::Matchers::MatchPartial< A >
 CCppSpec::Matchers::MatcherBase< A, bool >
 CCppSpec::Matchers::Satisfy< A >
 CCppSpec::Matchers::MatcherBase< Actual, Expected >Base class for all Matcher classes and objects
 CCppSpec::Formatters::JUnitNodes::Result
 CCppSpec::Result
 CCppSpec::RunnableBase class for all objects in the execution tree
 CCppSpec::Description
 CCppSpec::ClassDescription< T >A Description with a defined subject
 CCppSpec::ItBaseBase class for it expressions
 CCppSpec::ItCD< T >An it embedded in a ClassDescription
 CCppSpec::ItDAn it embedded in a Description
 CCppSpec::RunnerA collection of Descriptions that are run in sequence
 CCppSpec::Formatters::JUnitNodes::TestCase
 CCppSpec::Formatters::JUnitNodes::TestSuite
 CCppSpec::Formatters::JUnitNodes::TestSuites
 CCppSpec::Util::verbose_assert< result >Helper class for static assertions that has a built-in error string
+
+
+
+
+ + + + diff --git a/doxygen/hierarchy.js b/doxygen/hierarchy.js new file mode 100644 index 0000000..11e6aa4 --- /dev/null +++ b/doxygen/hierarchy.js @@ -0,0 +1,83 @@ +var hierarchy = +[ + [ "CppSpec::Formatters::BaseFormatter", "classCppSpec_1_1Formatters_1_1BaseFormatter.html", [ + [ "CppSpec::Formatters::JUnitXML", "classCppSpec_1_1Formatters_1_1JUnitXML.html", null ], + [ "CppSpec::Formatters::Progress", "classCppSpec_1_1Formatters_1_1Progress.html", null ], + [ "CppSpec::Formatters::TAP", "structCppSpec_1_1Formatters_1_1TAP.html", null ], + [ "CppSpec::Formatters::Verbose", "classCppSpec_1_1Formatters_1_1Verbose.html", null ] + ] ], + [ "CppSpec::Matchers::BeWithinHelper< A, E >", "classCppSpec_1_1Matchers_1_1BeWithinHelper.html", null ], + [ "CppSpec::Expectation< A >", "classCppSpec_1_1Expectation.html", [ + [ "CppSpec::ExpectationValue< A >", "classCppSpec_1_1ExpectationValue.html", null ] + ] ], + [ "CppSpec::Expectation< decltype(std::declval< F >()())>", "classCppSpec_1_1Expectation.html", [ + [ "CppSpec::ExpectationFunc< F >", "classCppSpec_1_1ExpectationFunc.html", null ] + ] ], + [ "CppSpec::LetBase", "classCppSpec_1_1LetBase.html", null ], + [ "CppSpec::NegativeExpectationHandler", "structCppSpec_1_1NegativeExpectationHandler.html", null ], + [ "CppSpec::PositiveExpectationHandler", "structCppSpec_1_1PositiveExpectationHandler.html", null ], + [ "CppSpec::Pretty", "structCppSpec_1_1Pretty.html", [ + [ "CppSpec::Matchers::MatcherBase< A, E >", "classCppSpec_1_1Matchers_1_1MatcherBase.html", [ + [ "CppSpec::Matchers::BeBetween< A, E >", "classCppSpec_1_1Matchers_1_1BeBetween.html", null ], + [ "CppSpec::Matchers::BeGreaterThan< A, E >", "classCppSpec_1_1Matchers_1_1BeGreaterThan.html", null ], + [ "CppSpec::Matchers::BeLessThan< A, E >", "classCppSpec_1_1Matchers_1_1BeLessThan.html", null ], + [ "CppSpec::Matchers::BeWithin< A, E >", "classCppSpec_1_1Matchers_1_1BeWithin.html", null ], + [ "CppSpec::Matchers::ContainBase< A, E, U >", "classCppSpec_1_1Matchers_1_1ContainBase.html", [ + [ "CppSpec::Matchers::Contain< A, E, U >", "classCppSpec_1_1Matchers_1_1Contain.html", null ] + ] ], + [ "CppSpec::Matchers::EndWith< A, E >", "classCppSpec_1_1Matchers_1_1EndWith.html", null ], + [ "CppSpec::Matchers::Equal< A, E >", "classCppSpec_1_1Matchers_1_1Equal.html", null ], + [ "CppSpec::Matchers::StartWith< A, E >", "classCppSpec_1_1Matchers_1_1StartWith.html", null ] + ] ], + [ "CppSpec::Matchers::MatcherBase< A, std::nullptr_t >", "classCppSpec_1_1Matchers_1_1MatcherBase.html", [ + [ "CppSpec::Matchers::BeNullptr< A >", "classCppSpec_1_1Matchers_1_1BeNullptr.html", null ] + ] ], + [ "CppSpec::Matchers::MatcherBase< A, U >", "classCppSpec_1_1Matchers_1_1MatcherBase.html", [ + [ "CppSpec::Matchers::ContainBase< A, U, U >", "classCppSpec_1_1Matchers_1_1ContainBase.html", [ + [ "CppSpec::Matchers::Contain< A, U, U >", "classCppSpec_1_1Matchers_1_1Contain_3_01A_00_01U_00_01U_01_4.html", null ], + [ "CppSpec::Matchers::Contain< A, U, U >", "classCppSpec_1_1Matchers_1_1Contain_3_01A_00_01U_00_01U_01_4.html", null ] + ] ] + ] ], + [ "CppSpec::Matchers::MatcherBase< A, void * >", "classCppSpec_1_1Matchers_1_1MatcherBase.html", [ + [ "CppSpec::Matchers::Fail< A >", "classCppSpec_1_1Matchers_1_1Fail.html", null ], + [ "CppSpec::Matchers::Throw< A, Ex >", "classCppSpec_1_1Matchers_1_1Throw.html", null ] + ] ], + [ "CppSpec::Matchers::MatcherBase< A, std::string >", "classCppSpec_1_1Matchers_1_1MatcherBase.html", [ + [ "CppSpec::Matchers::FailWith< A >", "classCppSpec_1_1Matchers_1_1FailWith.html", null ] + ] ], + [ "CppSpec::Matchers::MatcherBase< T, void * >", "classCppSpec_1_1Matchers_1_1MatcherBase.html", [ + [ "CppSpec::Matchers::HaveError< T >", "classCppSpec_1_1Matchers_1_1HaveError.html", null ], + [ "CppSpec::Matchers::HaveValue< T >", "classCppSpec_1_1Matchers_1_1HaveValue.html", null ] + ] ], + [ "CppSpec::Matchers::MatcherBase< T, E >", "classCppSpec_1_1Matchers_1_1MatcherBase.html", [ + [ "CppSpec::Matchers::Equal< T, E >", "classCppSpec_1_1Matchers_1_1Equal.html", [ + [ "CppSpec::Matchers::HaveValueEqualTo< T, E >", "classCppSpec_1_1Matchers_1_1HaveValueEqualTo.html", null ] + ] ], + [ "CppSpec::Matchers::HaveErrorEqualTo< T, E >", "classCppSpec_1_1Matchers_1_1HaveErrorEqualTo.html", null ] + ] ], + [ "CppSpec::Matchers::MatcherBase< A, std::regex >", "classCppSpec_1_1Matchers_1_1MatcherBase.html", [ + [ "CppSpec::Matchers::Match< A >", "classCppSpec_1_1Matchers_1_1Match.html", null ], + [ "CppSpec::Matchers::MatchPartial< A >", "classCppSpec_1_1Matchers_1_1MatchPartial.html", null ] + ] ], + [ "CppSpec::Matchers::MatcherBase< A, bool >", "classCppSpec_1_1Matchers_1_1MatcherBase.html", [ + [ "CppSpec::Matchers::Satisfy< A >", "classCppSpec_1_1Matchers_1_1Satisfy.html", null ] + ] ], + [ "CppSpec::Matchers::MatcherBase< Actual, Expected >", "classCppSpec_1_1Matchers_1_1MatcherBase.html", null ] + ] ], + [ "CppSpec::Formatters::JUnitNodes::Result", "structCppSpec_1_1Formatters_1_1JUnitNodes_1_1Result.html", null ], + [ "CppSpec::Result", "classCppSpec_1_1Result.html", null ], + [ "CppSpec::Runnable", "classCppSpec_1_1Runnable.html", [ + [ "CppSpec::Description", "classCppSpec_1_1Description.html", [ + [ "CppSpec::ClassDescription< T >", "classCppSpec_1_1ClassDescription.html", null ] + ] ], + [ "CppSpec::ItBase", "classCppSpec_1_1ItBase.html", [ + [ "CppSpec::ItCD< T >", "classCppSpec_1_1ItCD.html", null ], + [ "CppSpec::ItD", "classCppSpec_1_1ItD.html", null ] + ] ] + ] ], + [ "CppSpec::Runner", "classCppSpec_1_1Runner.html", null ], + [ "CppSpec::Formatters::JUnitNodes::TestCase", "structCppSpec_1_1Formatters_1_1JUnitNodes_1_1TestCase.html", null ], + [ "CppSpec::Formatters::JUnitNodes::TestSuite", "structCppSpec_1_1Formatters_1_1JUnitNodes_1_1TestSuite.html", null ], + [ "CppSpec::Formatters::JUnitNodes::TestSuites", "structCppSpec_1_1Formatters_1_1JUnitNodes_1_1TestSuites.html", null ], + [ "CppSpec::Util::verbose_assert< result >", "structCppSpec_1_1Util_1_1verbose__assert.html", null ] +]; \ No newline at end of file diff --git a/doxygen/index.html b/doxygen/index.html new file mode 100644 index 0000000..05b19c6 --- /dev/null +++ b/doxygen/index.html @@ -0,0 +1,175 @@ + + + + + + + +C++Spec: C++Spec + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
C++Spec
+
+
+

+

license [GitHub Action]()  GitHub release  Documentation Status

+

A behavior-driven development testing library for C++ with an RSpec-inspired DSL.

+

+Documentation

+

See http://cppspec.readthedocs.org/ for full documentation and a tutorial.

+

+Requirements

+

C++Spec requires a compiler and standard library with C++23 support. Currently tested:

+
    +
  • LLVM/Clang 18 (on Linux, macOS, and Windows)
  • +
  • GCC 14.2 (on Linux and macOS)
  • +
  • MSVC 19.43 (on Windows)
  • +
  • AppleClang 16 (on macOS)
  • +
+

Note: Only spec files require C++23 (-std=c++23). No other part of an existing project's build needs modification.

+

+Usage

+

The recommended approach is to integrate C++Spec as a CMake subproject:

+
FetchContent_Declare(
+
cppspec
+
GIT_REPOSITORY https://github.com/toroidal-code/cppspec
+
GIT_TAG VERSION
+
)
+
FetchContent_MakeAvailable(cppspec)
+
+
# Or using CPM
+
CPMAddPackage("gh:toroidal-code/cppspec@VERSION")
+

Spec files are picked up automatically with:

+
discover_specs(specs_folder)
+

This creates a separate CTest executable for every file ending in _spec.cpp in the given directory (recursive).

+

+Introduction

+

If you've ever used RSpec or Jasmine, chances are you'll be familiar with C++Spec's syntax. For example, this is a C++Spec version of the first snippet on RSpec's README.

+
#include "cppspec.hpp"
+
#include "order.hpp"
+
+
describe order_spec("Order", $ {
+
it("sums the prices of its line items", _ {
+
Order order;
+
+
order.add_entry(LineItem().set_item(Item()
+
.set_price(Money(1.11, Money::USD))
+
));
+
+
order.add_entry(LineItem().set_item(Item()
+
.set_price(Money(1.11, Money::USD))
+
.set_quantity(2)
+
));
+
+
expect(order.total()).to_equal(Money(5.55, Money::USD));
+
});
+
});
+
+
CPPSPEC_MAIN(order_spec);
+
The core header file for Cppspec.
+

+FAQ

+

+Attribution

+

Heavily inspired by RSpec and Jasmine.

+

+Authors

+

Copyright © 2014-2024 Katherine Whitlock

+

+License

+

The project is licensed under the MIT License.

+
+ +
+
+
+ + + + diff --git a/doxygen/inherit_graph_0.map b/doxygen/inherit_graph_0.map new file mode 100644 index 0000000..f51007d --- /dev/null +++ b/doxygen/inherit_graph_0.map @@ -0,0 +1,5 @@ + + + + + diff --git a/doxygen/inherit_graph_0.md5 b/doxygen/inherit_graph_0.md5 new file mode 100644 index 0000000..0850232 --- /dev/null +++ b/doxygen/inherit_graph_0.md5 @@ -0,0 +1 @@ +4a4d4f18d733f0653ee4b961342297fb \ No newline at end of file diff --git a/doxygen/inherit_graph_0.png b/doxygen/inherit_graph_0.png new file mode 100644 index 0000000..556f15f Binary files /dev/null and b/doxygen/inherit_graph_0.png differ diff --git a/doxygen/inherit_graph_1.map b/doxygen/inherit_graph_1.map new file mode 100644 index 0000000..935d732 --- /dev/null +++ b/doxygen/inherit_graph_1.map @@ -0,0 +1,5 @@ + + + + + diff --git a/doxygen/inherit_graph_1.md5 b/doxygen/inherit_graph_1.md5 new file mode 100644 index 0000000..728ebf7 --- /dev/null +++ b/doxygen/inherit_graph_1.md5 @@ -0,0 +1 @@ +f1f46d130a3d0115d32b50889f469a92 \ No newline at end of file diff --git a/doxygen/inherit_graph_1.png b/doxygen/inherit_graph_1.png new file mode 100644 index 0000000..fa194bc Binary files /dev/null and b/doxygen/inherit_graph_1.png differ diff --git a/doxygen/inherit_graph_10.map b/doxygen/inherit_graph_10.map new file mode 100644 index 0000000..0ee4720 --- /dev/null +++ b/doxygen/inherit_graph_10.map @@ -0,0 +1,3 @@ + + + diff --git a/doxygen/inherit_graph_10.md5 b/doxygen/inherit_graph_10.md5 new file mode 100644 index 0000000..a464ef6 --- /dev/null +++ b/doxygen/inherit_graph_10.md5 @@ -0,0 +1 @@ +dd36f57829b1299607235ffb1535a979 \ No newline at end of file diff --git a/doxygen/inherit_graph_10.png b/doxygen/inherit_graph_10.png new file mode 100644 index 0000000..c567ca0 Binary files /dev/null and b/doxygen/inherit_graph_10.png differ diff --git a/doxygen/inherit_graph_11.map b/doxygen/inherit_graph_11.map new file mode 100644 index 0000000..ed05069 --- /dev/null +++ b/doxygen/inherit_graph_11.map @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doxygen/inherit_graph_11.md5 b/doxygen/inherit_graph_11.md5 new file mode 100644 index 0000000..3bad58d --- /dev/null +++ b/doxygen/inherit_graph_11.md5 @@ -0,0 +1 @@ +50ba9000b7428175c336183db5fcb66d \ No newline at end of file diff --git a/doxygen/inherit_graph_11.png b/doxygen/inherit_graph_11.png new file mode 100644 index 0000000..859ce5a Binary files /dev/null and b/doxygen/inherit_graph_11.png differ diff --git a/doxygen/inherit_graph_12.map b/doxygen/inherit_graph_12.map new file mode 100644 index 0000000..0a9c81f --- /dev/null +++ b/doxygen/inherit_graph_12.map @@ -0,0 +1,3 @@ + + + diff --git a/doxygen/inherit_graph_12.md5 b/doxygen/inherit_graph_12.md5 new file mode 100644 index 0000000..f919c10 --- /dev/null +++ b/doxygen/inherit_graph_12.md5 @@ -0,0 +1 @@ +a583e37ecd94c06a1071c87ea0339380 \ No newline at end of file diff --git a/doxygen/inherit_graph_12.png b/doxygen/inherit_graph_12.png new file mode 100644 index 0000000..94cfe1f Binary files /dev/null and b/doxygen/inherit_graph_12.png differ diff --git a/doxygen/inherit_graph_13.map b/doxygen/inherit_graph_13.map new file mode 100644 index 0000000..7b77785 --- /dev/null +++ b/doxygen/inherit_graph_13.map @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/doxygen/inherit_graph_13.md5 b/doxygen/inherit_graph_13.md5 new file mode 100644 index 0000000..276c4c1 --- /dev/null +++ b/doxygen/inherit_graph_13.md5 @@ -0,0 +1 @@ +d6312543587ca0e765db0798b56e1246 \ No newline at end of file diff --git a/doxygen/inherit_graph_13.png b/doxygen/inherit_graph_13.png new file mode 100644 index 0000000..42b63a1 Binary files /dev/null and b/doxygen/inherit_graph_13.png differ diff --git a/doxygen/inherit_graph_14.map b/doxygen/inherit_graph_14.map new file mode 100644 index 0000000..9b3b44d --- /dev/null +++ b/doxygen/inherit_graph_14.map @@ -0,0 +1,3 @@ + + + diff --git a/doxygen/inherit_graph_14.md5 b/doxygen/inherit_graph_14.md5 new file mode 100644 index 0000000..fa1d939 --- /dev/null +++ b/doxygen/inherit_graph_14.md5 @@ -0,0 +1 @@ +882417d659d1bbb358593f8fcec8b26d \ No newline at end of file diff --git a/doxygen/inherit_graph_14.png b/doxygen/inherit_graph_14.png new file mode 100644 index 0000000..624893c Binary files /dev/null and b/doxygen/inherit_graph_14.png differ diff --git a/doxygen/inherit_graph_15.map b/doxygen/inherit_graph_15.map new file mode 100644 index 0000000..854fc8c --- /dev/null +++ b/doxygen/inherit_graph_15.map @@ -0,0 +1,3 @@ + + + diff --git a/doxygen/inherit_graph_15.md5 b/doxygen/inherit_graph_15.md5 new file mode 100644 index 0000000..0a93358 --- /dev/null +++ b/doxygen/inherit_graph_15.md5 @@ -0,0 +1 @@ +1530827471bb56db3090de6b4082d14e \ No newline at end of file diff --git a/doxygen/inherit_graph_15.png b/doxygen/inherit_graph_15.png new file mode 100644 index 0000000..c60d622 Binary files /dev/null and b/doxygen/inherit_graph_15.png differ diff --git a/doxygen/inherit_graph_2.map b/doxygen/inherit_graph_2.map new file mode 100644 index 0000000..0dfb78f --- /dev/null +++ b/doxygen/inherit_graph_2.map @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/doxygen/inherit_graph_2.md5 b/doxygen/inherit_graph_2.md5 new file mode 100644 index 0000000..c38694d --- /dev/null +++ b/doxygen/inherit_graph_2.md5 @@ -0,0 +1 @@ +075b7e5ed24be7070f8ad898db2485d5 \ No newline at end of file diff --git a/doxygen/inherit_graph_2.png b/doxygen/inherit_graph_2.png new file mode 100644 index 0000000..e8a62a8 Binary files /dev/null and b/doxygen/inherit_graph_2.png differ diff --git a/doxygen/inherit_graph_3.map b/doxygen/inherit_graph_3.map new file mode 100644 index 0000000..585fb35 --- /dev/null +++ b/doxygen/inherit_graph_3.map @@ -0,0 +1,3 @@ + + + diff --git a/doxygen/inherit_graph_3.md5 b/doxygen/inherit_graph_3.md5 new file mode 100644 index 0000000..d9dc29c --- /dev/null +++ b/doxygen/inherit_graph_3.md5 @@ -0,0 +1 @@ +c6f75ff58e79bf615bf241d4aeb103ee \ No newline at end of file diff --git a/doxygen/inherit_graph_3.png b/doxygen/inherit_graph_3.png new file mode 100644 index 0000000..5ae0989 Binary files /dev/null and b/doxygen/inherit_graph_3.png differ diff --git a/doxygen/inherit_graph_4.map b/doxygen/inherit_graph_4.map new file mode 100644 index 0000000..afad021 --- /dev/null +++ b/doxygen/inherit_graph_4.map @@ -0,0 +1,3 @@ + + + diff --git a/doxygen/inherit_graph_4.md5 b/doxygen/inherit_graph_4.md5 new file mode 100644 index 0000000..eb843f3 --- /dev/null +++ b/doxygen/inherit_graph_4.md5 @@ -0,0 +1 @@ +a72d78fdd35600230f3d0b8a12d4f17a \ No newline at end of file diff --git a/doxygen/inherit_graph_4.png b/doxygen/inherit_graph_4.png new file mode 100644 index 0000000..55f10bd Binary files /dev/null and b/doxygen/inherit_graph_4.png differ diff --git a/doxygen/inherit_graph_5.map b/doxygen/inherit_graph_5.map new file mode 100644 index 0000000..4839cf6 --- /dev/null +++ b/doxygen/inherit_graph_5.map @@ -0,0 +1,3 @@ + + + diff --git a/doxygen/inherit_graph_5.md5 b/doxygen/inherit_graph_5.md5 new file mode 100644 index 0000000..471d056 --- /dev/null +++ b/doxygen/inherit_graph_5.md5 @@ -0,0 +1 @@ +6f1e679866b7edf025dd3cd5326526e1 \ No newline at end of file diff --git a/doxygen/inherit_graph_5.png b/doxygen/inherit_graph_5.png new file mode 100644 index 0000000..4249146 Binary files /dev/null and b/doxygen/inherit_graph_5.png differ diff --git a/doxygen/inherit_graph_6.map b/doxygen/inherit_graph_6.map new file mode 100644 index 0000000..6093f88 --- /dev/null +++ b/doxygen/inherit_graph_6.map @@ -0,0 +1,3 @@ + + + diff --git a/doxygen/inherit_graph_6.md5 b/doxygen/inherit_graph_6.md5 new file mode 100644 index 0000000..3b459a8 --- /dev/null +++ b/doxygen/inherit_graph_6.md5 @@ -0,0 +1 @@ +f7298e92e375af0730df7f22f11e9073 \ No newline at end of file diff --git a/doxygen/inherit_graph_6.png b/doxygen/inherit_graph_6.png new file mode 100644 index 0000000..d45a36c Binary files /dev/null and b/doxygen/inherit_graph_6.png differ diff --git a/doxygen/inherit_graph_7.map b/doxygen/inherit_graph_7.map new file mode 100644 index 0000000..d7e1daf --- /dev/null +++ b/doxygen/inherit_graph_7.map @@ -0,0 +1,3 @@ + + + diff --git a/doxygen/inherit_graph_7.md5 b/doxygen/inherit_graph_7.md5 new file mode 100644 index 0000000..bd8fb7e --- /dev/null +++ b/doxygen/inherit_graph_7.md5 @@ -0,0 +1 @@ +c84166c957f30c53a9ed7278846bf1af \ No newline at end of file diff --git a/doxygen/inherit_graph_7.png b/doxygen/inherit_graph_7.png new file mode 100644 index 0000000..5f851c4 Binary files /dev/null and b/doxygen/inherit_graph_7.png differ diff --git a/doxygen/inherit_graph_8.map b/doxygen/inherit_graph_8.map new file mode 100644 index 0000000..a7cda9c --- /dev/null +++ b/doxygen/inherit_graph_8.map @@ -0,0 +1,3 @@ + + + diff --git a/doxygen/inherit_graph_8.md5 b/doxygen/inherit_graph_8.md5 new file mode 100644 index 0000000..5834e33 --- /dev/null +++ b/doxygen/inherit_graph_8.md5 @@ -0,0 +1 @@ +e9545286a99113a94595f20a4305e0f8 \ No newline at end of file diff --git a/doxygen/inherit_graph_8.png b/doxygen/inherit_graph_8.png new file mode 100644 index 0000000..23baab7 Binary files /dev/null and b/doxygen/inherit_graph_8.png differ diff --git a/doxygen/inherit_graph_9.map b/doxygen/inherit_graph_9.map new file mode 100644 index 0000000..50df32c --- /dev/null +++ b/doxygen/inherit_graph_9.map @@ -0,0 +1,3 @@ + + + diff --git a/doxygen/inherit_graph_9.md5 b/doxygen/inherit_graph_9.md5 new file mode 100644 index 0000000..88375a5 --- /dev/null +++ b/doxygen/inherit_graph_9.md5 @@ -0,0 +1 @@ +3d6f0abdffd2c7fe503783e8087e5639 \ No newline at end of file diff --git a/doxygen/inherit_graph_9.png b/doxygen/inherit_graph_9.png new file mode 100644 index 0000000..2325de4 Binary files /dev/null and b/doxygen/inherit_graph_9.png differ diff --git a/doxygen/inherits.html b/doxygen/inherits.html new file mode 100644 index 0000000..91ac5b0 --- /dev/null +++ b/doxygen/inherits.html @@ -0,0 +1,278 @@ + + + + + + + +C++Spec: Class Hierarchy + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Class Hierarchy
+
+
+ + + + + + + + + + + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + + + + + + + + + +
+ + + +
+ + + +
+
+
+
+ + + + diff --git a/doxygen/it_8hpp.html b/doxygen/it_8hpp.html new file mode 100644 index 0000000..3d11caf --- /dev/null +++ b/doxygen/it_8hpp.html @@ -0,0 +1,306 @@ + + + + + + + +C++Spec: include/it.hpp File Reference + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
it.hpp File Reference
+
+
+
#include <source_location>
+#include <string>
+#include <utility>
+#include <vector>
+#include "expectations/expectation.hpp"
+
+Include dependency graph for it.hpp:
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+This graph shows which files directly or indirectly include this file:
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

Go to the source code of this file.

+ + + + + + +

+Classes

class  CppSpec::ItD
 An it embedded in a Description. More...
class  CppSpec::ItCD< T >
 An it embedded in a ClassDescription. More...
+
+
+ +
+ + + + diff --git a/doxygen/it_8hpp.js b/doxygen/it_8hpp.js new file mode 100644 index 0000000..b686da5 --- /dev/null +++ b/doxygen/it_8hpp.js @@ -0,0 +1,5 @@ +var it_8hpp = +[ + [ "CppSpec::ItD", "classCppSpec_1_1ItD.html", "classCppSpec_1_1ItD" ], + [ "CppSpec::ItCD< T >", "classCppSpec_1_1ItCD.html", "classCppSpec_1_1ItCD" ] +]; \ No newline at end of file diff --git a/doxygen/it_8hpp__dep__incl.map b/doxygen/it_8hpp__dep__incl.map new file mode 100644 index 0000000..7650355 --- /dev/null +++ b/doxygen/it_8hpp__dep__incl.map @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doxygen/it_8hpp__dep__incl.md5 b/doxygen/it_8hpp__dep__incl.md5 new file mode 100644 index 0000000..3ebbad6 --- /dev/null +++ b/doxygen/it_8hpp__dep__incl.md5 @@ -0,0 +1 @@ +8291e653a419558ff7a4117a3c3ffde2 \ No newline at end of file diff --git a/doxygen/it_8hpp__dep__incl.png b/doxygen/it_8hpp__dep__incl.png new file mode 100644 index 0000000..994e3e6 Binary files /dev/null and b/doxygen/it_8hpp__dep__incl.png differ diff --git a/doxygen/it_8hpp__incl.map b/doxygen/it_8hpp__incl.map new file mode 100644 index 0000000..d24e79f --- /dev/null +++ b/doxygen/it_8hpp__incl.map @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doxygen/it_8hpp__incl.md5 b/doxygen/it_8hpp__incl.md5 new file mode 100644 index 0000000..08b95db --- /dev/null +++ b/doxygen/it_8hpp__incl.md5 @@ -0,0 +1 @@ +3f432734d9f6f39095cea305f6487b2a \ No newline at end of file diff --git a/doxygen/it_8hpp__incl.png b/doxygen/it_8hpp__incl.png new file mode 100644 index 0000000..18c2ce7 Binary files /dev/null and b/doxygen/it_8hpp__incl.png differ diff --git a/doxygen/it_8hpp_source.html b/doxygen/it_8hpp_source.html new file mode 100644 index 0000000..a29e8ad --- /dev/null +++ b/doxygen/it_8hpp_source.html @@ -0,0 +1,209 @@ + + + + + + + +C++Spec: include/it.hpp Source File + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
it.hpp
+
+
+Go to the documentation of this file.
1
+
2#pragma once
+
3
+
4#include <source_location>
+
5#include <string>
+
6#include <utility>
+
7#include <vector>
+
8
+
9#include "expectations/expectation.hpp"
+
10
+
11namespace CppSpec {
+
12
+
+
27class ItD : public ItBase {
+
28 public:
+
29 using Block = std::function<void(ItD&)>;
+
30
+
31 private:
+
33 const Block block;
+
34
+
35 public:
+
+
52 ItD(std::source_location location, const char* description, Block block)
+
53 : ItBase(location, description), block(std::move(block)) {}
+
+
54
+
72 ItD(std::source_location location, Block block) : ItBase(location), block(block) {}
+
73
+
74 // implemented in description.hpp
+
75 void run() override;
+
76};
+
+
77
+
88template <typename T>
+
+
89class ItCD : public ItBase {
+
90 public:
+
91 using Block = std::function<void(ItCD<T>&)>;
+
92
+
93 private:
+
95 const Block block;
+
96
+
97 public:
+ +
106
+
107 // This is only ever instantiated by ClassDescription<T>
+
108 ItCD(std::source_location location, T& subject, const char* description, Block block)
+
109 : ItBase(location, description), block(block), subject(subject) {}
+
110
+
111 ItCD(std::source_location location, T& subject, Block block) : ItBase(location), block(block), subject(subject) {}
+
112
+
113 ExpectationValue<T> is_expected(std::source_location location = std::source_location::current()) {
+
114 return {*this, subject, location};
+
115 }
+
116 void run() override;
+
117};
+
+
118
+
128template <Util::is_not_functional T>
+
+
129ExpectationValue<T> ItBase::expect(T value, std::source_location location) {
+
130 return {*this, value, location};
+
131}
+
+
132
+
133template <Util::is_functional T>
+
+
134ExpectationFunc<T> ItBase::expect(T block, std::source_location location) {
+
135 return {*this, block, location};
+
136}
+
+
137
+
138template <typename T>
+
+
139ExpectationValue<T> ItBase::expect(Let<T>& let, std::source_location location) {
+
140 return {*this, let.value(), location};
+
141}
+
+
142
+
150template <typename T>
+
+ +
152 std::source_location location) {
+
153 return {*this, init_list, location};
+
154}
+
+
155
+
+
156inline ExpectationValue<std::string> ItBase::expect(const char* str, std::source_location location) {
+
157 return {*this, std::string(str), location};
+
158}
+
+
159
+
160} // namespace CppSpec
+
Definition expectation.hpp:443
+
Definition expectation.hpp:402
+
Base class for it expressions.
Definition it_base.hpp:32
+
ExpectationValue< T > expect(T value, std::source_location location=std::source_location::current())
The expect object generator for objects and LiteralTypes.
Definition it.hpp:129
+
An it embedded in a ClassDescription.
Definition it.hpp:89
+
T & subject
A reference to the parent ClassDescription's subject.
Definition it.hpp:105
+
ItD(std::source_location location, const char *description, Block block)
The primary ItD constructor.
Definition it.hpp:52
+
ItD(std::source_location location, Block block)
The anonymous ItD constructor.
Definition it.hpp:72
+
+
+
+ + + + diff --git a/doxygen/it__base_8hpp.html b/doxygen/it__base_8hpp.html new file mode 100644 index 0000000..4faece9 --- /dev/null +++ b/doxygen/it__base_8hpp.html @@ -0,0 +1,271 @@ + + + + + + + +C++Spec: include/it_base.hpp File Reference + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
it_base.hpp File Reference
+
+
+
#include <algorithm>
+#include <functional>
+#include <numeric>
+#include <source_location>
+#include <string>
+#include <utility>
+#include "let.hpp"
+#include "runnable.hpp"
+#include "util.hpp"
+
+Include dependency graph for it_base.hpp:
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+This graph shows which files directly or indirectly include this file:
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

Go to the source code of this file.

+ + + + +

+Classes

class  CppSpec::ItBase
 Base class for it expressions. More...
+
+
+ +
+ + + + diff --git a/doxygen/it__base_8hpp.js b/doxygen/it__base_8hpp.js new file mode 100644 index 0000000..d8325ab --- /dev/null +++ b/doxygen/it__base_8hpp.js @@ -0,0 +1,4 @@ +var it__base_8hpp = +[ + [ "CppSpec::ItBase", "classCppSpec_1_1ItBase.html", "classCppSpec_1_1ItBase" ] +]; \ No newline at end of file diff --git a/doxygen/it__base_8hpp__dep__incl.map b/doxygen/it__base_8hpp__dep__incl.map new file mode 100644 index 0000000..3cebdc9 --- /dev/null +++ b/doxygen/it__base_8hpp__dep__incl.map @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doxygen/it__base_8hpp__dep__incl.md5 b/doxygen/it__base_8hpp__dep__incl.md5 new file mode 100644 index 0000000..700e7a7 --- /dev/null +++ b/doxygen/it__base_8hpp__dep__incl.md5 @@ -0,0 +1 @@ +13169f7fdc8907c6740b2848d7d1224f \ No newline at end of file diff --git a/doxygen/it__base_8hpp__dep__incl.png b/doxygen/it__base_8hpp__dep__incl.png new file mode 100644 index 0000000..cee6c66 Binary files /dev/null and b/doxygen/it__base_8hpp__dep__incl.png differ diff --git a/doxygen/it__base_8hpp__incl.map b/doxygen/it__base_8hpp__incl.map new file mode 100644 index 0000000..7fdfdcf --- /dev/null +++ b/doxygen/it__base_8hpp__incl.map @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doxygen/it__base_8hpp__incl.md5 b/doxygen/it__base_8hpp__incl.md5 new file mode 100644 index 0000000..0bc8c16 --- /dev/null +++ b/doxygen/it__base_8hpp__incl.md5 @@ -0,0 +1 @@ +12b531b0d214ad60994c3db673a4e2e0 \ No newline at end of file diff --git a/doxygen/it__base_8hpp__incl.png b/doxygen/it__base_8hpp__incl.png new file mode 100644 index 0000000..6d4ac53 Binary files /dev/null and b/doxygen/it__base_8hpp__incl.png differ diff --git a/doxygen/it__base_8hpp_source.html b/doxygen/it__base_8hpp_source.html new file mode 100644 index 0000000..ea21bef --- /dev/null +++ b/doxygen/it__base_8hpp_source.html @@ -0,0 +1,198 @@ + + + + + + + +C++Spec: include/it_base.hpp Source File + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
it_base.hpp
+
+
+Go to the documentation of this file.
1
+
2#pragma once
+
3
+
4#include <algorithm>
+
5#include <functional>
+
6#include <numeric>
+
7#include <source_location>
+
8#include <string>
+
9#include <utility>
+
10
+
11#include "let.hpp"
+
12#include "runnable.hpp"
+
13#include "util.hpp"
+
14
+
15namespace CppSpec {
+
16
+
17template <typename T>
+ +
19template <Util::is_functional T>
+
20class ExpectationFunc;
+
21
+
+
32class ItBase : public Runnable {
+
34 std::string description;
+
35 std::list<Result> results; // The results of the `it` statement
+
36
+
37 public:
+
38 ItBase() = delete; // Don't allow a default constructor
+
39
+
44 explicit ItBase(std::source_location location) noexcept : Runnable(location) {}
+
45
+
+
51 explicit ItBase(std::source_location location, const char* description) noexcept
+
52 : Runnable(location), description(description) {}
+
+
53
+
58 bool needs_description() noexcept { return description.empty(); }
+
59
+
64 [[nodiscard]] std::string get_description() const noexcept { return description; }
+
65
+
+
70 ItBase& set_description(std::string_view description) noexcept {
+
71 this->description = description;
+
72 return *this;
+
73 }
+
+
74
+
86 template <Util::is_not_functional T>
+
87 ExpectationValue<T> expect(T value, std::source_location location = std::source_location::current());
+
88
+
98 template <Util::is_functional T>
+
99 ExpectationFunc<T> expect(T block, std::source_location location = std::source_location::current());
+
100
+
110 template <typename T>
+
111 ExpectationValue<std::initializer_list<T>> expect(std::initializer_list<T> init_list,
+
112 std::source_location location = std::source_location::current());
+
113
+
123 template <typename T>
+
124 ExpectationValue<T> expect(Let<T>& let, std::source_location location = std::source_location::current());
+
125
+
132 ExpectationValue<std::string> expect(const char* string,
+
133 std::source_location location = std::source_location::current());
+
134
+
135 void add_result(const Result& result) { results.push_back(result); }
+
136 std::list<Result>& get_results() noexcept { return results; }
+
137 [[nodiscard]] const std::list<Result>& get_results() const noexcept { return results; }
+
138 void clear_results() noexcept { results.clear(); }
+
139
+
140 [[nodiscard]] Result get_result() const override {
+
141 auto default_result = Result::success(this->get_location());
+
142 if (results.empty()) {
+
143 return default_result;
+
144 }
+
145
+
146 return std::accumulate(results.begin(), results.end(), default_result, &Result::reduce);
+
147 }
+
148};
+
+
149
+
150} // namespace CppSpec
+
Definition expectation.hpp:443
+
Definition expectation.hpp:402
+
bool needs_description() noexcept
Get whether the object needs a description string.
Definition it_base.hpp:58
+
ItBase & set_description(std::string_view description) noexcept
Set the description string.
Definition it_base.hpp:70
+
std::string get_description() const noexcept
Get the description string for the it statement.
Definition it_base.hpp:64
+
ExpectationValue< T > expect(T value, std::source_location location=std::source_location::current())
The expect object generator for objects and LiteralTypes.
Definition it.hpp:129
+
ItBase(std::source_location location, const char *description) noexcept
Create an BaseIt with an explicit description.
Definition it_base.hpp:51
+
ItBase(std::source_location location) noexcept
Create an BaseIt without an explicit description.
Definition it_base.hpp:44
+
Definition result.hpp:13
+ +
Utility functions and classes.
+
+
+
+ + + + diff --git a/doxygen/jquery.js b/doxygen/jquery.js new file mode 100644 index 0000000..875ada7 --- /dev/null +++ b/doxygen/jquery.js @@ -0,0 +1,204 @@ +/*! jQuery v3.6.0 | (c) OpenJS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e} +var f="3.6.0",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp( +"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"�":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType +}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c +)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){ +return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll( +":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id") +)&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push( +"\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test( +a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null, +null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne +).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,D=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for( +var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",y.option=!!ce.lastChild;var ge={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n; +return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0, +r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var _t,zt=[],Ut=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=zt.pop()||S.expando+"_"+wt.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Ut.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ut.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Ut,"$1"+r):!1!==e.jsonp&&(e.url+=(Tt.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r] +,C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,zt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((_t=E.implementation.createHTMLDocument("").body).innerHTML="
",2===_t.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each( +function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r, +"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=Fe(y.pixelPosition,function(e,t){if(t)return t=We(e,n),Pe.test(t)?S(e).position()[n]+"px":t})} +),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each( +"blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0",options:{classes:{},disabled:!1,create:null},_createWidget:function(t,e){e=y(e||this.defaultElement||this)[0],this.element=y(e),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=y(),this.hoverable=y(),this.focusable=y(),this.classesElementLookup={},e!==this&&(y.data(e,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t +){t.target===e&&this.destroy()}}),this.document=y(e.style?e.ownerDocument:e.document||e),this.window=y(this.document[0].defaultView||this.document[0].parentWindow)),this.options=y.widget.extend({},this.options,this._getCreateOptions(),t),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:y.noop,_create:y.noop,_init:y.noop,destroy:function(){var i=this;this._destroy(),y.each(this.classesElementLookup,function(t,e){i._removeClass(e,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:y.noop,widget:function(){return this.element},option:function(t,e){var i,s,n,o=t;if(0===arguments.length)return y.widget.extend({},this.options);if("string"==typeof t)if(o={},t=(i=t.split(".")).shift(),i.length){for(s=o[t +]=y.widget.extend({},this.options[t]),n=0;n
"),i=e.children()[0];return y("body").append(e),t=i.offsetWidth,e.css("overflow","scroll"),t===(i=i.offsetWidth)&&(i=e[0].clientWidth),e.remove(),s=t-i}, +getScrollInfo:function(t){var e=t.isWindow||t.isDocument?"":t.element.css("overflow-x"),i=t.isWindow||t.isDocument?"":t.element.css("overflow-y"),e="scroll"===e||"auto"===e&&t.widthx(D(s),D(n))?o.important="horizontal":o.important="vertical",p.using.call(this,t,o)}),h.offset(y.extend(l,{using:t}))})},y.ui.position={fit:{left:function(t,e){var i=e.within, +s=i.isWindow?i.scrollLeft:i.offset.left,n=i.width,o=t.left-e.collisionPosition.marginLeft,h=s-o,a=o+e.collisionWidth-n-s;e.collisionWidth>n?0n?0=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),y.ui.plugin={add:function(t,e,i){var s,n=y.ui[t].prototype;for(s in i)n.plugins[s]=n.plugins[s]||[],n.plugins[s].push([e,i[s]])},call:function(t,e,i,s){var n,o=t.plugins[e];if(o&&(s||t.element[0].parentNode&&11!==t.element[0].parentNode.nodeType))for(n=0;n").css({overflow:"hidden",position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})), +this.element=this.element.parent().data("ui-resizable",this.element.resizable("instance")),this.elementIsWrapper=!0,t={marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom"),marginLeft:this.originalElement.css("marginLeft")},this.element.css(t),this.originalElement.css("margin",0),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css(t),this._proportionallyResize()),this._setupHandles(),e.autoHide&&y(this.element).on("mouseenter",function(){e.disabled||(i._removeClass("ui-resizable-autohide"),i._handles.show())}).on("mouseleave",function(){e.disabled||i.resizing||(i._addClass("ui-resizable-autohide"),i._handles.hide())}),this._mouseInit()},_destroy:function(){this._mouseDestroy(),this._addedHandles.remove();function t(t){y(t +).removeData("resizable").removeData("ui-resizable").off(".resizable")}var e;return this.elementIsWrapper&&(t(this.element),e=this.element,this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")}).insertAfter(e),e.remove()),this.originalElement.css("resize",this.originalResizeStyle),t(this.originalElement),this},_setOption:function(t,e){switch(this._super(t,e),t){case"handles":this._removeHandles(),this._setupHandles();break;case"aspectRatio":this._aspectRatio=!!e}},_setupHandles:function(){var t,e,i,s,n,o=this.options,h=this;if(this.handles=o.handles||(y(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this._handles=y(),this._addedHandles=y(),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),i=this.handles.split( +","),this.handles={},e=0;e"),this._addClass(n,"ui-resizable-handle "+s),n.css({zIndex:o.zIndex}),this.handles[t]=".ui-resizable-"+t,this.element.children(this.handles[t]).length||(this.element.append(n),this._addedHandles=this._addedHandles.add(n));this._renderAxis=function(t){var e,i,s;for(e in t=t||this.element,this.handles)this.handles[e].constructor===String?this.handles[e]=this.element.children(this.handles[e]).first().show():(this.handles[e].jquery||this.handles[e].nodeType)&&(this.handles[e]=y(this.handles[e]),this._on(this.handles[e],{mousedown:h._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(i=y(this.handles[e],this.element),s=/sw|ne|nw|se|n|s/.test(e)?i.outerHeight():i.outerWidth(),i=["padding",/ne|nw|n/.test(e)?"Top":/se|sw|s/.test(e)?"Bottom":/^e$/.test(e)?"Right":"Left"].join(""),t.css(i,s),this._proportionallyResize()),this._handles=this._handles.add( +this.handles[e])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(".ui-resizable-handle")),this._handles.disableSelection(),this._handles.on("mouseover",function(){h.resizing||(this.className&&(n=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),h.axis=n&&n[1]?n[1]:"se")}),o.autoHide&&(this._handles.hide(),this._addClass("ui-resizable-autohide"))},_removeHandles:function(){this._addedHandles.remove()},_mouseCapture:function(t){var e,i,s=!1;for(e in this.handles)(i=y(this.handles[e])[0])!==t.target&&!y.contains(i,t.target)||(s=!0);return!this.options.disabled&&s},_mouseStart:function(t){var e,i,s=this.options,n=this.element;return this.resizing=!0,this._renderProxy(),e=this._num(this.helper.css("left")),i=this._num(this.helper.css("top")),s.containment&&(e+=y(s.containment).scrollLeft()||0,i+=y(s.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:e,top:i},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{ +width:n.width(),height:n.height()},this.originalSize=this._helper?{width:n.outerWidth(),height:n.outerHeight()}:{width:n.width(),height:n.height()},this.sizeDiff={width:n.outerWidth()-n.width(),height:n.outerHeight()-n.height()},this.originalPosition={left:e,top:i},this.originalMousePosition={left:t.pageX,top:t.pageY},this.aspectRatio="number"==typeof s.aspectRatio?s.aspectRatio:this.originalSize.width/this.originalSize.height||1,s=y(".ui-resizable-"+this.axis).css("cursor"),y("body").css("cursor","auto"===s?this.axis+"-resize":s),this._addClass("ui-resizable-resizing"),this._propagate("start",t),!0},_mouseDrag:function(t){var e=this.originalMousePosition,i=this.axis,s=t.pageX-e.left||0,e=t.pageY-e.top||0,i=this._change[i];return this._updatePrevProperties(),i&&(e=i.apply(this,[t,s,e]),this._updateVirtualBoundaries(t.shiftKey),(this._aspectRatio||t.shiftKey)&&(e=this._updateRatio(e,t)),e=this._respectSize(e,t),this._updateCache(e),this._propagate("resize",t),e=this._applyChanges(), +!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),y.isEmptyObject(e)||(this._updatePrevProperties(),this._trigger("resize",t,this.ui()),this._applyChanges())),!1},_mouseStop:function(t){this.resizing=!1;var e,i,s,n=this.options,o=this;return this._helper&&(s=(e=(i=this._proportionallyResizeElements).length&&/textarea/i.test(i[0].nodeName))&&this._hasScroll(i[0],"left")?0:o.sizeDiff.height,i=e?0:o.sizeDiff.width,e={width:o.helper.width()-i,height:o.helper.height()-s},i=parseFloat(o.element.css("left"))+(o.position.left-o.originalPosition.left)||null,s=parseFloat(o.element.css("top"))+(o.position.top-o.originalPosition.top)||null,n.animate||this.element.css(y.extend(e,{top:s,left:i})),o.helper.height(o.size.height),o.helper.width(o.size.width),this._helper&&!n.animate&&this._proportionallyResize()),y("body").css("cursor","auto"),this._removeClass("ui-resizable-resizing"),this._propagate("stop",t),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){ +this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var t={};return this.position.top!==this.prevPosition.top&&(t.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&&(t.left=this.position.left+"px"),this.size.width!==this.prevSize.width&&(t.width=this.size.width+"px"),this.size.height!==this.prevSize.height&&(t.height=this.size.height+"px"),this.helper.css(t),t},_updateVirtualBoundaries:function(t){var e,i,s=this.options,n={minWidth:this._isNumber(s.minWidth)?s.minWidth:0,maxWidth:this._isNumber(s.maxWidth)?s.maxWidth:1/0,minHeight:this._isNumber(s.minHeight)?s.minHeight:0,maxHeight:this._isNumber(s.maxHeight)?s.maxHeight:1/0};(this._aspectRatio||t)&&(e=n.minHeight*this.aspectRatio,i=n.minWidth/this.aspectRatio,s=n.maxHeight*this.aspectRatio,t=n.maxWidth/this.aspectRatio,e>n.minWidth&&(n.minWidth=e),i>n.minHeight&&(n.minHeight=i),st.width,h=this._isNumber(t.height)&&e.minHeight&&e.minHeight>t.height,a=this.originalPosition.left+this.originalSize.width,r=this.originalPosition.top+this.originalSize.height +,l=/sw|nw|w/.test(i),i=/nw|ne|n/.test(i);return o&&(t.width=e.minWidth),h&&(t.height=e.minHeight),s&&(t.width=e.maxWidth),n&&(t.height=e.maxHeight),o&&l&&(t.left=a-e.minWidth),s&&l&&(t.left=a-e.maxWidth),h&&i&&(t.top=r-e.minHeight),n&&i&&(t.top=r-e.maxHeight),t.width||t.height||t.left||!t.top?t.width||t.height||t.top||!t.left||(t.left=null):t.top=null,t},_getPaddingPlusBorderDimensions:function(t){for(var e=0,i=[],s=[t.css("borderTopWidth"),t.css("borderRightWidth"),t.css("borderBottomWidth"),t.css("borderLeftWidth")],n=[t.css("paddingTop"),t.css("paddingRight"),t.css("paddingBottom"),t.css("paddingLeft")];e<4;e++)i[e]=parseFloat(s[e])||0,i[e]+=parseFloat(n[e])||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var t,e=0,i=this.helper||this.element;e").css({overflow:"hidden"}),this._addClass(this.helper,this._helper),this.helper.css({width:this.element.outerWidth(),height:this.element.outerHeight(),position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++e.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element},_change:{e:function(t,e){return{width:this.originalSize.width+e}},w:function(t,e){var i=this.originalSize;return{left:this.originalPosition.left+e,width:i.width-e}},n:function(t,e,i){var s=this.originalSize;return{top:this.originalPosition.top+i,height:s.height-i}},s:function(t,e,i){return{height:this.originalSize.height+i}},se:function(t,e,i){return y.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[t,e,i]))},sw:function(t,e, +i){return y.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[t,e,i]))},ne:function(t,e,i){return y.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[t,e,i]))},nw:function(t,e,i){return y.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[t,e,i]))}},_propagate:function(t,e){y.ui.plugin.call(this,t,[e,this.ui()]),"resize"!==t&&this._trigger(t,e,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),y.ui.plugin.add("resizable","animate",{stop:function(e){var i=y(this).resizable("instance"),t=i.options,s=i._proportionallyResizeElements,n=s.length&&/textarea/i.test(s[0].nodeName),o=n&&i._hasScroll(s[0],"left")?0:i.sizeDiff.height,h=n?0:i.sizeDiff.width,n={width:i.size.width-h,height:i.size.height-o},h=parseFloat(i.element.css("left"))+(i.position.left-i.originalPosition.left +)||null,o=parseFloat(i.element.css("top"))+(i.position.top-i.originalPosition.top)||null;i.element.animate(y.extend(n,o&&h?{top:o,left:h}:{}),{duration:t.animateDuration,easing:t.animateEasing,step:function(){var t={width:parseFloat(i.element.css("width")),height:parseFloat(i.element.css("height")),top:parseFloat(i.element.css("top")),left:parseFloat(i.element.css("left"))};s&&s.length&&y(s[0]).css({width:t.width,height:t.height}),i._updateCache(t),i._propagate("resize",e)}})}}),y.ui.plugin.add("resizable","containment",{start:function(){var i,s,n=y(this).resizable("instance"),t=n.options,e=n.element,o=t.containment,h=o instanceof y?o.get(0):/parent/.test(o)?e.parent().get(0):o;h&&(n.containerElement=y(h),/document/.test(o)||o===document?(n.containerOffset={left:0,top:0},n.containerPosition={left:0,top:0},n.parentData={element:y(document),left:0,top:0,width:y(document).width(),height:y(document).height()||document.body.parentNode.scrollHeight}):(i=y(h),s=[],y(["Top","Right","Left","Bottom"]).each(function(t,e +){s[t]=n._num(i.css("padding"+e))}),n.containerOffset=i.offset(),n.containerPosition=i.position(),n.containerSize={height:i.innerHeight()-s[3],width:i.innerWidth()-s[1]},t=n.containerOffset,e=n.containerSize.height,o=n.containerSize.width,o=n._hasScroll(h,"left")?h.scrollWidth:o,e=n._hasScroll(h)?h.scrollHeight:e,n.parentData={element:h,left:t.left,top:t.top,width:o,height:e}))},resize:function(t){var e=y(this).resizable("instance"),i=e.options,s=e.containerOffset,n=e.position,o=e._aspectRatio||t.shiftKey,h={top:0,left:0},a=e.containerElement,t=!0;a[0]!==document&&/static/.test(a.css("position"))&&(h=s),n.left<(e._helper?s.left:0)&&(e.size.width=e.size.width+(e._helper?e.position.left-s.left:e.position.left-h.left),o&&(e.size.height=e.size.width/e.aspectRatio,t=!1),e.position.left=i.helper?s.left:0),n.top<(e._helper?s.top:0)&&(e.size.height=e.size.height+(e._helper?e.position.top-s.top:e.position.top),o&&(e.size.width=e.size.height*e.aspectRatio,t=!1),e.position.top=e._helper?s.top:0), +i=e.containerElement.get(0)===e.element.parent().get(0),n=/relative|absolute/.test(e.containerElement.css("position")),i&&n?(e.offset.left=e.parentData.left+e.position.left,e.offset.top=e.parentData.top+e.position.top):(e.offset.left=e.element.offset().left,e.offset.top=e.element.offset().top),n=Math.abs(e.sizeDiff.width+(e._helper?e.offset.left-h.left:e.offset.left-s.left)),s=Math.abs(e.sizeDiff.height+(e._helper?e.offset.top-h.top:e.offset.top-s.top)),n+e.size.width>=e.parentData.width&&(e.size.width=e.parentData.width-n,o&&(e.size.height=e.size.width/e.aspectRatio,t=!1)),s+e.size.height>=e.parentData.height&&(e.size.height=e.parentData.height-s,o&&(e.size.width=e.size.height*e.aspectRatio,t=!1)),t||(e.position.left=e.prevPosition.left,e.position.top=e.prevPosition.top,e.size.width=e.prevSize.width,e.size.height=e.prevSize.height)},stop:function(){var t=y(this).resizable("instance"),e=t.options,i=t.containerOffset,s=t.containerPosition,n=t.containerElement,o=y(t.helper),h=o.offset(),a=o.outerWidth( +)-t.sizeDiff.width,o=o.outerHeight()-t.sizeDiff.height;t._helper&&!e.animate&&/relative/.test(n.css("position"))&&y(this).css({left:h.left-s.left-i.left,width:a,height:o}),t._helper&&!e.animate&&/static/.test(n.css("position"))&&y(this).css({left:h.left-s.left-i.left,width:a,height:o})}}),y.ui.plugin.add("resizable","alsoResize",{start:function(){var t=y(this).resizable("instance").options;y(t.alsoResize).each(function(){var t=y(this);t.data("ui-resizable-alsoresize",{width:parseFloat(t.width()),height:parseFloat(t.height()),left:parseFloat(t.css("left")),top:parseFloat(t.css("top"))})})},resize:function(t,i){var e=y(this).resizable("instance"),s=e.options,n=e.originalSize,o=e.originalPosition,h={height:e.size.height-n.height||0,width:e.size.width-n.width||0,top:e.position.top-o.top||0,left:e.position.left-o.left||0};y(s.alsoResize).each(function(){var t=y(this),s=y(this).data("ui-resizable-alsoresize"),n={},e=t.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];y.each(e, +function(t,e){var i=(s[e]||0)+(h[e]||0);i&&0<=i&&(n[e]=i||null)}),t.css(n)})},stop:function(){y(this).removeData("ui-resizable-alsoresize")}}),y.ui.plugin.add("resizable","ghost",{start:function(){var t=y(this).resizable("instance"),e=t.size;t.ghost=t.originalElement.clone(),t.ghost.css({opacity:.25,display:"block",position:"relative",height:e.height,width:e.width,margin:0,left:0,top:0}),t._addClass(t.ghost,"ui-resizable-ghost"),!1!==y.uiBackCompat&&"string"==typeof t.options.ghost&&t.ghost.addClass(this.options.ghost),t.ghost.appendTo(t.helper)},resize:function(){var t=y(this).resizable("instance");t.ghost&&t.ghost.css({position:"relative",height:t.size.height,width:t.size.width})},stop:function(){var t=y(this).resizable("instance");t.ghost&&t.helper&&t.helper.get(0).removeChild(t.ghost.get(0))}}),y.ui.plugin.add("resizable","grid",{resize:function(){var t,e=y(this).resizable("instance"),i=e.options,s=e.size,n=e.originalSize,o=e.originalPosition,h=e.axis,a="number"==typeof i.grid?[i.grid,i.grid]:i.grid,r=a[0 +]||1,l=a[1]||1,u=Math.round((s.width-n.width)/r)*r,p=Math.round((s.height-n.height)/l)*l,d=n.width+u,c=n.height+p,f=i.maxWidth&&i.maxWidthd,s=i.minHeight&&i.minHeight>c;i.grid=a,m&&(d+=r),s&&(c+=l),f&&(d-=r),g&&(c-=l),/^(se|s|e)$/.test(h)?(e.size.width=d,e.size.height=c):/^(ne)$/.test(h)?(e.size.width=d,e.size.height=c,e.position.top=o.top-p):/^(sw)$/.test(h)?(e.size.width=d,e.size.height=c,e.position.left=o.left-u):((c-l<=0||d-r<=0)&&(t=e._getPaddingPlusBorderDimensions(this)),0=f[g]?0:Math.min(f[g],n));!a&&1-1){ +targetElements.on(evt+EVENT_NAMESPACE,function elementToggle(event){$.powerTip.toggle(this,event)})}else{targetElements.on(evt+EVENT_NAMESPACE,function elementOpen(event){$.powerTip.show(this,event)})}});$.each(options.closeEvents,function(idx,evt){if($.inArray(evt,options.openEvents)<0){targetElements.on(evt+EVENT_NAMESPACE,function elementClose(event){$.powerTip.hide(this,!isMouseEvent(event))})}});targetElements.on("keydown"+EVENT_NAMESPACE,function elementKeyDown(event){if(event.keyCode===27){$.powerTip.hide(this,true)}})}return targetElements};$.fn.powerTip.defaults={fadeInTime:200,fadeOutTime:100,followMouse:false,popupId:"powerTip",popupClass:null,intentSensitivity:7,intentPollInterval:100,closeDelay:100,placement:"n",smartPlacement:false,offset:10,mouseOnToPopup:false,manual:false,openEvents:["mouseenter","focus"],closeEvents:["mouseleave","blur"]};$.fn.powerTip.smartPlacementLists={n:["n","ne","nw","s"],e:["e","ne","se","w","nw","sw","n","s","e"],s:["s","se","sw","n"],w:["w","nw","sw","e","ne","se", +"n","s","w"],nw:["nw","w","sw","n","s","se","nw"],ne:["ne","e","se","n","s","sw","ne"],sw:["sw","w","nw","s","n","ne","sw"],se:["se","e","ne","s","n","nw","se"],"nw-alt":["nw-alt","n","ne-alt","sw-alt","s","se-alt","w","e"],"ne-alt":["ne-alt","n","nw-alt","se-alt","s","sw-alt","e","w"],"sw-alt":["sw-alt","s","se-alt","nw-alt","n","ne-alt","w","e"],"se-alt":["se-alt","s","sw-alt","ne-alt","n","nw-alt","e","w"]};$.powerTip={show:function apiShowTip(element,event){if(isMouseEvent(event)){trackMouse(event);session.previousX=event.pageX;session.previousY=event.pageY;$(element).data(DATA_DISPLAYCONTROLLER).show()}else{$(element).first().data(DATA_DISPLAYCONTROLLER).show(true,true)}return element},reposition:function apiResetPosition(element){$(element).first().data(DATA_DISPLAYCONTROLLER).resetPosition();return element},hide:function apiCloseTip(element,immediate){var displayController;immediate=element?immediate:true;if(element){displayController=$(element).first().data(DATA_DISPLAYCONTROLLER)}else if( +session.activeHover){displayController=session.activeHover.data(DATA_DISPLAYCONTROLLER)}if(displayController){displayController.hide(immediate)}return element},toggle:function apiToggle(element,event){if(session.activeHover&&session.activeHover.is(element)){$.powerTip.hide(element,!isMouseEvent(event))}else{$.powerTip.show(element,event)}return element}};$.powerTip.showTip=$.powerTip.show;$.powerTip.closeTip=$.powerTip.hide;function CSSCoordinates(){var me=this;me.top="auto";me.left="auto";me.right="auto";me.bottom="auto";me.set=function(property,value){if($.isNumeric(value)){me[property]=Math.round(value)}}}function DisplayController(element,options,tipController){var hoverTimer=null,myCloseDelay=null;function openTooltip(immediate,forceOpen){cancelTimer();if(!element.data(DATA_HASACTIVEHOVER)){if(!immediate){session.tipOpenImminent=true;hoverTimer=setTimeout(function intentDelay(){hoverTimer=null;checkForIntent()},options.intentPollInterval)}else{if(forceOpen){element.data(DATA_FORCEDOPEN,true)} +closeAnyDelayed();tipController.showTip(element)}}else{cancelClose()}}function closeTooltip(disableDelay){if(myCloseDelay){myCloseDelay=session.closeDelayTimeout=clearTimeout(myCloseDelay);session.delayInProgress=false}cancelTimer();session.tipOpenImminent=false;if(element.data(DATA_HASACTIVEHOVER)){element.data(DATA_FORCEDOPEN,false);if(!disableDelay){session.delayInProgress=true;session.closeDelayTimeout=setTimeout(function closeDelay(){session.closeDelayTimeout=null;tipController.hideTip(element);session.delayInProgress=false;myCloseDelay=null},options.closeDelay);myCloseDelay=session.closeDelayTimeout}else{tipController.hideTip(element)}}}function checkForIntent(){var xDifference=Math.abs(session.previousX-session.currentX),yDifference=Math.abs(session.previousY-session.currentY),totalDifference=xDifference+yDifference;if(totalDifference",{id:options.popupId});if($body.length===0){$body=$("body")}$body.append(tipElement);session.tooltips=session.tooltips?session.tooltips.add(tipElement):tipElement}if(options.followMouse){if(!tipElement.data(DATA_HASMOUSEMOVE)){$document.on("mousemove"+EVENT_NAMESPACE,positionTipOnCursor);$window.on("scroll"+EVENT_NAMESPACE,positionTipOnCursor);tipElement.data(DATA_HASMOUSEMOVE,true)}}function beginShowTip(element){element.data(DATA_HASACTIVEHOVER,true);tipElement.queue(function queueTipInit(next){showTip(element);next()})}function showTip(element){var tipContent;if(!element.data(DATA_HASACTIVEHOVER)){return}if( +session.isTipOpen){if(!session.isClosing){hideTip(session.activeHover)}tipElement.delay(100).queue(function queueTipAgain(next){showTip(element);next()});return}element.trigger("powerTipPreRender");tipContent=getTooltipContent(element);if(tipContent){tipElement.empty().append(tipContent)}else{return}element.trigger("powerTipRender");session.activeHover=element;session.isTipOpen=true;tipElement.data(DATA_MOUSEONTOTIP,options.mouseOnToPopup);tipElement.addClass(options.popupClass);if(!options.followMouse||element.data(DATA_FORCEDOPEN)){positionTipOnElement(element);session.isFixedTipOpen=true}else{positionTipOnCursor()}if(!element.data(DATA_FORCEDOPEN)&&!options.followMouse){$document.on("click"+EVENT_NAMESPACE,function documentClick(event){var target=event.target;if(target!==element[0]){if(options.mouseOnToPopup){if(target!==tipElement[0]&&!$.contains(tipElement[0],target)){$.powerTip.hide()}}else{$.powerTip.hide()}}})}if(options.mouseOnToPopup&&!options.manual){tipElement.on("mouseenter"+EVENT_NAMESPACE, +function tipMouseEnter(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).cancel()}});tipElement.on("mouseleave"+EVENT_NAMESPACE,function tipMouseLeave(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).hide()}})}tipElement.fadeIn(options.fadeInTime,function fadeInCallback(){if(!session.desyncTimeout){session.desyncTimeout=setInterval(closeDesyncedTip,500)}element.trigger("powerTipOpen")})}function hideTip(element){session.isClosing=true;session.isTipOpen=false;session.desyncTimeout=clearInterval(session.desyncTimeout);element.data(DATA_HASACTIVEHOVER,false);element.data(DATA_FORCEDOPEN,false);$document.off("click"+EVENT_NAMESPACE);tipElement.off(EVENT_NAMESPACE);tipElement.fadeOut(options.fadeOutTime,function fadeOutCallback(){var coords=new CSSCoordinates;session.activeHover=null;session.isClosing=false;session.isFixedTipOpen=false;tipElement.removeClass();coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset); +tipElement.css(coords);element.trigger("powerTipClose")})}function positionTipOnCursor(){var tipWidth,tipHeight,coords,collisions,collisionCount;if(!session.isFixedTipOpen&&(session.isTipOpen||session.tipOpenImminent&&tipElement.data(DATA_HASMOUSEMOVE))){tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=new CSSCoordinates;coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);collisions=getViewportCollisions(coords,tipWidth,tipHeight);if(collisions!==Collision.none){collisionCount=countFlags(collisions);if(collisionCount===1){if(collisions===Collision.right){coords.set("left",session.scrollLeft+session.windowWidth-tipWidth)}else if(collisions===Collision.bottom){coords.set("top",session.scrollTop+session.windowHeight-tipHeight)}}else{coords.set("left",session.currentX-tipWidth-options.offset);coords.set("top",session.currentY-tipHeight-options.offset)}}tipElement.css(coords)}}function positionTipOnElement(element){var priorityList, +finalPlacement;if(options.smartPlacement||options.followMouse&&element.data(DATA_FORCEDOPEN)){priorityList=$.fn.powerTip.smartPlacementLists[options.placement];$.each(priorityList,function(idx,pos){var collisions=getViewportCollisions(placeTooltip(element,pos),tipElement.outerWidth(),tipElement.outerHeight());finalPlacement=pos;return collisions!==Collision.none})}else{placeTooltip(element,options.placement);finalPlacement=options.placement}tipElement.removeClass("w nw sw e ne se n s w se-alt sw-alt ne-alt nw-alt");tipElement.addClass(finalPlacement)}function placeTooltip(element,placement){var iterationCount=0,tipWidth,tipHeight,coords=new CSSCoordinates;coords.set("top",0);coords.set("left",0);tipElement.css(coords);do{tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=placementCalculator.compute(element,placement,tipWidth,tipHeight,options.offset);tipElement.css(coords)}while(++iterationCount<=5&&(tipWidth!==tipElement.outerWidth()||tipHeight!==tipElement.outerHeight())); +return coords}function closeDesyncedTip(){var isDesynced=false,hasDesyncableCloseEvent=$.grep(["mouseleave","mouseout","blur","focusout"],function(eventType){return $.inArray(eventType,options.closeEvents)!==-1}).length>0;if(session.isTipOpen&&!session.isClosing&&!session.delayInProgress&&hasDesyncableCloseEvent){if(session.activeHover.data(DATA_HASACTIVEHOVER)===false||session.activeHover.is(":disabled")){isDesynced=true}else if(!isMouseOver(session.activeHover)&&!session.activeHover.is(":focus")&&!session.activeHover.data(DATA_FORCEDOPEN)){if(tipElement.data(DATA_MOUSEONTOTIP)){if(!isMouseOver(tipElement)){isDesynced=true}}else{isDesynced=true}}if(isDesynced){hideTip(session.activeHover)}}}this.showTip=beginShowTip;this.hideTip=hideTip;this.resetPosition=positionTipOnElement}function isSvgElement(element){return Boolean(window.SVGElement&&element[0]instanceof SVGElement)}function isMouseEvent(event){return Boolean(event&&$.inArray(event.type,MOUSE_EVENTS)>-1&&typeof event.pageX==="number")} +function initTracking(){if(!session.mouseTrackingActive){session.mouseTrackingActive=true;getViewportDimensions();$(getViewportDimensions);$document.on("mousemove"+EVENT_NAMESPACE,trackMouse);$window.on("resize"+EVENT_NAMESPACE,trackResize);$window.on("scroll"+EVENT_NAMESPACE,trackScroll)}}function getViewportDimensions(){session.scrollLeft=$window.scrollLeft();session.scrollTop=$window.scrollTop();session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackResize(){session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackScroll(){var x=$window.scrollLeft(),y=$window.scrollTop();if(x!==session.scrollLeft){session.currentX+=x-session.scrollLeft;session.scrollLeft=x}if(y!==session.scrollTop){session.currentY+=y-session.scrollTop;session.scrollTop=y}}function trackMouse(event){session.currentX=event.pageX;session.currentY=event.pageY}function isMouseOver(element){var elementPosition=element.offset(),elementBox=element[0].getBoundingClientRect(), +elementWidth=elementBox.right-elementBox.left,elementHeight=elementBox.bottom-elementBox.top;return session.currentX>=elementPosition.left&&session.currentX<=elementPosition.left+elementWidth&&session.currentY>=elementPosition.top&&session.currentY<=elementPosition.top+elementHeight}function getTooltipContent(element){var tipText=element.data(DATA_POWERTIP),tipObject=element.data(DATA_POWERTIPJQ),tipTarget=element.data(DATA_POWERTIPTARGET),targetElement,content;if(tipText){if($.isFunction(tipText)){tipText=tipText.call(element[0])}content=tipText}else if(tipObject){if($.isFunction(tipObject)){tipObject=tipObject.call(element[0])}if(tipObject.length>0){content=tipObject.clone(true,true)}}else if(tipTarget){targetElement=$("#"+tipTarget);if(targetElement.length>0){content=targetElement.html()}}return content}function getViewportCollisions(coords,elementWidth,elementHeight){var viewportTop=session.scrollTop,viewportLeft=session.scrollLeft,viewportBottom=viewportTop+session.windowHeight, +viewportRight=viewportLeft+session.windowWidth,collisions=Collision.none;if(coords.topviewportBottom||Math.abs(coords.bottom-session.windowHeight)>viewportBottom){collisions|=Collision.bottom}if(coords.leftviewportRight){collisions|=Collision.left}if(coords.left+elementWidth>viewportRight||coords.right1)){a.preventDefault();var c=a.originalEvent.changedTouches[0],d=document.createEvent("MouseEvents");d.initMouseEvent(b,!0,!0,window,1,c.screenX,c.screenY,c.clientX,c.clientY,!1,!1,!1,!1,0,null),a.target.dispatchEvent(d)}}if(a.support.touch="ontouchend"in document,a.support.touch){var e,b=a.ui.mouse.prototype,c=b._mouseInit,d=b._mouseDestroy;b._touchStart=function(a){var b=this;!e&&b._mouseCapture(a.originalEvent.changedTouches[0])&&(e=!0,b._touchMoved=!1,f(a,"mouseover"),f(a,"mousemove"),f(a,"mousedown"))},b._touchMove=function(a){e&&(this._touchMoved=!0,f(a,"mousemove"))},b._touchEnd=function(a){e&&(f(a,"mouseup"),f(a,"mouseout"),this._touchMoved||f(a,"click"),e=!1)},b._mouseInit=function(){var b=this;b.element.bind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),c.call(b)},b._mouseDestroy=function(){var b=this;b.element.unbind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b, +"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),d.call(b)}}}(jQuery); +/*! SmartMenus jQuery Plugin - v1.1.0 - September 17, 2017 + * http://www.smartmenus.org/ + * Copyright Vasil Dinkov, Vadikom Web Ltd. http://vadikom.com; Licensed MIT */(function(t){"function"==typeof define&&define.amd?define(["jquery"],t):"object"==typeof module&&"object"==typeof module.exports?module.exports=t(require("jquery")):t(jQuery)})(function($){function initMouseDetection(t){var e=".smartmenus_mouse";if(mouseDetectionEnabled||t)mouseDetectionEnabled&&t&&($(document).off(e),mouseDetectionEnabled=!1);else{var i=!0,s=null,o={mousemove:function(t){var e={x:t.pageX,y:t.pageY,timeStamp:(new Date).getTime()};if(s){var o=Math.abs(s.x-e.x),a=Math.abs(s.y-e.y);if((o>0||a>0)&&2>=o&&2>=a&&300>=e.timeStamp-s.timeStamp&&(mouse=!0,i)){var n=$(t.target).closest("a");n.is("a")&&$.each(menuTrees,function(){return $.contains(this.$root[0],n[0])?(this.itemEnter({currentTarget:n[0]}),!1):void 0}),i=!1}}s=e}};o[touchEvents?"touchstart":"pointerover pointermove pointerout MSPointerOver MSPointerMove MSPointerOut"]=function(t){isTouchEvent(t.originalEvent)&&(mouse=!1)},$(document).on(getEventsNS(o,e)), +mouseDetectionEnabled=!0}}function isTouchEvent(t){return!/^(4|mouse)$/.test(t.pointerType)}function getEventsNS(t,e){e||(e="");var i={};for(var s in t)i[s.split(" ").join(e+" ")+e]=t[s];return i}var menuTrees=[],mouse=!1,touchEvents="ontouchstart"in window,mouseDetectionEnabled=!1,requestAnimationFrame=window.requestAnimationFrame||function(t){return setTimeout(t,1e3/60)},cancelAnimationFrame=window.cancelAnimationFrame||function(t){clearTimeout(t)},canAnimate=!!$.fn.animate;return $.SmartMenus=function(t,e){this.$root=$(t),this.opts=e,this.rootId="",this.accessIdPrefix="",this.$subArrow=null,this.activatedItems=[],this.visibleSubMenus=[],this.showTimeout=0,this.hideTimeout=0,this.scrollTimeout=0,this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.idInc=0,this.$firstLink=null,this.$firstSub=null,this.disabled=!1,this.$disableOverlay=null,this.$touchScrollingSub=null,this.cssTransforms3d="perspective"in t.style||"webkitPerspective"in t.style,this.wasCollapsible=!1,this.init()},$.extend( +$.SmartMenus,{hideAll:function(){$.each(menuTrees,function(){this.menuHideAll()})},destroy:function(){for(;menuTrees.length;)menuTrees[0].destroy();initMouseDetection(!0)},prototype:{init:function(t){var e=this;if(!t){menuTrees.push(this),this.rootId=((new Date).getTime()+Math.random()+"").replace(/\D/g,""),this.accessIdPrefix="sm-"+this.rootId+"-",this.$root.hasClass("sm-rtl")&&(this.opts.rightToLeftSubMenus=!0);var i=".smartmenus";this.$root.data("smartmenus",this).attr("data-smartmenus-id",this.rootId).dataSM("level",1).on(getEventsNS({"mouseover focusin":$.proxy(this.rootOver,this),"mouseout focusout":$.proxy(this.rootOut,this),keydown:$.proxy(this.rootKeyDown,this)},i)).on(getEventsNS({mouseenter:$.proxy(this.itemEnter,this),mouseleave:$.proxy(this.itemLeave,this),mousedown:$.proxy(this.itemDown,this),focus:$.proxy(this.itemFocus,this),blur:$.proxy(this.itemBlur,this),click:$.proxy(this.itemClick,this)},i),"a"),i+=this.rootId,this.opts.hideOnClick&&$(document).on(getEventsNS({touchstart:$.proxy( +this.docTouchStart,this),touchmove:$.proxy(this.docTouchMove,this),touchend:$.proxy(this.docTouchEnd,this),click:$.proxy(this.docClick,this)},i)),$(window).on(getEventsNS({"resize orientationchange":$.proxy(this.winResize,this)},i)),this.opts.subIndicators&&(this.$subArrow=$("").addClass("sub-arrow"),this.opts.subIndicatorsText&&this.$subArrow.html(this.opts.subIndicatorsText)),initMouseDetection()}if(this.$firstSub=this.$root.find("ul").each(function(){e.menuInit($(this))}).eq(0),this.$firstLink=this.$root.find("a").eq(0),this.opts.markCurrentItem){var s=/(index|default)\.[^#\?\/]*/i,o=/#.*/,a=window.location.href.replace(s,""),n=a.replace(o,"");this.$root.find("a").each(function(){var t=this.href.replace(s,""),i=$(this);(t==a||t==n)&&(i.addClass("current"),e.opts.markCurrentTree&&i.parentsUntil("[data-smartmenus-id]","ul").each(function(){$(this).dataSM("parent-a").addClass("current")}))})}this.wasCollapsible=this.isCollapsible()},destroy:function(t){if(!t){var e=".smartmenus";this.$root.removeData( +"smartmenus").removeAttr("data-smartmenus-id").removeDataSM("level").off(e),e+=this.rootId,$(document).off(e),$(window).off(e),this.opts.subIndicators&&(this.$subArrow=null)}this.menuHideAll();var i=this;this.$root.find("ul").each(function(){var t=$(this);t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.dataSM("shown-before")&&((i.opts.subMenusMinWidth||i.opts.subMenusMaxWidth)&&t.css({width:"",minWidth:"",maxWidth:""}).removeClass("sm-nowrap"),t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.css({zIndex:"",top:"",left:"",marginLeft:"",marginTop:"",display:""})),0==(t.attr("id")||"").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeDataSM("in-mega").removeDataSM("shown-before").removeDataSM("scroll-arrows").removeDataSM("parent-a").removeDataSM("level").removeDataSM("beforefirstshowfired").removeAttr("role").removeAttr("aria-hidden").removeAttr("aria-labelledby").removeAttr("aria-expanded"),this.$root.find("a.has-submenu").each(function(){var t=$(this);0==t.attr("id" +).indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeClass("has-submenu").removeDataSM("sub").removeAttr("aria-haspopup").removeAttr("aria-controls").removeAttr("aria-expanded").closest("li").removeDataSM("sub"),this.opts.subIndicators&&this.$root.find("span.sub-arrow").remove(),this.opts.markCurrentItem&&this.$root.find("a.current").removeClass("current"),t||(this.$root=null,this.$firstLink=null,this.$firstSub=null,this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),menuTrees.splice($.inArray(this,menuTrees),1))},disable:function(t){if(!this.disabled){if(this.menuHideAll(),!t&&!this.opts.isPopup&&this.$root.is(":visible")){var e=this.$root.offset();this.$disableOverlay=$('
').css({position:"absolute",top:e.top,left:e.left,width:this.$root.outerWidth(),height:this.$root.outerHeight(),zIndex:this.getStartZIndex(!0),opacity:0}).appendTo(document.body)}this.disabled=!0}},docClick:function(t){return this.$touchScrollingSub?( +this.$touchScrollingSub=null,void 0):((this.visibleSubMenus.length&&!$.contains(this.$root[0],t.target)||$(t.target).closest("a").length)&&this.menuHideAll(),void 0)},docTouchEnd:function(){if(this.lastTouch){if(!(!this.visibleSubMenus.length||void 0!==this.lastTouch.x2&&this.lastTouch.x1!=this.lastTouch.x2||void 0!==this.lastTouch.y2&&this.lastTouch.y1!=this.lastTouch.y2||this.lastTouch.target&&$.contains(this.$root[0],this.lastTouch.target))){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var t=this;this.hideTimeout=setTimeout(function(){t.menuHideAll()},350)}this.lastTouch=null}},docTouchMove:function(t){if(this.lastTouch){var e=t.originalEvent.touches[0];this.lastTouch.x2=e.pageX,this.lastTouch.y2=e.pageY}},docTouchStart:function(t){var e=t.originalEvent.touches[0];this.lastTouch={x1:e.pageX,y1:e.pageY,target:e.target}},enable:function(){this.disabled&&(this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),this.disabled=!1)},getClosestMenu:function(t){for( +var e=$(t).closest("ul");e.dataSM("in-mega");)e=e.parent().closest("ul");return e[0]||null},getHeight:function(t){return this.getOffset(t,!0)},getOffset:function(t,e){var i;"none"==t.css("display")&&(i={position:t[0].style.position,visibility:t[0].style.visibility},t.css({position:"absolute",visibility:"hidden"}).show());var s=t[0].getBoundingClientRect&&t[0].getBoundingClientRect(),o=s&&(e?s.height||s.bottom-s.top:s.width||s.right-s.left);return o||0===o||(o=e?t[0].offsetHeight:t[0].offsetWidth),i&&t.hide().css(i),o},getStartZIndex:function(t){var e=parseInt(this[t?"$root":"$firstSub"].css("z-index"));return!t&&isNaN(e)&&(e=parseInt(this.$root.css("z-index"))),isNaN(e)?1:e},getTouchPoint:function(t){return t.touches&&t.touches[0]||t.changedTouches&&t.changedTouches[0]||t},getViewport:function(t){var e=t?"Height":"Width",i=document.documentElement["client"+e],s=window["inner"+e];return s&&(i=Math.min(i,s)),i},getViewportHeight:function(){return this.getViewport(!0)},getViewportWidth:function(){ +return this.getViewport()},getWidth:function(t){return this.getOffset(t)},handleEvents:function(){return!this.disabled&&this.isCSSOn()},handleItemEvents:function(t){return this.handleEvents()&&!this.isLinkInMegaMenu(t)},isCollapsible:function(){return"static"==this.$firstSub.css("position")},isCSSOn:function(){return"inline"!=this.$firstLink.css("display")},isFixed:function(){var t="fixed"==this.$root.css("position");return t||this.$root.parentsUntil("body").each(function(){return"fixed"==$(this).css("position")?(t=!0,!1):void 0}),t},isLinkInMegaMenu:function(t){return $(this.getClosestMenu(t[0])).hasClass("mega-menu")},isTouchMode:function(){return!mouse||this.opts.noMouseOver||this.isCollapsible()},itemActivate:function(t,e){var i=t.closest("ul"),s=i.dataSM("level");if(s>1&&(!this.activatedItems[s-2]||this.activatedItems[s-2][0]!=i.dataSM("parent-a")[0])){var o=this;$(i.parentsUntil("[data-smartmenus-id]","ul").get().reverse()).add(i).each(function(){o.itemActivate($(this).dataSM("parent-a"))})}if(( +!this.isCollapsible()||e)&&this.menuHideSubMenus(this.activatedItems[s-1]&&this.activatedItems[s-1][0]==t[0]?s:s-1),this.activatedItems[s-1]=t,this.$root.triggerHandler("activate.smapi",t[0])!==!1){var a=t.dataSM("sub");a&&(this.isTouchMode()||!this.opts.showOnClick||this.clickActivated)&&this.menuShow(a)}},itemBlur:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&this.$root.triggerHandler("blur.smapi",e[0])},itemClick:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(this.$touchScrollingSub&&this.$touchScrollingSub[0]==e.closest("ul")[0])return this.$touchScrollingSub=null,t.stopPropagation(),!1;if(this.$root.triggerHandler("click.smapi",e[0])===!1)return!1;var i=$(t.target).is(".sub-arrow"),s=e.dataSM("sub"),o=s?2==s.dataSM("level"):!1,a=this.isCollapsible(),n=/toggle$/.test(this.opts.collapsibleBehavior),r=/link$/.test(this.opts.collapsibleBehavior),h=/^accordion/.test(this.opts.collapsibleBehavior);if(s&&!s.is(":visible")){if((!r||!a||i)&&(this.opts.showOnClick&&o&&( +this.clickActivated=!0),this.itemActivate(e,h),s.is(":visible")))return this.focusActivated=!0,!1}else if(a&&(n||i))return this.itemActivate(e,h),this.menuHide(s),n&&(this.focusActivated=!1),!1;return this.opts.showOnClick&&o||e.hasClass("disabled")||this.$root.triggerHandler("select.smapi",e[0])===!1?!1:void 0}},itemDown:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&e.dataSM("mousedown",!0)},itemEnter:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(!this.isTouchMode()){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);var i=this;this.showTimeout=setTimeout(function(){i.itemActivate(e)},this.opts.showOnClick&&1==e.closest("ul").dataSM("level")?1:this.opts.showTimeout)}this.$root.triggerHandler("mouseenter.smapi",e[0])}},itemFocus:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(!this.focusActivated||this.isTouchMode()&&e.dataSM("mousedown")||this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0]==e[0 +]||this.itemActivate(e,!0),this.$root.triggerHandler("focus.smapi",e[0]))},itemLeave:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(this.isTouchMode()||(e[0].blur(),this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0)),e.removeDataSM("mousedown"),this.$root.triggerHandler("mouseleave.smapi",e[0]))},menuHide:function(t){if(this.$root.triggerHandler("beforehide.smapi",t[0])!==!1&&(canAnimate&&t.stop(!0,!0),"none"!=t.css("display"))){var e=function(){t.css("z-index","")};this.isCollapsible()?canAnimate&&this.opts.collapsibleHideFunction?this.opts.collapsibleHideFunction.call(this,t,e):t.hide(this.opts.collapsibleHideDuration,e):canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,t,e):t.hide(this.opts.hideDuration,e),t.dataSM("scroll")&&(this.menuScrollStop(t),t.css({"touch-action":"","-ms-touch-action":"","-webkit-transform":"",transform:""}).off(".smartmenus_scroll").removeDataSM("scroll").dataSM("scroll-arrows").hide()),t.dataSM("parent-a").removeClass( +"highlighted").attr("aria-expanded","false"),t.attr({"aria-expanded":"false","aria-hidden":"true"});var i=t.dataSM("level");this.activatedItems.splice(i-1,1),this.visibleSubMenus.splice($.inArray(t,this.visibleSubMenus),1),this.$root.triggerHandler("hide.smapi",t[0])}},menuHideAll:function(){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);for(var t=this.opts.isPopup?1:0,e=this.visibleSubMenus.length-1;e>=t;e--)this.menuHide(this.visibleSubMenus[e]);this.opts.isPopup&&(canAnimate&&this.$root.stop(!0,!0),this.$root.is(":visible")&&(canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,this.$root):this.$root.hide(this.opts.hideDuration))),this.activatedItems=[],this.visibleSubMenus=[],this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.$root.triggerHandler("hideAll.smapi")},menuHideSubMenus:function(t){for(var e=this.activatedItems.length-1;e>=t;e--){var i=this.activatedItems[e].dataSM("sub");i&&this.menuHide(i)}},menuInit:function(t){if(!t.dataSM("in-mega")){ +t.hasClass("mega-menu")&&t.find("ul").dataSM("in-mega",!0);for(var e=2,i=t[0];(i=i.parentNode.parentNode)!=this.$root[0];)e++;var s=t.prevAll("a").eq(-1);s.length||(s=t.prevAll().find("a").eq(-1)),s.addClass("has-submenu").dataSM("sub",t),t.dataSM("parent-a",s).dataSM("level",e).parent().dataSM("sub",t);var o=s.attr("id")||this.accessIdPrefix+ ++this.idInc,a=t.attr("id")||this.accessIdPrefix+ ++this.idInc;s.attr({id:o,"aria-haspopup":"true","aria-controls":a,"aria-expanded":"false"}),t.attr({id:a,role:"group","aria-hidden":"true","aria-labelledby":o,"aria-expanded":"false"}),this.opts.subIndicators&&s[this.opts.subIndicatorsPos](this.$subArrow.clone())}},menuPosition:function(t){var e,i,s=t.dataSM("parent-a"),o=s.closest("li"),a=o.parent(),n=t.dataSM("level"),r=this.getWidth(t),h=this.getHeight(t),u=s.offset(),l=u.left,c=u.top,d=this.getWidth(s),m=this.getHeight(s),p=$(window),f=p.scrollLeft(),v=p.scrollTop(),b=this.getViewportWidth(),S=this.getViewportHeight(),g=a.parent().is("[data-sm-horizontal-sub]" +)||2==n&&!a.hasClass("sm-vertical"),M=this.opts.rightToLeftSubMenus&&!o.is("[data-sm-reverse]")||!this.opts.rightToLeftSubMenus&&o.is("[data-sm-reverse]"),w=2==n?this.opts.mainMenuSubOffsetX:this.opts.subMenusSubOffsetX,T=2==n?this.opts.mainMenuSubOffsetY:this.opts.subMenusSubOffsetY;if(g?(e=M?d-r-w:w,i=this.opts.bottomToTopSubMenus?-h-T:m+T):(e=M?w-r:d-w,i=this.opts.bottomToTopSubMenus?m-T-h:T),this.opts.keepInViewport){var y=l+e,I=c+i;if(M&&f>y?e=g?f-y+e:d-w:!M&&y+r>f+b&&(e=g?f+b-r-y+e:w-r),g||(S>h&&I+h>v+S?i+=v+S-h-I:(h>=S||v>I)&&(i+=v-I)),g&&(I+h>v+S+.49||v>I)||!g&&h>S+.49){var x=this;t.dataSM("scroll-arrows")||t.dataSM("scroll-arrows",$([$('')[0],$('')[0]]).on({mouseenter:function(){t.dataSM("scroll").up=$(this).hasClass("scroll-up"),x.menuScroll(t)},mouseleave:function(e){x.menuScrollStop(t),x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(t){ +t.preventDefault()}}).insertAfter(t));var A=".smartmenus_scroll";if(t.dataSM("scroll",{y:this.cssTransforms3d?0:i-m,step:1,itemH:m,subH:h,arrowDownH:this.getHeight(t.dataSM("scroll-arrows").eq(1))}).on(getEventsNS({mouseover:function(e){x.menuScrollOver(t,e)},mouseout:function(e){x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(e){x.menuScrollMousewheel(t,e)}},A)).dataSM("scroll-arrows").css({top:"auto",left:"0",marginLeft:e+(parseInt(t.css("border-left-width"))||0),width:r-(parseInt(t.css("border-left-width"))||0)-(parseInt(t.css("border-right-width"))||0),zIndex:t.css("z-index")}).eq(g&&this.opts.bottomToTopSubMenus?0:1).show(),this.isFixed()){var C={};C[touchEvents?"touchstart touchmove touchend":"pointerdown pointermove pointerup MSPointerDown MSPointerMove MSPointerUp"]=function(e){x.menuScrollTouch(t,e)},t.css({"touch-action":"none","-ms-touch-action":"none"}).on(getEventsNS(C,A))}}}t.css({top:"auto",left:"0",marginLeft:e,marginTop:i-m})},menuScroll:function(t,e,i){var s,o=t.dataSM("scroll"), +a=t.dataSM("scroll-arrows"),n=o.up?o.upEnd:o.downEnd;if(!e&&o.momentum){if(o.momentum*=.92,s=o.momentum,.5>s)return this.menuScrollStop(t),void 0}else s=i||(e||!this.opts.scrollAccelerate?this.opts.scrollStep:Math.floor(o.step));var r=t.dataSM("level");if(this.activatedItems[r-1]&&this.activatedItems[r-1].dataSM("sub")&&this.activatedItems[r-1].dataSM("sub").is(":visible")&&this.menuHideSubMenus(r-1),o.y=o.up&&o.y>=n||!o.up&&n>=o.y?o.y:Math.abs(n-o.y)>s?o.y+(o.up?s:-s):n,t.css(this.cssTransforms3d?{"-webkit-transform":"translate3d(0, "+o.y+"px, 0)",transform:"translate3d(0, "+o.y+"px, 0)"}:{marginTop:o.y}),mouse&&(o.up&&o.y>o.downEnd||!o.up&&o.y0;t.dataSM("scroll-arrows").eq(i?0:1).is(":visible")&&(t.dataSM("scroll").up=i,this.menuScroll(t,!0))}e.preventDefault()},menuScrollOut:function(t,e){mouse&&(/^scroll-(up|down)/.test((e.relatedTarget||"").className)||(t[0]==e.relatedTarget||$.contains(t[0],e.relatedTarget))&&this.getClosestMenu(e.relatedTarget)==t[0]||t.dataSM("scroll-arrows").css("visibility","hidden"))},menuScrollOver:function(t,e){if(mouse&&!/^scroll-(up|down)/.test(e.target.className)&&this.getClosestMenu(e.target)==t[0]){this.menuScrollRefreshData(t);var i=t.dataSM("scroll"),s=$(window).scrollTop()-t.dataSM("parent-a").offset().top-i.itemH;t.dataSM("scroll-arrows").eq(0).css("margin-top",s).end().eq(1).css("margin-top",s+this.getViewportHeight()-i.arrowDownH).end().css("visibility","visible")}},menuScrollRefreshData:function(t){var e=t.dataSM("scroll"),i=$(window).scrollTop()-t.dataSM("parent-a").offset().top-e.itemH;this.cssTransforms3d&&(i=-(parseFloat(t.css("margin-top"))-i)),$.extend(e,{upEnd:i, +downEnd:i+this.getViewportHeight()-e.subH})},menuScrollStop:function(t){return this.scrollTimeout?(cancelAnimationFrame(this.scrollTimeout),this.scrollTimeout=0,t.dataSM("scroll").step=1,!0):void 0},menuScrollTouch:function(t,e){if(e=e.originalEvent,isTouchEvent(e)){var i=this.getTouchPoint(e);if(this.getClosestMenu(i.target)==t[0]){var s=t.dataSM("scroll");if(/(start|down)$/i.test(e.type))this.menuScrollStop(t)?(e.preventDefault(),this.$touchScrollingSub=t):this.$touchScrollingSub=null,this.menuScrollRefreshData(t),$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp});else if(/move$/i.test(e.type)){var o=void 0!==s.touchY?s.touchY:s.touchStartY;if(void 0!==o&&o!=i.pageY){this.$touchScrollingSub=t;var a=i.pageY>o;void 0!==s.up&&s.up!=a&&$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp}),$.extend(s,{up:a,touchY:i.pageY}),this.menuScroll(t,!0,Math.abs(i.pageY-o))}e.preventDefault()}else void 0!==s.touchY&&((s.momentum=15*Math.pow(Math.abs(i.pageY-s.touchStartY)/(e.timeStamp-s.touchStartTime),2) +)&&(this.menuScrollStop(t),this.menuScroll(t),e.preventDefault()),delete s.touchY)}}},menuShow:function(t){if((t.dataSM("beforefirstshowfired")||(t.dataSM("beforefirstshowfired",!0),this.$root.triggerHandler("beforefirstshow.smapi",t[0])!==!1))&&this.$root.triggerHandler("beforeshow.smapi",t[0])!==!1&&(t.dataSM("shown-before",!0),canAnimate&&t.stop(!0,!0),!t.is(":visible"))){var e=t.dataSM("parent-a"),i=this.isCollapsible();if((this.opts.keepHighlighted||i)&&e.addClass("highlighted"),i)t.removeClass("sm-nowrap").css({zIndex:"",width:"auto",minWidth:"",maxWidth:"",top:"",left:"",marginLeft:"",marginTop:""});else{if(t.css("z-index",this.zIndexInc=(this.zIndexInc||this.getStartZIndex())+1),(this.opts.subMenusMinWidth||this.opts.subMenusMaxWidth)&&(t.css({width:"auto",minWidth:"",maxWidth:""}).addClass("sm-nowrap"),this.opts.subMenusMinWidth&&t.css("min-width",this.opts.subMenusMinWidth),this.opts.subMenusMaxWidth)){var s=this.getWidth(t);t.css("max-width",this.opts.subMenusMaxWidth),s>this.getWidth(t +)&&t.removeClass("sm-nowrap").css("width",this.opts.subMenusMaxWidth)}this.menuPosition(t)}var o=function(){t.css("overflow","")};i?canAnimate&&this.opts.collapsibleShowFunction?this.opts.collapsibleShowFunction.call(this,t,o):t.show(this.opts.collapsibleShowDuration,o):canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,t,o):t.show(this.opts.showDuration,o),e.attr("aria-expanded","true"),t.attr({"aria-expanded":"true","aria-hidden":"false"}),this.visibleSubMenus.push(t),this.$root.triggerHandler("show.smapi",t[0])}},popupHide:function(t){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},t?1:this.opts.hideTimeout)},popupShow:function(t,e){if(!this.opts.isPopup)return alert('SmartMenus jQuery Error:\n\nIf you want to show this menu via the "popupShow" method, set the isPopup:true option.'),void 0;if(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),this.$root.dataSM("shown-before",!0), +canAnimate&&this.$root.stop(!0,!0),!this.$root.is(":visible")){this.$root.css({left:t,top:e});var i=this,s=function(){i.$root.css("overflow","")};canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,this.$root,s):this.$root.show(this.opts.showDuration,s),this.visibleSubMenus[0]=this.$root}},refresh:function(){this.destroy(!0),this.init(!0)},rootKeyDown:function(t){if(this.handleEvents())switch(t.keyCode){case 27:var e=this.activatedItems[0];if(e){this.menuHideAll(),e[0].focus();var i=e.dataSM("sub");i&&this.menuHide(i)}break;case 32:var s=$(t.target);if(s.is("a")&&this.handleItemEvents(s)){var i=s.dataSM("sub");i&&!i.is(":visible")&&(this.itemClick({currentTarget:t.target}),t.preventDefault())}}},rootOut:function(t){if(this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),!this.opts.showOnClick||!this.opts.hideOnClick)){var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},this.opts.hideTimeout)}}, +rootOver:function(t){this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0)},winResize:function(t){if(this.handleEvents()){if(!("onorientationchange"in window)||"orientationchange"==t.type){var e=this.isCollapsible();this.wasCollapsible&&e||(this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0].blur(),this.menuHideAll()),this.wasCollapsible=e}}else if(this.$disableOverlay){var i=this.$root.offset();this.$disableOverlay.css({top:i.top,left:i.left,width:this.$root.outerWidth(),height:this.$root.outerHeight()})}}}}),$.fn.dataSM=function(t,e){return e?this.data(t+"_smartmenus",e):this.data(t+"_smartmenus")},$.fn.removeDataSM=function(t){return this.removeData(t+"_smartmenus")},$.fn.smartmenus=function(options){if("string"==typeof options){var args=arguments,method=options;return Array.prototype.shift.call(args),this.each(function(){var t=$(this).data("smartmenus");t&&t[method]&&t[method].apply(t,args)})} +return this.each(function(){var dataOpts=$(this).data("sm-options")||null;if(dataOpts)try{dataOpts=eval("("+dataOpts+")")}catch(e){dataOpts=null,alert('ERROR\n\nSmartMenus jQuery init:\nInvalid "data-sm-options" attribute value syntax.')}new $.SmartMenus(this,$.extend({},$.fn.smartmenus.defaults,options,dataOpts))})},$.fn.smartmenus.defaults={isPopup:!1,mainMenuSubOffsetX:0,mainMenuSubOffsetY:0,subMenusSubOffsetX:0,subMenusSubOffsetY:0,subMenusMinWidth:"10em",subMenusMaxWidth:"20em",subIndicators:!0,subIndicatorsPos:"append",subIndicatorsText:"",scrollStep:30,scrollAccelerate:!0,showTimeout:250,hideTimeout:500,showDuration:0,showFunction:null,hideDuration:0,hideFunction:function(t,e){t.fadeOut(200,e)},collapsibleShowDuration:0,collapsibleShowFunction:function(t,e){t.slideDown(200,e)},collapsibleHideDuration:0,collapsibleHideFunction:function(t,e){t.slideUp(200,e)},showOnClick:!1,hideOnClick:!0,noMouseOver:!1,keepInViewport:!0,keepHighlighted:!0,markCurrentItem:!1,markCurrentTree:!0,rightToLeftSubMenus:!1, +bottomToTopSubMenus:!1,collapsibleBehavior:"default"},$}); diff --git a/doxygen/junit__xml_8hpp_source.html b/doxygen/junit__xml_8hpp_source.html new file mode 100644 index 0000000..3693897 --- /dev/null +++ b/doxygen/junit__xml_8hpp_source.html @@ -0,0 +1,391 @@ + + + + + + + +C++Spec: include/formatters/junit_xml.hpp Source File + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
junit_xml.hpp
+
+
+
1#pragma once
+
2#include <algorithm>
+
3#include <chrono>
+
4#include <numeric>
+
5#include <string>
+
6
+
7#ifndef CPPSPEC_SEMIHOSTED
+
8#include <filesystem>
+
9#endif
+
10
+
11#include "formatters_base.hpp"
+
12#include "it_base.hpp"
+
13
+
14namespace CppSpec::Formatters {
+
15// JUnit XML header
+
16constexpr static auto junit_xml_header = R"(<?xml version="1.0" encoding="UTF-8"?>)";
+
17
+
18inline std::string encode_xml(const std::string& data) {
+
19 std::string buffer;
+
20 for (char c : data) {
+
21 switch (c) {
+
22 case '<':
+
23 buffer += "&lt;";
+
24 break;
+
25 case '>':
+
26 buffer += "&gt;";
+
27 break;
+
28 case '&':
+
29 buffer += "&amp;";
+
30 break;
+
31 case '"':
+
32 buffer += "&quot;";
+
33 break;
+
34 case '\'':
+
35 buffer += "&apos;";
+
36 break;
+
37 default:
+
38 buffer += c;
+
39 }
+
40 }
+
41 return buffer;
+
42}
+
43
+
44namespace JUnitNodes {
+
+
45struct Result {
+
46 enum class Status { Failure, Error, Skipped };
+
47 Status status = Status::Failure;
+
48 std::string message;
+
49 std::string type;
+
50 std::string text;
+
51
+
52 Result(std::string message, std::string type, std::string text, Status status = Status::Failure)
+
53 : status(status), message(std::move(message)), type(std::move(type)), text(std::move(text)) {}
+
54
+
55 [[nodiscard]] std::string status_string() const {
+
56 switch (status) {
+
57 case Status::Failure:
+
58 return "failure";
+
59 case Status::Error:
+
60 return "error";
+
61 case Status::Skipped:
+
62 return "skipped";
+
63 }
+
64 return "failure"; // Default to failure if status is unknown
+
65 }
+
66
+
67 [[nodiscard]] std::string to_xml() const {
+
68 return std::format(R"( <{} message="{}" type="{}">{}</{}>)", status_string(), encode_xml(message),
+
69 encode_xml(type), encode_xml(text), status_string());
+
70 }
+
71};
+
+
72
+
+
73struct TestCase {
+
74 std::string name;
+
75 std::string classname;
+
76 std::size_t assertions = 0;
+
77 std::chrono::duration<double> time;
+
78 std::list<Result> results;
+
79 std::string file;
+
80 std::size_t line;
+
81
+
82 [[nodiscard]] std::string to_xml() const {
+
83 auto start =
+
84 std::format(R"( <testcase name="{}" classname="{}" assertions="{}" time="{:f}" file="{}" line="{}")",
+
85 encode_xml(name), encode_xml(classname), assertions, time.count(), file, line);
+
86 if (results.empty()) {
+
87 return start + "/>";
+
88 }
+
89
+
90 auto xml_results = results | std::views::transform([](const Result& r) { return r.to_xml(); });
+
91
+
92 std::stringstream ss;
+
93 ss << start << ">" << std::endl;
+
94
+
95 ss << std::accumulate(xml_results.begin(), xml_results.end(), std::string{},
+
96 [](const std::string& acc, const std::string& r) { return acc + "\n" + r; });
+
97 ss << std::endl;
+
98 ss << " </testcase>";
+
99 return ss.str();
+
100 }
+
101};
+
+
102
+
+
103struct TestSuite {
+
104 size_t id;
+
105 std::string name;
+
106 std::chrono::duration<double> time;
+
107 std::chrono::time_point<std::chrono::system_clock> timestamp;
+
108 std::size_t tests;
+
109 std::size_t failures;
+
110 std::list<TestCase> cases;
+
111
+
112 TestSuite(std::string name,
+
113 std::chrono::duration<double> time,
+
114 size_t tests,
+
115 size_t failures,
+
116 std::chrono::time_point<std::chrono::system_clock> timestamp)
+
117 : id(get_next_id()), name(std::move(name)), time(time), timestamp(timestamp), tests(tests), failures(failures) {}
+
118
+
119 [[nodiscard]] std::string to_xml() const {
+
120 std::string timestamp_str;
+
121#if defined(__APPLE__) || defined(CPPSPEC_SEMIHOSTED)
+
122 // Cludge because macOS doesn't have std::chrono::current_zone() or std::chrono::zoned_time()
+
123 std::time_t time_t_timestamp = std::chrono::system_clock::to_time_t(timestamp);
+
124 std::tm localtime = *std::localtime(&time_t_timestamp);
+
125 std::ostringstream oss;
+
126 oss << std::put_time(&localtime, "%Y-%m-%dT%H:%M:%S");
+
127 timestamp_str = oss.str();
+
128#else
+
129 // Use std::chrono::current_zone() and std::chrono::zoned_time() if available (C++20)
+
130 auto localtime = std::chrono::zoned_time(std::chrono::current_zone(), timestamp).get_local_time();
+
131 timestamp_str = std::format("{0:%F}T{0:%T}", localtime);
+
132#endif
+
133
+
134 std::stringstream ss;
+
135 ss << " "
+
136 << std::format(R"(<testsuite id="{}" name="{}" time="{:f}" timestamp="{}" tests="{}" failures="{}">)", id,
+
137 encode_xml(name), time.count(), timestamp_str, tests, failures);
+
138 ss << std::endl;
+
139 for (const TestCase& test_case : cases) {
+
140 ss << test_case.to_xml() << std::endl;
+
141 }
+
142 ss << " </testsuite>";
+
143 return ss.str();
+
144 }
+
145
+
146 static size_t get_next_id() {
+
147 static std::size_t id_counter = 0;
+
148 return id_counter++;
+
149 }
+
150};
+
+
151
+
+ +
153 std::string name;
+
154 size_t tests = 0;
+
155 size_t failures = 0;
+
156 std::chrono::duration<double> time{};
+
157 std::chrono::time_point<std::chrono::system_clock> timestamp;
+
158
+
159 std::list<TestSuite> suites;
+
160
+
161 [[nodiscard]] std::string to_xml() const {
+
162 std::stringstream ss;
+
163 auto timestamp_str = std::format("{0:%F}T{0:%T}", timestamp);
+
164 ss << std::format(R"(<testsuites name="{}" tests="{}" failures="{}" time="{:f}" timestamp="{}">)", encode_xml(name),
+
165 tests, failures, time.count(), timestamp_str);
+
166 ss << std::endl;
+
167 for (const TestSuite& suite : suites) {
+
168 ss << suite.to_xml() << std::endl;
+
169 }
+
170 ss << "</testsuites>" << std::endl;
+
171 return ss.str();
+
172 }
+
173};
+
+
174} // namespace JUnitNodes
+
175
+
+
176class JUnitXML : public BaseFormatter {
+
177 JUnitNodes::TestSuites test_suites;
+
178
+
179 public:
+
180 explicit JUnitXML(std::ostream& out_stream = std::cout, bool color = is_terminal())
+
181 : BaseFormatter(out_stream, color) {}
+
182
+
183 ~JUnitXML() {
+
184 test_suites.tests =
+
185 std::accumulate(test_suites.suites.begin(), test_suites.suites.end(), size_t{0},
+
186 [](size_t sum, const JUnitNodes::TestSuite& suite) { return sum + suite.tests; });
+
187 test_suites.failures =
+
188 std::accumulate(test_suites.suites.begin(), test_suites.suites.end(), size_t{0},
+
189 [](size_t sum, const JUnitNodes::TestSuite& suite) { return sum + suite.failures; });
+
190 test_suites.time = std::ranges::fold_left(test_suites.suites, std::chrono::duration<double>(0),
+
191 [](const auto& acc, const auto& suite) { return acc + suite.time; });
+
192 test_suites.timestamp = test_suites.suites.front().timestamp;
+
193
+
194 out_stream << std::fixed; // disable scientific notation
+
195 // out_stream << std::setprecision(6); // set precision to 6 decimal places
+
196 out_stream << junit_xml_header << std::endl;
+
197 out_stream << test_suites.to_xml() << std::endl;
+
198 out_stream.flush();
+
199 }
+
200
+
201 void format(const Description& description) override {
+
202 if (test_suites.name.empty()) {
+
203#ifdef CPPSPEC_SEMIHOSTED
+
204 std::string file_path = description.get_location().file_name();
+
205 // remove leading folders
+
206 auto pos = file_path.find_last_of("/");
+
207 if (pos != std::string::npos) {
+
208 file_path = file_path.substr(pos + 1);
+
209 }
+
210
+
211 // remove extension
+
212 pos = file_path.find_last_of('.');
+
213 if (pos != std::string::npos) {
+
214 file_path = file_path.substr(0, pos);
+
215 }
+
216
+
217 test_suites.name = file_path;
+
218#else
+
219 std::filesystem::path file_path = description.get_location().file_name();
+
220 test_suites.name = file_path.stem().string();
+
221#endif
+
222 }
+
223 if (description.has_parent()) {
+
224 return;
+
225 }
+
226 test_suites.suites.emplace_back(description.get_description(), description.get_runtime(), description.num_tests(),
+
227 description.num_failures(), description.get_start_time());
+
228 }
+
229
+
230 void format(const ItBase& it) override {
+
231 using namespace std::chrono;
+
232 std::forward_list<std::string> descriptions;
+
233
+
234 descriptions.push_front(it.get_description());
+
235 for (const auto* parent = it.get_parent_as<Description>(); parent->has_parent();
+
236 parent = parent->get_parent_as<Description>()) {
+
237 descriptions.push_front(parent->get_description());
+
238 }
+
239
+
240 std::string description = Util::join(descriptions, " ");
+
241
+
242 auto test_case = JUnitNodes::TestCase{
+
243 .name = description,
+
244 .classname = "",
+
245 .assertions = it.get_results().size(),
+
246 .time = it.get_runtime(),
+
247 .results = {},
+
248 .file = it.get_location().file_name(),
+
249 .line = it.get_location().line(),
+
250 };
+
251
+
252 for (const Result& result : it.get_results()) {
+
253 if (result.is_success()) {
+
254 continue;
+
255 }
+
256 test_case.results.emplace_back(result.get_location_string() + ": Match failure.", result.get_type(),
+
257 result.get_message());
+
258 }
+
259
+
260 test_suites.suites.back().cases.push_back(test_case);
+
261 }
+
262};
+
+
263} // namespace CppSpec::Formatters
+
Definition description.hpp:22
+
Base class for it expressions.
Definition it_base.hpp:32
+
Definition result.hpp:13
+
bool has_parent() noexcept
Check to see if the Runnable has a parent.
Definition runnable.hpp:56
+ + +
Definition junit_xml.hpp:45
+ +
Definition junit_xml.hpp:103
+ +
std::string join(std::ranges::range auto &iterable, const std::string &separator="")
Implode a string.
Definition util.hpp:119
+
+
+
+ + + + diff --git a/doxygen/let_8hpp.html b/doxygen/let_8hpp.html new file mode 100644 index 0000000..7dd3d2a --- /dev/null +++ b/doxygen/let_8hpp.html @@ -0,0 +1,225 @@ + + + + + + + +C++Spec: include/let.hpp File Reference + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
let.hpp File Reference
+
+
+
#include <functional>
+#include <optional>
+
+Include dependency graph for let.hpp:
+
+
+ + + + + + + +
+
+This graph shows which files directly or indirectly include this file:
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

Go to the source code of this file.

+ + + + +

+Classes

class  CppSpec::LetBase
 Base class for lets to abstract away the template arguments. More...
+
+
+ +
+ + + + diff --git a/doxygen/let_8hpp.js b/doxygen/let_8hpp.js new file mode 100644 index 0000000..03bca86 --- /dev/null +++ b/doxygen/let_8hpp.js @@ -0,0 +1,4 @@ +var let_8hpp = +[ + [ "CppSpec::LetBase", "classCppSpec_1_1LetBase.html", null ] +]; \ No newline at end of file diff --git a/doxygen/let_8hpp__dep__incl.map b/doxygen/let_8hpp__dep__incl.map new file mode 100644 index 0000000..2dc07e5 --- /dev/null +++ b/doxygen/let_8hpp__dep__incl.map @@ -0,0 +1,84 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doxygen/let_8hpp__dep__incl.md5 b/doxygen/let_8hpp__dep__incl.md5 new file mode 100644 index 0000000..a594d24 --- /dev/null +++ b/doxygen/let_8hpp__dep__incl.md5 @@ -0,0 +1 @@ +6a89f578ad19069127767e9c274e10ee \ No newline at end of file diff --git a/doxygen/let_8hpp__dep__incl.png b/doxygen/let_8hpp__dep__incl.png new file mode 100644 index 0000000..ee2b82e Binary files /dev/null and b/doxygen/let_8hpp__dep__incl.png differ diff --git a/doxygen/let_8hpp__incl.map b/doxygen/let_8hpp__incl.map new file mode 100644 index 0000000..5a2802c --- /dev/null +++ b/doxygen/let_8hpp__incl.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/doxygen/let_8hpp__incl.md5 b/doxygen/let_8hpp__incl.md5 new file mode 100644 index 0000000..6fcb9bc --- /dev/null +++ b/doxygen/let_8hpp__incl.md5 @@ -0,0 +1 @@ +f095cb1169e37a3cd27e1919414d46e0 \ No newline at end of file diff --git a/doxygen/let_8hpp__incl.png b/doxygen/let_8hpp__incl.png new file mode 100644 index 0000000..4089541 Binary files /dev/null and b/doxygen/let_8hpp__incl.png differ diff --git a/doxygen/let_8hpp_source.html b/doxygen/let_8hpp_source.html new file mode 100644 index 0000000..80d4e89 --- /dev/null +++ b/doxygen/let_8hpp_source.html @@ -0,0 +1,164 @@ + + + + + + + +C++Spec: include/let.hpp Source File + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
let.hpp
+
+
+Go to the documentation of this file.
1
+
2#pragma once
+
3
+
4#include <functional>
+
5#include <optional>
+
6
+
7namespace CppSpec {
+
8
+
+
16class LetBase {
+
17 protected:
+
18 bool delivered{false};
+
19
+
20 public:
+
21 constexpr LetBase() noexcept = default;
+
22 LetBase(const LetBase& copy) = default;
+
23 void reset() noexcept { delivered = false; }
+
24 [[nodiscard]] constexpr bool has_result() const noexcept { return this->delivered; }
+
25};
+
+
26
+
33template <typename T>
+
34class Let : public LetBase {
+
35 using block_t = std::function<T()>;
+
36 std::optional<T> result;
+
37
+
38 block_t body;
+
39
+
40 void exec();
+
41
+
42 public:
+
43 explicit Let(block_t body) noexcept : LetBase(), body(body) {}
+
44
+
45 T* operator->() {
+
46 return std::addressof(value());
+
47 }
+
48
+
49 T& operator*() & { return value(); }
+
50 T& value() &;
+
51};
+
52
+
54template <typename T>
+
55void Let<T>::exec() {
+
56 if (!delivered) {
+
57 result = body();
+
58 delivered = true;
+
59 }
+
60}
+
61
+
66template <typename T>
+
67T& Let<T>::value() & {
+
68 exec();
+
69 return result.value();
+
70}
+
71
+
72} // namespace CppSpec
+
Base class for lets to abstract away the template arguments.
Definition let.hpp:16
+
+
+
+ + + + diff --git a/doxygen/match_8hpp.html b/doxygen/match_8hpp.html new file mode 100644 index 0000000..c880322 --- /dev/null +++ b/doxygen/match_8hpp.html @@ -0,0 +1,242 @@ + + + + + + + +C++Spec: include/matchers/strings/match.hpp File Reference + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
match.hpp File Reference
+
+
+
#include <regex>
+#include <string>
+#include "matchers/matcher_base.hpp"
+
+Include dependency graph for match.hpp:
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+This graph shows which files directly or indirectly include this file:
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

Go to the source code of this file.

+ + + + +

+Classes

class  CppSpec::Matchers::Match< A >
class  CppSpec::Matchers::MatchPartial< A >
+
+
+ +
+ + + + diff --git a/doxygen/match_8hpp.js b/doxygen/match_8hpp.js new file mode 100644 index 0000000..dc7c225 --- /dev/null +++ b/doxygen/match_8hpp.js @@ -0,0 +1,5 @@ +var match_8hpp = +[ + [ "CppSpec::Matchers::Match< A >", "classCppSpec_1_1Matchers_1_1Match.html", null ], + [ "CppSpec::Matchers::MatchPartial< A >", "classCppSpec_1_1Matchers_1_1MatchPartial.html", "classCppSpec_1_1Matchers_1_1MatchPartial" ] +]; \ No newline at end of file diff --git a/doxygen/match_8hpp__dep__incl.map b/doxygen/match_8hpp__dep__incl.map new file mode 100644 index 0000000..9673cc9 --- /dev/null +++ b/doxygen/match_8hpp__dep__incl.map @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doxygen/match_8hpp__dep__incl.md5 b/doxygen/match_8hpp__dep__incl.md5 new file mode 100644 index 0000000..37bf199 --- /dev/null +++ b/doxygen/match_8hpp__dep__incl.md5 @@ -0,0 +1 @@ +a8f8553193e7bbd8d714edec8b0fd69e \ No newline at end of file diff --git a/doxygen/match_8hpp__dep__incl.png b/doxygen/match_8hpp__dep__incl.png new file mode 100644 index 0000000..1ee39ba Binary files /dev/null and b/doxygen/match_8hpp__dep__incl.png differ diff --git a/doxygen/match_8hpp__incl.map b/doxygen/match_8hpp__incl.map new file mode 100644 index 0000000..a12f873 --- /dev/null +++ b/doxygen/match_8hpp__incl.map @@ -0,0 +1,74 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doxygen/match_8hpp__incl.md5 b/doxygen/match_8hpp__incl.md5 new file mode 100644 index 0000000..7574873 --- /dev/null +++ b/doxygen/match_8hpp__incl.md5 @@ -0,0 +1 @@ +5a31092869cb1f4b932730a92f7064ea \ No newline at end of file diff --git a/doxygen/match_8hpp__incl.png b/doxygen/match_8hpp__incl.png new file mode 100644 index 0000000..5cbbdaf Binary files /dev/null and b/doxygen/match_8hpp__incl.png differ diff --git a/doxygen/match_8hpp_source.html b/doxygen/match_8hpp_source.html new file mode 100644 index 0000000..764302f --- /dev/null +++ b/doxygen/match_8hpp_source.html @@ -0,0 +1,157 @@ + + + + + + + +C++Spec: include/matchers/strings/match.hpp Source File + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
match.hpp
+
+
+Go to the documentation of this file.
1
+
2#pragma once
+
3#include <regex>
+
4#include <string>
+
5
+ +
7
+
8namespace CppSpec::Matchers {
+
9
+
10template <typename A>
+
+
11class Match : public MatcherBase<A, std::regex> {
+
12 public:
+
13 explicit Match(Expectation<A>& expectation, std::string expected)
+
14 : MatcherBase<A, std::regex>(expectation, std::regex(expected)) {}
+
15
+
16 explicit Match(Expectation<A>& expectation, std::regex expected)
+
17 : MatcherBase<A, std::regex>(expectation, expected) {}
+
18
+
19 std::string verb() override { return "match"; }
+
20
+
21 bool match() override {
+
22 std::smatch temp_match;
+
23 return std::regex_match(this->actual(), temp_match, this->expected());
+
24 }
+
25};
+
+
26
+
27template <typename A>
+
+
28class MatchPartial : public MatcherBase<A, std::regex> {
+
29 public:
+
30 explicit MatchPartial(Expectation<A>& expectation, std::string expected)
+
31 : MatcherBase<A, std::regex>(expectation, std::regex(expected)) {}
+
32
+
33 explicit MatchPartial(Expectation<A>& expectation, std::regex expected)
+
34 : MatcherBase<A, std::regex>(expectation, expected) {}
+
35
+
36 std::string description() override { return "partially match " + Pretty::to_word(this->expected()); }
+
37
+
38 bool match() override { return std::regex_match(this->actual(), this->expected()); }
+
39};
+
+
40
+
41} // namespace CppSpec::Matchers
+
Wraps the target of an expectation.
Definition expectation.hpp:48
+
std::string description() override
Get the description of the Matcher.
Definition match.hpp:36
+
Definition have_error.hpp:9
+
Contains the base class for all Matchers.
+
static std::string to_word(const T &item)
Formats an object as a string when operator<< is available.
Definition pretty_matchers.hpp:122
+
+
+
+ + + + diff --git a/doxygen/matcher__base_8hpp.html b/doxygen/matcher__base_8hpp.html new file mode 100644 index 0000000..0925bb8 --- /dev/null +++ b/doxygen/matcher__base_8hpp.html @@ -0,0 +1,291 @@ + + + + + + + +C++Spec: include/matchers/matcher_base.hpp File Reference + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
matcher_base.hpp File Reference
+
+
+ +

Contains the base class for all Matchers. +More...

+
#include <source_location>
+#include <string>
+#include "expectations/handler.hpp"
+#include "it_base.hpp"
+#include "pretty_matchers.hpp"
+
+Include dependency graph for matcher_base.hpp:
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+This graph shows which files directly or indirectly include this file:
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

Go to the source code of this file.

+ + + + +

+Classes

class  CppSpec::Matchers::MatcherBase< Actual, Expected >
 the base class for all Matcher classes and objects More...
+

Detailed Description

+

Contains the base class for all Matchers.

+

Copyright 2016 Katherine Whitlock

+
Author
Katherine Whitlock (toroidalcode)
+
+
+ +
+ + + + diff --git a/doxygen/matcher__base_8hpp.js b/doxygen/matcher__base_8hpp.js new file mode 100644 index 0000000..4174f75 --- /dev/null +++ b/doxygen/matcher__base_8hpp.js @@ -0,0 +1,4 @@ +var matcher__base_8hpp = +[ + [ "CppSpec::Matchers::MatcherBase< Actual, Expected >", "classCppSpec_1_1Matchers_1_1MatcherBase.html", "classCppSpec_1_1Matchers_1_1MatcherBase" ] +]; \ No newline at end of file diff --git a/doxygen/matcher__base_8hpp__dep__incl.map b/doxygen/matcher__base_8hpp__dep__incl.map new file mode 100644 index 0000000..348e67e --- /dev/null +++ b/doxygen/matcher__base_8hpp__dep__incl.map @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doxygen/matcher__base_8hpp__dep__incl.md5 b/doxygen/matcher__base_8hpp__dep__incl.md5 new file mode 100644 index 0000000..062149e --- /dev/null +++ b/doxygen/matcher__base_8hpp__dep__incl.md5 @@ -0,0 +1 @@ +65c1670ae6d009b97f10efb4d9ad6113 \ No newline at end of file diff --git a/doxygen/matcher__base_8hpp__dep__incl.png b/doxygen/matcher__base_8hpp__dep__incl.png new file mode 100644 index 0000000..0d97413 Binary files /dev/null and b/doxygen/matcher__base_8hpp__dep__incl.png differ diff --git a/doxygen/matcher__base_8hpp__incl.map b/doxygen/matcher__base_8hpp__incl.map new file mode 100644 index 0000000..42e77c6 --- /dev/null +++ b/doxygen/matcher__base_8hpp__incl.map @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doxygen/matcher__base_8hpp__incl.md5 b/doxygen/matcher__base_8hpp__incl.md5 new file mode 100644 index 0000000..7109696 --- /dev/null +++ b/doxygen/matcher__base_8hpp__incl.md5 @@ -0,0 +1 @@ +8cc250010c0b27279091bbca908a74da \ No newline at end of file diff --git a/doxygen/matcher__base_8hpp__incl.png b/doxygen/matcher__base_8hpp__incl.png new file mode 100644 index 0000000..18e60a7 Binary files /dev/null and b/doxygen/matcher__base_8hpp__incl.png differ diff --git a/doxygen/matcher__base_8hpp_source.html b/doxygen/matcher__base_8hpp_source.html new file mode 100644 index 0000000..d096962 --- /dev/null +++ b/doxygen/matcher__base_8hpp_source.html @@ -0,0 +1,293 @@ + + + + + + + +C++Spec: include/matchers/matcher_base.hpp Source File + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
matcher_base.hpp
+
+
+Go to the documentation of this file.
1
+
9
+
10#pragma once
+
11
+
12#include <source_location>
+
13#include <string>
+
14
+ +
16#include "it_base.hpp"
+
17#include "pretty_matchers.hpp"
+
18
+
19namespace CppSpec {
+
20
+
21template <class T>
+
22class Expectation; // Forward declaration of Expectation
+
23
+
24namespace Matchers {
+
25
+
36template <typename Actual, typename Expected>
+
+
37class MatcherBase : public Pretty {
+
38 std::string custom_failure_message;
+
39
+
40 protected:
+
41 Expected expected_; // The expected object contained by the matcher
+
42
+
43 // A reference to the Expectation (i.e. `expect(2)`)
+
44 Expectation<Actual>& expectation_;
+
45
+
46 public:
+
47 // Copy constructor
+
48 MatcherBase(MatcherBase<Actual, Expected> const& copy) = default;
+
49
+
50 // Constructor when matcher has no 'object' to match for
+
51 explicit MatcherBase(Expectation<Actual>& expectation)
+
52 // We want the parent of the matcher to be the `it` block, not the Expectation.
+
53 : expectation_(expectation) {}
+
54
+
55 // Constructor when the matcher has an object to match for. This is the most
+
56 // commonly used constructor
+
57 MatcherBase(Expectation<Actual>& expectation, Expected expected) : expected_(expected), expectation_(expectation) {}
+
58
+
59 virtual ~MatcherBase() = default;
+
60
+
61 /*--------- Helper functions -------------*/
+
62
+
+
63 virtual std::string failure_message();
+
+
64 virtual std::string failure_message_when_negated();
+
+
65 virtual std::string description();
+
66 virtual std::string verb() { return "match"; }
+
67
+
68 // Get the 'actual' object from the Expectation
+
69 constexpr Actual& actual() { return expectation_.get_target(); }
+
70
+
71 // Get the 'expected' object from the Matcher
+
72 Expected& expected() { return expected_; }
+
73
+
74 // Get the Expectation itself
+
75 Expectation<Actual>& expectation() { return expectation_; }
+
76
+
77 // Set the message to give on match failure
+
+
78 virtual MatcherBase& set_message(std::string message);
+
79
+
80 [[nodiscard]] std::source_location get_location() const { return expectation_.get_location(); }
+
81
+
82 /*--------- Primary functions -------------*/
+
83
+
84 // Run the matcher
+
+ +
86
+
87 virtual bool match() = 0;
+
88 virtual bool negated_match() { return !match(); }
+
89
+
90 // typedef Expected
+
91 using expected_t = Expected;
+
92};
+
93
+
100template <typename A, typename E>
+
+
101MatcherBase<A, E>& MatcherBase<A, E>::set_message(std::string message) {
+
102 this->custom_failure_message = std::move(message);
+
103 return *this;
+
104}
+
+
105
+
111template <typename A, typename E>
+
+ +
113 if (not custom_failure_message.empty()) {
+
114 return this->custom_failure_message;
+
115 }
+
116 return std::format("expected {} to {}", Pretty::to_word(actual()), description());
+
117}
+
+
118
+
124template <typename A, typename E>
+
+ +
126 if (not custom_failure_message.empty()) {
+
127 return this->custom_failure_message;
+
128 }
+
129 return std::format("expected {} to not {}", Pretty::to_word(actual()), description());
+
130}
+
+
131
+
137template <typename A, typename E>
+
+ +
139 // std::string pretty_expected = this->to_sentence(expected_);
+
140 // ss << "match " <<
+
141 // this->name_to_sentence(Util::demangle(typeid(*this).name()))
+
142 // << "(" << pretty_expected.substr(1, pretty_expected.length()) << ")";
+
143 return std::format("{} {}", verb(), Pretty::to_sentence(expected_));
+
144}
+
+
145
+
153template <typename A, typename E>
+
+ +
155 Result result = expectation_.positive() ? PositiveExpectationHandler::handle_matcher(*this)
+ +
157
+
158 result.set_type(Util::demangle(typeid(*this).name()));
+
159
+
160 // If our items didn't match, we obviously failed.
+
161 // Only report the failure if we aren't actively ignoring it.
+
162 if (result.is_failure() && result.get_message().empty()) {
+
163 result.set_message(
+
164 "Failure message is empty. Does your matcher define the "
+
165 "appropriate failure_message[_when_negated] method to "
+
166 "return a string?");
+
167 }
+
168
+
169 if (expectation_.ignored()) {
+
170 result.set_status(Result::Status::Skipped);
+
171 }
+
172
+
173 ItBase* parent = expectation_.get_it();
+
174 if (parent != nullptr) {
+
175 // If we need a description for our test, generate it
+
176 // unless we're ignoring the output.
+
177 if (parent->needs_description() && !expectation_.ignored()) {
+
178 parent->set_description(
+
179 (expectation_.positive() ? PositiveExpectationHandler::verb() : NegativeExpectationHandler::verb()) + " " +
+
180 this->description());
+
181 }
+
182 parent->add_result(result);
+
183 }
+
184 return result;
+
185}
+
+
+
186
+
187} // namespace Matchers
+
188} // namespace CppSpec
+
+
+
+
+
+
Wraps the target of an expectation.
Definition expectation.hpp:48
+
virtual A & get_target() &=0
Get the target of the expectation.
+
Base class for it expressions.
Definition it_base.hpp:32
+
bool needs_description() noexcept
Get whether the object needs a description string.
Definition it_base.hpp:58
+
ItBase & set_description(std::string_view description) noexcept
Set the description string.
Definition it_base.hpp:70
+
virtual std::string description()
Get the description of the Matcher.
Definition matcher_base.hpp:138
+
Result run()
Run the Matcher object.
Definition matcher_base.hpp:154
+
virtual std::string failure_message_when_negated()
Get message to give on match failure when negated.
Definition matcher_base.hpp:125
+
virtual std::string failure_message()
Get message to give on match failure.
Definition matcher_base.hpp:112
+
virtual MatcherBase & set_message(std::string message)
Set a custom failure message.
Definition matcher_base.hpp:101
+
Definition result.hpp:13
+
Definition have_error.hpp:9
+
Contains the primary handlers for running Matchers.
+ + +
static Result handle_matcher(Matcher &matcher)
runs a negative expectation
Definition handler.hpp:65
+
static Result handle_matcher(Matcher &matcher)
runs a positive expectation
Definition handler.hpp:42
+
A helper base class that assists in pretty-printing various objects.
Definition pretty_matchers.hpp:27
+
static std::string to_word(const T &item)
Formats an object as a string when operator<< is available.
Definition pretty_matchers.hpp:122
+
static std::string to_sentence(const T &item)
Take a single object and format it as a sentance.
Definition pretty_matchers.hpp:106
+
std::string demangle(const char *name)
Definition util.hpp:38
+
+
+
+ + + + diff --git a/doxygen/md_LICENSE.html b/doxygen/md_LICENSE.html new file mode 100644 index 0000000..ff007c6 --- /dev/null +++ b/doxygen/md_LICENSE.html @@ -0,0 +1,112 @@ + + + + + + + +C++Spec: LICENSE + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
C++Spec 1.0.0 +
+
BDD testing for C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
LICENSE
+
+
+

The MIT License (MIT)

+

Copyright (c) 2016 Katherine Whitlock

+

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

+

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

+

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

+
+
+
+
+ + + + diff --git a/doxygen/menu.js b/doxygen/menu.js new file mode 100644 index 0000000..15f9c52 --- /dev/null +++ b/doxygen/menu.js @@ -0,0 +1,131 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +function initMenu(relPath,searchEnabled,serverSide,searchPage,search,treeview) { + function makeTree(data,relPath) { + let result=''; + if ('children' in data) { + result+='
    '; + for (let i in data.children) { + let url; + const link = data.children[i].url; + if (link.substring(0,1)=='^') { + url = link.substring(1); + } else { + url = relPath+link; + } + result+='
  • '+ + data.children[i].text+''+ + makeTree(data.children[i],relPath)+'
  • '; + } + result+='
'; + } + return result; + } + let searchBoxHtml; + if (searchEnabled) { + if (serverSide) { + searchBoxHtml='
'+ + '
'+ + '
'+ + ''+ + '
'+ + '
'+ + '
'+ + '
'; + } else { + searchBoxHtml='
'+ + ''+ + ''+ + ''+ + ''+ + ''+ + '
'+ + '
'+ + '
'; + } + } + + $('#main-nav').before('
'+ + ''+ + ''+ + '
'); + $('#main-nav').append(makeTree(menudata,relPath)); + $('#main-nav').children(':first').addClass('sm sm-dox').attr('id','main-menu'); + $('#main-menu').append('
  • '); + const $mainMenuState = $('#main-menu-state'); + let prevWidth = 0; + if ($mainMenuState.length) { + const initResizableIfExists = function() { + if (typeof initResizable==='function') initResizable(treeview); + } + // animate mobile menu + $mainMenuState.change(function() { + const $menu = $('#main-menu'); + let options = { duration: 250, step: initResizableIfExists }; + if (this.checked) { + options['complete'] = () => $menu.css('display', 'block'); + $menu.hide().slideDown(options); + } else { + options['complete'] = () => $menu.css('display', 'none'); + $menu.show().slideUp(options); + } + }); + // set default menu visibility + const resetState = function() { + const $menu = $('#main-menu'); + const newWidth = $(window).outerWidth(); + if (newWidth!=prevWidth) { + if ($(window).outerWidth()<768) { + $mainMenuState.prop('checked',false); $menu.hide(); + $('#searchBoxPos1').html(searchBoxHtml); + $('#searchBoxPos2').hide(); + } else { + $menu.show(); + $('#searchBoxPos1').empty(); + $('#searchBoxPos2').html(searchBoxHtml); + $('#searchBoxPos2').show(); + } + if (typeof searchBox!=='undefined') { + searchBox.CloseResultsWindow(); + } + prevWidth = newWidth; + } + } + $(window).ready(function() { resetState(); initResizableIfExists(); }); + $(window).resize(resetState); + } + $('#main-menu').smartmenus(); +} +/* @license-end */ diff --git a/doxygen/menudata.js b/doxygen/menudata.js new file mode 100644 index 0000000..e0ebe32 --- /dev/null +++ b/doxygen/menudata.js @@ -0,0 +1,62 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file +*/ +var menudata={children:[ +{text:"Main Page",url:"index.html"}, +{text:"Related Pages",url:"pages.html"}, +{text:"Concepts",url:"concepts.html"}, +{text:"Classes",url:"annotated.html",children:[ +{text:"Class List",url:"annotated.html"}, +{text:"Class Index",url:"classes.html"}, +{text:"Class Hierarchy",url:"inherits.html"}, +{text:"Class Members",url:"functions.html",children:[ +{text:"All",url:"functions.html",children:[ +{text:"a",url:"functions.html#index_a"}, +{text:"d",url:"functions.html#index_d"}, +{text:"e",url:"functions.html#index_e"}, +{text:"f",url:"functions.html#index_f"}, +{text:"g",url:"functions.html#index_g"}, +{text:"h",url:"functions.html#index_h"}, +{text:"i",url:"functions.html#index_i"}, +{text:"n",url:"functions.html#index_n"}, +{text:"p",url:"functions.html#index_p"}, +{text:"r",url:"functions.html#index_r"}, +{text:"s",url:"functions.html#index_s"}, +{text:"t",url:"functions.html#index_t"}]}, +{text:"Functions",url:"functions_func.html",children:[ +{text:"a",url:"functions_func.html#index_a"}, +{text:"d",url:"functions_func.html#index_d"}, +{text:"e",url:"functions_func.html#index_e"}, +{text:"f",url:"functions_func.html#index_f"}, +{text:"g",url:"functions_func.html#index_g"}, +{text:"h",url:"functions_func.html#index_h"}, +{text:"i",url:"functions_func.html#index_i"}, +{text:"n",url:"functions_func.html#index_n"}, +{text:"p",url:"functions_func.html#index_p"}, +{text:"r",url:"functions_func.html#index_r"}, +{text:"s",url:"functions_func.html#index_s"}, +{text:"t",url:"functions_func.html#index_t"}]}, +{text:"Variables",url:"functions_vars.html"}]}]}, +{text:"Files",url:"files.html",children:[ +{text:"File List",url:"files.html"}]}]} diff --git a/doxygen/navtree.css b/doxygen/navtree.css new file mode 100644 index 0000000..972d1b4 --- /dev/null +++ b/doxygen/navtree.css @@ -0,0 +1,327 @@ +#nav-tree .children_ul { + margin:0; + padding:4px; +} + +#nav-tree ul { + list-style:none outside none; + margin:0px; + padding:0px; +} + +#nav-tree li { + white-space:nowrap; + margin:0; + padding:0; +} + +#nav-tree .plus { + margin:0px; +} + +#nav-tree .selected { + position: relative; + background-color: #DCE2EF; + border-radius: 0 6px 6px 0; + /*margin-right: 5px;*/ +} + +#nav-tree img { + margin:0px; + padding:0px; + border:0px; + vertical-align: middle; +} + +#nav-tree a { + text-decoration:none; + padding:0px; + margin:0px; +} + +#nav-tree .label { + margin:0px; + padding:0px; + font: 12px 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; + line-height: 22px; +} + +#nav-tree .label a { + padding:2px; +} + +#nav-tree .selected a { + text-decoration:none; + color:#3D578C; +} + +#nav-tree .children_ul { + margin:0px; + padding:0px; +} + +#nav-tree .item { + margin: 0 6px 0 -5px; + padding: 0 0 0 5px; + height: 22px; +} + +#nav-tree { + padding: 0px 0px; + font-size:14px; + overflow:auto; +} + +#doc-content { + overflow:auto; + display:block; + padding:0px; + margin:0px; + -webkit-overflow-scrolling : touch; /* iOS 5+ */ +} + +#side-nav { + padding:0 6px 0 0; + margin: 0px; + display:block; + position: absolute; + left: 0px; + overflow : hidden; +} + +.ui-resizable .ui-resizable-handle { + display:block; +} + +.ui-resizable-e { + transition: opacity 0.5s ease; + background-color: #DCE2EF; + opacity:0; + cursor:col-resize; + height:100%; + right:0; + top:0; + width:6px; + position: relative; +} + +.ui-resizable-e:after { + content: ''; + display: block; + top: 50%; + left: 1px; + width: 2px; + height: 15px; + border-left: 1px solid #9CAFD4; + border-right: 1px solid #9CAFD4; + position: absolute; +} + +.ui-resizable-e:hover { + opacity: 1; +} + +.ui-resizable-handle { + display:none; + font-size:0.1px; + position:absolute; + z-index:1; +} + +#nav-tree-contents { + margin: 6px 0px 0px 0px; +} + +#nav-tree { + background-color: #F9FAFC; + -webkit-overflow-scrolling : touch; /* iOS 5+ */ + scrollbar-width: thin; + border-right: 1px solid #C4CFE5; + padding-left: 5px; +} + +#nav-sync { + position:absolute; + top:0px; + right:0px; + z-index:1; +} + +#nav-sync img { + opacity:0.3; +} + +div.nav-sync-icon { + position: relative; + width: 24px; + height: 17px; + left: -6px; + top: -1px; + opacity: 0.7; + display: inline-block; + background-color: #F9FAFC; + border: 1px solid #C4CFE5; + box-sizing: content-box; +} + +div.nav-sync-icon:hover { + background-color: #EEF1F7; + opacity: 1.0; +} + +div.nav-sync-icon.active:after { + content: ''; + background-color: #F9FAFC; + border-top: 2px solid #C4CFE5; + position: absolute; + width: 16px; + height: 0px; + top: 7px; + left: 4px; +} + +div.nav-sync-icon.active:hover:after { + border-top: 2px solid #6884BD; +} + +span.sync-icon-left { + position: absolute; + padding: 0; + margin: 0; + top: 3px; + left: 4px; + display: inline-block; + width: 8px; + height: 8px; + border-left: 2px solid #C4CFE5; + border-top: 2px solid #C4CFE5; + transform: rotate(-45deg); +} + +span.sync-icon-right { + position: absolute; + padding: 0; + margin: 0; + top: 3px; + left: 10px; + display: inline-block; + width: 8px; + height: 8px; + border-right: 2px solid #C4CFE5; + border-bottom: 2px solid #C4CFE5; + transform: rotate(-45deg); +} + +div.nav-sync-icon:hover span.sync-icon-left { + border-left: 2px solid #6884BD; + border-top: 2px solid #6884BD; +} + +div.nav-sync-icon:hover span.sync-icon-right { + border-right: 2px solid #6884BD; + border-bottom: 2px solid #6884BD; +} + +#nav-path ul { + border-top: 1px solid #C4CFE5; +} + +@media print +{ + #nav-tree { display: none; } + div.ui-resizable-handle { display: none; position: relative; } +} + +/*---------------------------*/ +#container { + display: grid; + grid-template-columns: auto auto; + overflow: hidden; +} + +#page-nav { + background: #F9FAFC; + display: block; + width: 250px; + box-sizing: content-box; + position: relative; + border-left: 1px solid #C4CFE5; +} + +#page-nav-tree { + display: inline-block; +} + +#page-nav-resize-handle { + transition: opacity 0.5s ease; + background-color: #DCE2EF; + opacity:0; + cursor:col-resize; + height:100%; + right:0; + top:0; + width:6px; + position: relative; + z-index: 1; + user-select: none; +} + +#page-nav-resize-handle:after { + content: ''; + display: block; + top: 50%; + left: 1px; + width: 2px; + height: 15px; + border-left: 1px solid #9CAFD4; + border-right: 1px solid #9CAFD4; + position: absolute; +} + +#page-nav-resize-handle.dragging, +#page-nav-resize-handle:hover { + opacity: 1; +} + +#page-nav-contents { + padding: 0; + margin: 0; + display: block; + top: 0; + left: 0; + height: 100%; + width: 100%; + position: absolute; + overflow: auto; + scrollbar-width: thin; + -webkit-overflow-scrolling : touch; /* iOS 5+ */ +} + +ul.page-outline, +ul.page-outline ul { + text-indent: 0; + list-style: none outside none; + padding: 0 0 0 4px; +} + +ul.page-outline { + margin: 0 4px 4px 6px; +} + +ul.page-outline div.item { + font: 12px 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; + line-height: 22px; +} + +ul.page-outline li { + white-space: nowrap; +} + +ul.page-outline li.vis { + background-color: #EEF1F7; +} + +#container.resizing { + cursor: col-resize; + user-select: none; +} diff --git a/doxygen/navtree.js b/doxygen/navtree.js new file mode 100644 index 0000000..fac8d01 --- /dev/null +++ b/doxygen/navtree.js @@ -0,0 +1,901 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ + +function initNavTree(toroot,relpath,allMembersFile) { + let navTreeSubIndices = []; + const ARROW_DOWN = ''; + const ARROW_RIGHT = ''; + const NAVPATH_COOKIE_NAME = ''+'navpath'; + const fullSidebar = typeof page_layout!=='undefined' && page_layout==1; + + function getScrollBarWidth () { + let outer = $('
    ').css({visibility: 'hidden', width: 100, overflow: 'scroll', scrollbarWidth: 'thin'}).appendTo('body'); + let widthWithScroll = $('
    ').css({width: '100%'}).appendTo(outer).outerWidth(); + outer.remove(); + return 100 - widthWithScroll; + } + const scrollbarWidth = getScrollBarWidth(); + + function adjustSyncIconPosition() { + if (!fullSidebar) { + const nt = document.getElementById("nav-tree"); + const hasVerticalScrollbar = nt.scrollHeight > nt.clientHeight; + $("#nav-sync").css({right:parseInt(hasVerticalScrollbar?scrollbarWidth:0)}); + } + } + + const getData = function(varName) { + const i = varName.lastIndexOf('/'); + const n = i>=0 ? varName.substring(i+1) : varName; + const e = n.replace(/-/g,'_'); + return window[e]; + } + + const stripPath = function(uri) { + return uri.substring(uri.lastIndexOf('/')+1); + } + + const stripPath2 = function(uri) { + const i = uri.lastIndexOf('/'); + const s = uri.substring(i+1); + const m = uri.substring(0,i+1).match(/\/d\w\/d\w\w\/$/); + return m ? uri.substring(i-6) : s; + } + + const hashValue = function() { + return $(location).attr('hash').substring(1).replace(/[^\w-]/g,''); + } + + const hashUrl = function() { + return '#'+hashValue(); + } + + const pathName = function() { + return $(location).attr('pathname').replace(/[^-A-Za-z0-9+&@#/%?=~_|!:,.;()]/g, ''); + } + + const storeLink = function(link) { + if (!$("#nav-sync").hasClass('sync')) { + Cookie.writeSetting(NAVPATH_COOKIE_NAME,link,0); + } + } + + const deleteLink = function() { + Cookie.eraseSetting(NAVPATH_COOKIE_NAME); + } + + const cachedLink = function() { + return Cookie.readSetting(NAVPATH_COOKIE_NAME,''); + } + + const getScript = function(scriptName,func) { + const head = document.getElementsByTagName("head")[0]; + const script = document.createElement('script'); + script.id = scriptName; + script.type = 'text/javascript'; + script.onload = function() { func(); adjustSyncIconPosition(); } + script.src = scriptName+'.js'; + head.appendChild(script); + } + + const createIndent = function(o,domNode,node) { + let level=-1; + let n = node; + while (n.parentNode) { level++; n=n.parentNode; } + if (node.childrenData) { + const imgNode = document.createElement("span"); + imgNode.className = 'arrow'; + imgNode.style.paddingLeft=(16*level).toString()+'px'; + imgNode.innerHTML=ARROW_RIGHT; + node.plus_img = imgNode; + node.expandToggle = document.createElement("a"); + node.expandToggle.href = "javascript:void(0)"; + node.expandToggle.onclick = function() { + if (node.expanded) { + $(node.getChildrenUL()).slideUp("fast",adjustSyncIconPosition); + $(node.plus_img.childNodes[0]).removeClass('opened').addClass('closed'); + node.expanded = false; + } else { + expandNode(o, node, false, true); + } + } + node.expandToggle.appendChild(imgNode); + domNode.appendChild(node.expandToggle); + } else { + let span = document.createElement("span"); + span.className = 'arrow'; + span.style.width = 16*(level+1)+'px'; + span.innerHTML = ' '; + domNode.appendChild(span); + } + } + + let animationInProgress = false; + + const gotoAnchor = function(anchor,aname) { + let pos, docContent = $('#doc-content'); + let ancParent = $(anchor.parent()); + if (ancParent.hasClass('memItemLeft') || ancParent.hasClass('memtitle') || + ancParent.hasClass('fieldname') || ancParent.hasClass('fieldtype') || + ancParent.is(':header')) { + pos = ancParent.offset().top; + } else if (anchor.position()) { + pos = anchor.offset().top; + } + if (pos) { + const dcOffset = docContent.offset().top; + const dcHeight = docContent.height(); + const dcScrHeight = docContent[0].scrollHeight + const dcScrTop = docContent.scrollTop(); + let dist = Math.abs(Math.min(pos-dcOffset,dcScrHeight-dcHeight-dcScrTop)); + animationInProgress = true; + docContent.animate({ + scrollTop: pos + dcScrTop - dcOffset + },Math.max(50,Math.min(500,dist)),function() { + animationInProgress=false; + if (anchor.parent().attr('class')=='memItemLeft') { + let rows = $('.memberdecls tr[class$="'+hashValue()+'"]'); + glowEffect(rows.children(),300); // member without details + } else if (anchor.parent().attr('class')=='fieldname') { + glowEffect(anchor.parent().parent(),1000); // enum value + } else if (anchor.parent().attr('class')=='fieldtype') { + glowEffect(anchor.parent().parent(),1000); // struct field + } else if (anchor.parent().is(":header")) { + glowEffect(anchor.parent(),1000); // section header + } else { + glowEffect(anchor.next(),1000); // normal member + } + }); + } + } + + function htmlToNode(html) { + const template = document.createElement('template'); + template.innerHTML = html; + const nNodes = template.content.childNodes.length; + if (nNodes !== 1) { + throw new Error(`html parameter must represent a single node; got ${nNodes}. `); + } + return template.content.firstChild; + } + + const newNode = function(o, po, text, link, childrenData, lastNode) { + const node = { + children : [], + childrenData : childrenData, + depth : po.depth + 1, + relpath : po.relpath, + isLast : lastNode, + li : document.createElement("li"), + parentNode : po, + itemDiv : document.createElement("div"), + labelSpan : document.createElement("span"), + expanded : false, + childrenUL : null, + getChildrenUL : function() { + if (!this.childrenUL) { + this.childrenUL = document.createElement("ul"); + this.childrenUL.className = "children_ul"; + this.childrenUL.style.display = "none"; + this.li.appendChild(node.childrenUL); + } + return node.childrenUL; + }, + }; + + node.itemDiv.className = "item"; + node.labelSpan.className = "label"; + createIndent(o,node.itemDiv,node); + node.itemDiv.appendChild(node.labelSpan); + node.li.appendChild(node.itemDiv); + + const a = document.createElement("a"); + node.labelSpan.appendChild(a); + po.getChildrenUL().appendChild(node.li); + a.appendChild(htmlToNode(''+text+'')); + if (link) { + let url; + if (link.substring(0,1)=='^') { + url = link.substring(1); + link = url; + } else { + url = node.relpath+link; + } + a.className = stripPath(link.replace('#',':')); + if (link.indexOf('#')!=-1) { + const aname = '#'+link.split('#')[1]; + const srcPage = stripPath(pathName()); + const targetPage = stripPath(link.split('#')[0]); + a.href = srcPage!=targetPage ? url : aname; + a.onclick = function() { + storeLink(link); + aPPar = $(a).parent().parent(); + if (!aPPar.hasClass('selected')) { + $('.item').removeClass('selected'); + $('.item').removeAttr('id'); + aPPar.addClass('selected'); + aPPar.attr('id','selected'); + } + const anchor = $(aname); + gotoAnchor(anchor,aname); + }; + } else { + a.href = url; + a.onclick = () => storeLink(link); + } + } else if (childrenData != null) { + a.className = "nolink"; + a.href = "javascript:void(0)"; + a.onclick = node.expandToggle.onclick; + } + return node; + } + + const showRoot = function() { + const headerHeight = $("#top").height(); + const footerHeight = $("#nav-path").height(); + const windowHeight = $(window).height() - headerHeight - footerHeight; + (function() { // retry until we can scroll to the selected item + try { + const navtree=$('#nav-tree'); + navtree.scrollTo('#selected',100,{offset:-windowHeight/2}); + } catch (err) { + setTimeout(arguments.callee, 0); + } + })(); + } + + const expandNode = function(o, node, imm, setFocus) { + if (node.childrenData && !node.expanded) { + if (typeof(node.childrenData)==='string') { + const varName = node.childrenData; + getScript(node.relpath+varName,function() { + node.childrenData = getData(varName); + expandNode(o, node, imm, setFocus); + }); + } else { + if (!node.childrenVisited) { + getNode(o, node); + } + $(node.getChildrenUL()).slideDown("fast",adjustSyncIconPosition); + $(node.plus_img.childNodes[0]).addClass('opened').removeClass('closed'); + node.expanded = true; + if (setFocus) { + $(node.expandToggle).focus(); + } + } + } + } + + const glowEffect = function(n,duration) { + n.addClass('glow').delay(duration).queue(function(next) { + $(this).removeClass('glow');next(); + }); + } + + const highlightAnchor = function() { + const aname = hashUrl(); + const anchor = $(aname); + gotoAnchor(anchor,aname); + } + + const selectAndHighlight = function(hash,n) { + let a; + if (hash) { + const link=stripPath(pathName())+':'+hash.substring(1); + a=$('.item a[class$="'+link+'"]'); + } + if (a && a.length) { + a.parent().parent().addClass('selected'); + a.parent().parent().attr('id','selected'); + highlightAnchor(); + } else if (n) { + $(n.itemDiv).addClass('selected'); + $(n.itemDiv).attr('id','selected'); + } + let topOffset=5; + if ($('#nav-tree-contents .item:first').hasClass('selected')) { + topOffset+=25; + } + showRoot(); + } + + const showNode = function(o, node, index, hash) { + if (node && node.childrenData) { + if (typeof(node.childrenData)==='string') { + const varName = node.childrenData; + getScript(node.relpath+varName,function() { + node.childrenData = getData(varName); + showNode(o,node,index,hash); + }); + } else { + if (!node.childrenVisited) { + getNode(o, node); + } + $(node.getChildrenUL()).css({'display':'block'}); + $(node.plus_img.childNodes[0]).removeClass('closed').addClass('opened'); + node.expanded = true; + const n = node.children[o.breadcrumbs[index]]; + if (index+10) { // try root page without hash as fallback + gotoUrl(o,root,'',relpath); + } else { + o.breadcrumbs = $.extend(true, [], nti); + if (!o.breadcrumbs && root!=NAVTREE[0][1]) { // fallback: show index + navTo(o,NAVTREE[0][1],"",relpath); + $('.item').removeClass('selected'); + $('.item').removeAttr('id'); + } + if (o.breadcrumbs) { + o.breadcrumbs.unshift(0); // add 0 for root node + showNode(o, o.node, 0, hash); + } + } + } + + const gotoUrl = function(o,root,hash,relpath) { + const url=root+hash; + let i=-1; + while (NAVTREEINDEX[i+1]<=url) i++; + if (i==-1) { i=0; root=NAVTREE[0][1]; } // fallback: show index + if (navTreeSubIndices[i]) { + gotoNode(o,i,root,hash,relpath) + } else { + getScript(relpath+'navtreeindex'+i,function() { + navTreeSubIndices[i] = window['NAVTREEINDEX'+i]; + if (navTreeSubIndices[i]) { + gotoNode(o,i,root,hash,relpath); + } + }); + } + } + + const navTo = function(o,root,hash,relpath) { + const link = cachedLink(); + if (link) { + const parts = link.split('#'); + root = parts[0]; + hash = parts.length>1 ? '#'+parts[1].replace(/[^\w-]/g,'') : ''; + } + if (hash.match(/^#l\d+$/)) { + const anchor=$('a[name='+hash.substring(1)+']'); + glowEffect(anchor.parent(),1000); // line number + hash=''; // strip line number anchors + } + gotoUrl(o,root,hash,relpath); + } + + const showSyncOff = function(n,relpath) { + n.html(''); + } + + const showSyncOn = function(n,relpath) { + n.html(''); + } + + const o = { + toroot : toroot, + node : { + childrenData : NAVTREE, + children : [], + childrenUL : document.createElement("ul"), + getChildrenUL : function() { return this.childrenUL }, + li : document.getElementById("nav-tree-contents"), + depth : 0, + relpath : relpath, + expanded : false, + isLast : true, + plus_img : document.createElement("span"), + }, + }; + o.node.li.appendChild(o.node.childrenUL); + o.node.plus_img.className = 'arrow'; + o.node.plus_img.innerHTML = ARROW_RIGHT; + + const navSync = $('#nav-sync'); + if (cachedLink()) { + showSyncOff(navSync,relpath); + navSync.removeClass('sync'); + } else { + showSyncOn(navSync,relpath); + } + + navSync.click(() => { + const navSync = $('#nav-sync'); + if (navSync.hasClass('sync')) { + navSync.removeClass('sync'); + showSyncOff(navSync,relpath); + storeLink(stripPath2(pathName())+hashUrl()); + } else { + navSync.addClass('sync'); + showSyncOn(navSync,relpath); + deleteLink(); + } + }); + + navTo(o,toroot,hashUrl(),relpath); + showRoot(); + + $(window).bind('hashchange', () => { + if (!animationInProgress) { + if (window.location.hash && window.location.hash.length>1) { + let a; + if ($(location).attr('hash')) { + const clslink=stripPath(pathName())+':'+hashValue(); + a=$('.item a[class$="'+clslink.replace(/ try to keep right panel width + const shrinkLeft = Math.min(deficit, leftPanelWidth-minPanelWidth); + leftPanelWidth -= shrinkLeft; + const remainingDeficit = deficit - shrinkLeft; + const shrinkRight = Math.min(remainingDeficit, rightPanelWidth-minPanelWidth); + rightPanelWidth -= shrinkRight; + } else { // dragging right handle -> try to keep left panel width + const shrinkRight = Math.min(deficit, rightPanelWidth-minPanelWidth); + rightPanelWidth -= shrinkRight; + const remainingDeficit = deficit - shrinkRight; + const shrinkLeft = Math.min(remainingDeficit, leftPanelWidth-minPanelWidth); + leftPanelWidth -= shrinkLeft; + } + } else { + rightPanelWidth = pagenav.length ? Math.max(minPanelWidth,rightPanelWidth) : 0; + leftPanelWidth = Math.max(minPanelWidth,leftPanelWidth); + } + return { leftPanelWidth, rightPanelWidth } + } + + function updateWidths(sidenavWidth,pagenavWidth,dragLeft) + { + const widths = constrainPanelWidths(sidenavWidth,pagenavWidth,dragLeft); + const widthStr = parseFloat(widths.leftPanelWidth)+"px"; + content.css({marginLeft:widthStr}); + if (fullSidebar) { + footer.css({marginLeft:widthStr}); + if (mainnav) { + mainnav.css({marginLeft:widthStr}); + } + } + sidenav.css({width:widthStr}); + if (pagenav.length) { + container.css({gridTemplateColumns:'auto '+parseFloat(widths.rightPanelWidth)+'px'}); + if (!dragLeft) { + pagenav.css({width:parseFloat(widths.rightPanelWidth-1)+'px'}); + } + } + return widths; + } + + function resizeWidth(dragLeft) { + const sidenavWidth = $(sidenav).outerWidth()-barWidth; + let pagenavWidth = pagenav.length ? $(pagenav).outerWidth() : 0; + const widths = updateWidths(sidenavWidth,pagenavWidth,dragLeft); + Cookie.writeSetting(RESIZE_COOKIE_NAME,widths.leftPanelWidth-barWidth); + if (pagenav.length) { + Cookie.writeSetting(PAGENAV_COOKIE_NAME,widths.rightPanelWidth); + } + } + + function restoreWidth(sidenavWidth,pagenavWidth) { + updateWidths(sidenavWidth,pagenavWidth,false); + showHideNavBar(); + } + + function resizeHeight() { + const headerHeight = header.outerHeight(); + const windowHeight = $(window).height(); + let contentHeight; + const footerHeight = footer.outerHeight(); + let navtreeHeight,sideNavHeight; + if (!fullSidebar) { + contentHeight = windowHeight - headerHeight - footerHeight - 1; + navtreeHeight = contentHeight; + sideNavHeight = contentHeight; + } else if (fullSidebar) { + contentHeight = windowHeight - footerHeight - 1; + navtreeHeight = windowHeight - headerHeight - 1; + sideNavHeight = windowHeight - 1; + if (mainnav) { + contentHeight -= mainnav.outerHeight(); + } + } + navtree.css({height:navtreeHeight + "px"}); + sidenav.css({height:sideNavHeight + "px"}); + content.css({height:contentHeight + "px"}); + resizeWidth(false); + showHideNavBar(); + if (location.hash.slice(1)) { + (document.getElementById(location.hash.slice(1))||document.body).scrollIntoView(); + } + } + + header = $("#top"); + content = $("#doc-content"); + footer = $("#nav-path"); + sidenav = $("#side-nav"); + if (document.getElementById('main-nav')) { + mainnav = $("#main-nav"); + } + navtree = $("#nav-tree"); + pagenav = $("#page-nav"); + container = $("#container"); + $(".side-nav-resizable").resizable({resize: function(e, ui) { resizeWidth(true); } }); + $(sidenav).resizable({ minWidth: 0 }); + if (pagenav.length) { + pagehandle = $("#page-nav-resize-handle"); + pagehandle.on('mousedown touchstart',function(e) { + $('body').addClass('resizing'); + pagehandle.addClass('dragging'); + $(document).on('mousemove touchmove',function(e) { + const clientX = e.clientX || e.originalEvent.touches[0].clientX; + let pagenavWidth = container[0].offsetWidth-clientX+barWidth/2; + const sidenavWidth = sidenav.width(); + const widths = constrainPanelWidths(sidenavWidth,pagenavWidth,false); + container.css({gridTemplateColumns:'auto '+parseFloat(widths.rightPanelWidth)+'px'}); + pagenav.css({width:parseFloat(widths.rightPanelWidth-1)+'px'}); + content.css({marginLeft:parseFloat(widths.leftPanelWidth)+'px'}); + Cookie.writeSetting(PAGENAV_COOKIE_NAME,pagenavWidth); + }); + $(document).on('mouseup touchend', function(e) { + $('body').removeClass('resizing'); + pagehandle.removeClass('dragging'); + $(document).off('mousemove mouseup touchmove touchend'); + }); + }); + } else { + container.css({gridTemplateColumns:'auto'}); + } + const width = parseInt(Cookie.readSetting(RESIZE_COOKIE_NAME,250)); + const pagenavWidth = parseInt(Cookie.readSetting(PAGENAV_COOKIE_NAME,250)); + if (width) { restoreWidth(width+barWidth,pagenavWidth); } else { resizeWidth(); } + const url = location.href; + const i=url.indexOf("#"); + if (i>=0) window.location.hash=url.substr(i); + const _preventDefault = function(evt) { evt.preventDefault(); }; + $("#splitbar").bind("dragstart", _preventDefault).bind("selectstart", _preventDefault); + $(window).ready(function() { + let lastWidth = -1; + let lastHeight = -1; + $(window).resize(function() { + const newWidth = $(this).width(), newHeight = $(this).height(); + if (newWidth!=lastWidth || newHeight!=lastHeight) { + resizeHeight(); + navtree_trampoline.updateContentTop(); + lastWidth = newWidth; + lastHeight = newHeight; + } + }); + resizeHeight(); + lastWidth = $(window).width(); + lastHeight = $(window).height(); + content.scroll(function() { + navtree_trampoline.updateContentTop(); + }); + }); + } + + + function initPageToc() { + const topMapping = []; + const toc_contents = $('#page-nav-contents'); + const content=$('