From 34a990be7a0f1f23d90bc32a79bd68783dad92f3 Mon Sep 17 00:00:00 2001 From: Brian Park Date: Sun, 26 Apr 2020 21:21:39 -0700 Subject: [PATCH 1/9] README.md: Fix typos --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index f02b11d..018bf70 100644 --- a/README.md +++ b/README.md @@ -1216,7 +1216,7 @@ It may be possible to run simple unit tests written using [Google Test](https://github.com/google/googletest/) API on an Arduino platform by using the [aunit/contrib/gtest.h](src/aunit/contrib/gtest.h) adapter. This -adapter layer provides a number of macros Google Test macros which map to +adapter layer provides a number of Google Test macros which map to their equivalent macros in AUnit: * `ASSERT_EQ(e, a)` - `assertEqual()` @@ -1419,7 +1419,7 @@ integer type. ### Testing Private Helper Methods -There is a school of throught which says that unit tests should test only the +There is a school of thought which says that unit tests should test only the publically exposed methods of a class or library. I agree mostly with that sentiment, but not rigidly. I think it is sometimes useful to write unit tests for `protected` or `private` methods. For example, when creating a chain of From fb1c0debc5e799cb17316e49542a713d6e952021 Mon Sep 17 00:00:00 2001 From: "brewmanz(ZB15)" Date: Tue, 15 Sep 2020 16:57:51 +1200 Subject: [PATCH 2/9] TimeoutType uint8_t to unsigned int. No doxygen as 1.8.13 != 1.8.17 --- src/aunit/TestRunner.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/aunit/TestRunner.h b/src/aunit/TestRunner.h index f22c083..808f355 100644 --- a/src/aunit/TestRunner.h +++ b/src/aunit/TestRunner.h @@ -40,8 +40,8 @@ namespace aunit { */ class TestRunner { public: - /** Integer type of the timeout parameter. Seconds. */ - typedef uint8_t TimeoutType; + /** Integer type of the timeout parameter. Seconds. Default is kTimeoutDefault = 10 */ + typedef unsigned int TimeoutType; /** Run all tests using the current runner. */ static void run() { getRunner()->runTest(); } From 96b0ad93388c8ec80d39a126e79575925bc829d6 Mon Sep 17 00:00:00 2001 From: "brewmanz(ZB15)" Date: Wed, 16 Sep 2020 09:57:46 +1200 Subject: [PATCH 3/9] redefine TimeoutType as uint16_t; add comment on limit. --- src/aunit/TestRunner.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/aunit/TestRunner.h b/src/aunit/TestRunner.h index 808f355..6498ce2 100644 --- a/src/aunit/TestRunner.h +++ b/src/aunit/TestRunner.h @@ -41,7 +41,7 @@ namespace aunit { class TestRunner { public: /** Integer type of the timeout parameter. Seconds. Default is kTimeoutDefault = 10 */ - typedef unsigned int TimeoutType; + typedef uint16_t int TimeoutType; /** Run all tests using the current runner. */ static void run() { getRunner()->runTest(); } @@ -105,7 +105,7 @@ class TestRunner { * Set test runner timeout across all tests, in seconds. Set to 0 for * infinite timeout. Useful for preventing testing() test cases that never * end. This is a timeout for the TestRunner itself, not for individual - * tests. + * tests. Upper limit is 65535 seconds (just over 18 hours). */ static void setTimeout(TimeoutType seconds) { getRunner()->setRunnerTimeout(seconds); From f83b3ca521dd547a1d033e464418dda5b10b418e Mon Sep 17 00:00:00 2001 From: "brewmanz(ZB15)" Date: Wed, 16 Sep 2020 10:08:19 +1200 Subject: [PATCH 4/9] Oops fix typo --- src/aunit/TestRunner.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/aunit/TestRunner.h b/src/aunit/TestRunner.h index 6498ce2..f1bbbea 100644 --- a/src/aunit/TestRunner.h +++ b/src/aunit/TestRunner.h @@ -41,7 +41,7 @@ namespace aunit { class TestRunner { public: /** Integer type of the timeout parameter. Seconds. Default is kTimeoutDefault = 10 */ - typedef uint16_t int TimeoutType; + typedef uint16_t TimeoutType; /** Run all tests using the current runner. */ static void run() { getRunner()->runTest(); } From 3ddd7ab355f9c1de947c1ba51ff14b8a96ca203f Mon Sep 17 00:00:00 2001 From: Brian Park Date: Tue, 15 Sep 2020 15:38:59 -0700 Subject: [PATCH 5/9] README.md: Update doc for setTimeout(), now takes uint16_t instead of uint8_t, for an upper limit of 18 hours (see #57) --- CHANGELOG.md | 3 +++ README.md | 22 +++++++++++----------- 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1de8c3f..5048dcb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,9 @@ # Changelog * Unreleased + * Increase maximum allowed `setTimeout()` from 255 seconds to 65535 seconds + (18.2 hours). (See [Issue + #57](https://github.com/bxparks/AUnit/issues/57)). * 1.3.2 (2020-02-29) * Fix typos in README.md. No functional change. * 1.3.1 (2019-07-31) diff --git a/README.md b/README.md index 018bf70..c61f541 100644 --- a/README.md +++ b/README.md @@ -1181,10 +1181,14 @@ which accidentally runs forever because the code forgets to call an explicit `pass()`, `fail()` or `skip()`. The `TestRunner` in AUnit applies a time out value to all the test cases that it -runs. The default time out is 10 seconds. Currently, the -time out value is global to all test cases, individual test time out values -cannot be set independently. If a test does not finish before that time, then -the test is marked as `timed out` (internally implemented by the +runs. The default time out is 10 seconds. A timeout value of `0` means an +infinite timeout, which means that the `testing()` test case may run forever. +The value of the timeout is stored as a `uint16_t` type, so the maximum timeout +is 65535 seconds or a bit over 18 hours. + +Currently, the time out value is global to all test cases, individual test time +out values cannot be set independently. If a test does not finish before that +time, then the test is marked as `timed out` (internally implemented by the `Test::expire()` method) and a message is printed like this: ``` Test looping_until timed out. @@ -1201,13 +1205,6 @@ void setup() { } ``` -A timeout value of `0` means an infinite timeout, which means that the -`testing()` test case may run forever. To conserve static memory, the value of -the timeout is stored as a single byte `uint8_t`, so the maximum timeout is 255 -seconds or 4m15s. (It could be argued that a test taking longer than this is not -really a unit test but an integration test, and should probably use a different -framework, but let me know if you truly need a timeout of greater than 4m15s). - ***ArduinoUnit Compatibility***: _Only available in AUnit._ ## GoogleTest Adapter @@ -1592,6 +1589,9 @@ incorporate everything, but I will give your ideas serious consideration. * Created by Brian T. Park (brian@xparks.net). * The Google Test adapter (`gtest.h`) was created by Chris Johnson (chrisjohnsonmail@gmail.com). +* @brewmanz increased the maximum allowed value of `TestRunner::setTimeout()` + from 255 seconds to 65535 seconds (18.2 hours). (See [Issue + #57](https://github.com/bxparks/AUnit/issues/57)). * The design and syntax of many macros (e.g. `test()`, `assertXxx()`) were borrowed from the [ArduinoUnit](https://github.com/mmurdoch/arduinounit) project to allow AUnit to be almost a drop-in replacement. Many thanks to From a68c710697878684e959c0c5b902902e607b660d Mon Sep 17 00:00:00 2001 From: Brian Park Date: Tue, 15 Sep 2020 15:43:33 -0700 Subject: [PATCH 6/9] Bump version to 1.3.3 --- CHANGELOG.md | 1 + README.md | 8 +++----- docs/doxygen.cfg | 2 +- library.properties | 2 +- src/AUnit.h | 4 ++-- src/AUnitVerbose.h | 4 ++-- 6 files changed, 10 insertions(+), 11 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5048dcb..58faef3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,7 @@ # Changelog * Unreleased +* 1.3.3 (2020-09-15) * Increase maximum allowed `setTimeout()` from 255 seconds to 65535 seconds (18.2 hours). (See [Issue #57](https://github.com/bxparks/AUnit/issues/57)). diff --git a/README.md b/README.md index c61f541..ad6bb7c 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,9 @@ tools to verify, upload and validate the unit tests to the microcontroller, instead of having to go through the Arduino IDE. Both the AUniter and UnixHostDuino tools can be used in a continuous integration system like Jenkins. -Version: 1.3.2 (2020-02-29) +**Version**: 1.3.3 (2020-09-15) + +**Changelog**: [CHANGELOG.md](CHANGELOG.md). [![AUniter Jenkins Badge](https://us-central1-xparks2018.cloudfunctions.net/badge?project=AUnit)](https://github.com/bxparks/AUniter) @@ -1530,10 +1532,6 @@ ESP8266 - ESP-01 (static) | 47356 | compile | 33128 | Not all unit test sketches will experience a savings of 65% of flash memory with AUnit, but a savings of 30-50% seems to be common. -## Changelog - -See [CHANGELOG.md](CHANGELOG.md). - ## System Requirements ### Tool Chain diff --git a/docs/doxygen.cfg b/docs/doxygen.cfg index a71ffaa..e102848 100644 --- a/docs/doxygen.cfg +++ b/docs/doxygen.cfg @@ -38,7 +38,7 @@ PROJECT_NAME = "AUnit" # could be handy for archiving the generated documentation or if some version # control system is used. -PROJECT_NUMBER = 1.3.2 +PROJECT_NUMBER = 1.3.3 # Using the PROJECT_BRIEF tag one can provide an optional one line description # for a project that appears at the top of each page and should give viewer a diff --git a/library.properties b/library.properties index 8183c6e..0128265 100644 --- a/library.properties +++ b/library.properties @@ -1,5 +1,5 @@ name=AUnit -version=1.3.2 +version=1.3.3 author=Brian T. Park maintainer=Brian T. Park sentence=A unit testing framework for Arduino platforms inspired by ArduinoUnit and Google Test. diff --git a/src/AUnit.h b/src/AUnit.h index ed4b1ac..24630fe 100644 --- a/src/AUnit.h +++ b/src/AUnit.h @@ -56,7 +56,7 @@ SOFTWARE. #include "aunit/TestMacros.h" // Version format: xxyyzz == "xx.yy.zz" -#define AUNIT_VERSION 10302 -#define AUNIT_VERSION_STRING "1.3.2" +#define AUNIT_VERSION 10303 +#define AUNIT_VERSION_STRING "1.3.3" #endif diff --git a/src/AUnitVerbose.h b/src/AUnitVerbose.h index 5955984..64fdecc 100644 --- a/src/AUnitVerbose.h +++ b/src/AUnitVerbose.h @@ -50,7 +50,7 @@ SOFTWARE. #include "aunit/TestMacros.h" // Version format: xxyyzz == "xx.yy.zz" -#define AUNIT_VERSION 10302 -#define AUNIT_VERSION_STRING "1.3.2" +#define AUNIT_VERSION 10303 +#define AUNIT_VERSION_STRING "1.3.3" #endif From 375c81b3aadd13a503533c0ddc539fbac1fcd2c7 Mon Sep 17 00:00:00 2001 From: Brian Park Date: Tue, 15 Sep 2020 15:47:48 -0700 Subject: [PATCH 7/9] docs: Upgrade doxygen.cfg from 1.8.13 to 1.8.17 --- docs/doxygen.cfg | 232 ++++++++++++++++++++++++++++++++--------------- 1 file changed, 157 insertions(+), 75 deletions(-) diff --git a/docs/doxygen.cfg b/docs/doxygen.cfg index e102848..f58b6a6 100644 --- a/docs/doxygen.cfg +++ b/docs/doxygen.cfg @@ -1,4 +1,4 @@ -# Doxyfile 1.8.13 +# Doxyfile 1.8.17 # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project. @@ -17,11 +17,11 @@ # Project related configuration options #--------------------------------------------------------------------------- -# This tag specifies the encoding used for all characters in the config file -# that follow. The default is UTF-8 which is also the encoding used for all text -# before the first occurrence of this tag. Doxygen uses libiconv (or the iconv -# built into libc) for the transcoding. See http://www.gnu.org/software/libiconv -# for the list of possible encodings. +# This tag specifies the encoding used for all characters in the configuration +# file that follow. The default is UTF-8 which is also the encoding used for all +# text before the first occurrence of this tag. Doxygen uses libiconv (or the +# iconv built into libc) for the transcoding. See +# https://www.gnu.org/software/libiconv/ for the list of possible encodings. # The default value is: UTF-8. DOXYFILE_ENCODING = UTF-8 @@ -93,6 +93,14 @@ ALLOW_UNICODE_NAMES = NO OUTPUT_LANGUAGE = English +# The OUTPUT_TEXT_DIRECTION tag is used to specify the direction in which all +# documentation generated by doxygen is written. Doxygen will use this +# information to generate all generated output in the proper direction. +# Possible values are: None, LTR, RTL and Context. +# The default value is: None. + +OUTPUT_TEXT_DIRECTION = None + # If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member # descriptions after the members that are listed in the file and class # documentation (similar to Javadoc). Set to NO to disable this. @@ -189,6 +197,16 @@ SHORT_NAMES = NO JAVADOC_AUTOBRIEF = YES +# If the JAVADOC_BANNER tag is set to YES then doxygen will interpret a line +# such as +# /*************** +# as being the beginning of a Javadoc-style comment "banner". If set to NO, the +# Javadoc-style will behave just like regular comments and it will not be +# interpreted by doxygen. +# The default value is: NO. + +JAVADOC_BANNER = NO + # If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first # line (until the first dot) of a Qt-style comment as the brief description. If # set to NO, the Qt-style will behave just like regular Qt-style comments (thus @@ -236,7 +254,12 @@ TAB_SIZE = 4 # will allow you to put the command \sideeffect (or @sideeffect) in the # documentation, which will result in a user-defined paragraph with heading # "Side Effects:". You can put \n's in the value part of an alias to insert -# newlines. +# newlines (in the resulting output). You can put ^^ in the value part of an +# alias to insert a newline as if a physical newline was in the original file. +# When you need a literal { or } or , in the value part of an alias you have to +# escape them by means of a backslash (\), this can lead to conflicts with the +# commands \{ and \} for these it is advised to use the version @{ and @} or use +# a double escape (\\{ and \\}) ALIASES = @@ -274,17 +297,26 @@ OPTIMIZE_FOR_FORTRAN = NO OPTIMIZE_OUTPUT_VHDL = NO +# Set the OPTIMIZE_OUTPUT_SLICE tag to YES if your project consists of Slice +# sources only. Doxygen will then generate output that is more tailored for that +# language. For instance, namespaces will be presented as modules, types will be +# separated into more groups, etc. +# The default value is: NO. + +OPTIMIZE_OUTPUT_SLICE = NO + # Doxygen selects the parser to use depending on the extension of the files it # parses. With this tag you can assign which parser to use for a given # extension. Doxygen has a built-in mapping, but you can override or extend it # using this tag. The format is ext=language, where ext is a file extension, and -# language is one of the parsers supported by doxygen: IDL, Java, Javascript, -# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran: -# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran: -# Fortran. In the later case the parser tries to guess whether the code is fixed -# or free formatted code, this is the default for Fortran type files), VHDL. For -# instance to make doxygen treat .inc files as Fortran files (default is PHP), -# and .f files as C (default is Fortran), use: inc=Fortran f=C. +# language is one of the parsers supported by doxygen: IDL, Java, JavaScript, +# Csharp (C#), C, C++, D, PHP, md (Markdown), Objective-C, Python, Slice, +# Fortran (fixed format Fortran: FortranFixed, free formatted Fortran: +# FortranFree, unknown formatted Fortran: Fortran. In the later case the parser +# tries to guess whether the code is fixed or free formatted code, this is the +# default for Fortran type files), VHDL, tcl. For instance to make doxygen treat +# .inc files as Fortran files (default is PHP), and .f files as C (default is +# Fortran), use: inc=Fortran f=C. # # Note: For files without extension you can use no_extension as a placeholder. # @@ -295,7 +327,7 @@ EXTENSION_MAPPING = # If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments # according to the Markdown format, which allows for more readable -# documentation. See http://daringfireball.net/projects/markdown/ for details. +# documentation. See https://daringfireball.net/projects/markdown/ for details. # The output of markdown processing is further processed by doxygen, so you can # mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in # case of backward compatibilities issues. @@ -307,7 +339,7 @@ MARKDOWN_SUPPORT = YES # to that level are automatically included in the table of contents, even if # they do not have an id attribute. # Note: This feature currently applies only to Markdown headings. -# Minimum value: 0, maximum value: 99, default value: 0. +# Minimum value: 0, maximum value: 99, default value: 5. # This tag requires that the tag MARKDOWN_SUPPORT is set to YES. TOC_INCLUDE_HEADINGS = 0 @@ -337,7 +369,7 @@ BUILTIN_STL_SUPPORT = NO CPP_CLI_SUPPORT = NO # Set the SIP_SUPPORT tag to YES if your project consists of sip (see: -# http://www.riverbankcomputing.co.uk/software/sip/intro) sources only. Doxygen +# https://www.riverbankcomputing.com/software/sip/intro) sources only. Doxygen # will parse them like normal C++ but will assume all classes use public instead # of private inheritance when no explicit protection keyword is present. # The default value is: NO. @@ -443,6 +475,12 @@ EXTRACT_ALL = NO EXTRACT_PRIVATE = NO +# If the EXTRACT_PRIV_VIRTUAL tag is set to YES, documented private virtual +# methods of a class will be included in the documentation. +# The default value is: NO. + +EXTRACT_PRIV_VIRTUAL = NO + # If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal # scope will be included in the documentation. # The default value is: NO. @@ -497,8 +535,8 @@ HIDE_UNDOC_MEMBERS = NO HIDE_UNDOC_CLASSES = NO # If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend -# (class|struct|union) declarations. If set to NO, these declarations will be -# included in the documentation. +# declarations. If set to NO, these declarations will be included in the +# documentation. # The default value is: NO. HIDE_FRIEND_COMPOUNDS = NO @@ -521,7 +559,7 @@ INTERNAL_DOCS = NO # names in lower-case letters. If set to YES, upper-case letters are also # allowed. This is useful if you have classes or files whose names only differ # in case and if your file system supports case sensitive file names. Windows -# and Mac users are advised to set this option to NO. +# (including Cygwin) ands Mac users are advised to set this option to NO. # The default value is: system dependent. CASE_SENSE_NAMES = YES @@ -708,7 +746,7 @@ LAYOUT_FILE = # The CITE_BIB_FILES tag can be used to specify one or more bib files containing # the reference definitions. This must be a list of .bib files. The .bib # extension is automatically appended if omitted. This requires the bibtex tool -# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info. +# to be installed. See also https://en.wikipedia.org/wiki/BibTeX for more info. # For LaTeX the style of the bibliography can be controlled using # LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the # search path. See also \cite for info how to create references. @@ -753,7 +791,8 @@ WARN_IF_DOC_ERROR = YES # This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that # are documented, but have no documentation for their parameters or return # value. If set to NO, doxygen will only warn about wrong or incomplete -# parameter documentation, but not about the absence of documentation. +# parameter documentation, but not about the absence of documentation. If +# EXTRACT_ALL is set to YES then this flag will automatically be disabled. # The default value is: NO. WARN_NO_PARAMDOC = NO @@ -795,7 +834,7 @@ INPUT = ../src # This tag can be used to specify the character encoding of the source files # that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses # libiconv (or the iconv built into libc) for the transcoding. See the libiconv -# documentation (see: http://www.gnu.org/software/libiconv) for the list of +# documentation (see: https://www.gnu.org/software/libiconv/) for the list of # possible encodings. # The default value is: UTF-8. @@ -812,8 +851,10 @@ INPUT_ENCODING = UTF-8 # If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp, # *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, # *.hh, *.hxx, *.hpp, *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, -# *.m, *.markdown, *.md, *.mm, *.dox, *.py, *.pyw, *.f90, *.f95, *.f03, *.f08, -# *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf and *.qsf. +# *.m, *.markdown, *.md, *.mm, *.dox (to be provided as doxygen C comment), +# *.doc (to be provided as doxygen C comment), *.txt (to be provided as doxygen +# C comment), *.py, *.pyw, *.f90, *.f95, *.f03, *.f08, *.f, *.for, *.tcl, *.vhd, +# *.vhdl, *.ucf, *.qsf and *.ice. FILE_PATTERNS = *.c \ *.cc \ @@ -1011,7 +1052,7 @@ INLINE_SOURCES = NO STRIP_CODE_COMMENTS = YES # If the REFERENCED_BY_RELATION tag is set to YES then for each documented -# function all documented functions referencing it will be listed. +# entity all documented functions referencing it will be listed. # The default value is: NO. REFERENCED_BY_RELATION = NO @@ -1043,12 +1084,12 @@ SOURCE_TOOLTIPS = YES # If the USE_HTAGS tag is set to YES then the references to source code will # point to the HTML generated by the htags(1) tool instead of doxygen built-in # source browser. The htags tool is part of GNU's global source tagging system -# (see http://www.gnu.org/software/global/global.html). You will need version +# (see https://www.gnu.org/software/global/global.html). You will need version # 4.8.6 or higher. # # To use it do the following: # - Install the latest version of global -# - Enable SOURCE_BROWSER and USE_HTAGS in the config file +# - Enable SOURCE_BROWSER and USE_HTAGS in the configuration file # - Make sure the INPUT points to the root of the source tree # - Run doxygen as normal # @@ -1076,7 +1117,7 @@ VERBATIM_HEADERS = YES # rich C++ code for which doxygen's built-in parser lacks the necessary type # information. # Note: The availability of this option depends on whether or not doxygen was -# generated with the -Duse-libclang=ON option for CMake. +# generated with the -Duse_libclang=ON option for CMake. # The default value is: NO. CLANG_ASSISTED_PARSING = NO @@ -1089,6 +1130,16 @@ CLANG_ASSISTED_PARSING = NO CLANG_OPTIONS = +# If clang assisted parsing is enabled you can provide the clang parser with the +# path to the compilation database (see: +# http://clang.llvm.org/docs/HowToSetupToolingForLLVM.html) used when the files +# were built. This is equivalent to specifying the "-p" option to a clang tool, +# such as clang-check. These options will then be passed to the parser. +# Note: The availability of this option depends on whether or not doxygen was +# generated with the -Duse_libclang=ON option for CMake. + +CLANG_DATABASE_PATH = + #--------------------------------------------------------------------------- # Configuration options related to the alphabetical class index #--------------------------------------------------------------------------- @@ -1207,7 +1258,7 @@ HTML_EXTRA_FILES = # The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen # will adjust the colors in the style sheet and background images according to # this color. Hue is specified as an angle on a colorwheel, see -# http://en.wikipedia.org/wiki/Hue for more information. For instance the value +# https://en.wikipedia.org/wiki/Hue for more information. For instance the value # 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 # purple, and 360 is red again. # Minimum value: 0, maximum value: 359, default value: 220. @@ -1243,6 +1294,17 @@ HTML_COLORSTYLE_GAMMA = 80 HTML_TIMESTAMP = NO +# If the HTML_DYNAMIC_MENUS tag is set to YES then the generated HTML +# documentation will contain a main index with vertical navigation menus that +# are dynamically created via JavaScript. If disabled, the navigation index will +# consists of multiple levels of tabs that are statically embedded in every HTML +# page. Disable this option to support browsers that do not have JavaScript, +# like the Qt help browser. +# The default value is: YES. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_DYNAMIC_MENUS = YES + # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML # documentation will contain sections that can be hidden and shown after the # page has loaded. @@ -1266,13 +1328,13 @@ HTML_INDEX_NUM_ENTRIES = 100 # If the GENERATE_DOCSET tag is set to YES, additional index files will be # generated that can be used as input for Apple's Xcode 3 integrated development -# environment (see: http://developer.apple.com/tools/xcode/), introduced with -# OSX 10.5 (Leopard). To create a documentation set, doxygen will generate a +# environment (see: https://developer.apple.com/xcode/), introduced with OSX +# 10.5 (Leopard). To create a documentation set, doxygen will generate a # Makefile in the HTML output directory. Running make will produce the docset in # that directory and running make install will install the docset in # ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at -# startup. See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html -# for more information. +# startup. See https://developer.apple.com/library/archive/featuredarticles/Doxy +# genXcode/_index.html for more information. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. @@ -1311,7 +1373,7 @@ DOCSET_PUBLISHER_NAME = Publisher # If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three # additional HTML index files: index.hhp, index.hhc, and index.hhk. The # index.hhp is a project file that can be read by Microsoft's HTML Help Workshop -# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on +# (see: https://www.microsoft.com/en-us/download/details.aspx?id=21138) on # Windows. # # The HTML Help Workshop contains a compiler that can convert all HTML output @@ -1387,7 +1449,7 @@ QCH_FILE = # The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help # Project output. For more information please see Qt Help Project / Namespace -# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace). +# (see: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#namespace). # The default value is: org.doxygen.Project. # This tag requires that the tag GENERATE_QHP is set to YES. @@ -1395,7 +1457,7 @@ QHP_NAMESPACE = org.doxygen.Project # The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt # Help Project output. For more information please see Qt Help Project / Virtual -# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual- +# Folders (see: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#virtual- # folders). # The default value is: doc. # This tag requires that the tag GENERATE_QHP is set to YES. @@ -1404,7 +1466,7 @@ QHP_VIRTUAL_FOLDER = doc # If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom # filter to add. For more information please see Qt Help Project / Custom -# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- +# Filters (see: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom- # filters). # This tag requires that the tag GENERATE_QHP is set to YES. @@ -1412,7 +1474,7 @@ QHP_CUST_FILTER_NAME = # The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the # custom filter to add. For more information please see Qt Help Project / Custom -# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- +# Filters (see: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom- # filters). # This tag requires that the tag GENERATE_QHP is set to YES. @@ -1420,7 +1482,7 @@ QHP_CUST_FILTER_ATTRS = # The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this # project's filter section matches. Qt Help Project / Filter Attributes (see: -# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). +# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#filter-attributes). # This tag requires that the tag GENERATE_QHP is set to YES. QHP_SECT_FILTER_ATTRS = @@ -1513,7 +1575,7 @@ EXT_LINKS_IN_WINDOW = NO FORMULA_FONTSIZE = 10 -# Use the FORMULA_TRANPARENT tag to determine whether or not the images +# Use the FORMULA_TRANSPARENT tag to determine whether or not the images # generated for formulas are transparent PNGs. Transparent PNGs are not # supported properly for IE 6.0, but are supported on all modern browsers. # @@ -1524,8 +1586,14 @@ FORMULA_FONTSIZE = 10 FORMULA_TRANSPARENT = YES +# The FORMULA_MACROFILE can contain LaTeX \newcommand and \renewcommand commands +# to create new LaTeX commands to be used in formulas as building blocks. See +# the section "Including formulas" for details. + +FORMULA_MACROFILE = + # Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see -# http://www.mathjax.org) which uses client side Javascript for the rendering +# https://www.mathjax.org) which uses client side JavaScript for the rendering # instead of using pre-rendered bitmaps. Use this if you do not have LaTeX # installed or if you want to formulas look prettier in the HTML output. When # enabled you may also need to install MathJax separately and configure the path @@ -1552,8 +1620,8 @@ MATHJAX_FORMAT = HTML-CSS # MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax # Content Delivery Network so you can quickly see the result without installing # MathJax. However, it is strongly recommended to install a local copy of -# MathJax from http://www.mathjax.org before deployment. -# The default value is: http://cdn.mathjax.org/mathjax/latest. +# MathJax from https://www.mathjax.org before deployment. +# The default value is: https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/. # This tag requires that the tag USE_MATHJAX is set to YES. MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest @@ -1595,7 +1663,7 @@ MATHJAX_CODEFILE = SEARCHENGINE = YES # When the SERVER_BASED_SEARCH tag is enabled the search engine will be -# implemented using a web server instead of a web client using Javascript. There +# implemented using a web server instead of a web client using JavaScript. There # are two flavors of web server based searching depending on the EXTERNAL_SEARCH # setting. When disabled, doxygen will generate a PHP script for searching and # an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing @@ -1614,7 +1682,7 @@ SERVER_BASED_SEARCH = NO # # Doxygen ships with an example indexer (doxyindexer) and search engine # (doxysearch.cgi) which are based on the open source search engine library -# Xapian (see: http://xapian.org/). +# Xapian (see: https://xapian.org/). # # See the section "External Indexing and Searching" for details. # The default value is: NO. @@ -1627,7 +1695,7 @@ EXTERNAL_SEARCH = NO # # Doxygen ships with an example indexer (doxyindexer) and search engine # (doxysearch.cgi) which are based on the open source search engine library -# Xapian (see: http://xapian.org/). See the section "External Indexing and +# Xapian (see: https://xapian.org/). See the section "External Indexing and # Searching" for details. # This tag requires that the tag SEARCHENGINE is set to YES. @@ -1679,21 +1747,35 @@ LATEX_OUTPUT = latex # The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be # invoked. # -# Note that when enabling USE_PDFLATEX this option is only used for generating -# bitmaps for formulas in the HTML output, but not in the Makefile that is -# written to the output directory. -# The default file is: latex. +# Note that when not enabling USE_PDFLATEX the default is latex when enabling +# USE_PDFLATEX the default is pdflatex and when in the later case latex is +# chosen this is overwritten by pdflatex. For specific output languages the +# default can have been set differently, this depends on the implementation of +# the output language. # This tag requires that the tag GENERATE_LATEX is set to YES. LATEX_CMD_NAME = latex # The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate # index for LaTeX. +# Note: This tag is used in the Makefile / make.bat. +# See also: LATEX_MAKEINDEX_CMD for the part in the generated output file +# (.tex). # The default file is: makeindex. # This tag requires that the tag GENERATE_LATEX is set to YES. MAKEINDEX_CMD_NAME = makeindex +# The LATEX_MAKEINDEX_CMD tag can be used to specify the command name to +# generate index for LaTeX. In case there is no backslash (\) as first character +# it will be automatically added in the LaTeX code. +# Note: This tag is used in the generated output file (.tex). +# See also: MAKEINDEX_CMD_NAME for the part in the Makefile / make.bat. +# The default value is: makeindex. +# This tag requires that the tag GENERATE_LATEX is set to YES. + +LATEX_MAKEINDEX_CMD = makeindex + # If the COMPACT_LATEX tag is set to YES, doxygen generates more compact LaTeX # documents. This may be useful for small projects and may help to save some # trees in general. @@ -1814,7 +1896,7 @@ LATEX_SOURCE_CODE = NO # The LATEX_BIB_STYLE tag can be used to specify the style to use for the # bibliography, e.g. plainnat, or ieeetr. See -# http://en.wikipedia.org/wiki/BibTeX and \cite for more info. +# https://en.wikipedia.org/wiki/BibTeX and \cite for more info. # The default value is: plain. # This tag requires that the tag GENERATE_LATEX is set to YES. @@ -1828,6 +1910,14 @@ LATEX_BIB_STYLE = plain LATEX_TIMESTAMP = NO +# The LATEX_EMOJI_DIRECTORY tag is used to specify the (relative or absolute) +# path from which the emoji images will be read. If a relative path is entered, +# it will be relative to the LATEX_OUTPUT directory. If left blank the +# LATEX_OUTPUT directory will be used. +# This tag requires that the tag GENERATE_LATEX is set to YES. + +LATEX_EMOJI_DIRECTORY = + #--------------------------------------------------------------------------- # Configuration options related to the RTF output #--------------------------------------------------------------------------- @@ -1867,9 +1957,9 @@ COMPACT_RTF = NO RTF_HYPERLINKS = NO -# Load stylesheet definitions from file. Syntax is similar to doxygen's config -# file, i.e. a series of assignments. You only have to provide replacements, -# missing definitions are set to their default value. +# Load stylesheet definitions from file. Syntax is similar to doxygen's +# configuration file, i.e. a series of assignments. You only have to provide +# replacements, missing definitions are set to their default value. # # See also section "Doxygen usage" for information on how to generate the # default style sheet that doxygen normally uses. @@ -1878,8 +1968,8 @@ RTF_HYPERLINKS = NO RTF_STYLESHEET_FILE = # Set optional variables used in the generation of an RTF document. Syntax is -# similar to doxygen's config file. A template extensions file can be generated -# using doxygen -e rtf extensionFile. +# similar to doxygen's configuration file. A template extensions file can be +# generated using doxygen -e rtf extensionFile. # This tag requires that the tag GENERATE_RTF is set to YES. RTF_EXTENSIONS_FILE = @@ -1965,6 +2055,13 @@ XML_OUTPUT = xml XML_PROGRAMLISTING = YES +# If the XML_NS_MEMB_FILE_SCOPE tag is set to YES, doxygen will include +# namespace members in file scope as well, matching the HTML output. +# The default value is: NO. +# This tag requires that the tag GENERATE_XML is set to YES. + +XML_NS_MEMB_FILE_SCOPE = NO + #--------------------------------------------------------------------------- # Configuration options related to the DOCBOOK output #--------------------------------------------------------------------------- @@ -1997,9 +2094,9 @@ DOCBOOK_PROGRAMLISTING = NO #--------------------------------------------------------------------------- # If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an -# AutoGen Definitions (see http://autogen.sf.net) file that captures the -# structure of the code including all documentation. Note that this feature is -# still experimental and incomplete at the moment. +# AutoGen Definitions (see http://autogen.sourceforge.net/) file that captures +# the structure of the code including all documentation. Note that this feature +# is still experimental and incomplete at the moment. # The default value is: NO. GENERATE_AUTOGEN_DEF = NO @@ -2166,12 +2263,6 @@ EXTERNAL_GROUPS = YES EXTERNAL_PAGES = YES -# The PERL_PATH should be the absolute path and name of the perl script -# interpreter (i.e. the result of 'which perl'). -# The default file (with absolute path) is: /usr/bin/perl. - -PERL_PATH = /usr/bin/perl - #--------------------------------------------------------------------------- # Configuration options related to the dot tool #--------------------------------------------------------------------------- @@ -2185,15 +2276,6 @@ PERL_PATH = /usr/bin/perl CLASS_DIAGRAMS = YES -# You can define message sequence charts within doxygen comments using the \msc -# command. Doxygen will then run the mscgen tool (see: -# http://www.mcternan.me.uk/mscgen/)) to produce the chart and insert it in the -# documentation. The MSCGEN_PATH tag allows you to specify the directory where -# the mscgen tool resides. If left empty the tool is assumed to be found in the -# default search path. - -MSCGEN_PATH = - # You can include diagrams made with dia in doxygen documentation. Doxygen will # then run dia to produce the diagram and insert it in the documentation. The # DIA_PATH tag allows you to specify the directory where the dia binary resides. From dbc7f8a1e5d29c60cc1e886eacb7f75f47601489 Mon Sep 17 00:00:00 2001 From: Brian Park Date: Tue, 15 Sep 2020 15:49:10 -0700 Subject: [PATCH 8/9] docs: Regenerate doxygen docs for v1.3.3 --- docs/html/AUnitVerbose_8h.html | 66 +- docs/html/AUnitVerbose_8h__incl.map | 37 +- docs/html/AUnitVerbose_8h__incl.md5 | 2 +- docs/html/AUnitVerbose_8h__incl.png | Bin 153978 -> 155475 bytes docs/html/AUnitVerbose_8h_source.html | 73 +- docs/html/AUnit_8h.html | 66 +- docs/html/AUnit_8h__incl.map | 37 +- docs/html/AUnit_8h__incl.md5 | 2 +- docs/html/AUnit_8h__incl.png | Bin 152649 -> 152558 bytes docs/html/AUnit_8h_source.html | 73 +- docs/html/AssertMacros_8h.html | 414 ++----- docs/html/AssertMacros_8h__dep__incl.map | 5 +- docs/html/AssertMacros_8h__dep__incl.md5 | 2 +- docs/html/AssertMacros_8h__dep__incl.png | Bin 6210 -> 5538 bytes docs/html/AssertMacros_8h_source.html | 100 +- docs/html/AssertVerboseMacros_8h.html | 354 ++---- .../AssertVerboseMacros_8h__dep__incl.map | 5 +- .../AssertVerboseMacros_8h__dep__incl.md5 | 2 +- .../AssertVerboseMacros_8h__dep__incl.png | Bin 6810 -> 6037 bytes docs/html/AssertVerboseMacros_8h_source.html | 105 +- docs/html/Assertion_8cpp_source.html | 1062 ++++++++++++++++- docs/html/Assertion_8h_source.html | 323 ++++- docs/html/Compare_8cpp_source.html | 919 +++++++++++++- docs/html/Compare_8h.html | 223 +--- docs/html/Compare_8h__dep__incl.map | 17 +- docs/html/Compare_8h__dep__incl.md5 | 2 +- docs/html/Compare_8h__dep__incl.png | Bin 21472 -> 21789 bytes docs/html/Compare_8h__incl.map | 4 +- docs/html/Compare_8h__incl.md5 | 2 +- docs/html/Compare_8h__incl.png | Bin 4696 -> 4700 bytes docs/html/Compare_8h_source.html | 412 ++++++- docs/html/FCString_8cpp_source.html | 124 +- docs/html/FCString_8h_source.html | 122 +- docs/html/FakePrint_8h_source.html | 106 +- docs/html/Flash_8h.html | 61 +- docs/html/Flash_8h__dep__incl.map | 33 +- docs/html/Flash_8h__dep__incl.md5 | 2 +- docs/html/Flash_8h__dep__incl.png | Bin 124868 -> 125222 bytes docs/html/Flash_8h_source.html | 97 +- docs/html/MetaAssertMacros_8h.html | 888 ++++---------- docs/html/MetaAssertMacros_8h__dep__incl.map | 7 +- docs/html/MetaAssertMacros_8h__dep__incl.md5 | 2 +- docs/html/MetaAssertMacros_8h__dep__incl.png | Bin 9106 -> 7539 bytes docs/html/MetaAssertMacros_8h__incl.map | 5 +- docs/html/MetaAssertMacros_8h__incl.md5 | 2 +- docs/html/MetaAssertMacros_8h__incl.png | Bin 4582 -> 4710 bytes docs/html/MetaAssertMacros_8h_source.html | 331 ++++- docs/html/MetaAssertion_8cpp_source.html | 175 ++- docs/html/MetaAssertion_8h_source.html | 104 +- docs/html/Printer_8cpp_source.html | 53 +- docs/html/Printer_8h_source.html | 72 +- docs/html/README_8md_source.html | 75 -- docs/html/TestAgain_8cpp_source.html | 56 +- docs/html/TestAgain_8h_source.html | 80 +- docs/html/TestMacros_8h.html | 209 +++- docs/html/TestMacros_8h__dep__incl.map | 7 +- docs/html/TestMacros_8h__dep__incl.md5 | 2 +- docs/html/TestMacros_8h__dep__incl.png | Bin 9008 -> 7433 bytes docs/html/TestMacros_8h__incl.map | 24 +- docs/html/TestMacros_8h__incl.md5 | 2 +- docs/html/TestMacros_8h__incl.png | Bin 55309 -> 62544 bytes docs/html/TestMacros_8h_source.html | 200 +++- docs/html/TestOnce_8cpp_source.html | 62 +- docs/html/TestOnce_8h_source.html | 83 +- docs/html/TestRunner_8cpp_source.html | 329 ++++- docs/html/TestRunner_8h_source.html | 185 ++- docs/html/Test_8cpp_source.html | 166 ++- docs/html/Test_8h_source.html | 286 ++++- docs/html/Verbosity_8h_source.html | 114 +- docs/html/annotated.html | 27 +- .../html/classaunit_1_1Assertion-members.html | 15 +- docs/html/classaunit_1_1Assertion.html | 238 ++-- .../classaunit_1_1Assertion__coll__graph.map | 3 +- .../classaunit_1_1Assertion__coll__graph.md5 | 2 +- .../classaunit_1_1Assertion__coll__graph.png | Bin 2715 -> 3127 bytes ...lassaunit_1_1Assertion__inherit__graph.map | 9 +- ...lassaunit_1_1Assertion__inherit__graph.md5 | 2 +- ...lassaunit_1_1Assertion__inherit__graph.png | Bin 9632 -> 9959 bytes .../classaunit_1_1MetaAssertion-members.html | 15 +- docs/html/classaunit_1_1MetaAssertion.html | 305 ++--- ...assaunit_1_1MetaAssertion__coll__graph.map | 5 +- ...assaunit_1_1MetaAssertion__coll__graph.md5 | 2 +- ...assaunit_1_1MetaAssertion__coll__graph.png | Bin 5216 -> 5336 bytes ...aunit_1_1MetaAssertion__inherit__graph.map | 9 +- ...aunit_1_1MetaAssertion__inherit__graph.md5 | 2 +- ...aunit_1_1MetaAssertion__inherit__graph.png | Bin 9624 -> 9952 bytes docs/html/classaunit_1_1Printer-members.html | 15 +- docs/html/classaunit_1_1Printer.html | 62 +- docs/html/classaunit_1_1Test-members.html | 15 +- docs/html/classaunit_1_1Test.html | 1008 +++------------- .../html/classaunit_1_1TestAgain-members.html | 15 +- docs/html/classaunit_1_1TestAgain.html | 262 ++-- .../classaunit_1_1TestAgain__coll__graph.map | 7 +- .../classaunit_1_1TestAgain__coll__graph.md5 | 2 +- .../classaunit_1_1TestAgain__coll__graph.png | Bin 6377 -> 6486 bytes ...lassaunit_1_1TestAgain__inherit__graph.map | 7 +- ...lassaunit_1_1TestAgain__inherit__graph.md5 | 2 +- ...lassaunit_1_1TestAgain__inherit__graph.png | Bin 6377 -> 6486 bytes docs/html/classaunit_1_1TestOnce-members.html | 15 +- docs/html/classaunit_1_1TestOnce.html | 265 ++-- .../classaunit_1_1TestOnce__coll__graph.map | 7 +- .../classaunit_1_1TestOnce__coll__graph.md5 | 2 +- .../classaunit_1_1TestOnce__coll__graph.png | Bin 6367 -> 6455 bytes ...classaunit_1_1TestOnce__inherit__graph.map | 7 +- ...classaunit_1_1TestOnce__inherit__graph.md5 | 2 +- ...classaunit_1_1TestOnce__inherit__graph.png | Bin 6367 -> 6455 bytes .../classaunit_1_1TestRunner-members.html | 17 +- docs/html/classaunit_1_1TestRunner.html | 200 +--- .../classaunit_1_1Test__inherit__graph.map | 9 +- .../classaunit_1_1Test__inherit__graph.md5 | 2 +- .../classaunit_1_1Test__inherit__graph.png | Bin 9621 -> 9940 bytes .../html/classaunit_1_1Verbosity-members.html | 15 +- docs/html/classaunit_1_1Verbosity.html | 352 +----- ...assaunit_1_1fake_1_1FakePrint-members.html | 15 +- .../html/classaunit_1_1fake_1_1FakePrint.html | 31 +- ...unit_1_1fake_1_1FakePrint__coll__graph.map | 2 + ...unit_1_1fake_1_1FakePrint__coll__graph.md5 | 2 +- ...unit_1_1fake_1_1FakePrint__coll__graph.png | Bin 2259 -> 2356 bytes ...t_1_1fake_1_1FakePrint__inherit__graph.map | 2 + ...t_1_1fake_1_1FakePrint__inherit__graph.md5 | 2 +- ...t_1_1fake_1_1FakePrint__inherit__graph.png | Bin 2259 -> 2356 bytes ...aunit_1_1internal_1_1FCString-members.html | 15 +- .../classaunit_1_1internal_1_1FCString.html | 341 +----- docs/html/classes.html | 49 +- docs/html/dir_000000_000001.html | 17 +- .../dir_68267d1309a1af8e8297ef4c3efbcdba.html | 27 +- ...r_68267d1309a1af8e8297ef4c3efbcdba_dep.map | 4 +- ...r_68267d1309a1af8e8297ef4c3efbcdba_dep.md5 | 2 +- ...r_68267d1309a1af8e8297ef4c3efbcdba_dep.png | Bin 2220 -> 2269 bytes .../dir_81cd3825682eb05918933587e078c005.html | 24 +- .../dir_9268cfe6e304750d3a96b29cda140489.html | 18 +- .../dir_dc26540604d17911199600d9c2812a4e.html | 17 +- docs/html/doxygen.css | 303 ++++- docs/html/dynsections.js | 29 +- docs/html/files.html | 35 +- docs/html/functions.html | 17 +- docs/html/functions_func.html | 15 +- docs/html/functions_type.html | 17 +- docs/html/functions_vars.html | 15 +- docs/html/globals.html | 15 +- docs/html/globals_defs.html | 15 +- docs/html/graph_legend.html | 56 +- docs/html/graph_legend.md5 | 2 +- docs/html/graph_legend.png | Bin 19465 -> 20615 bytes docs/html/gtest_8h.html | 33 +- docs/html/gtest_8h_source.html | 68 +- docs/html/hierarchy.html | 27 +- docs/html/index.html | 20 +- docs/html/inherit_graph_0.map | 3 +- docs/html/inherit_graph_0.md5 | 2 +- docs/html/inherit_graph_0.png | Bin 1956 -> 1889 bytes docs/html/inherit_graph_1.map | 2 +- docs/html/inherit_graph_1.md5 | 2 +- docs/html/inherit_graph_1.png | Bin 1757 -> 1783 bytes docs/html/inherit_graph_2.map | 2 +- docs/html/inherit_graph_2.md5 | 2 +- docs/html/inherit_graph_2.png | Bin 1039 -> 1047 bytes docs/html/inherit_graph_3.map | 10 +- docs/html/inherit_graph_3.md5 | 2 +- docs/html/inherit_graph_3.png | Bin 6426 -> 6393 bytes docs/html/inherit_graph_4.map | 2 +- docs/html/inherit_graph_4.md5 | 2 +- docs/html/inherit_graph_4.png | Bin 1265 -> 1295 bytes docs/html/inherit_graph_5.map | 2 +- docs/html/inherit_graph_5.md5 | 2 +- docs/html/inherit_graph_5.png | Bin 1593 -> 1841 bytes docs/html/inherits.html | 48 +- docs/html/jquery.js | 94 +- ...rian_src_AUnit_src_aunit_fake_README.html} | 72 +- docs/html/menu.js | 26 +- docs/html/menudata.js | 22 + docs/html/pages.html | 17 +- docs/html/print64_8cpp_source.html | 87 +- docs/html/print64_8h.html | 42 +- docs/html/print64_8h__dep__incl.map | 11 +- docs/html/print64_8h__dep__incl.md5 | 2 +- docs/html/print64_8h__dep__incl.png | Bin 13896 -> 11473 bytes docs/html/print64_8h__incl.map | 5 +- docs/html/print64_8h__incl.md5 | 2 +- docs/html/print64_8h__incl.png | Bin 6517 -> 6289 bytes docs/html/print64_8h_source.html | 67 +- docs/html/search/all_0.html | 8 +- docs/html/search/all_0.js | 94 +- docs/html/search/all_1.html | 8 +- docs/html/search/all_1.js | 46 +- docs/html/search/all_2.html | 8 +- docs/html/search/all_2.js | 2 +- docs/html/search/all_3.html | 8 +- docs/html/search/all_3.js | 16 +- docs/html/search/all_4.html | 8 +- docs/html/search/all_4.js | 12 +- docs/html/search/all_5.html | 8 +- docs/html/search/all_5.js | 24 +- docs/html/search/all_6.html | 8 +- docs/html/search/all_6.js | 28 +- docs/html/search/all_7.html | 8 +- docs/html/search/all_7.js | 46 +- docs/html/search/all_8.html | 8 +- docs/html/search/all_8.js | 4 +- docs/html/search/all_9.html | 8 +- docs/html/search/all_9.js | 4 +- docs/html/search/all_a.html | 8 +- docs/html/search/all_a.js | 2 +- docs/html/search/all_b.html | 8 +- docs/html/search/all_b.js | 12 +- docs/html/search/all_c.html | 8 +- docs/html/search/all_c.js | 4 +- docs/html/search/all_d.html | 8 +- docs/html/search/all_d.js | 18 +- docs/html/search/all_e.html | 8 +- docs/html/search/all_e.js | 20 +- docs/html/search/all_f.html | 8 +- docs/html/search/all_f.js | 2 +- docs/html/search/classes_0.html | 8 +- docs/html/search/classes_0.js | 2 +- docs/html/search/classes_1.html | 8 +- docs/html/search/classes_1.js | 4 +- docs/html/search/classes_2.html | 8 +- docs/html/search/classes_2.js | 2 +- docs/html/search/classes_3.html | 8 +- docs/html/search/classes_3.js | 2 +- docs/html/search/classes_4.html | 8 +- docs/html/search/classes_4.js | 8 +- docs/html/search/classes_5.html | 8 +- docs/html/search/classes_5.js | 2 +- docs/html/search/defines_0.html | 8 +- docs/html/search/defines_0.js | 78 +- docs/html/search/defines_1.html | 8 +- docs/html/search/defines_1.js | 40 +- docs/html/search/defines_2.html | 8 +- docs/html/search/defines_2.js | 10 +- docs/html/search/defines_3.html | 8 +- docs/html/search/defines_3.js | 2 +- docs/html/search/defines_4.html | 8 +- docs/html/search/defines_4.js | 2 +- docs/html/search/defines_5.html | 8 +- docs/html/search/defines_5.js | 2 +- docs/html/search/defines_6.html | 8 +- docs/html/search/defines_6.js | 8 +- docs/html/search/files_0.html | 8 +- docs/html/search/files_0.js | 8 +- docs/html/search/files_1.html | 8 +- docs/html/search/files_1.js | 2 +- docs/html/search/files_2.html | 8 +- docs/html/search/files_2.js | 2 +- docs/html/search/files_3.html | 8 +- docs/html/search/files_3.js | 2 +- docs/html/search/files_4.html | 8 +- docs/html/search/files_4.js | 2 +- docs/html/search/files_5.html | 8 +- docs/html/search/files_5.js | 2 +- docs/html/search/files_6.html | 8 +- docs/html/search/files_6.js | 2 +- docs/html/search/functions_0.html | 8 +- docs/html/search/functions_0.js | 6 +- docs/html/search/functions_1.html | 8 +- docs/html/search/functions_1.js | 4 +- docs/html/search/functions_2.html | 8 +- docs/html/search/functions_2.js | 2 +- docs/html/search/functions_3.html | 8 +- docs/html/search/functions_3.js | 6 +- docs/html/search/functions_4.html | 8 +- docs/html/search/functions_4.js | 4 +- docs/html/search/functions_5.html | 8 +- docs/html/search/functions_5.js | 22 +- docs/html/search/functions_6.html | 8 +- docs/html/search/functions_6.js | 28 +- docs/html/search/functions_7.html | 8 +- docs/html/search/functions_7.js | 4 +- docs/html/search/functions_8.html | 8 +- docs/html/search/functions_8.js | 2 +- docs/html/search/functions_9.html | 8 +- docs/html/search/functions_9.js | 2 +- docs/html/search/functions_a.html | 8 +- docs/html/search/functions_a.js | 6 +- docs/html/search/functions_b.html | 8 +- docs/html/search/functions_b.js | 4 +- docs/html/search/functions_c.html | 8 +- docs/html/search/functions_c.js | 16 +- docs/html/search/functions_d.html | 8 +- docs/html/search/functions_d.js | 8 +- docs/html/search/mag_sel.png | Bin 563 -> 465 bytes docs/html/search/nomatches.html | 2 +- docs/html/search/pages_0.html | 8 +- docs/html/search/pages_0.js | 2 +- docs/html/search/pages_1.html | 8 +- docs/html/search/pages_1.js | 2 +- docs/html/search/search.js | 25 +- docs/html/search/search_l.png | Bin 604 -> 567 bytes docs/html/search/search_r.png | Bin 612 -> 553 bytes docs/html/search/typedefs_0.html | 8 +- docs/html/search/typedefs_0.js | 2 +- docs/html/search/variables_0.html | 8 +- docs/html/search/variables_0.js | 46 +- docs/html/string__util_8cpp_source.html | 68 +- docs/html/string__util_8h_source.html | 57 +- docs/html/tabs.css | 2 +- 297 files changed, 8876 insertions(+), 5448 deletions(-) delete mode 100644 docs/html/README_8md_source.html rename docs/html/{md__home_brian_dev_AUnit_src_aunit_fake_README.html => md__home_brian_src_AUnit_src_aunit_fake_README.html} (52%) diff --git a/docs/html/AUnitVerbose_8h.html b/docs/html/AUnitVerbose_8h.html index f71e7da..b6de170 100644 --- a/docs/html/AUnitVerbose_8h.html +++ b/docs/html/AUnitVerbose_8h.html @@ -1,11 +1,11 @@ - + - + -AUnit: /home/brian/dev/AUnit/src/AUnitVerbose.h File Reference +AUnit: /home/brian/src/AUnit/src/AUnitVerbose.h File Reference @@ -22,7 +22,7 @@
AUnit -  1.3.2 +  1.3.3
Unit testing framework for Arduino platforms inspired by ArduinoUnit and Google Test.
@@ -31,18 +31,21 @@ - + +/* @license-end */
AUnitVerbose.h File Reference
- -

Same as AUnit.h except that the verbose versions of the various assertXxx() macros are provided. -More...

#include "aunit/print64.h"
#include "aunit/Verbosity.h"
#include "aunit/Compare.h"
@@ -89,23 +89,28 @@
Include dependency graph for AUnitVerbose.h:
-
- - - - - - - - - - - - - - - - +
+ + + + + + + + + + + + + + + + + + + + +
@@ -114,15 +119,14 @@

Macros

-#define AUNIT_VERSION   10302 +#define AUNIT_VERSION   10303   -#define AUNIT_VERSION_STRING   "1.3.2" +#define AUNIT_VERSION_STRING   "1.3.3"  

Detailed Description

-

Same as AUnit.h except that the verbose versions of the various assertXxx() macros are provided.

-

These capture the strings of the actual arguments in the assert macros and print more verbose and helpful messages in the same format used by ArduinoUnit. The cost is 20-25% increase in flash memory to hold those strings for medium to large unit tests.

+

Same as AUnit.h except that the verbose versions of the various assertXxx() macros are provided. These capture the strings of the actual arguments in the assert macros and print more verbose and helpful messages in the same format used by ArduinoUnit. The cost is 20-25% increase in flash memory to hold those strings for medium to large unit tests.

Definition in file AUnitVerbose.h.

@@ -130,7 +134,7 @@ diff --git a/docs/html/AUnitVerbose_8h__incl.map b/docs/html/AUnitVerbose_8h__incl.map index 1cbba17..e30c9a0 100644 --- a/docs/html/AUnitVerbose_8h__incl.map +++ b/docs/html/AUnitVerbose_8h__incl.map @@ -1,17 +1,22 @@ - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/html/AUnitVerbose_8h__incl.md5 b/docs/html/AUnitVerbose_8h__incl.md5 index ed2f160..b17ed8f 100644 --- a/docs/html/AUnitVerbose_8h__incl.md5 +++ b/docs/html/AUnitVerbose_8h__incl.md5 @@ -1 +1 @@ -47a15b7e98586a9ab2960946b35b7c72 \ No newline at end of file +b93461aba3f04b7397bedda42f9b3e21 \ No newline at end of file diff --git a/docs/html/AUnitVerbose_8h__incl.png b/docs/html/AUnitVerbose_8h__incl.png index 7a62610d6df97f944189584cd06fd28aefb0196a..121c9cdfc7657f990a8733167aa0498ea6192063 100644 GIT binary patch literal 155475 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

2jNIrVOazrp9K-8wl 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

- + +/* @license-end */
AUnitVerbose.h
-Go to the documentation of this file.
1 /*
2 MIT License
3 
4 Copyright (c) 2018 Brian T. Park
5 
6 Permission is hereby granted, free of charge, to any person obtaining a copy
7 of this software and associated documentation files (the "Software"), to deal
8 in the Software without restriction, including without limitation the rights
9 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 copies of the Software, and to permit persons to whom the Software is
11 furnished to do so, subject to the following conditions:
12 
13 The above copyright notice and this permission notice shall be included in all
14 copies or substantial portions of the Software.
15 
16 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22 SOFTWARE.
23 */
24 
35 #ifndef AUNIT_AUNIT_VERBOSE_H
36 #define AUNIT_AUNIT_VERBOSE_H
37 
38 #include "aunit/print64.h"
39 #include "aunit/Verbosity.h"
40 #include "aunit/Compare.h"
41 #include "aunit/Printer.h"
42 #include "aunit/Test.h"
43 #include "aunit/Assertion.h"
44 #include "aunit/MetaAssertion.h"
45 #include "aunit/TestOnce.h"
46 #include "aunit/TestAgain.h"
47 #include "aunit/TestRunner.h"
48 #include "aunit/AssertVerboseMacros.h" // verbose assertXxx() macros
49 #include "aunit/MetaAssertMacros.h"
50 #include "aunit/TestMacros.h"
51 
52 // Version format: xxyyzz == "xx.yy.zz"
53 #define AUNIT_VERSION 10302
54 #define AUNIT_VERSION_STRING "1.3.2"
55 
56 #endif
Various macros (test(), testF(), testing(), testingF(), externTest(), externTestF(), externTesting(), externTestingF()) are defined in this header.
-
Various assertTestXxx(), checkTestXxx(), assertTestXxxF() and checkTestXxxF() macros are defined in t...
-
Helper routines to print &#39;long long&#39; and &#39;unsigned long long&#39; because the Print::print() methods in P...
-
Verbose versions of the macros in AssertMacros.h.
-
This file provides overloaded compareXxx(a, b) functions which are used by the various assertXxx(a...
+Go to the documentation of this file.
1 /*
+
2 MIT License
+
3 
+
4 Copyright (c) 2018 Brian T. Park
+
5 
+
6 Permission is hereby granted, free of charge, to any person obtaining a copy
+
7 of this software and associated documentation files (the "Software"), to deal
+
8 in the Software without restriction, including without limitation the rights
+
9 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+
10 copies of the Software, and to permit persons to whom the Software is
+
11 furnished to do so, subject to the following conditions:
+
12 
+
13 The above copyright notice and this permission notice shall be included in all
+
14 copies or substantial portions of the Software.
+
15 
+
16 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+
17 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+
18 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+
19 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+
20 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+
21 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+
22 SOFTWARE.
+
23 */
+
24 
+
35 #ifndef AUNIT_AUNIT_VERBOSE_H
+
36 #define AUNIT_AUNIT_VERBOSE_H
+
37 
+
38 #include "aunit/print64.h"
+
39 #include "aunit/Verbosity.h"
+
40 #include "aunit/Compare.h"
+
41 #include "aunit/Printer.h"
+
42 #include "aunit/Test.h"
+
43 #include "aunit/Assertion.h"
+
44 #include "aunit/MetaAssertion.h"
+
45 #include "aunit/TestOnce.h"
+
46 #include "aunit/TestAgain.h"
+
47 #include "aunit/TestRunner.h"
+
48 #include "aunit/AssertVerboseMacros.h" // verbose assertXxx() macros
+
49 #include "aunit/MetaAssertMacros.h"
+
50 #include "aunit/TestMacros.h"
+
51 
+
52 // Version format: xxyyzz == "xx.yy.zz"
+
53 #define AUNIT_VERSION 10303
+
54 #define AUNIT_VERSION_STRING "1.3.3"
+
55 
+
56 #endif
+ + + + + diff --git a/docs/html/AUnit_8h.html b/docs/html/AUnit_8h.html index 821d74d..1db1bec 100644 --- a/docs/html/AUnit_8h.html +++ b/docs/html/AUnit_8h.html @@ -1,11 +1,11 @@ - + - + -AUnit: /home/brian/dev/AUnit/src/AUnit.h File Reference +AUnit: /home/brian/src/AUnit/src/AUnit.h File Reference @@ -22,7 +22,7 @@
AUnit -  1.3.2 +  1.3.3
Unit testing framework for Arduino platforms inspired by ArduinoUnit and Google Test.
@@ -31,18 +31,21 @@
- + +/* @license-end */
AUnit.h File Reference
- -

Same as AUnitVerbose.h except that the terse versions of the various assertXxx() macros are provided. -More...

#include "aunit/print64.h"
#include "aunit/Verbosity.h"
#include "aunit/Compare.h"
@@ -89,23 +89,28 @@
Include dependency graph for AUnit.h:
-
- - - - - - - - - - - - - - - - +
+ + + + + + + + + + + + + + + + + + + + +
@@ -114,15 +119,14 @@

Macros

-#define AUNIT_VERSION   10302 +#define AUNIT_VERSION   10303   -#define AUNIT_VERSION_STRING   "1.3.2" +#define AUNIT_VERSION_STRING   "1.3.3"  

Detailed Description

-

Same as AUnitVerbose.h except that the terse versions of the various assertXxx() macros are provided.

-

These versions print only the values of the parameters given in the assert macros. They do not capture the source text of the assert parameters, which can reduce flash memory by 25-35%.

+

Same as AUnitVerbose.h except that the terse versions of the various assertXxx() macros are provided. These versions print only the values of the parameters given in the assert macros. They do not capture the source text of the assert parameters, which can reduce flash memory by 25-35%.

Definition in file AUnit.h.

@@ -130,7 +134,7 @@ diff --git a/docs/html/AUnit_8h__incl.map b/docs/html/AUnit_8h__incl.map index 5134347..ea97160 100644 --- a/docs/html/AUnit_8h__incl.map +++ b/docs/html/AUnit_8h__incl.map @@ -1,17 +1,22 @@ - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/html/AUnit_8h__incl.md5 b/docs/html/AUnit_8h__incl.md5 index adbf367..4c16a6e 100644 --- a/docs/html/AUnit_8h__incl.md5 +++ b/docs/html/AUnit_8h__incl.md5 @@ -1 +1 @@ -5d7666ff91d03e4011a2f0b25f17f88f \ No newline at end of file +fd697eb76d694a762c54325ef4aeecf6 \ No newline at end of file diff --git a/docs/html/AUnit_8h__incl.png b/docs/html/AUnit_8h__incl.png index 03df1d63cf26cc97c0549d637b59748a5c0eda9b..abb2a9d3cffd4dc983eddb9092446940b42aa8de 100644 GIT binary patch literal 152558 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∋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

owk=;#>0fUkKI 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 W+UHkDKUYS<$2|pg`BK@(Fa8gwTLHiT literal 152649 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 au}uOf}7Uib@F2=7jNls=^%bSRXV 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 z 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 EU-cB8_W%F@ diff --git a/docs/html/AUnit_8h_source.html b/docs/html/AUnit_8h_source.html index 5215358..c5e5c86 100644 --- a/docs/html/AUnit_8h_source.html +++ b/docs/html/AUnit_8h_source.html @@ -1,11 +1,11 @@ - + - + -AUnit: /home/brian/dev/AUnit/src/AUnit.h Source File +AUnit: /home/brian/src/AUnit/src/AUnit.h Source File @@ -22,7 +22,7 @@

AUnit -  1.3.2 +  1.3.3
Unit testing framework for Arduino platforms inspired by ArduinoUnit and Google Test.
@@ -31,18 +31,21 @@
- + +/* @license-end */
AUnit.h
-Go to the documentation of this file.
1 /*
2 MIT License
3 
4 Copyright (c) 2018 Brian T. Park
5 
6 Permission is hereby granted, free of charge, to any person obtaining a copy
7 of this software and associated documentation files (the "Software"), to deal
8 in the Software without restriction, including without limitation the rights
9 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 copies of the Software, and to permit persons to whom the Software is
11 furnished to do so, subject to the following conditions:
12 
13 The above copyright notice and this permission notice shall be included in all
14 copies or substantial portions of the Software.
15 
16 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22 SOFTWARE.
23 */
24 
41 #ifndef AUNIT_AUNIT_H
42 #define AUNIT_AUNIT_H
43 
44 #include "aunit/print64.h"
45 #include "aunit/Verbosity.h"
46 #include "aunit/Compare.h"
47 #include "aunit/Printer.h"
48 #include "aunit/Test.h"
49 #include "aunit/Assertion.h"
50 #include "aunit/MetaAssertion.h"
51 #include "aunit/TestOnce.h"
52 #include "aunit/TestAgain.h"
53 #include "aunit/TestRunner.h"
54 #include "aunit/AssertMacros.h" // terse assertXxx() macros
55 #include "aunit/MetaAssertMacros.h"
56 #include "aunit/TestMacros.h"
57 
58 // Version format: xxyyzz == "xx.yy.zz"
59 #define AUNIT_VERSION 10302
60 #define AUNIT_VERSION_STRING "1.3.2"
61 
62 #endif
Various macros (test(), testF(), testing(), testingF(), externTest(), externTestF(), externTesting(), externTestingF()) are defined in this header.
-
Various assertTestXxx(), checkTestXxx(), assertTestXxxF() and checkTestXxxF() macros are defined in t...
-
Helper routines to print &#39;long long&#39; and &#39;unsigned long long&#39; because the Print::print() methods in P...
-
This file provides overloaded compareXxx(a, b) functions which are used by the various assertXxx(a...
-
Various assertion macros (assertXxx()) are defined in this header.
+Go to the documentation of this file.
1 /*
+
2 MIT License
+
3 
+
4 Copyright (c) 2018 Brian T. Park
+
5 
+
6 Permission is hereby granted, free of charge, to any person obtaining a copy
+
7 of this software and associated documentation files (the "Software"), to deal
+
8 in the Software without restriction, including without limitation the rights
+
9 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+
10 copies of the Software, and to permit persons to whom the Software is
+
11 furnished to do so, subject to the following conditions:
+
12 
+
13 The above copyright notice and this permission notice shall be included in all
+
14 copies or substantial portions of the Software.
+
15 
+
16 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+
17 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+
18 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+
19 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+
20 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+
21 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+
22 SOFTWARE.
+
23 */
+
24 
+
41 #ifndef AUNIT_AUNIT_H
+
42 #define AUNIT_AUNIT_H
+
43 
+
44 #include "aunit/print64.h"
+
45 #include "aunit/Verbosity.h"
+
46 #include "aunit/Compare.h"
+
47 #include "aunit/Printer.h"
+
48 #include "aunit/Test.h"
+
49 #include "aunit/Assertion.h"
+
50 #include "aunit/MetaAssertion.h"
+
51 #include "aunit/TestOnce.h"
+
52 #include "aunit/TestAgain.h"
+
53 #include "aunit/TestRunner.h"
+
54 #include "aunit/AssertMacros.h" // terse assertXxx() macros
+
55 #include "aunit/MetaAssertMacros.h"
+
56 #include "aunit/TestMacros.h"
+
57 
+
58 // Version format: xxyyzz == "xx.yy.zz"
+
59 #define AUNIT_VERSION 10303
+
60 #define AUNIT_VERSION_STRING "1.3.3"
+
61 
+
62 #endif
+ + + + + diff --git a/docs/html/AssertMacros_8h.html b/docs/html/AssertMacros_8h.html index 3709c07..dda0cfa 100644 --- a/docs/html/AssertMacros_8h.html +++ b/docs/html/AssertMacros_8h.html @@ -1,11 +1,11 @@ - + - + -AUnit: /home/brian/dev/AUnit/src/aunit/AssertMacros.h File Reference +AUnit: /home/brian/src/AUnit/src/aunit/AssertMacros.h File Reference @@ -22,7 +22,7 @@
AUnit -  1.3.2 +  1.3.3
Unit testing framework for Arduino platforms inspired by ArduinoUnit and Google Test.
@@ -31,18 +31,21 @@
- + +/* @license-end */
AssertMacros.h File Reference
- -

Various assertion macros (assertXxx()) are defined in this header. -More...

This graph shows which files directly or indirectly include this file:
-
- - +
+ + +
@@ -86,52 +87,61 @@ - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + - + - + - +

Macros

#define assertEqual(arg1, arg2)   assertOpInternal(arg1,aunit::internal::compareEqual,"==",arg2)
 Assert that arg1 is equal to arg2. More...
+#define assertEqual(arg1, arg2)   assertOpInternal(arg1,aunit::internal::compareEqual,"==",arg2)
 Assert that arg1 is equal to arg2.
 
#define assertNotEqual(arg1, arg2)   assertOpInternal(arg1,aunit::internal::compareNotEqual,"!=",arg2)
 Assert that arg1 is not equal to arg2. More...
+#define assertNotEqual(arg1, arg2)   assertOpInternal(arg1,aunit::internal::compareNotEqual,"!=",arg2)
 Assert that arg1 is not equal to arg2.
 
#define assertLess(arg1, arg2)   assertOpInternal(arg1,aunit::internal::compareLess,"<",arg2)
 Assert that arg1 is less than arg2. More...
+#define assertLess(arg1, arg2)   assertOpInternal(arg1,aunit::internal::compareLess,"<",arg2)
 Assert that arg1 is less than arg2.
 
#define assertMore(arg1, arg2)   assertOpInternal(arg1,aunit::internal::compareMore,">",arg2)
 Assert that arg1 is more than arg2. More...
+#define assertMore(arg1, arg2)   assertOpInternal(arg1,aunit::internal::compareMore,">",arg2)
 Assert that arg1 is more than arg2.
 
#define assertLessOrEqual(arg1, arg2)   assertOpInternal(arg1,aunit::internal::compareLessOrEqual,"<=",arg2)
 Assert that arg1 is less than or equal to arg2. More...
+#define assertLessOrEqual(arg1, arg2)   assertOpInternal(arg1,aunit::internal::compareLessOrEqual,"<=",arg2)
 Assert that arg1 is less than or equal to arg2.
 
#define assertMoreOrEqual(arg1, arg2)   assertOpInternal(arg1,aunit::internal::compareMoreOrEqual,">=",arg2)
 Assert that arg1 is more than or equal to arg2. More...
+#define assertMoreOrEqual(arg1, arg2)   assertOpInternal(arg1,aunit::internal::compareMoreOrEqual,">=",arg2)
 Assert that arg1 is more than or equal to arg2.
 
#define assertStringCaseEqual(arg1, arg2)   assertOpInternal(arg1,aunit::internal::compareStringCaseEqual,"==",arg2)
 Assert that string arg1 is equal to string arg2, case-insensitive. More...
+#define assertStringCaseEqual(arg1, arg2)   assertOpInternal(arg1,aunit::internal::compareStringCaseEqual,"==",arg2)
 Assert that string arg1 is equal to string arg2, case-insensitive.
 
#define assertStringCaseNotEqual(arg1, arg2)   assertOpInternal(arg1,aunit::internal::compareStringCaseNotEqual,"!=",arg2)
 Assert that string arg1 is not equal to string arg2, case-insensitive. More...
+#define assertStringCaseNotEqual(arg1, arg2)   assertOpInternal(arg1,aunit::internal::compareStringCaseNotEqual,"!=",arg2)
 Assert that string arg1 is not equal to string arg2, case-insensitive.
 
#define assertTrue(arg)   assertBoolInternal(arg,true)
 Assert that arg is true. More...
+#define assertTrue(arg)   assertBoolInternal(arg,true)
 Assert that arg is true.
 
#define assertFalse(arg)   assertBoolInternal(arg,false)
 Assert that arg is false. More...
+#define assertFalse(arg)   assertBoolInternal(arg,false)
 Assert that arg is false.
 
#define assertOpInternal(arg1, op, opName, arg2)
 Internal helper macro, shouldn't be called directly by users. More...
 Internal helper macro, shouldn't be called directly by users. More...
 
#define assertBoolInternal(arg, value)
 Internal helper macro, shouldn't be called directly by users. More...
 Internal helper macro, shouldn't be called directly by users. More...
 
#define assertNear(arg1, arg2, error)
 Assert that arg1 and arg2 are within error of each other. More...
 Assert that arg1 and arg2 are within error of each other. More...
 
#define assertNotNear(arg1, arg2, error)
 Assert that arg1 and arg2 are NOT within error of each other. More...
 Assert that arg1 and arg2 are NOT within error of each other. More...
 

Detailed Description

-

Various assertion macros (assertXxx()) are defined in this header.

-

These macros can be used only in a subclass of TestOnce or TestAgain, which is true for all tests created by test(), testing(), testF() and testingF().

+

Various assertion macros (assertXxx()) are defined in this header. These macros can be used only in a subclass of TestOnce or TestAgain, which is true for all tests created by test(), testing(), testF() and testingF().

Definition in file AssertMacros.h.

Macro Definition Documentation

@@ -160,193 +170,15 @@

-Value:
do {\
if (!assertionBool(__FILE__,__LINE__,(arg),(value)))\
return;\
} while (false)
+Value:
do {\
+
if (!assertionBool(__FILE__,__LINE__,(arg),(value)))\
+
return;\
+
} while (false)
+

Internal helper macro, shouldn't be called directly by users.

Definition at line 84 of file AssertMacros.h.

-

-
- -

◆ assertEqual

- -
-
- - - - - - - - - - - - - - - - - - -
#define assertEqual( arg1,
 arg2 
)   assertOpInternal(arg1,aunit::internal::compareEqual,"==",arg2)
-
- -

Assert that arg1 is equal to arg2.

- -

Definition at line 40 of file AssertMacros.h.

- -
-
- -

◆ assertFalse

- -
-
- - - - - - - - -
#define assertFalse( arg)   assertBoolInternal(arg,false)
-
- -

Assert that arg is false.

- -

Definition at line 75 of file AssertMacros.h.

- -
-
- -

◆ assertLess

- -
-
- - - - - - - - - - - - - - - - - - -
#define assertLess( arg1,
 arg2 
)   assertOpInternal(arg1,aunit::internal::compareLess,"<",arg2)
-
- -

Assert that arg1 is less than arg2.

- -

Definition at line 48 of file AssertMacros.h.

- -
-
- -

◆ assertLessOrEqual

- -
-
- - - - - - - - - - - - - - - - - - -
#define assertLessOrEqual( arg1,
 arg2 
)   assertOpInternal(arg1,aunit::internal::compareLessOrEqual,"<=",arg2)
-
- -

Assert that arg1 is less than or equal to arg2.

- -

Definition at line 56 of file AssertMacros.h.

- -
-
- -

◆ assertMore

- -
-
- - - - - - - - - - - - - - - - - - -
#define assertMore( arg1,
 arg2 
)   assertOpInternal(arg1,aunit::internal::compareMore,">",arg2)
-
- -

Assert that arg1 is more than arg2.

- -

Definition at line 52 of file AssertMacros.h.

- -
-
- -

◆ assertMoreOrEqual

- -
-
- - - - - - - - - - - - - - - - - - -
#define assertMoreOrEqual( arg1,
 arg2 
)   assertOpInternal(arg1,aunit::internal::compareMoreOrEqual,">=",arg2)
-
- -

Assert that arg1 is more than or equal to arg2.

- -

Definition at line 60 of file AssertMacros.h.

-
@@ -380,43 +212,16 @@

-Value:
do { \
if (!assertionNear(__FILE__, __LINE__, \
arg1, arg2, error, "<=", aunit::internal::compareNear)) \
return;\
} while (false)
+Value:
do { \
+
if (!assertionNear(__FILE__, __LINE__, \
+
arg1, arg2, error, "<=", aunit::internal::compareNear)) \
+
return;\
+
} while (false)
+

Assert that arg1 and arg2 are within error of each other.

Definition at line 90 of file AssertMacros.h.

- - - -

◆ assertNotEqual

- -
-
- - - - - - - - - - - - - - - - - - -
#define assertNotEqual( arg1,
 arg2 
)   assertOpInternal(arg1,aunit::internal::compareNotEqual,"!=",arg2)
-
- -

Assert that arg1 is not equal to arg2.

- -

Definition at line 44 of file AssertMacros.h.

-
@@ -450,7 +255,12 @@

-Value:
do { \
if (!assertionNear(__FILE__, __LINE__, \
arg1, arg2, error, ">", aunit::internal::compareNotNear)) \
return;\
} while (false)
+Value:
do { \
+
if (!assertionNear(__FILE__, __LINE__, \
+
arg1, arg2, error, ">", aunit::internal::compareNotNear)) \
+
return;\
+
} while (false)
+

Assert that arg1 and arg2 are NOT within error of each other.

Definition at line 97 of file AssertMacros.h.

@@ -494,97 +304,15 @@

-Value:
do {\
if (!assertion(__FILE__,__LINE__,(arg1),opName,op,(arg2)))\
return;\
} while (false)
+Value:
do {\
+
if (!assertion(__FILE__,__LINE__,(arg1),opName,op,(arg2)))\
+
return;\
+
} while (false)
+

Internal helper macro, shouldn't be called directly by users.

Definition at line 78 of file AssertMacros.h.

- - - -

◆ assertStringCaseEqual

- -
-
- - - - - - - - - - - - - - - - - - -
#define assertStringCaseEqual( arg1,
 arg2 
)   assertOpInternal(arg1,aunit::internal::compareStringCaseEqual,"==",arg2)
-
- -

Assert that string arg1 is equal to string arg2, case-insensitive.

- -

Definition at line 64 of file AssertMacros.h.

- -
-
- -

◆ assertStringCaseNotEqual

- -
-
- - - - - - - - - - - - - - - - - - -
#define assertStringCaseNotEqual( arg1,
 arg2 
)   assertOpInternal(arg1,aunit::internal::compareStringCaseNotEqual,"!=",arg2)
-
- -

Assert that string arg1 is not equal to string arg2, case-insensitive.

- -

Definition at line 68 of file AssertMacros.h.

- -
-
- -

◆ assertTrue

- -
-
- - - - - - - - -
#define assertTrue( arg)   assertBoolInternal(arg,true)
-
- -

Assert that arg is true.

- -

Definition at line 72 of file AssertMacros.h.

-
@@ -592,7 +320,7 @@

diff --git a/docs/html/AssertMacros_8h__dep__incl.map b/docs/html/AssertMacros_8h__dep__incl.map index 35237f3..e352f52 100644 --- a/docs/html/AssertMacros_8h__dep__incl.map +++ b/docs/html/AssertMacros_8h__dep__incl.map @@ -1,3 +1,4 @@ - - + + + diff --git a/docs/html/AssertMacros_8h__dep__incl.md5 b/docs/html/AssertMacros_8h__dep__incl.md5 index ea532ff..a8b1179 100644 --- a/docs/html/AssertMacros_8h__dep__incl.md5 +++ b/docs/html/AssertMacros_8h__dep__incl.md5 @@ -1 +1 @@ -5aba909fc25f9153c2c3ee519883d192 \ No newline at end of file +62f66fde254562db065b29b94dff0d2c \ No newline at end of file diff --git a/docs/html/AssertMacros_8h__dep__incl.png b/docs/html/AssertMacros_8h__dep__incl.png index 565568f003c12403f83373d5c47f80915f0f97e0..4f30d3e6bf652608349b2910adcedb3175940279 100644 GIT binary patch literal 5538 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 e{4cX|5F+(t`PMKB! literal 6210 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 + - + -AUnit: /home/brian/dev/AUnit/src/aunit/AssertMacros.h Source File +AUnit: /home/brian/src/AUnit/src/aunit/AssertMacros.h Source File @@ -22,7 +22,7 @@
AUnit -  1.3.2 +  1.3.3
Unit testing framework for Arduino platforms inspired by ArduinoUnit and Google Test.
@@ -31,18 +31,21 @@ - + +/* @license-end */
AssertMacros.h
-Go to the documentation of this file.
1 /*
2 MIT License
3 
4 Copyright (c) 2018 Brian T. Park
5 
6 Permission is hereby granted, free of charge, to any person obtaining a copy
7 of this software and associated documentation files (the "Software"), to deal
8 in the Software without restriction, including without limitation the rights
9 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 copies of the Software, and to permit persons to whom the Software is
11 furnished to do so, subject to the following conditions:
12 
13 The above copyright notice and this permission notice shall be included in all
14 copies or substantial portions of the Software.
15 
16 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22 SOFTWARE.
23 */
24 
25 // Significant portions of the design and implementation of this file came from
26 // https://github.com/mmurdoch/arduinounit/blob/master/src/ArduinoUnit.h
27 
36 #ifndef AUNIT_ASSERT_MACROS_H
37 #define AUNIT_ASSERT_MACROS_H
38 
40 #define assertEqual(arg1,arg2) \
41  assertOpInternal(arg1,aunit::internal::compareEqual,"==",arg2)
42 
44 #define assertNotEqual(arg1,arg2) \
45  assertOpInternal(arg1,aunit::internal::compareNotEqual,"!=",arg2)
46 
48 #define assertLess(arg1,arg2) \
49  assertOpInternal(arg1,aunit::internal::compareLess,"<",arg2)
50 
52 #define assertMore(arg1,arg2) \
53  assertOpInternal(arg1,aunit::internal::compareMore,">",arg2)
54 
56 #define assertLessOrEqual(arg1,arg2) \
57  assertOpInternal(arg1,aunit::internal::compareLessOrEqual,"<=",arg2)
58 
60 #define assertMoreOrEqual(arg1,arg2) \
61  assertOpInternal(arg1,aunit::internal::compareMoreOrEqual,">=",arg2)
62 
64 #define assertStringCaseEqual(arg1,arg2) \
65  assertOpInternal(arg1,aunit::internal::compareStringCaseEqual,"==",arg2)
66 
68 #define assertStringCaseNotEqual(arg1,arg2) \
69  assertOpInternal(arg1,aunit::internal::compareStringCaseNotEqual,"!=",arg2)
70 
72 #define assertTrue(arg) assertBoolInternal(arg,true)
73 
75 #define assertFalse(arg) assertBoolInternal(arg,false)
76 
78 #define assertOpInternal(arg1,op,opName,arg2) do {\
79  if (!assertion(__FILE__,__LINE__,(arg1),opName,op,(arg2)))\
80  return;\
81 } while (false)
82 
84 #define assertBoolInternal(arg,value) do {\
85  if (!assertionBool(__FILE__,__LINE__,(arg),(value)))\
86  return;\
87 } while (false)
88 
90 #define assertNear(arg1, arg2, error) do { \
91  if (!assertionNear(__FILE__, __LINE__, \
92  arg1, arg2, error, "<=", aunit::internal::compareNear)) \
93  return;\
94 } while (false)
95 
97 #define assertNotNear(arg1, arg2, error) do { \
98  if (!assertionNear(__FILE__, __LINE__, \
99  arg1, arg2, error, ">", aunit::internal::compareNotNear)) \
100  return;\
101 } while (false)
102 
103 #endif
+Go to the documentation of this file.
1 /*
+
2 MIT License
+
3 
+
4 Copyright (c) 2018 Brian T. Park
+
5 
+
6 Permission is hereby granted, free of charge, to any person obtaining a copy
+
7 of this software and associated documentation files (the "Software"), to deal
+
8 in the Software without restriction, including without limitation the rights
+
9 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+
10 copies of the Software, and to permit persons to whom the Software is
+
11 furnished to do so, subject to the following conditions:
+
12 
+
13 The above copyright notice and this permission notice shall be included in all
+
14 copies or substantial portions of the Software.
+
15 
+
16 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+
17 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+
18 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+
19 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+
20 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+
21 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+
22 SOFTWARE.
+
23 */
+
24 
+
25 // Significant portions of the design and implementation of this file came from
+
26 // https://github.com/mmurdoch/arduinounit/blob/master/src/ArduinoUnit.h
+
27 
+
36 #ifndef AUNIT_ASSERT_MACROS_H
+
37 #define AUNIT_ASSERT_MACROS_H
+
38 
+
40 #define assertEqual(arg1,arg2) \
+
41  assertOpInternal(arg1,aunit::internal::compareEqual,"==",arg2)
+
42 
+
44 #define assertNotEqual(arg1,arg2) \
+
45  assertOpInternal(arg1,aunit::internal::compareNotEqual,"!=",arg2)
+
46 
+
48 #define assertLess(arg1,arg2) \
+
49  assertOpInternal(arg1,aunit::internal::compareLess,"<",arg2)
+
50 
+
52 #define assertMore(arg1,arg2) \
+
53  assertOpInternal(arg1,aunit::internal::compareMore,">",arg2)
+
54 
+
56 #define assertLessOrEqual(arg1,arg2) \
+
57  assertOpInternal(arg1,aunit::internal::compareLessOrEqual,"<=",arg2)
+
58 
+
60 #define assertMoreOrEqual(arg1,arg2) \
+
61  assertOpInternal(arg1,aunit::internal::compareMoreOrEqual,">=",arg2)
+
62 
+
64 #define assertStringCaseEqual(arg1,arg2) \
+
65  assertOpInternal(arg1,aunit::internal::compareStringCaseEqual,"==",arg2)
+
66 
+
68 #define assertStringCaseNotEqual(arg1,arg2) \
+
69  assertOpInternal(arg1,aunit::internal::compareStringCaseNotEqual,"!=",arg2)
+
70 
+
72 #define assertTrue(arg) assertBoolInternal(arg,true)
+
73 
+
75 #define assertFalse(arg) assertBoolInternal(arg,false)
+
76 
+
78 #define assertOpInternal(arg1,op,opName,arg2) do {\
+
79  if (!assertion(__FILE__,__LINE__,(arg1),opName,op,(arg2)))\
+
80  return;\
+
81 } while (false)
+
82 
+
84 #define assertBoolInternal(arg,value) do {\
+
85  if (!assertionBool(__FILE__,__LINE__,(arg),(value)))\
+
86  return;\
+
87 } while (false)
+
88 
+
90 #define assertNear(arg1, arg2, error) do { \
+
91  if (!assertionNear(__FILE__, __LINE__, \
+
92  arg1, arg2, error, "<=", aunit::internal::compareNear)) \
+
93  return;\
+
94 } while (false)
+
95 
+
97 #define assertNotNear(arg1, arg2, error) do { \
+
98  if (!assertionNear(__FILE__, __LINE__, \
+
99  arg1, arg2, error, ">", aunit::internal::compareNotNear)) \
+
100  return;\
+
101 } while (false)
+
102 
+
103 #endif
+
diff --git a/docs/html/AssertVerboseMacros_8h.html b/docs/html/AssertVerboseMacros_8h.html index 38be76c..346397e 100644 --- a/docs/html/AssertVerboseMacros_8h.html +++ b/docs/html/AssertVerboseMacros_8h.html @@ -1,11 +1,11 @@ - + - + -AUnit: /home/brian/dev/AUnit/src/aunit/AssertVerboseMacros.h File Reference +AUnit: /home/brian/src/AUnit/src/aunit/AssertVerboseMacros.h File Reference @@ -22,7 +22,7 @@
AUnit -  1.3.2 +  1.3.3
Unit testing framework for Arduino platforms inspired by ArduinoUnit and Google Test.
@@ -31,18 +31,21 @@ - + +/* @license-end */
AssertVerboseMacros.h File Reference
- -

Verbose versions of the macros in AssertMacros.h. -More...

This graph shows which files directly or indirectly include this file:
-
- - +
+ + +
@@ -86,52 +87,59 @@ - - + + - - + + - - + + - - + + - - + + - - + + - + - + - - + + - - + + - + - + - + - +

Macros

#define assertEqual(arg1, arg2)   assertOpVerboseInternal(arg1,aunit::internal::compareEqual,"==",arg2)
 Assert that arg1 is equal to arg2. More...
+#define assertEqual(arg1, arg2)   assertOpVerboseInternal(arg1,aunit::internal::compareEqual,"==",arg2)
 Assert that arg1 is equal to arg2.
 
#define assertNotEqual(arg1, arg2)   assertOpVerboseInternal(arg1,aunit::internal::compareNotEqual,"!=",arg2)
 Assert that arg1 is not equal to arg2. More...
+#define assertNotEqual(arg1, arg2)   assertOpVerboseInternal(arg1,aunit::internal::compareNotEqual,"!=",arg2)
 Assert that arg1 is not equal to arg2.
 
#define assertLess(arg1, arg2)   assertOpVerboseInternal(arg1,aunit::internal::compareLess,"<",arg2)
 Assert that arg1 is less than arg2. More...
+#define assertLess(arg1, arg2)   assertOpVerboseInternal(arg1,aunit::internal::compareLess,"<",arg2)
 Assert that arg1 is less than arg2.
 
#define assertMore(arg1, arg2)   assertOpVerboseInternal(arg1,aunit::internal::compareMore,">",arg2)
 Assert that arg1 is more than arg2. More...
+#define assertMore(arg1, arg2)   assertOpVerboseInternal(arg1,aunit::internal::compareMore,">",arg2)
 Assert that arg1 is more than arg2.
 
#define assertLessOrEqual(arg1, arg2)   assertOpVerboseInternal(arg1,aunit::internal::compareLessOrEqual,"<=",arg2)
 Assert that arg1 is less than or equal to arg2. More...
+#define assertLessOrEqual(arg1, arg2)   assertOpVerboseInternal(arg1,aunit::internal::compareLessOrEqual,"<=",arg2)
 Assert that arg1 is less than or equal to arg2.
 
#define assertMoreOrEqual(arg1, arg2)   assertOpVerboseInternal(arg1,aunit::internal::compareMoreOrEqual,">=",arg2)
 Assert that arg1 is more than or equal to arg2. More...
+#define assertMoreOrEqual(arg1, arg2)   assertOpVerboseInternal(arg1,aunit::internal::compareMoreOrEqual,">=",arg2)
 Assert that arg1 is more than or equal to arg2.
 
#define assertStringCaseEqual(arg1, arg2)
 Assert that string arg1 is equal to string arg2, case-insensitive. More...
 Assert that string arg1 is equal to string arg2, case-insensitive. More...
 
#define assertStringCaseNotEqual(arg1, arg2)
 Assert that string arg1 is not equal to string arg2, case-insensitive. More...
 Assert that string arg1 is not equal to string arg2, case-insensitive. More...
 
#define assertTrue(arg)   assertBoolVerboseInternal(arg,true)
 Assert that arg is true. More...
+#define assertTrue(arg)   assertBoolVerboseInternal(arg,true)
 Assert that arg is true.
 
#define assertFalse(arg)   assertBoolVerboseInternal(arg,false)
 Assert that arg is false. More...
+#define assertFalse(arg)   assertBoolVerboseInternal(arg,false)
 Assert that arg is false.
 
#define assertOpVerboseInternal(arg1, op, opName, arg2)
 Internal helper macro, shouldn't be called directly by users. More...
 Internal helper macro, shouldn't be called directly by users. More...
 
#define assertBoolVerboseInternal(arg, value)
 Internal helper macro, shouldn't be called directly by users. More...
 Internal helper macro, shouldn't be called directly by users. More...
 
#define assertNear(arg1, arg2, error)
 Assert that arg1 and arg2 are within error of each other. More...
 Assert that arg1 and arg2 are within error of each other. More...
 
#define assertNotNear(arg1, arg2, error)
 Assert that arg1 and arg2 are NOT within error of each other. More...
 Assert that arg1 and arg2 are NOT within error of each other. More...
 

Detailed Description

-

Verbose versions of the macros in AssertMacros.h.

-

These capture the string of the actual arguments and pass them to the respective assertionVerbose() methods so that verbose messages can be printed.

+

Verbose versions of the macros in AssertMacros.h. These capture the string of the actual arguments and pass them to the respective assertionVerbose() methods so that verbose messages can be printed.

Definition in file AssertVerboseMacros.h.

Macro Definition Documentation

@@ -160,193 +168,15 @@

-Value:
do {\
if (!assertionBoolVerbose(__FILE__,__LINE__,(arg),AUNIT_F(#arg),(value)))\
return;\
} while (false)
+Value:
do {\
+
if (!assertionBoolVerbose(__FILE__,__LINE__,(arg),AUNIT_F(#arg),(value)))\
+
return;\
+
} while (false)
+

Internal helper macro, shouldn't be called directly by users.

Definition at line 87 of file AssertVerboseMacros.h.

-

-
- -

◆ assertEqual

- -
-
- - - - - - - - - - - - - - - - - - -
#define assertEqual( arg1,
 arg2 
)   assertOpVerboseInternal(arg1,aunit::internal::compareEqual,"==",arg2)
-
- -

Assert that arg1 is equal to arg2.

- -

Definition at line 40 of file AssertVerboseMacros.h.

- -
-
- -

◆ assertFalse

- -
-
- - - - - - - - -
#define assertFalse( arg)   assertBoolVerboseInternal(arg,false)
-
- -

Assert that arg is false.

- -

Definition at line 77 of file AssertVerboseMacros.h.

- -
-
- -

◆ assertLess

- -
-
- - - - - - - - - - - - - - - - - - -
#define assertLess( arg1,
 arg2 
)   assertOpVerboseInternal(arg1,aunit::internal::compareLess,"<",arg2)
-
- -

Assert that arg1 is less than arg2.

- -

Definition at line 48 of file AssertVerboseMacros.h.

- -
-
- -

◆ assertLessOrEqual

- -
-
- - - - - - - - - - - - - - - - - - -
#define assertLessOrEqual( arg1,
 arg2 
)   assertOpVerboseInternal(arg1,aunit::internal::compareLessOrEqual,"<=",arg2)
-
- -

Assert that arg1 is less than or equal to arg2.

- -

Definition at line 56 of file AssertVerboseMacros.h.

- -
-
- -

◆ assertMore

- -
-
- - - - - - - - - - - - - - - - - - -
#define assertMore( arg1,
 arg2 
)   assertOpVerboseInternal(arg1,aunit::internal::compareMore,">",arg2)
-
- -

Assert that arg1 is more than arg2.

- -

Definition at line 52 of file AssertVerboseMacros.h.

- -
-
- -

◆ assertMoreOrEqual

- -
-
- - - - - - - - - - - - - - - - - - -
#define assertMoreOrEqual( arg1,
 arg2 
)   assertOpVerboseInternal(arg1,aunit::internal::compareMoreOrEqual,">=",arg2)
-
- -

Assert that arg1 is more than or equal to arg2.

- -

Definition at line 60 of file AssertVerboseMacros.h.

-
@@ -380,43 +210,17 @@

-Value:
do { \
if (!assertionNearVerbose(__FILE__, __LINE__, \
arg1, AUNIT_F(#arg1), arg2, AUNIT_F(#arg2), error, AUNIT_F(#error), \
"<=", aunit::internal::compareNear)) \
return;\
} while (false)
+Value:
do { \
+
if (!assertionNearVerbose(__FILE__, __LINE__, \
+
arg1, AUNIT_F(#arg1), arg2, AUNIT_F(#arg2), error, AUNIT_F(#error), \
+
"<=", aunit::internal::compareNear)) \
+
return;\
+
} while (false)
+

Assert that arg1 and arg2 are within error of each other.

Definition at line 93 of file AssertVerboseMacros.h.

- - - -

◆ assertNotEqual

- -
-
- - - - - - - - - - - - - - - - - - -
#define assertNotEqual( arg1,
 arg2 
)   assertOpVerboseInternal(arg1,aunit::internal::compareNotEqual,"!=",arg2)
-
- -

Assert that arg1 is not equal to arg2.

- -

Definition at line 44 of file AssertVerboseMacros.h.

-
@@ -450,7 +254,13 @@

-Value:
do { \
if (!assertionNearVerbose(__FILE__, __LINE__, \
arg1, AUNIT_F(#arg1), arg2, AUNIT_F(#arg2), error, AUNIT_F(#error), \
">", aunit::internal::compareNotNear)) \
return;\
} while (false)
+Value:
do { \
+
if (!assertionNearVerbose(__FILE__, __LINE__, \
+
arg1, AUNIT_F(#arg1), arg2, AUNIT_F(#arg2), error, AUNIT_F(#error), \
+
">", aunit::internal::compareNotNear)) \
+
return;\
+
} while (false)
+

Assert that arg1 and arg2 are NOT within error of each other.

Definition at line 101 of file AssertVerboseMacros.h.

@@ -494,7 +304,12 @@

-Value:
do {\
if (!assertionVerbose(__FILE__,__LINE__,\
(arg1),AUNIT_F(#arg1),opName,op,(arg2),AUNIT_F(#arg2)))\
return;\
} while (false)
+Value:
do {\
+
if (!assertionVerbose(__FILE__,__LINE__,\
+
(arg1),AUNIT_F(#arg1),opName,op,(arg2),AUNIT_F(#arg2)))\
+
return;\
+
} while (false)
+

Internal helper macro, shouldn't be called directly by users.

Definition at line 80 of file AssertVerboseMacros.h.

@@ -526,7 +341,8 @@

-Value:
assertOpVerboseInternal(arg1,aunit::internal::compareStringCaseEqual,\
"==",arg2)
#define assertOpVerboseInternal(arg1, op, opName, arg2)
Internal helper macro, shouldn&#39;t be called directly by users.
+Value:
assertOpVerboseInternal(arg1,aunit::internal::compareStringCaseEqual,\
+
"==",arg2)

Assert that string arg1 is equal to string arg2, case-insensitive.

@@ -559,42 +375,22 @@

-Value:
assertOpVerboseInternal(arg1,aunit::internal::compareStringCaseNotEqual,\
"!=",arg2)
#define assertOpVerboseInternal(arg1, op, opName, arg2)
Internal helper macro, shouldn&#39;t be called directly by users.
+Value:
assertOpVerboseInternal(arg1,aunit::internal::compareStringCaseNotEqual,\
+
"!=",arg2)

Assert that string arg1 is not equal to string arg2, case-insensitive.

Definition at line 69 of file AssertVerboseMacros.h.

-
-

- -

◆ assertTrue

- -
-
- - - - - - - - -
#define assertTrue( arg)   assertBoolVerboseInternal(arg,true)
-
- -

Assert that arg is true.

- -

Definition at line 74 of file AssertVerboseMacros.h.

-
+
#define assertOpVerboseInternal(arg1, op, opName, arg2)
Internal helper macro, shouldn't be called directly by users.
diff --git a/docs/html/AssertVerboseMacros_8h__dep__incl.map b/docs/html/AssertVerboseMacros_8h__dep__incl.map index 37ad6a2..34dba02 100644 --- a/docs/html/AssertVerboseMacros_8h__dep__incl.map +++ b/docs/html/AssertVerboseMacros_8h__dep__incl.map @@ -1,3 +1,4 @@ - - + + + diff --git a/docs/html/AssertVerboseMacros_8h__dep__incl.md5 b/docs/html/AssertVerboseMacros_8h__dep__incl.md5 index 88eccc3..c361d93 100644 --- a/docs/html/AssertVerboseMacros_8h__dep__incl.md5 +++ b/docs/html/AssertVerboseMacros_8h__dep__incl.md5 @@ -1 +1 @@ -2ad3a5bfec6bf4f01b2aa31a93833e1f \ No newline at end of file +76ec2543c9b6a2b2a0ad52f1ed85e047 \ No newline at end of file diff --git a/docs/html/AssertVerboseMacros_8h__dep__incl.png b/docs/html/AssertVerboseMacros_8h__dep__incl.png index 22c52033e9486bf09b6042da206ccf56566f0f04..288cf14cf23c079faf85b2ecf5471c9056485178 100644 GIT binary patch literal 6037 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 literal 6810 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 AhX4Qo diff --git a/docs/html/AssertVerboseMacros_8h_source.html b/docs/html/AssertVerboseMacros_8h_source.html index ac8f3cc..7b504ef 100644 --- a/docs/html/AssertVerboseMacros_8h_source.html +++ b/docs/html/AssertVerboseMacros_8h_source.html @@ -1,11 +1,11 @@ - + - + -AUnit: /home/brian/dev/AUnit/src/aunit/AssertVerboseMacros.h Source File +AUnit: /home/brian/src/AUnit/src/aunit/AssertVerboseMacros.h Source File @@ -22,7 +22,7 @@
AUnit -  1.3.2 +  1.3.3
Unit testing framework for Arduino platforms inspired by ArduinoUnit and Google Test.
@@ -31,18 +31,21 @@ - + +/* @license-end */
AssertVerboseMacros.h
-Go to the documentation of this file.
1 /*
2 MIT License
3 
4 Copyright (c) 2018 Brian T. Park
5 
6 Permission is hereby granted, free of charge, to any person obtaining a copy
7 of this software and associated documentation files (the "Software"), to deal
8 in the Software without restriction, including without limitation the rights
9 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 copies of the Software, and to permit persons to whom the Software is
11 furnished to do so, subject to the following conditions:
12 
13 The above copyright notice and this permission notice shall be included in all
14 copies or substantial portions of the Software.
15 
16 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22 SOFTWARE.
23 */
24 
25 // Significant portions of the design and implementation of this file came from
26 // https://github.com/mmurdoch/arduinounit/blob/master/src/ArduinoUnit.h
27 
36 #ifndef AUNIT_ASSERT_VERBOSE_MACROS_H
37 #define AUNIT_ASSERT_VERBOSE_MACROS_H
38 
40 #define assertEqual(arg1,arg2) \
41  assertOpVerboseInternal(arg1,aunit::internal::compareEqual,"==",arg2)
42 
44 #define assertNotEqual(arg1,arg2) \
45  assertOpVerboseInternal(arg1,aunit::internal::compareNotEqual,"!=",arg2)
46 
48 #define assertLess(arg1,arg2) \
49  assertOpVerboseInternal(arg1,aunit::internal::compareLess,"<",arg2)
50 
52 #define assertMore(arg1,arg2) \
53  assertOpVerboseInternal(arg1,aunit::internal::compareMore,">",arg2)
54 
56 #define assertLessOrEqual(arg1,arg2) \
57  assertOpVerboseInternal(arg1,aunit::internal::compareLessOrEqual,"<=",arg2)
58 
60 #define assertMoreOrEqual(arg1,arg2) \
61  assertOpVerboseInternal(arg1,aunit::internal::compareMoreOrEqual,">=",arg2)
62 
64 #define assertStringCaseEqual(arg1,arg2) \
65  assertOpVerboseInternal(arg1,aunit::internal::compareStringCaseEqual,\
66  "==",arg2)
67 
69 #define assertStringCaseNotEqual(arg1,arg2) \
70  assertOpVerboseInternal(arg1,aunit::internal::compareStringCaseNotEqual,\
71  "!=",arg2)
72 
74 #define assertTrue(arg) assertBoolVerboseInternal(arg,true)
75 
77 #define assertFalse(arg) assertBoolVerboseInternal(arg,false)
78 
80 #define assertOpVerboseInternal(arg1,op,opName,arg2) do {\
81  if (!assertionVerbose(__FILE__,__LINE__,\
82  (arg1),AUNIT_F(#arg1),opName,op,(arg2),AUNIT_F(#arg2)))\
83  return;\
84 } while (false)
85 
87 #define assertBoolVerboseInternal(arg,value) do {\
88  if (!assertionBoolVerbose(__FILE__,__LINE__,(arg),AUNIT_F(#arg),(value)))\
89  return;\
90 } while (false)
91 
93 #define assertNear(arg1, arg2, error) do { \
94  if (!assertionNearVerbose(__FILE__, __LINE__, \
95  arg1, AUNIT_F(#arg1), arg2, AUNIT_F(#arg2), error, AUNIT_F(#error), \
96  "<=", aunit::internal::compareNear)) \
97  return;\
98 } while (false)
99 
101 #define assertNotNear(arg1, arg2, error) do { \
102  if (!assertionNearVerbose(__FILE__, __LINE__, \
103  arg1, AUNIT_F(#arg1), arg2, AUNIT_F(#arg2), error, AUNIT_F(#error), \
104  ">", aunit::internal::compareNotNear)) \
105  return;\
106 } while (false)
107 
108 #endif
+Go to the documentation of this file.
1 /*
+
2 MIT License
+
3 
+
4 Copyright (c) 2018 Brian T. Park
+
5 
+
6 Permission is hereby granted, free of charge, to any person obtaining a copy
+
7 of this software and associated documentation files (the "Software"), to deal
+
8 in the Software without restriction, including without limitation the rights
+
9 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+
10 copies of the Software, and to permit persons to whom the Software is
+
11 furnished to do so, subject to the following conditions:
+
12 
+
13 The above copyright notice and this permission notice shall be included in all
+
14 copies or substantial portions of the Software.
+
15 
+
16 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+
17 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+
18 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+
19 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+
20 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+
21 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+
22 SOFTWARE.
+
23 */
+
24 
+
25 // Significant portions of the design and implementation of this file came from
+
26 // https://github.com/mmurdoch/arduinounit/blob/master/src/ArduinoUnit.h
+
27 
+
36 #ifndef AUNIT_ASSERT_VERBOSE_MACROS_H
+
37 #define AUNIT_ASSERT_VERBOSE_MACROS_H
+
38 
+
40 #define assertEqual(arg1,arg2) \
+
41  assertOpVerboseInternal(arg1,aunit::internal::compareEqual,"==",arg2)
+
42 
+
44 #define assertNotEqual(arg1,arg2) \
+
45  assertOpVerboseInternal(arg1,aunit::internal::compareNotEqual,"!=",arg2)
+
46 
+
48 #define assertLess(arg1,arg2) \
+
49  assertOpVerboseInternal(arg1,aunit::internal::compareLess,"<",arg2)
+
50 
+
52 #define assertMore(arg1,arg2) \
+
53  assertOpVerboseInternal(arg1,aunit::internal::compareMore,">",arg2)
+
54 
+
56 #define assertLessOrEqual(arg1,arg2) \
+
57  assertOpVerboseInternal(arg1,aunit::internal::compareLessOrEqual,"<=",arg2)
+
58 
+
60 #define assertMoreOrEqual(arg1,arg2) \
+
61  assertOpVerboseInternal(arg1,aunit::internal::compareMoreOrEqual,">=",arg2)
+
62 
+
64 #define assertStringCaseEqual(arg1,arg2) \
+
65  assertOpVerboseInternal(arg1,aunit::internal::compareStringCaseEqual,\
+
66  "==",arg2)
+
67 
+
69 #define assertStringCaseNotEqual(arg1,arg2) \
+
70  assertOpVerboseInternal(arg1,aunit::internal::compareStringCaseNotEqual,\
+
71  "!=",arg2)
+
72 
+
74 #define assertTrue(arg) assertBoolVerboseInternal(arg,true)
+
75 
+
77 #define assertFalse(arg) assertBoolVerboseInternal(arg,false)
+
78 
+
80 #define assertOpVerboseInternal(arg1,op,opName,arg2) do {\
+
81  if (!assertionVerbose(__FILE__,__LINE__,\
+
82  (arg1),AUNIT_F(#arg1),opName,op,(arg2),AUNIT_F(#arg2)))\
+
83  return;\
+
84 } while (false)
+
85 
+
87 #define assertBoolVerboseInternal(arg,value) do {\
+
88  if (!assertionBoolVerbose(__FILE__,__LINE__,(arg),AUNIT_F(#arg),(value)))\
+
89  return;\
+
90 } while (false)
+
91 
+
93 #define assertNear(arg1, arg2, error) do { \
+
94  if (!assertionNearVerbose(__FILE__, __LINE__, \
+
95  arg1, AUNIT_F(#arg1), arg2, AUNIT_F(#arg2), error, AUNIT_F(#error), \
+
96  "<=", aunit::internal::compareNear)) \
+
97  return;\
+
98 } while (false)
+
99 
+
101 #define assertNotNear(arg1, arg2, error) do { \
+
102  if (!assertionNearVerbose(__FILE__, __LINE__, \
+
103  arg1, AUNIT_F(#arg1), arg2, AUNIT_F(#arg2), error, AUNIT_F(#error), \
+
104  ">", aunit::internal::compareNotNear)) \
+
105  return;\
+
106 } while (false)
+
107 
+
108 #endif
+
diff --git a/docs/html/Assertion_8cpp_source.html b/docs/html/Assertion_8cpp_source.html index 378bc8d..528430f 100644 --- a/docs/html/Assertion_8cpp_source.html +++ b/docs/html/Assertion_8cpp_source.html @@ -1,11 +1,11 @@ - + - + -AUnit: /home/brian/dev/AUnit/src/aunit/Assertion.cpp Source File +AUnit: /home/brian/src/AUnit/src/aunit/Assertion.cpp Source File @@ -22,7 +22,7 @@
AUnit -  1.3.2 +  1.3.3
Unit testing framework for Arduino platforms inspired by ArduinoUnit and Google Test.
@@ -31,18 +31,21 @@ - + +/* @license-end */
Assertion.cpp
-
1 /*
2 MIT License
3 
4 Copyright (c) 2018 Brian T. Park
5 
6 Permission is hereby granted, free of charge, to any person obtaining a copy
7 of this software and associated documentation files (the "Software"), to deal
8 in the Software without restriction, including without limitation the rights
9 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 copies of the Software, and to permit persons to whom the Software is
11 furnished to do so, subject to the following conditions:
12 
13 The above copyright notice and this permission notice shall be included in all
14 copies or substantial portions of the Software.
15 
16 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22 SOFTWARE.
23 */
24 
25 #include <Arduino.h> // definition of Print
26 #include "Flash.h"
27 #include "Printer.h"
28 #include "Assertion.h"
29 #include "print64.h"
30 
31 namespace aunit {
32 
33 using namespace internal;
34 
35 namespace internal {
36 
37 // This can be a template function because it is accessed only through the
38 // various assertXxx() methods. Those assertXxx() methods are explicitly
39 // overloaded for the various types that we want to support.
40 //
41 // Prints something like the following:
42 // Assertion failed: (5) == (6), file Test.ino, line 820.
43 // Assertion passed: (6) == (6), file Test.ino, line 820.
44 template <typename A, typename B>
45 void printAssertionMessage(Print* printer, bool ok, const char* file,
46  uint16_t line, const A& lhs, const char* opName, const B& rhs) {
47 
48  // Don't use F() strings here because flash memory strings are not deduped by
49  // the compiler, so each template instantiation of this method causes a
50  // duplication of all the strings below. See
51  // https://github.com/mmurdoch/arduinounit/issues/70
52  // for more info. Normal (const char*) strings will be deduped by the
53  // compiler/linker.
54  printer->print("Assertion ");
55  printer->print(ok ? "passed" : "failed");
56  printer->print(": (");
57  printer->print(lhs);
58  printer->print(") ");
59  printer->print(opName);
60  printer->print(" (");
61  printer->print(rhs);
62  printer->print(')');
63  // reuse string in MataAssertion::printAssertionTestStatusMessage()
64  printer->print(", file ");
65  printer->print(file);
66  printer->print(", line ");
67  printer->print(line);
68  printer->println('.');
69 }
70 
71 // Special version of (bool, bool) because Arduino Print.h converts
72 // bool into int, which prints out "(1) == (0)", which isn't as useful.
73 // This prints "(true) == (false)".
74 void printAssertionMessage(Print* printer, bool ok, const char* file,
75  uint16_t line, bool lhs, const char* opName, bool rhs) {
76 
77  // Don't use F() strings here. Same reason as above.
78  printer->print("Assertion ");
79  printer->print(ok ? "passed" : "failed");
80  printer->print(": (");
81  printer->print(lhs ? "true" : "false");
82  printer->print(") ");
83  printer->print(opName);
84  printer->print(" (");
85  printer->print(rhs ? "true" : "false");
86  printer->print(')');
87  printer->print(", file ");
88  printer->print(file);
89  printer->print(", line ");
90  printer->print(line);
91  printer->println('.');
92 }
93 
94 // Version for (long long, long long) because Print.h does not support int64.
95 void printAssertionMessage(Print* printer, bool ok, const char* file,
96  uint16_t line, long long& lhs, const char* opName, long long& rhs) {
97 
98  // Don't use F() strings here. Same reason as above.
99  printer->print("Assertion ");
100  printer->print(ok ? "passed" : "failed");
101  printer->print(": (");
102  print64(*printer, lhs);
103  printer->print(") ");
104  printer->print(opName);
105  printer->print(" (");
106  print64(*printer, rhs);
107  printer->print(')');
108  printer->print(", file ");
109  printer->print(file);
110  printer->print(", line ");
111  printer->print(line);
112  printer->println('.');
113 }
114 
115 // Version for (unsigned long long, unsigned long long) because Print.h does
116 // not support int64.
117 void printAssertionMessage(Print* printer, bool ok, const char* file,
118  uint16_t line, unsigned long long& lhs, const char* opName,
119  unsigned long long& rhs) {
120 
121  // Don't use F() strings here. Same reason as above.
122  printer->print("Assertion ");
123  printer->print(ok ? "passed" : "failed");
124  printer->print(": (");
125  print64(*printer, lhs);
126  printer->print(") ");
127  printer->print(opName);
128  printer->print(" (");
129  print64(*printer, rhs);
130  printer->print(')');
131  printer->print(", file ");
132  printer->print(file);
133  printer->print(", line ");
134  printer->print(line);
135  printer->println('.');
136 }
137 
138 // Special version for assertTrue(arg) and assertFalse(arg).
139 // Prints:
140 // "Assertion passed/failed: (arg) is true"
141 // "Assertion passed/failed: (arg) is false"
142 void printAssertionBoolMessage(Print* printer, bool ok, const char* file,
143  uint16_t line, bool arg, bool value) {
144 
145  // Don't use F() strings here. Same reason as above.
146  printer->print("Assertion ");
147  printer->print(ok ? "passed" : "failed");
148  printer->print(": (");
149  printer->print(arg ? "true" : "false");
150  printer->print(") is ");
151  printer->print(value ? "true" : "false");
152  printer->print(", file ");
153  printer->print(file);
154  printer->print(", line ");
155  printer->print(line);
156  printer->println('.');
157 }
158 
159 template <typename A>
160 void printAssertionNearMessage(Print* printer, bool ok, const char* file,
161  uint16_t line, const A& lhs, const A& rhs, const char* opName,
162  const A& error) {
163  printer->print("Assertion ");
164  printer->print(ok ? "passed" : "failed");
165  printer->print(": |(");
166  printer->print(lhs);
167  printer->print(") - (");
168  printer->print(rhs);
169  printer->print(")| ");
170  printer->print(opName);
171  printer->print(" (");
172  printer->print(error);
173  printer->print(')');
174  printer->print(", file ");
175  printer->print(file);
176  printer->print(", line ");
177  printer->print(line);
178  printer->println('.');
179 }
180 
181 } // namespace
182 
183 bool Assertion::isOutputEnabled(bool ok) const {
184  return (ok && isVerbosity(Verbosity::kAssertionPassed)) ||
185  (!ok && isVerbosity(Verbosity::kAssertionFailed));
186 }
187 
188 bool Assertion::assertionBool(const char* file, uint16_t line, bool arg,
189  bool value) {
190  if (isDone()) return false;
191  bool ok = (arg == value);
192  if (isOutputEnabled(ok)) {
193  printAssertionBoolMessage(Printer::getPrinter(), ok, file, line,
194  arg, value);
195  }
196  setPassOrFail(ok);
197  return ok;
198 }
199 
200 bool Assertion::assertion(const char* file, uint16_t line, bool lhs,
201  const char* opName, bool (*op)(bool lhs, bool rhs),
202  bool rhs) {
203  if (isDone()) return false;
204  bool ok = op(lhs, rhs);
205  if (isOutputEnabled(ok)) {
206  printAssertionMessage(Printer::getPrinter(), ok, file, line,
207  lhs, opName, rhs);
208  }
209  setPassOrFail(ok);
210  return ok;
211 }
212 
213 bool Assertion::assertion(const char* file, uint16_t line, char lhs,
214  const char* opName, bool (*op)(char lhs, char rhs),
215  char rhs) {
216  if (isDone()) return false;
217  bool ok = op(lhs, rhs);
218  if (isOutputEnabled(ok)) {
219  printAssertionMessage(Printer::getPrinter(), ok, file, line,
220  lhs, opName, rhs);
221  }
222  setPassOrFail(ok);
223  return ok;
224 }
225 
226 bool Assertion::assertion(const char* file, uint16_t line, int lhs,
227  const char* opName, bool (*op)(int lhs, int rhs),
228  int rhs) {
229  if (isDone()) return false;
230  bool ok = op(lhs, rhs);
231  if (isOutputEnabled(ok)) {
232  printAssertionMessage(Printer::getPrinter(), ok, file, line,
233  lhs, opName, rhs);
234  }
235  setPassOrFail(ok);
236  return ok;
237 }
238 
239 bool Assertion::assertion(const char* file, uint16_t line, unsigned int lhs,
240  const char* opName, bool (*op)(unsigned int lhs, unsigned int rhs),
241  unsigned int rhs) {
242  if (isDone()) return false;
243  bool ok = op(lhs, rhs);
244  if (isOutputEnabled(ok)) {
245  printAssertionMessage(Printer::getPrinter(), ok, file, line,
246  lhs, opName, rhs);
247  }
248  setPassOrFail(ok);
249  return ok;
250 }
251 
252 bool Assertion::assertion(const char* file, uint16_t line, long lhs,
253  const char* opName, bool (*op)(long lhs, long rhs),
254  long rhs) {
255  if (isDone()) return false;
256  bool ok = op(lhs, rhs);
257  if (isOutputEnabled(ok)) {
258  printAssertionMessage(Printer::getPrinter(), ok, file, line,
259  lhs, opName, rhs);
260  }
261  setPassOrFail(ok);
262  return ok;
263 }
264 
265 bool Assertion::assertion(const char* file, uint16_t line, unsigned long lhs,
266  const char* opName, bool (*op)(unsigned long lhs, unsigned long rhs),
267  unsigned long rhs) {
268  if (isDone()) return false;
269  bool ok = op(lhs, rhs);
270  if (isOutputEnabled(ok)) {
271  printAssertionMessage(Printer::getPrinter(), ok, file, line,
272  lhs, opName, rhs);
273  }
274  setPassOrFail(ok);
275  return ok;
276 }
277 
278 bool Assertion::assertion(const char* file, uint16_t line, long long lhs,
279  const char* opName, bool (*op)(long long lhs, long long rhs),
280  long long rhs) {
281  if (isDone()) return false;
282  bool ok = op(lhs, rhs);
283  if (isOutputEnabled(ok)) {
284  printAssertionMessage(Printer::getPrinter(), ok, file, line,
285  lhs, opName, rhs);
286  }
287  setPassOrFail(ok);
288  return ok;
289 }
290 
291 bool Assertion::assertion(const char* file, uint16_t line,
292  unsigned long long lhs, const char* opName,
293  bool (*op)(unsigned long long lhs, unsigned long long rhs),
294  unsigned long long rhs) {
295  if (isDone()) return false;
296  bool ok = op(lhs, rhs);
297  if (isOutputEnabled(ok)) {
298  printAssertionMessage(Printer::getPrinter(), ok, file, line,
299  lhs, opName, rhs);
300  }
301  setPassOrFail(ok);
302  return ok;
303 }
304 
305 bool Assertion::assertion(const char* file, uint16_t line, double lhs,
306  const char* opName, bool (*op)(double lhs, double rhs),
307  double rhs) {
308  if (isDone()) return false;
309  bool ok = op(lhs, rhs);
310  if (isOutputEnabled(ok)) {
311  printAssertionMessage(Printer::getPrinter(), ok, file, line,
312  lhs, opName, rhs);
313  }
314  setPassOrFail(ok);
315  return ok;
316 }
317 
318 bool Assertion::assertion(const char* file, uint16_t line, const char* lhs,
319  const char* opName, bool (*op)(const char* lhs, const char* rhs),
320  const char* rhs) {
321  if (isDone()) return false;
322  bool ok = op(lhs, rhs);
323  if (isOutputEnabled(ok)) {
324  printAssertionMessage(Printer::getPrinter(), ok, file, line,
325  lhs, opName, rhs);
326  }
327  setPassOrFail(ok);
328  return ok;
329 }
330 
331 bool Assertion::assertion(const char* file, uint16_t line, const char* lhs,
332  const char* opName, bool (*op)(const char* lhs, const String& rhs),
333  const String& rhs) {
334  if (isDone()) return false;
335  bool ok = op(lhs, rhs);
336  if (isOutputEnabled(ok)) {
337  printAssertionMessage(Printer::getPrinter(), ok, file, line,
338  lhs, opName, rhs);
339  }
340  setPassOrFail(ok);
341  return ok;
342 }
343 
344 bool Assertion::assertion(const char* file, uint16_t line, const char* lhs,
345  const char* opName,
346  bool (*op)(const char* lhs, const __FlashStringHelper* rhs),
347  const __FlashStringHelper* rhs) {
348  if (isDone()) return false;
349  bool ok = op(lhs, rhs);
350  if (isOutputEnabled(ok)) {
351  printAssertionMessage(Printer::getPrinter(), ok, file, line,
352  lhs, opName, rhs);
353  }
354  setPassOrFail(ok);
355  return ok;
356 }
357 
358 bool Assertion::assertion(const char* file, uint16_t line, const String& lhs,
359  const char* opName, bool (*op)(const String& lhs, const char* rhs),
360  const char* rhs) {
361  if (isDone()) return false;
362  bool ok = op(lhs, rhs);
363  if (isOutputEnabled(ok)) {
364  printAssertionMessage(Printer::getPrinter(), ok, file, line,
365  lhs, opName, rhs);
366  }
367  setPassOrFail(ok);
368  return ok;
369 }
370 
371 bool Assertion::assertion(const char* file, uint16_t line, const String& lhs,
372  const char* opName, bool (*op)(const String& lhs, const String& rhs),
373  const String& rhs) {
374  if (isDone()) return false;
375  bool ok = op(lhs, rhs);
376  if (isOutputEnabled(ok)) {
377  printAssertionMessage(Printer::getPrinter(), ok, file, line,
378  lhs, opName, rhs);
379  }
380  setPassOrFail(ok);
381  return ok;
382 }
383 
384 bool Assertion::assertion(const char* file, uint16_t line, const String& lhs,
385  const char* opName,
386  bool (*op)(const String& lhs, const __FlashStringHelper* rhs),
387  const __FlashStringHelper* rhs) {
388  if (isDone()) return false;
389  bool ok = op(lhs, rhs);
390  if (isOutputEnabled(ok)) {
391  printAssertionMessage(Printer::getPrinter(), ok, file, line,
392  lhs, opName, rhs);
393  }
394  setPassOrFail(ok);
395  return ok;
396 }
397 
398 bool Assertion::assertion(const char* file, uint16_t line,
399  const __FlashStringHelper* lhs, const char* opName,
400  bool (*op)(const __FlashStringHelper* lhs, const char* rhs),
401  const char* rhs) {
402  if (isDone()) return false;
403  bool ok = op(lhs, rhs);
404  if (isOutputEnabled(ok)) {
405  printAssertionMessage(Printer::getPrinter(), ok, file, line,
406  lhs, opName, rhs);
407  }
408  setPassOrFail(ok);
409  return ok;
410 }
411 
412 bool Assertion::assertion(const char* file, uint16_t line,
413  const __FlashStringHelper* lhs, const char* opName,
414  bool (*op)(const __FlashStringHelper* lhs, const String& rhs),
415  const String& rhs) {
416  if (isDone()) return false;
417  bool ok = op(lhs, rhs);
418  if (isOutputEnabled(ok)) {
419  printAssertionMessage(Printer::getPrinter(), ok, file, line,
420  lhs, opName, rhs);
421  }
422  setPassOrFail(ok);
423  return ok;
424 }
425 
426 bool Assertion::assertion(const char* file, uint16_t line,
427  const __FlashStringHelper* lhs, const char* opName,
428  bool (*op)(const __FlashStringHelper* lhs, const __FlashStringHelper* rhs),
429  const __FlashStringHelper* rhs) {
430  if (isDone()) return false;
431  bool ok = op(lhs, rhs);
432  if (isOutputEnabled(ok)) {
433  printAssertionMessage(Printer::getPrinter(), ok, file, line,
434  lhs, opName, rhs);
435  }
436  setPassOrFail(ok);
437  return ok;
438 }
439 
440 bool Assertion::assertionNear(const char* file, uint16_t line,
441  int lhs, int rhs, int error, const char* opName,
442  bool (*opNear)(int lhs, int rhs, int error)) {
443  if (isDone()) return false;
444  bool ok = opNear(lhs, rhs, error);
445  if (isOutputEnabled(ok)) {
446  printAssertionNearMessage(Printer::getPrinter(), ok, file, line,
447  lhs, rhs, opName, error);
448  }
449  setPassOrFail(ok);
450  return ok;
451 }
452 
453 bool Assertion::assertionNear(const char* file, uint16_t line,
454  unsigned int lhs, unsigned int rhs, unsigned int error, const char* opName,
455  bool (*opNear)(unsigned int lhs, unsigned int rhs, unsigned int error)) {
456  if (isDone()) return false;
457  bool ok = opNear(lhs, rhs, error);
458  if (isOutputEnabled(ok)) {
459  printAssertionNearMessage(Printer::getPrinter(), ok, file, line,
460  lhs, rhs, opName, error);
461  }
462  setPassOrFail(ok);
463  return ok;
464 }
465 
466 bool Assertion::assertionNear(const char* file, uint16_t line,
467  long lhs, long rhs, long error, const char* opName,
468  bool (*opNear)(long lhs, long rhs, long error)) {
469  if (isDone()) return false;
470  bool ok = opNear(lhs, rhs, error);
471  if (isOutputEnabled(ok)) {
472  printAssertionNearMessage(Printer::getPrinter(), ok, file, line,
473  lhs, rhs, opName, error);
474  }
475  setPassOrFail(ok);
476  return ok;
477 }
478 
479 bool Assertion::assertionNear(const char* file, uint16_t line,
480  unsigned long lhs, unsigned long rhs, unsigned long error,
481  const char* opName,
482  bool (*opNear)(unsigned long lhs, unsigned long rhs, unsigned long error)) {
483  if (isDone()) return false;
484  bool ok = opNear(lhs, rhs, error);
485  if (isOutputEnabled(ok)) {
486  printAssertionNearMessage(Printer::getPrinter(), ok, file, line,
487  lhs, rhs, opName, error);
488  }
489  setPassOrFail(ok);
490  return ok;
491 }
492 
493 bool Assertion::assertionNear(const char* file, uint16_t line,
494  double lhs, double rhs, double error, const char* opName,
495  bool (*opNear)(double lhs, double rhs, double error)) {
496  if (isDone()) return false;
497  bool ok = opNear(lhs, rhs, error);
498  if (isOutputEnabled(ok)) {
499  printAssertionNearMessage(Printer::getPrinter(), ok, file, line,
500  lhs, rhs, opName, error);
501  }
502  setPassOrFail(ok);
503  return ok;
504 }
505 
506 //---------------------------------------------------------------------------
507 
508 namespace internal {
509 
510 // Verbose versions of above which accept the string arguments of the
511 // assertXxx() macros, so that the error messages are more verbose.
512 //
513 // Prints something like the following:
514 // Assertion failed: (x=5) == (y=6), file Test.ino, line 820.
515 // Assertion passed: (x=6) == (y=6), file Test.ino, line 820.
516 template <typename A, typename B>
517 void printAssertionMessageVerbose(Print* printer, bool ok, const char* file,
518  uint16_t line, const A& lhs, const __FlashStringHelper* lhsString,
519  const char* opName, const B& rhs, const __FlashStringHelper* rhsString) {
520 
521  // Don't use F() strings here because flash memory strings are not deduped by
522  // the compiler, so each template instantiation of this method causes a
523  // duplication of all the strings below. See
524  // https://github.com/mmurdoch/arduinounit/issues/70
525  // for more info.
526  printer->print("Assertion ");
527  printer->print(ok ? "passed" : "failed");
528  printer->print(": (");
529  printer->print(lhsString);
530  printer->print('=');
531  printer->print(lhs);
532  printer->print(") ");
533  printer->print(opName);
534  printer->print(" (");
535  printer->print(rhsString);
536  printer->print('=');
537  printer->print(rhs);
538  printer->print(')');
539  // reuse string in MataAssertion::printAssertionTestStatusMessage()
540  printer->print(", file ");
541  printer->print(file);
542  printer->print(", line ");
543  printer->print(line);
544  printer->println('.');
545 }
546 
547 // Special version of (bool, bool) because Arduino Print.h converts
548 // bool into int, which prints out "(1) == (0)", which isn't as useful.
549 // This prints "(x=true) == (y=false)".
550 void printAssertionMessageVerbose(Print* printer, bool ok, const char* file,
551  uint16_t line, bool lhs, const __FlashStringHelper* lhsString,
552  const char* opName, bool rhs, const __FlashStringHelper* rhsString) {
553 
554  // Don't use F() strings here. Same reason as above.
555  printer->print("Assertion ");
556  printer->print(ok ? "passed" : "failed");
557  printer->print(": (");
558  printer->print(lhsString);
559  printer->print('=');
560  printer->print(lhs ? "true" : "false");
561  printer->print(") ");
562  printer->print(opName);
563  printer->print(" (");
564  printer->print(rhsString);
565  printer->print('=');
566  printer->print(rhs ? "true" : "false");
567  printer->print(')');
568  printer->print(", file ");
569  printer->print(file);
570  printer->print(", line ");
571  printer->print(line);
572  printer->println('.');
573 }
574 
575 // Version for (long long, long long) because Print.h does not support int64.
576 void printAssertionMessageVerbose(Print* printer, bool ok, const char* file,
577  uint16_t line, long long& lhs, const __FlashStringHelper* lhsString,
578  const char* opName, long long& rhs, const __FlashStringHelper* rhsString) {
579 
580  // Don't use F() strings here. Same reason as above.
581  printer->print("Assertion ");
582  printer->print(ok ? "passed" : "failed");
583  printer->print(": (");
584  printer->print(lhsString);
585  printer->print('=');
586  print64(*printer, lhs);
587  printer->print(") ");
588  printer->print(opName);
589  printer->print(" (");
590  printer->print(rhsString);
591  printer->print('=');
592  print64(*printer, rhs);
593  printer->print(')');
594  printer->print(", file ");
595  printer->print(file);
596  printer->print(", line ");
597  printer->print(line);
598  printer->println('.');
599 }
600 
601 // Version for (unsigned long long, unsigned long long) because Print.h does
602 // not support int64.
603 void printAssertionMessageVerbose(Print* printer, bool ok, const char* file,
604  uint16_t line, unsigned long long& lhs,
605  const __FlashStringHelper* lhsString, const char* opName,
606  unsigned long long& rhs, const __FlashStringHelper* rhsString) {
607 
608  // Don't use F() strings here. Same reason as above.
609  printer->print("Assertion ");
610  printer->print(ok ? "passed" : "failed");
611  printer->print(": (");
612  printer->print(lhsString);
613  printer->print('=');
614  print64(*printer, lhs);
615  printer->print(") ");
616  printer->print(opName);
617  printer->print(" (");
618  printer->print(rhsString);
619  printer->print('=');
620  print64(*printer, rhs);
621  printer->print(')');
622  printer->print(", file ");
623  printer->print(file);
624  printer->print(", line ");
625  printer->print(line);
626  printer->println('.');
627 }
628 
629 // Special version for assertTrue(arg) and assertFalse(arg).
630 // Prints:
631 // "Assertion passed/failed: (x=arg) is true"
632 // "Assertion passed/failed: (x=arg) is false"
633 void printAssertionBoolMessageVerbose(Print* printer, bool ok, const char* file,
634  uint16_t line, bool arg, const __FlashStringHelper* argString, bool value) {
635 
636  // Don't use F() strings here. Same reason as above.
637  printer->print("Assertion ");
638  printer->print(ok ? "passed" : "failed");
639  printer->print(": (");
640  printer->print(argString);
641  printer->print('=');
642  printer->print(arg ? "true" : "false");
643  printer->print(") is ");
644  printer->print(value ? "true" : "false");
645  printer->print(", file ");
646  printer->print(file);
647  printer->print(", line ");
648  printer->print(line);
649  printer->println('.');
650 }
651 
652 template <typename A>
653 void printAssertionNearMessageVerbose(Print* printer, bool ok, const char* file,
654  uint16_t line, const A& lhs, const __FlashStringHelper* lhsString,
655  const A& rhs, const __FlashStringHelper* rhsString,
656  const char* opName,
657  const A& error, const __FlashStringHelper* errorString) {
658  printer->print("Assertion ");
659  printer->print(ok ? "passed" : "failed");
660  printer->print(": |(");
661  printer->print(lhsString);
662  printer->print('=');
663  printer->print(lhs);
664  printer->print(") - (");
665  printer->print(rhsString);
666  printer->print('=');
667  printer->print(rhs);
668  printer->print(")| ");
669  printer->print(opName);
670  printer->print(" (");
671  printer->print(errorString);
672  printer->print('=');
673  printer->print(error);
674  printer->print(')');
675  printer->print(", file ");
676  printer->print(file);
677  printer->print(", line ");
678  printer->print(line);
679  printer->println('.');
680 }
681 
682 } // namespace
683 
684 bool Assertion::assertionBoolVerbose(const char* file, uint16_t line, bool arg,
685  const __FlashStringHelper* argString, bool value) {
686  if (isDone()) return false;
687  bool ok = (arg == value);
688  if (isOutputEnabled(ok)) {
689  printAssertionBoolMessageVerbose(Printer::getPrinter(), ok, file, line,
690  arg, argString, value);
691  }
692  setPassOrFail(ok);
693  return ok;
694 }
695 
696 bool Assertion::assertionVerbose(const char* file, uint16_t line, bool lhs,
697  const __FlashStringHelper* lhsString, const char* opName,
698  bool (*op)(bool lhs, bool rhs), bool rhs,
699  const __FlashStringHelper* rhsString) {
700  if (isDone()) return false;
701  bool ok = op(lhs, rhs);
702  if (isOutputEnabled(ok)) {
703  printAssertionMessageVerbose(Printer::getPrinter(), ok, file, line,
704  lhs, lhsString, opName, rhs, rhsString);
705  }
706  setPassOrFail(ok);
707  return ok;
708 }
709 
710 bool Assertion::assertionVerbose(const char* file, uint16_t line, char lhs,
711  const __FlashStringHelper* lhsString, const char* opName,
712  bool (*op)(char lhs, char rhs), char rhs,
713  const __FlashStringHelper* rhsString) {
714  if (isDone()) return false;
715  bool ok = op(lhs, rhs);
716  if (isOutputEnabled(ok)) {
717  printAssertionMessageVerbose(Printer::getPrinter(), ok, file, line,
718  lhs, lhsString, opName, rhs, rhsString);
719  }
720  setPassOrFail(ok);
721  return ok;
722 }
723 
724 bool Assertion::assertionVerbose(const char* file, uint16_t line, int lhs,
725  const __FlashStringHelper* lhsString, const char* opName,
726  bool (*op)(int lhs, int rhs), int rhs,
727  const __FlashStringHelper* rhsString) {
728  if (isDone()) return false;
729  bool ok = op(lhs, rhs);
730  if (isOutputEnabled(ok)) {
731  printAssertionMessageVerbose(Printer::getPrinter(), ok, file, line,
732  lhs, lhsString, opName, rhs, rhsString);
733  }
734  setPassOrFail(ok);
735  return ok;
736 }
737 
738 bool Assertion::assertionVerbose(const char* file, uint16_t line,
739  unsigned int lhs, const __FlashStringHelper* lhsString, const char* opName,
740  bool (*op)(unsigned int lhs, unsigned int rhs),
741  unsigned int rhs, const __FlashStringHelper* rhsString) {
742  if (isDone()) return false;
743  bool ok = op(lhs, rhs);
744  if (isOutputEnabled(ok)) {
745  printAssertionMessageVerbose(Printer::getPrinter(), ok, file, line,
746  lhs, lhsString, opName, rhs, rhsString);
747  }
748  setPassOrFail(ok);
749  return ok;
750 }
751 
752 bool Assertion::assertionVerbose(const char* file, uint16_t line, long lhs,
753  const __FlashStringHelper* lhsString, const char* opName,
754  bool (*op)(long lhs, long rhs), long rhs,
755  const __FlashStringHelper* rhsString) {
756  if (isDone()) return false;
757  bool ok = op(lhs, rhs);
758  if (isOutputEnabled(ok)) {
759  printAssertionMessageVerbose(Printer::getPrinter(), ok, file, line,
760  lhs, lhsString, opName, rhs, rhsString);
761  }
762  setPassOrFail(ok);
763  return ok;
764 }
765 
766 bool Assertion::assertionVerbose(const char* file, uint16_t line,
767  unsigned long lhs, const __FlashStringHelper* lhsString, const char* opName,
768  bool (*op)(unsigned long lhs, unsigned long rhs),
769  unsigned long rhs, const __FlashStringHelper* rhsString) {
770  if (isDone()) return false;
771  bool ok = op(lhs, rhs);
772  if (isOutputEnabled(ok)) {
773  printAssertionMessageVerbose(Printer::getPrinter(), ok, file, line,
774  lhs, lhsString, opName, rhs, rhsString);
775  }
776  setPassOrFail(ok);
777  return ok;
778 }
779 
780 bool Assertion::assertionVerbose(const char* file, uint16_t line, long long lhs,
781  const __FlashStringHelper* lhsString, const char* opName,
782  bool (*op)(long long lhs, long long rhs), long long rhs,
783  const __FlashStringHelper* rhsString) {
784  if (isDone()) return false;
785  bool ok = op(lhs, rhs);
786  if (isOutputEnabled(ok)) {
787  printAssertionMessageVerbose(Printer::getPrinter(), ok, file, line,
788  lhs, lhsString, opName, rhs, rhsString);
789  }
790  setPassOrFail(ok);
791  return ok;
792 }
793 
794 bool Assertion::assertionVerbose(const char* file, uint16_t line,
795  unsigned long long lhs, const __FlashStringHelper* lhsString,
796  const char* opName,
797  bool (*op)(unsigned long long lhs, unsigned long long rhs),
798  unsigned long long rhs, const __FlashStringHelper* rhsString) {
799  if (isDone()) return false;
800  bool ok = op(lhs, rhs);
801  if (isOutputEnabled(ok)) {
802  printAssertionMessageVerbose(Printer::getPrinter(), ok, file, line,
803  lhs, lhsString, opName, rhs, rhsString);
804  }
805  setPassOrFail(ok);
806  return ok;
807 }
808 
809 bool Assertion::assertionVerbose(const char* file, uint16_t line, double lhs,
810  const __FlashStringHelper* lhsString, const char* opName,
811  bool (*op)(double lhs, double rhs), double rhs,
812  const __FlashStringHelper* rhsString) {
813  if (isDone()) return false;
814  bool ok = op(lhs, rhs);
815  if (isOutputEnabled(ok)) {
816  printAssertionMessageVerbose(Printer::getPrinter(), ok, file, line,
817  lhs, lhsString, opName, rhs, rhsString);
818  }
819  setPassOrFail(ok);
820  return ok;
821 }
822 
823 bool Assertion::assertionVerbose(const char* file, uint16_t line,
824  const char* lhs, const __FlashStringHelper* lhsString, const char* opName,
825  bool (*op)(const char* lhs, const char* rhs),
826  const char* rhs, const __FlashStringHelper* rhsString) {
827  if (isDone()) return false;
828  bool ok = op(lhs, rhs);
829  if (isOutputEnabled(ok)) {
830  printAssertionMessageVerbose(Printer::getPrinter(), ok, file, line,
831  lhs, lhsString, opName, rhs, rhsString);
832  }
833  setPassOrFail(ok);
834  return ok;
835 }
836 
837 bool Assertion::assertionVerbose(const char* file, uint16_t line,
838  const char* lhs, const __FlashStringHelper* lhsString,
839  const char* opName, bool (*op)(const char* lhs, const String& rhs),
840  const String& rhs, const __FlashStringHelper* rhsString) {
841  if (isDone()) return false;
842  bool ok = op(lhs, rhs);
843  if (isOutputEnabled(ok)) {
844  printAssertionMessageVerbose(Printer::getPrinter(), ok, file, line,
845  lhs, lhsString, opName, rhs, rhsString);
846  }
847  setPassOrFail(ok);
848  return ok;
849 }
850 
851 bool Assertion::assertionVerbose(const char* file, uint16_t line,
852  const char* lhs, const __FlashStringHelper* lhsString, const char* opName,
853  bool (*op)(const char* lhs, const __FlashStringHelper* rhs),
854  const __FlashStringHelper* rhs, const __FlashStringHelper* rhsString) {
855  if (isDone()) return false;
856  bool ok = op(lhs, rhs);
857  if (isOutputEnabled(ok)) {
858  printAssertionMessageVerbose(Printer::getPrinter(), ok, file, line,
859  lhs, lhsString, opName, rhs, rhsString);
860  }
861  setPassOrFail(ok);
862  return ok;
863 }
864 
865 bool Assertion::assertionVerbose(const char* file, uint16_t line,
866  const String& lhs, const __FlashStringHelper* lhsString, const char* opName,
867  bool (*op)(const String& lhs, const char* rhs),
868  const char* rhs, const __FlashStringHelper* rhsString) {
869  if (isDone()) return false;
870  bool ok = op(lhs, rhs);
871  if (isOutputEnabled(ok)) {
872  printAssertionMessageVerbose(Printer::getPrinter(), ok, file, line,
873  lhs, lhsString, opName, rhs, rhsString);
874  }
875  setPassOrFail(ok);
876  return ok;
877 }
878 
879 bool Assertion::assertionVerbose(const char* file, uint16_t line,
880  const String& lhs, const __FlashStringHelper* lhsString, const char* opName,
881  bool (*op)(const String& lhs, const String& rhs),
882  const String& rhs, const __FlashStringHelper* rhsString) {
883  if (isDone()) return false;
884  bool ok = op(lhs, rhs);
885  if (isOutputEnabled(ok)) {
886  printAssertionMessageVerbose(Printer::getPrinter(), ok, file, line,
887  lhs, lhsString, opName, rhs, rhsString);
888  }
889  setPassOrFail(ok);
890  return ok;
891 }
892 
893 bool Assertion::assertionVerbose(const char* file, uint16_t line,
894  const String& lhs, const __FlashStringHelper* lhsString, const char* opName,
895  bool (*op)(const String& lhs, const __FlashStringHelper* rhs),
896  const __FlashStringHelper* rhs, const __FlashStringHelper* rhsString) {
897  if (isDone()) return false;
898  bool ok = op(lhs, rhs);
899  if (isOutputEnabled(ok)) {
900  printAssertionMessageVerbose(Printer::getPrinter(), ok, file, line,
901  lhs, lhsString, opName, rhs, rhsString);
902  }
903  setPassOrFail(ok);
904  return ok;
905 }
906 
907 bool Assertion::assertionVerbose(const char* file, uint16_t line,
908  const __FlashStringHelper* lhs, const __FlashStringHelper* lhsString,
909  const char* opName,
910  bool (*op)(const __FlashStringHelper* lhs, const char* rhs),
911  const char* rhs, const __FlashStringHelper* rhsString) {
912  if (isDone()) return false;
913  bool ok = op(lhs, rhs);
914  if (isOutputEnabled(ok)) {
915  printAssertionMessageVerbose(Printer::getPrinter(), ok, file, line,
916  lhs, lhsString, opName, rhs, rhsString);
917  }
918  setPassOrFail(ok);
919  return ok;
920 }
921 
922 bool Assertion::assertionVerbose(const char* file, uint16_t line,
923  const __FlashStringHelper* lhs, const __FlashStringHelper* lhsString,
924  const char* opName,
925  bool (*op)(const __FlashStringHelper* lhs, const String& rhs),
926  const String& rhs, const __FlashStringHelper* rhsString) {
927  if (isDone()) return false;
928  bool ok = op(lhs, rhs);
929  if (isOutputEnabled(ok)) {
930  printAssertionMessageVerbose(Printer::getPrinter(), ok, file, line,
931  lhs, lhsString, opName, rhs, rhsString);
932  }
933  setPassOrFail(ok);
934  return ok;
935 }
936 
937 bool Assertion::assertionVerbose(const char* file, uint16_t line,
938  const __FlashStringHelper* lhs, const __FlashStringHelper* lhsString,
939  const char* opName,
940  bool (*op)(const __FlashStringHelper* lhs, const __FlashStringHelper* rhs),
941  const __FlashStringHelper* rhs, const __FlashStringHelper* rhsString) {
942  if (isDone()) return false;
943  bool ok = op(lhs, rhs);
944  if (isOutputEnabled(ok)) {
945  printAssertionMessageVerbose(Printer::getPrinter(), ok, file, line,
946  lhs, lhsString, opName, rhs, rhsString);
947  }
948  setPassOrFail(ok);
949  return ok;
950 }
951 
952 bool Assertion::assertionNearVerbose(const char* file, uint16_t line,
953  int lhs, const __FlashStringHelper* lhsString,
954  int rhs, const __FlashStringHelper* rhsString,
955  int error, const __FlashStringHelper* errorString,
956  const char* opName,
957  bool (*opNear)(int lhs, int rhs, int error)) {
958  if (isDone()) return false;
959  bool ok = opNear(lhs, rhs, error);
960  if (isOutputEnabled(ok)) {
961  printAssertionNearMessageVerbose(Printer::getPrinter(), ok, file, line,
962  lhs, lhsString, rhs, rhsString, opName, error, errorString);
963  }
964  setPassOrFail(ok);
965  return ok;
966 }
967 
968 bool Assertion::assertionNearVerbose(const char* file, uint16_t line,
969  unsigned int lhs, const __FlashStringHelper* lhsString,
970  unsigned int rhs, const __FlashStringHelper* rhsString,
971  unsigned int error, const __FlashStringHelper* errorString,
972  const char* opName,
973  bool (*opNear)(unsigned int lhs, unsigned int rhs, unsigned int error)) {
974  if (isDone()) return false;
975  bool ok = opNear(lhs, rhs, error);
976  if (isOutputEnabled(ok)) {
977  printAssertionNearMessageVerbose(Printer::getPrinter(), ok, file, line,
978  lhs, lhsString, rhs, rhsString, opName, error, errorString);
979  }
980  setPassOrFail(ok);
981  return ok;
982 }
983 
984 bool Assertion::assertionNearVerbose(const char* file, uint16_t line,
985  long lhs, const __FlashStringHelper* lhsString,
986  long rhs, const __FlashStringHelper* rhsString,
987  long error, const __FlashStringHelper* errorString,
988  const char* opName,
989  bool (*opNear)(long lhs, long rhs, long error)) {
990  if (isDone()) return false;
991  bool ok = opNear(lhs, rhs, error);
992  if (isOutputEnabled(ok)) {
993  printAssertionNearMessageVerbose(Printer::getPrinter(), ok, file, line,
994  lhs, lhsString, rhs, rhsString, opName, error, errorString);
995  }
996  setPassOrFail(ok);
997  return ok;
998 }
999 
1000 bool Assertion::assertionNearVerbose(const char* file, uint16_t line,
1001  unsigned long lhs, const __FlashStringHelper* lhsString,
1002  unsigned long rhs, const __FlashStringHelper* rhsString,
1003  unsigned long error, const __FlashStringHelper* errorString,
1004  const char* opName,
1005  bool (*opNear)(unsigned long lhs, unsigned long rhs, unsigned long error)) {
1006  if (isDone()) return false;
1007  bool ok = opNear(lhs, rhs, error);
1008  if (isOutputEnabled(ok)) {
1009  printAssertionNearMessageVerbose(Printer::getPrinter(), ok, file, line,
1010  lhs, lhsString, rhs, rhsString, opName, error, errorString);
1011  }
1012  setPassOrFail(ok);
1013  return ok;
1014 }
1015 
1016 bool Assertion::assertionNearVerbose(const char* file, uint16_t line,
1017  double lhs, const __FlashStringHelper* lhsString,
1018  double rhs, const __FlashStringHelper* rhsString,
1019  double error, const __FlashStringHelper* errorString,
1020  const char* opName,
1021  bool (*opNear)(double lhs, double rhs, double error)) {
1022  if (isDone()) return false;
1023  bool ok = opNear(lhs, rhs, error);
1024  if (isOutputEnabled(ok)) {
1025  printAssertionNearMessageVerbose(Printer::getPrinter(), ok, file, line,
1026  lhs, lhsString, rhs, rhsString, opName, error, errorString);
1027  }
1028  setPassOrFail(ok);
1029  return ok;
1030 }
1031 
1032 }
Helper routines to print &#39;long long&#39; and &#39;unsigned long long&#39; because the Print::print() methods in P...
- -
static const uint8_t kAssertionPassed
Print assertXxx() passed message.
Definition: Verbosity.h:40
-
static Print * getPrinter()
Get the output printer used by the various assertion() methods and the TestRunner.
Definition: Printer.h:48
-
bool isOutputEnabled(bool ok) const
Returns true if an assertion message should be printed.
Definition: Assertion.cpp:183
-
static const uint8_t kAssertionFailed
Print assertXxx() failed message.
Definition: Verbosity.h:43
-
Various macros to smooth over the differences among the various platforms with regards to their suppo...
+
1 /*
+
2 MIT License
+
3 
+
4 Copyright (c) 2018 Brian T. Park
+
5 
+
6 Permission is hereby granted, free of charge, to any person obtaining a copy
+
7 of this software and associated documentation files (the "Software"), to deal
+
8 in the Software without restriction, including without limitation the rights
+
9 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+
10 copies of the Software, and to permit persons to whom the Software is
+
11 furnished to do so, subject to the following conditions:
+
12 
+
13 The above copyright notice and this permission notice shall be included in all
+
14 copies or substantial portions of the Software.
+
15 
+
16 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+
17 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+
18 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+
19 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+
20 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+
21 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+
22 SOFTWARE.
+
23 */
+
24 
+
25 #include <Arduino.h> // definition of Print
+
26 #include "Flash.h"
+
27 #include "Printer.h"
+
28 #include "Assertion.h"
+
29 #include "print64.h"
+
30 
+
31 namespace aunit {
+
32 
+
33 using namespace internal;
+
34 
+
35 namespace internal {
+
36 
+
37 // This can be a template function because it is accessed only through the
+
38 // various assertXxx() methods. Those assertXxx() methods are explicitly
+
39 // overloaded for the various types that we want to support.
+
40 //
+
41 // Prints something like the following:
+
42 // Assertion failed: (5) == (6), file Test.ino, line 820.
+
43 // Assertion passed: (6) == (6), file Test.ino, line 820.
+
44 template <typename A, typename B>
+
45 void printAssertionMessage(Print* printer, bool ok, const char* file,
+
46  uint16_t line, const A& lhs, const char* opName, const B& rhs) {
+
47 
+
48  // Don't use F() strings here because flash memory strings are not deduped by
+
49  // the compiler, so each template instantiation of this method causes a
+
50  // duplication of all the strings below. See
+
51  // https://github.com/mmurdoch/arduinounit/issues/70
+
52  // for more info. Normal (const char*) strings will be deduped by the
+
53  // compiler/linker.
+
54  printer->print("Assertion ");
+
55  printer->print(ok ? "passed" : "failed");
+
56  printer->print(": (");
+
57  printer->print(lhs);
+
58  printer->print(") ");
+
59  printer->print(opName);
+
60  printer->print(" (");
+
61  printer->print(rhs);
+
62  printer->print(')');
+
63  // reuse string in MataAssertion::printAssertionTestStatusMessage()
+
64  printer->print(", file ");
+
65  printer->print(file);
+
66  printer->print(", line ");
+
67  printer->print(line);
+
68  printer->println('.');
+
69 }
+
70 
+
71 // Special version of (bool, bool) because Arduino Print.h converts
+
72 // bool into int, which prints out "(1) == (0)", which isn't as useful.
+
73 // This prints "(true) == (false)".
+
74 void printAssertionMessage(Print* printer, bool ok, const char* file,
+
75  uint16_t line, bool lhs, const char* opName, bool rhs) {
+
76 
+
77  // Don't use F() strings here. Same reason as above.
+
78  printer->print("Assertion ");
+
79  printer->print(ok ? "passed" : "failed");
+
80  printer->print(": (");
+
81  printer->print(lhs ? "true" : "false");
+
82  printer->print(") ");
+
83  printer->print(opName);
+
84  printer->print(" (");
+
85  printer->print(rhs ? "true" : "false");
+
86  printer->print(')');
+
87  printer->print(", file ");
+
88  printer->print(file);
+
89  printer->print(", line ");
+
90  printer->print(line);
+
91  printer->println('.');
+
92 }
+
93 
+
94 // Version for (long long, long long) because Print.h does not support int64.
+
95 void printAssertionMessage(Print* printer, bool ok, const char* file,
+
96  uint16_t line, long long& lhs, const char* opName, long long& rhs) {
+
97 
+
98  // Don't use F() strings here. Same reason as above.
+
99  printer->print("Assertion ");
+
100  printer->print(ok ? "passed" : "failed");
+
101  printer->print(": (");
+
102  print64(*printer, lhs);
+
103  printer->print(") ");
+
104  printer->print(opName);
+
105  printer->print(" (");
+
106  print64(*printer, rhs);
+
107  printer->print(')');
+
108  printer->print(", file ");
+
109  printer->print(file);
+
110  printer->print(", line ");
+
111  printer->print(line);
+
112  printer->println('.');
+
113 }
+
114 
+
115 // Version for (unsigned long long, unsigned long long) because Print.h does
+
116 // not support int64.
+
117 void printAssertionMessage(Print* printer, bool ok, const char* file,
+
118  uint16_t line, unsigned long long& lhs, const char* opName,
+
119  unsigned long long& rhs) {
+
120 
+
121  // Don't use F() strings here. Same reason as above.
+
122  printer->print("Assertion ");
+
123  printer->print(ok ? "passed" : "failed");
+
124  printer->print(": (");
+
125  print64(*printer, lhs);
+
126  printer->print(") ");
+
127  printer->print(opName);
+
128  printer->print(" (");
+
129  print64(*printer, rhs);
+
130  printer->print(')');
+
131  printer->print(", file ");
+
132  printer->print(file);
+
133  printer->print(", line ");
+
134  printer->print(line);
+
135  printer->println('.');
+
136 }
+
137 
+
138 // Special version for assertTrue(arg) and assertFalse(arg).
+
139 // Prints:
+
140 // "Assertion passed/failed: (arg) is true"
+
141 // "Assertion passed/failed: (arg) is false"
+
142 void printAssertionBoolMessage(Print* printer, bool ok, const char* file,
+
143  uint16_t line, bool arg, bool value) {
+
144 
+
145  // Don't use F() strings here. Same reason as above.
+
146  printer->print("Assertion ");
+
147  printer->print(ok ? "passed" : "failed");
+
148  printer->print(": (");
+
149  printer->print(arg ? "true" : "false");
+
150  printer->print(") is ");
+
151  printer->print(value ? "true" : "false");
+
152  printer->print(", file ");
+
153  printer->print(file);
+
154  printer->print(", line ");
+
155  printer->print(line);
+
156  printer->println('.');
+
157 }
+
158 
+
159 template <typename A>
+
160 void printAssertionNearMessage(Print* printer, bool ok, const char* file,
+
161  uint16_t line, const A& lhs, const A& rhs, const char* opName,
+
162  const A& error) {
+
163  printer->print("Assertion ");
+
164  printer->print(ok ? "passed" : "failed");
+
165  printer->print(": |(");
+
166  printer->print(lhs);
+
167  printer->print(") - (");
+
168  printer->print(rhs);
+
169  printer->print(")| ");
+
170  printer->print(opName);
+
171  printer->print(" (");
+
172  printer->print(error);
+
173  printer->print(')');
+
174  printer->print(", file ");
+
175  printer->print(file);
+
176  printer->print(", line ");
+
177  printer->print(line);
+
178  printer->println('.');
+
179 }
+
180 
+
181 } // namespace
+
182 
+
183 bool Assertion::isOutputEnabled(bool ok) const {
+
184  return (ok && isVerbosity(Verbosity::kAssertionPassed)) ||
+
185  (!ok && isVerbosity(Verbosity::kAssertionFailed));
+
186 }
+
187 
+
188 bool Assertion::assertionBool(const char* file, uint16_t line, bool arg,
+
189  bool value) {
+
190  if (isDone()) return false;
+
191  bool ok = (arg == value);
+
192  if (isOutputEnabled(ok)) {
+
193  printAssertionBoolMessage(Printer::getPrinter(), ok, file, line,
+
194  arg, value);
+
195  }
+
196  setPassOrFail(ok);
+
197  return ok;
+
198 }
+
199 
+
200 bool Assertion::assertion(const char* file, uint16_t line, bool lhs,
+
201  const char* opName, bool (*op)(bool lhs, bool rhs),
+
202  bool rhs) {
+
203  if (isDone()) return false;
+
204  bool ok = op(lhs, rhs);
+
205  if (isOutputEnabled(ok)) {
+
206  printAssertionMessage(Printer::getPrinter(), ok, file, line,
+
207  lhs, opName, rhs);
+
208  }
+
209  setPassOrFail(ok);
+
210  return ok;
+
211 }
+
212 
+
213 bool Assertion::assertion(const char* file, uint16_t line, char lhs,
+
214  const char* opName, bool (*op)(char lhs, char rhs),
+
215  char rhs) {
+
216  if (isDone()) return false;
+
217  bool ok = op(lhs, rhs);
+
218  if (isOutputEnabled(ok)) {
+
219  printAssertionMessage(Printer::getPrinter(), ok, file, line,
+
220  lhs, opName, rhs);
+
221  }
+
222  setPassOrFail(ok);
+
223  return ok;
+
224 }
+
225 
+
226 bool Assertion::assertion(const char* file, uint16_t line, int lhs,
+
227  const char* opName, bool (*op)(int lhs, int rhs),
+
228  int rhs) {
+
229  if (isDone()) return false;
+
230  bool ok = op(lhs, rhs);
+
231  if (isOutputEnabled(ok)) {
+
232  printAssertionMessage(Printer::getPrinter(), ok, file, line,
+
233  lhs, opName, rhs);
+
234  }
+
235  setPassOrFail(ok);
+
236  return ok;
+
237 }
+
238 
+
239 bool Assertion::assertion(const char* file, uint16_t line, unsigned int lhs,
+
240  const char* opName, bool (*op)(unsigned int lhs, unsigned int rhs),
+
241  unsigned int rhs) {
+
242  if (isDone()) return false;
+
243  bool ok = op(lhs, rhs);
+
244  if (isOutputEnabled(ok)) {
+
245  printAssertionMessage(Printer::getPrinter(), ok, file, line,
+
246  lhs, opName, rhs);
+
247  }
+
248  setPassOrFail(ok);
+
249  return ok;
+
250 }
+
251 
+
252 bool Assertion::assertion(const char* file, uint16_t line, long lhs,
+
253  const char* opName, bool (*op)(long lhs, long rhs),
+
254  long rhs) {
+
255  if (isDone()) return false;
+
256  bool ok = op(lhs, rhs);
+
257  if (isOutputEnabled(ok)) {
+
258  printAssertionMessage(Printer::getPrinter(), ok, file, line,
+
259  lhs, opName, rhs);
+
260  }
+
261  setPassOrFail(ok);
+
262  return ok;
+
263 }
+
264 
+
265 bool Assertion::assertion(const char* file, uint16_t line, unsigned long lhs,
+
266  const char* opName, bool (*op)(unsigned long lhs, unsigned long rhs),
+
267  unsigned long rhs) {
+
268  if (isDone()) return false;
+
269  bool ok = op(lhs, rhs);
+
270  if (isOutputEnabled(ok)) {
+
271  printAssertionMessage(Printer::getPrinter(), ok, file, line,
+
272  lhs, opName, rhs);
+
273  }
+
274  setPassOrFail(ok);
+
275  return ok;
+
276 }
+
277 
+
278 bool Assertion::assertion(const char* file, uint16_t line, long long lhs,
+
279  const char* opName, bool (*op)(long long lhs, long long rhs),
+
280  long long rhs) {
+
281  if (isDone()) return false;
+
282  bool ok = op(lhs, rhs);
+
283  if (isOutputEnabled(ok)) {
+
284  printAssertionMessage(Printer::getPrinter(), ok, file, line,
+
285  lhs, opName, rhs);
+
286  }
+
287  setPassOrFail(ok);
+
288  return ok;
+
289 }
+
290 
+
291 bool Assertion::assertion(const char* file, uint16_t line,
+
292  unsigned long long lhs, const char* opName,
+
293  bool (*op)(unsigned long long lhs, unsigned long long rhs),
+
294  unsigned long long rhs) {
+
295  if (isDone()) return false;
+
296  bool ok = op(lhs, rhs);
+
297  if (isOutputEnabled(ok)) {
+
298  printAssertionMessage(Printer::getPrinter(), ok, file, line,
+
299  lhs, opName, rhs);
+
300  }
+
301  setPassOrFail(ok);
+
302  return ok;
+
303 }
+
304 
+
305 bool Assertion::assertion(const char* file, uint16_t line, double lhs,
+
306  const char* opName, bool (*op)(double lhs, double rhs),
+
307  double rhs) {
+
308  if (isDone()) return false;
+
309  bool ok = op(lhs, rhs);
+
310  if (isOutputEnabled(ok)) {
+
311  printAssertionMessage(Printer::getPrinter(), ok, file, line,
+
312  lhs, opName, rhs);
+
313  }
+
314  setPassOrFail(ok);
+
315  return ok;
+
316 }
+
317 
+
318 bool Assertion::assertion(const char* file, uint16_t line, const char* lhs,
+
319  const char* opName, bool (*op)(const char* lhs, const char* rhs),
+
320  const char* rhs) {
+
321  if (isDone()) return false;
+
322  bool ok = op(lhs, rhs);
+
323  if (isOutputEnabled(ok)) {
+
324  printAssertionMessage(Printer::getPrinter(), ok, file, line,
+
325  lhs, opName, rhs);
+
326  }
+
327  setPassOrFail(ok);
+
328  return ok;
+
329 }
+
330 
+
331 bool Assertion::assertion(const char* file, uint16_t line, const char* lhs,
+
332  const char* opName, bool (*op)(const char* lhs, const String& rhs),
+
333  const String& rhs) {
+
334  if (isDone()) return false;
+
335  bool ok = op(lhs, rhs);
+
336  if (isOutputEnabled(ok)) {
+
337  printAssertionMessage(Printer::getPrinter(), ok, file, line,
+
338  lhs, opName, rhs);
+
339  }
+
340  setPassOrFail(ok);
+
341  return ok;
+
342 }
+
343 
+
344 bool Assertion::assertion(const char* file, uint16_t line, const char* lhs,
+
345  const char* opName,
+
346  bool (*op)(const char* lhs, const __FlashStringHelper* rhs),
+
347  const __FlashStringHelper* rhs) {
+
348  if (isDone()) return false;
+
349  bool ok = op(lhs, rhs);
+
350  if (isOutputEnabled(ok)) {
+
351  printAssertionMessage(Printer::getPrinter(), ok, file, line,
+
352  lhs, opName, rhs);
+
353  }
+
354  setPassOrFail(ok);
+
355  return ok;
+
356 }
+
357 
+
358 bool Assertion::assertion(const char* file, uint16_t line, const String& lhs,
+
359  const char* opName, bool (*op)(const String& lhs, const char* rhs),
+
360  const char* rhs) {
+
361  if (isDone()) return false;
+
362  bool ok = op(lhs, rhs);
+
363  if (isOutputEnabled(ok)) {
+
364  printAssertionMessage(Printer::getPrinter(), ok, file, line,
+
365  lhs, opName, rhs);
+
366  }
+
367  setPassOrFail(ok);
+
368  return ok;
+
369 }
+
370 
+
371 bool Assertion::assertion(const char* file, uint16_t line, const String& lhs,
+
372  const char* opName, bool (*op)(const String& lhs, const String& rhs),
+
373  const String& rhs) {
+
374  if (isDone()) return false;
+
375  bool ok = op(lhs, rhs);
+
376  if (isOutputEnabled(ok)) {
+
377  printAssertionMessage(Printer::getPrinter(), ok, file, line,
+
378  lhs, opName, rhs);
+
379  }
+
380  setPassOrFail(ok);
+
381  return ok;
+
382 }
+
383 
+
384 bool Assertion::assertion(const char* file, uint16_t line, const String& lhs,
+
385  const char* opName,
+
386  bool (*op)(const String& lhs, const __FlashStringHelper* rhs),
+
387  const __FlashStringHelper* rhs) {
+
388  if (isDone()) return false;
+
389  bool ok = op(lhs, rhs);
+
390  if (isOutputEnabled(ok)) {
+
391  printAssertionMessage(Printer::getPrinter(), ok, file, line,
+
392  lhs, opName, rhs);
+
393  }
+
394  setPassOrFail(ok);
+
395  return ok;
+
396 }
+
397 
+
398 bool Assertion::assertion(const char* file, uint16_t line,
+
399  const __FlashStringHelper* lhs, const char* opName,
+
400  bool (*op)(const __FlashStringHelper* lhs, const char* rhs),
+
401  const char* rhs) {
+
402  if (isDone()) return false;
+
403  bool ok = op(lhs, rhs);
+
404  if (isOutputEnabled(ok)) {
+
405  printAssertionMessage(Printer::getPrinter(), ok, file, line,
+
406  lhs, opName, rhs);
+
407  }
+
408  setPassOrFail(ok);
+
409  return ok;
+
410 }
+
411 
+
412 bool Assertion::assertion(const char* file, uint16_t line,
+
413  const __FlashStringHelper* lhs, const char* opName,
+
414  bool (*op)(const __FlashStringHelper* lhs, const String& rhs),
+
415  const String& rhs) {
+
416  if (isDone()) return false;
+
417  bool ok = op(lhs, rhs);
+
418  if (isOutputEnabled(ok)) {
+
419  printAssertionMessage(Printer::getPrinter(), ok, file, line,
+
420  lhs, opName, rhs);
+
421  }
+
422  setPassOrFail(ok);
+
423  return ok;
+
424 }
+
425 
+
426 bool Assertion::assertion(const char* file, uint16_t line,
+
427  const __FlashStringHelper* lhs, const char* opName,
+
428  bool (*op)(const __FlashStringHelper* lhs, const __FlashStringHelper* rhs),
+
429  const __FlashStringHelper* rhs) {
+
430  if (isDone()) return false;
+
431  bool ok = op(lhs, rhs);
+
432  if (isOutputEnabled(ok)) {
+
433  printAssertionMessage(Printer::getPrinter(), ok, file, line,
+
434  lhs, opName, rhs);
+
435  }
+
436  setPassOrFail(ok);
+
437  return ok;
+
438 }
+
439 
+
440 bool Assertion::assertionNear(const char* file, uint16_t line,
+
441  int lhs, int rhs, int error, const char* opName,
+
442  bool (*opNear)(int lhs, int rhs, int error)) {
+
443  if (isDone()) return false;
+
444  bool ok = opNear(lhs, rhs, error);
+
445  if (isOutputEnabled(ok)) {
+
446  printAssertionNearMessage(Printer::getPrinter(), ok, file, line,
+
447  lhs, rhs, opName, error);
+
448  }
+
449  setPassOrFail(ok);
+
450  return ok;
+
451 }
+
452 
+
453 bool Assertion::assertionNear(const char* file, uint16_t line,
+
454  unsigned int lhs, unsigned int rhs, unsigned int error, const char* opName,
+
455  bool (*opNear)(unsigned int lhs, unsigned int rhs, unsigned int error)) {
+
456  if (isDone()) return false;
+
457  bool ok = opNear(lhs, rhs, error);
+
458  if (isOutputEnabled(ok)) {
+
459  printAssertionNearMessage(Printer::getPrinter(), ok, file, line,
+
460  lhs, rhs, opName, error);
+
461  }
+
462  setPassOrFail(ok);
+
463  return ok;
+
464 }
+
465 
+
466 bool Assertion::assertionNear(const char* file, uint16_t line,
+
467  long lhs, long rhs, long error, const char* opName,
+
468  bool (*opNear)(long lhs, long rhs, long error)) {
+
469  if (isDone()) return false;
+
470  bool ok = opNear(lhs, rhs, error);
+
471  if (isOutputEnabled(ok)) {
+
472  printAssertionNearMessage(Printer::getPrinter(), ok, file, line,
+
473  lhs, rhs, opName, error);
+
474  }
+
475  setPassOrFail(ok);
+
476  return ok;
+
477 }
+
478 
+
479 bool Assertion::assertionNear(const char* file, uint16_t line,
+
480  unsigned long lhs, unsigned long rhs, unsigned long error,
+
481  const char* opName,
+
482  bool (*opNear)(unsigned long lhs, unsigned long rhs, unsigned long error)) {
+
483  if (isDone()) return false;
+
484  bool ok = opNear(lhs, rhs, error);
+
485  if (isOutputEnabled(ok)) {
+
486  printAssertionNearMessage(Printer::getPrinter(), ok, file, line,
+
487  lhs, rhs, opName, error);
+
488  }
+
489  setPassOrFail(ok);
+
490  return ok;
+
491 }
+
492 
+
493 bool Assertion::assertionNear(const char* file, uint16_t line,
+
494  double lhs, double rhs, double error, const char* opName,
+
495  bool (*opNear)(double lhs, double rhs, double error)) {
+
496  if (isDone()) return false;
+
497  bool ok = opNear(lhs, rhs, error);
+
498  if (isOutputEnabled(ok)) {
+
499  printAssertionNearMessage(Printer::getPrinter(), ok, file, line,
+
500  lhs, rhs, opName, error);
+
501  }
+
502  setPassOrFail(ok);
+
503  return ok;
+
504 }
+
505 
+
506 //---------------------------------------------------------------------------
+
507 
+
508 namespace internal {
+
509 
+
510 // Verbose versions of above which accept the string arguments of the
+
511 // assertXxx() macros, so that the error messages are more verbose.
+
512 //
+
513 // Prints something like the following:
+
514 // Assertion failed: (x=5) == (y=6), file Test.ino, line 820.
+
515 // Assertion passed: (x=6) == (y=6), file Test.ino, line 820.
+
516 template <typename A, typename B>
+
517 void printAssertionMessageVerbose(Print* printer, bool ok, const char* file,
+
518  uint16_t line, const A& lhs, const __FlashStringHelper* lhsString,
+
519  const char* opName, const B& rhs, const __FlashStringHelper* rhsString) {
+
520 
+
521  // Don't use F() strings here because flash memory strings are not deduped by
+
522  // the compiler, so each template instantiation of this method causes a
+
523  // duplication of all the strings below. See
+
524  // https://github.com/mmurdoch/arduinounit/issues/70
+
525  // for more info.
+
526  printer->print("Assertion ");
+
527  printer->print(ok ? "passed" : "failed");
+
528  printer->print(": (");
+
529  printer->print(lhsString);
+
530  printer->print('=');
+
531  printer->print(lhs);
+
532  printer->print(") ");
+
533  printer->print(opName);
+
534  printer->print(" (");
+
535  printer->print(rhsString);
+
536  printer->print('=');
+
537  printer->print(rhs);
+
538  printer->print(')');
+
539  // reuse string in MataAssertion::printAssertionTestStatusMessage()
+
540  printer->print(", file ");
+
541  printer->print(file);
+
542  printer->print(", line ");
+
543  printer->print(line);
+
544  printer->println('.');
+
545 }
+
546 
+
547 // Special version of (bool, bool) because Arduino Print.h converts
+
548 // bool into int, which prints out "(1) == (0)", which isn't as useful.
+
549 // This prints "(x=true) == (y=false)".
+
550 void printAssertionMessageVerbose(Print* printer, bool ok, const char* file,
+
551  uint16_t line, bool lhs, const __FlashStringHelper* lhsString,
+
552  const char* opName, bool rhs, const __FlashStringHelper* rhsString) {
+
553 
+
554  // Don't use F() strings here. Same reason as above.
+
555  printer->print("Assertion ");
+
556  printer->print(ok ? "passed" : "failed");
+
557  printer->print(": (");
+
558  printer->print(lhsString);
+
559  printer->print('=');
+
560  printer->print(lhs ? "true" : "false");
+
561  printer->print(") ");
+
562  printer->print(opName);
+
563  printer->print(" (");
+
564  printer->print(rhsString);
+
565  printer->print('=');
+
566  printer->print(rhs ? "true" : "false");
+
567  printer->print(')');
+
568  printer->print(", file ");
+
569  printer->print(file);
+
570  printer->print(", line ");
+
571  printer->print(line);
+
572  printer->println('.');
+
573 }
+
574 
+
575 // Version for (long long, long long) because Print.h does not support int64.
+
576 void printAssertionMessageVerbose(Print* printer, bool ok, const char* file,
+
577  uint16_t line, long long& lhs, const __FlashStringHelper* lhsString,
+
578  const char* opName, long long& rhs, const __FlashStringHelper* rhsString) {
+
579 
+
580  // Don't use F() strings here. Same reason as above.
+
581  printer->print("Assertion ");
+
582  printer->print(ok ? "passed" : "failed");
+
583  printer->print(": (");
+
584  printer->print(lhsString);
+
585  printer->print('=');
+
586  print64(*printer, lhs);
+
587  printer->print(") ");
+
588  printer->print(opName);
+
589  printer->print(" (");
+
590  printer->print(rhsString);
+
591  printer->print('=');
+
592  print64(*printer, rhs);
+
593  printer->print(')');
+
594  printer->print(", file ");
+
595  printer->print(file);
+
596  printer->print(", line ");
+
597  printer->print(line);
+
598  printer->println('.');
+
599 }
+
600 
+
601 // Version for (unsigned long long, unsigned long long) because Print.h does
+
602 // not support int64.
+
603 void printAssertionMessageVerbose(Print* printer, bool ok, const char* file,
+
604  uint16_t line, unsigned long long& lhs,
+
605  const __FlashStringHelper* lhsString, const char* opName,
+
606  unsigned long long& rhs, const __FlashStringHelper* rhsString) {
+
607 
+
608  // Don't use F() strings here. Same reason as above.
+
609  printer->print("Assertion ");
+
610  printer->print(ok ? "passed" : "failed");
+
611  printer->print(": (");
+
612  printer->print(lhsString);
+
613  printer->print('=');
+
614  print64(*printer, lhs);
+
615  printer->print(") ");
+
616  printer->print(opName);
+
617  printer->print(" (");
+
618  printer->print(rhsString);
+
619  printer->print('=');
+
620  print64(*printer, rhs);
+
621  printer->print(')');
+
622  printer->print(", file ");
+
623  printer->print(file);
+
624  printer->print(", line ");
+
625  printer->print(line);
+
626  printer->println('.');
+
627 }
+
628 
+
629 // Special version for assertTrue(arg) and assertFalse(arg).
+
630 // Prints:
+
631 // "Assertion passed/failed: (x=arg) is true"
+
632 // "Assertion passed/failed: (x=arg) is false"
+
633 void printAssertionBoolMessageVerbose(Print* printer, bool ok, const char* file,
+
634  uint16_t line, bool arg, const __FlashStringHelper* argString, bool value) {
+
635 
+
636  // Don't use F() strings here. Same reason as above.
+
637  printer->print("Assertion ");
+
638  printer->print(ok ? "passed" : "failed");
+
639  printer->print(": (");
+
640  printer->print(argString);
+
641  printer->print('=');
+
642  printer->print(arg ? "true" : "false");
+
643  printer->print(") is ");
+
644  printer->print(value ? "true" : "false");
+
645  printer->print(", file ");
+
646  printer->print(file);
+
647  printer->print(", line ");
+
648  printer->print(line);
+
649  printer->println('.');
+
650 }
+
651 
+
652 template <typename A>
+
653 void printAssertionNearMessageVerbose(Print* printer, bool ok, const char* file,
+
654  uint16_t line, const A& lhs, const __FlashStringHelper* lhsString,
+
655  const A& rhs, const __FlashStringHelper* rhsString,
+
656  const char* opName,
+
657  const A& error, const __FlashStringHelper* errorString) {
+
658  printer->print("Assertion ");
+
659  printer->print(ok ? "passed" : "failed");
+
660  printer->print(": |(");
+
661  printer->print(lhsString);
+
662  printer->print('=');
+
663  printer->print(lhs);
+
664  printer->print(") - (");
+
665  printer->print(rhsString);
+
666  printer->print('=');
+
667  printer->print(rhs);
+
668  printer->print(")| ");
+
669  printer->print(opName);
+
670  printer->print(" (");
+
671  printer->print(errorString);
+
672  printer->print('=');
+
673  printer->print(error);
+
674  printer->print(')');
+
675  printer->print(", file ");
+
676  printer->print(file);
+
677  printer->print(", line ");
+
678  printer->print(line);
+
679  printer->println('.');
+
680 }
+
681 
+
682 } // namespace
+
683 
+
684 bool Assertion::assertionBoolVerbose(const char* file, uint16_t line, bool arg,
+
685  const __FlashStringHelper* argString, bool value) {
+
686  if (isDone()) return false;
+
687  bool ok = (arg == value);
+
688  if (isOutputEnabled(ok)) {
+
689  printAssertionBoolMessageVerbose(Printer::getPrinter(), ok, file, line,
+
690  arg, argString, value);
+
691  }
+
692  setPassOrFail(ok);
+
693  return ok;
+
694 }
+
695 
+
696 bool Assertion::assertionVerbose(const char* file, uint16_t line, bool lhs,
+
697  const __FlashStringHelper* lhsString, const char* opName,
+
698  bool (*op)(bool lhs, bool rhs), bool rhs,
+
699  const __FlashStringHelper* rhsString) {
+
700  if (isDone()) return false;
+
701  bool ok = op(lhs, rhs);
+
702  if (isOutputEnabled(ok)) {
+
703  printAssertionMessageVerbose(Printer::getPrinter(), ok, file, line,
+
704  lhs, lhsString, opName, rhs, rhsString);
+
705  }
+
706  setPassOrFail(ok);
+
707  return ok;
+
708 }
+
709 
+
710 bool Assertion::assertionVerbose(const char* file, uint16_t line, char lhs,
+
711  const __FlashStringHelper* lhsString, const char* opName,
+
712  bool (*op)(char lhs, char rhs), char rhs,
+
713  const __FlashStringHelper* rhsString) {
+
714  if (isDone()) return false;
+
715  bool ok = op(lhs, rhs);
+
716  if (isOutputEnabled(ok)) {
+
717  printAssertionMessageVerbose(Printer::getPrinter(), ok, file, line,
+
718  lhs, lhsString, opName, rhs, rhsString);
+
719  }
+
720  setPassOrFail(ok);
+
721  return ok;
+
722 }
+
723 
+
724 bool Assertion::assertionVerbose(const char* file, uint16_t line, int lhs,
+
725  const __FlashStringHelper* lhsString, const char* opName,
+
726  bool (*op)(int lhs, int rhs), int rhs,
+
727  const __FlashStringHelper* rhsString) {
+
728  if (isDone()) return false;
+
729  bool ok = op(lhs, rhs);
+
730  if (isOutputEnabled(ok)) {
+
731  printAssertionMessageVerbose(Printer::getPrinter(), ok, file, line,
+
732  lhs, lhsString, opName, rhs, rhsString);
+
733  }
+
734  setPassOrFail(ok);
+
735  return ok;
+
736 }
+
737 
+
738 bool Assertion::assertionVerbose(const char* file, uint16_t line,
+
739  unsigned int lhs, const __FlashStringHelper* lhsString, const char* opName,
+
740  bool (*op)(unsigned int lhs, unsigned int rhs),
+
741  unsigned int rhs, const __FlashStringHelper* rhsString) {
+
742  if (isDone()) return false;
+
743  bool ok = op(lhs, rhs);
+
744  if (isOutputEnabled(ok)) {
+
745  printAssertionMessageVerbose(Printer::getPrinter(), ok, file, line,
+
746  lhs, lhsString, opName, rhs, rhsString);
+
747  }
+
748  setPassOrFail(ok);
+
749  return ok;
+
750 }
+
751 
+
752 bool Assertion::assertionVerbose(const char* file, uint16_t line, long lhs,
+
753  const __FlashStringHelper* lhsString, const char* opName,
+
754  bool (*op)(long lhs, long rhs), long rhs,
+
755  const __FlashStringHelper* rhsString) {
+
756  if (isDone()) return false;
+
757  bool ok = op(lhs, rhs);
+
758  if (isOutputEnabled(ok)) {
+
759  printAssertionMessageVerbose(Printer::getPrinter(), ok, file, line,
+
760  lhs, lhsString, opName, rhs, rhsString);
+
761  }
+
762  setPassOrFail(ok);
+
763  return ok;
+
764 }
+
765 
+
766 bool Assertion::assertionVerbose(const char* file, uint16_t line,
+
767  unsigned long lhs, const __FlashStringHelper* lhsString, const char* opName,
+
768  bool (*op)(unsigned long lhs, unsigned long rhs),
+
769  unsigned long rhs, const __FlashStringHelper* rhsString) {
+
770  if (isDone()) return false;
+
771  bool ok = op(lhs, rhs);
+
772  if (isOutputEnabled(ok)) {
+
773  printAssertionMessageVerbose(Printer::getPrinter(), ok, file, line,
+
774  lhs, lhsString, opName, rhs, rhsString);
+
775  }
+
776  setPassOrFail(ok);
+
777  return ok;
+
778 }
+
779 
+
780 bool Assertion::assertionVerbose(const char* file, uint16_t line, long long lhs,
+
781  const __FlashStringHelper* lhsString, const char* opName,
+
782  bool (*op)(long long lhs, long long rhs), long long rhs,
+
783  const __FlashStringHelper* rhsString) {
+
784  if (isDone()) return false;
+
785  bool ok = op(lhs, rhs);
+
786  if (isOutputEnabled(ok)) {
+
787  printAssertionMessageVerbose(Printer::getPrinter(), ok, file, line,
+
788  lhs, lhsString, opName, rhs, rhsString);
+
789  }
+
790  setPassOrFail(ok);
+
791  return ok;
+
792 }
+
793 
+
794 bool Assertion::assertionVerbose(const char* file, uint16_t line,
+
795  unsigned long long lhs, const __FlashStringHelper* lhsString,
+
796  const char* opName,
+
797  bool (*op)(unsigned long long lhs, unsigned long long rhs),
+
798  unsigned long long rhs, const __FlashStringHelper* rhsString) {
+
799  if (isDone()) return false;
+
800  bool ok = op(lhs, rhs);
+
801  if (isOutputEnabled(ok)) {
+
802  printAssertionMessageVerbose(Printer::getPrinter(), ok, file, line,
+
803  lhs, lhsString, opName, rhs, rhsString);
+
804  }
+
805  setPassOrFail(ok);
+
806  return ok;
+
807 }
+
808 
+
809 bool Assertion::assertionVerbose(const char* file, uint16_t line, double lhs,
+
810  const __FlashStringHelper* lhsString, const char* opName,
+
811  bool (*op)(double lhs, double rhs), double rhs,
+
812  const __FlashStringHelper* rhsString) {
+
813  if (isDone()) return false;
+
814  bool ok = op(lhs, rhs);
+
815  if (isOutputEnabled(ok)) {
+
816  printAssertionMessageVerbose(Printer::getPrinter(), ok, file, line,
+
817  lhs, lhsString, opName, rhs, rhsString);
+
818  }
+
819  setPassOrFail(ok);
+
820  return ok;
+
821 }
+
822 
+
823 bool Assertion::assertionVerbose(const char* file, uint16_t line,
+
824  const char* lhs, const __FlashStringHelper* lhsString, const char* opName,
+
825  bool (*op)(const char* lhs, const char* rhs),
+
826  const char* rhs, const __FlashStringHelper* rhsString) {
+
827  if (isDone()) return false;
+
828  bool ok = op(lhs, rhs);
+
829  if (isOutputEnabled(ok)) {
+
830  printAssertionMessageVerbose(Printer::getPrinter(), ok, file, line,
+
831  lhs, lhsString, opName, rhs, rhsString);
+
832  }
+
833  setPassOrFail(ok);
+
834  return ok;
+
835 }
+
836 
+
837 bool Assertion::assertionVerbose(const char* file, uint16_t line,
+
838  const char* lhs, const __FlashStringHelper* lhsString,
+
839  const char* opName, bool (*op)(const char* lhs, const String& rhs),
+
840  const String& rhs, const __FlashStringHelper* rhsString) {
+
841  if (isDone()) return false;
+
842  bool ok = op(lhs, rhs);
+
843  if (isOutputEnabled(ok)) {
+
844  printAssertionMessageVerbose(Printer::getPrinter(), ok, file, line,
+
845  lhs, lhsString, opName, rhs, rhsString);
+
846  }
+
847  setPassOrFail(ok);
+
848  return ok;
+
849 }
+
850 
+
851 bool Assertion::assertionVerbose(const char* file, uint16_t line,
+
852  const char* lhs, const __FlashStringHelper* lhsString, const char* opName,
+
853  bool (*op)(const char* lhs, const __FlashStringHelper* rhs),
+
854  const __FlashStringHelper* rhs, const __FlashStringHelper* rhsString) {
+
855  if (isDone()) return false;
+
856  bool ok = op(lhs, rhs);
+
857  if (isOutputEnabled(ok)) {
+
858  printAssertionMessageVerbose(Printer::getPrinter(), ok, file, line,
+
859  lhs, lhsString, opName, rhs, rhsString);
+
860  }
+
861  setPassOrFail(ok);
+
862  return ok;
+
863 }
+
864 
+
865 bool Assertion::assertionVerbose(const char* file, uint16_t line,
+
866  const String& lhs, const __FlashStringHelper* lhsString, const char* opName,
+
867  bool (*op)(const String& lhs, const char* rhs),
+
868  const char* rhs, const __FlashStringHelper* rhsString) {
+
869  if (isDone()) return false;
+
870  bool ok = op(lhs, rhs);
+
871  if (isOutputEnabled(ok)) {
+
872  printAssertionMessageVerbose(Printer::getPrinter(), ok, file, line,
+
873  lhs, lhsString, opName, rhs, rhsString);
+
874  }
+
875  setPassOrFail(ok);
+
876  return ok;
+
877 }
+
878 
+
879 bool Assertion::assertionVerbose(const char* file, uint16_t line,
+
880  const String& lhs, const __FlashStringHelper* lhsString, const char* opName,
+
881  bool (*op)(const String& lhs, const String& rhs),
+
882  const String& rhs, const __FlashStringHelper* rhsString) {
+
883  if (isDone()) return false;
+
884  bool ok = op(lhs, rhs);
+
885  if (isOutputEnabled(ok)) {
+
886  printAssertionMessageVerbose(Printer::getPrinter(), ok, file, line,
+
887  lhs, lhsString, opName, rhs, rhsString);
+
888  }
+
889  setPassOrFail(ok);
+
890  return ok;
+
891 }
+
892 
+
893 bool Assertion::assertionVerbose(const char* file, uint16_t line,
+
894  const String& lhs, const __FlashStringHelper* lhsString, const char* opName,
+
895  bool (*op)(const String& lhs, const __FlashStringHelper* rhs),
+
896  const __FlashStringHelper* rhs, const __FlashStringHelper* rhsString) {
+
897  if (isDone()) return false;
+
898  bool ok = op(lhs, rhs);
+
899  if (isOutputEnabled(ok)) {
+
900  printAssertionMessageVerbose(Printer::getPrinter(), ok, file, line,
+
901  lhs, lhsString, opName, rhs, rhsString);
+
902  }
+
903  setPassOrFail(ok);
+
904  return ok;
+
905 }
+
906 
+
907 bool Assertion::assertionVerbose(const char* file, uint16_t line,
+
908  const __FlashStringHelper* lhs, const __FlashStringHelper* lhsString,
+
909  const char* opName,
+
910  bool (*op)(const __FlashStringHelper* lhs, const char* rhs),
+
911  const char* rhs, const __FlashStringHelper* rhsString) {
+
912  if (isDone()) return false;
+
913  bool ok = op(lhs, rhs);
+
914  if (isOutputEnabled(ok)) {
+
915  printAssertionMessageVerbose(Printer::getPrinter(), ok, file, line,
+
916  lhs, lhsString, opName, rhs, rhsString);
+
917  }
+
918  setPassOrFail(ok);
+
919  return ok;
+
920 }
+
921 
+
922 bool Assertion::assertionVerbose(const char* file, uint16_t line,
+
923  const __FlashStringHelper* lhs, const __FlashStringHelper* lhsString,
+
924  const char* opName,
+
925  bool (*op)(const __FlashStringHelper* lhs, const String& rhs),
+
926  const String& rhs, const __FlashStringHelper* rhsString) {
+
927  if (isDone()) return false;
+
928  bool ok = op(lhs, rhs);
+
929  if (isOutputEnabled(ok)) {
+
930  printAssertionMessageVerbose(Printer::getPrinter(), ok, file, line,
+
931  lhs, lhsString, opName, rhs, rhsString);
+
932  }
+
933  setPassOrFail(ok);
+
934  return ok;
+
935 }
+
936 
+
937 bool Assertion::assertionVerbose(const char* file, uint16_t line,
+
938  const __FlashStringHelper* lhs, const __FlashStringHelper* lhsString,
+
939  const char* opName,
+
940  bool (*op)(const __FlashStringHelper* lhs, const __FlashStringHelper* rhs),
+
941  const __FlashStringHelper* rhs, const __FlashStringHelper* rhsString) {
+
942  if (isDone()) return false;
+
943  bool ok = op(lhs, rhs);
+
944  if (isOutputEnabled(ok)) {
+
945  printAssertionMessageVerbose(Printer::getPrinter(), ok, file, line,
+
946  lhs, lhsString, opName, rhs, rhsString);
+
947  }
+
948  setPassOrFail(ok);
+
949  return ok;
+
950 }
+
951 
+
952 bool Assertion::assertionNearVerbose(const char* file, uint16_t line,
+
953  int lhs, const __FlashStringHelper* lhsString,
+
954  int rhs, const __FlashStringHelper* rhsString,
+
955  int error, const __FlashStringHelper* errorString,
+
956  const char* opName,
+
957  bool (*opNear)(int lhs, int rhs, int error)) {
+
958  if (isDone()) return false;
+
959  bool ok = opNear(lhs, rhs, error);
+
960  if (isOutputEnabled(ok)) {
+
961  printAssertionNearMessageVerbose(Printer::getPrinter(), ok, file, line,
+
962  lhs, lhsString, rhs, rhsString, opName, error, errorString);
+
963  }
+
964  setPassOrFail(ok);
+
965  return ok;
+
966 }
+
967 
+
968 bool Assertion::assertionNearVerbose(const char* file, uint16_t line,
+
969  unsigned int lhs, const __FlashStringHelper* lhsString,
+
970  unsigned int rhs, const __FlashStringHelper* rhsString,
+
971  unsigned int error, const __FlashStringHelper* errorString,
+
972  const char* opName,
+
973  bool (*opNear)(unsigned int lhs, unsigned int rhs, unsigned int error)) {
+
974  if (isDone()) return false;
+
975  bool ok = opNear(lhs, rhs, error);
+
976  if (isOutputEnabled(ok)) {
+
977  printAssertionNearMessageVerbose(Printer::getPrinter(), ok, file, line,
+
978  lhs, lhsString, rhs, rhsString, opName, error, errorString);
+
979  }
+
980  setPassOrFail(ok);
+
981  return ok;
+
982 }
+
983 
+
984 bool Assertion::assertionNearVerbose(const char* file, uint16_t line,
+
985  long lhs, const __FlashStringHelper* lhsString,
+
986  long rhs, const __FlashStringHelper* rhsString,
+
987  long error, const __FlashStringHelper* errorString,
+
988  const char* opName,
+
989  bool (*opNear)(long lhs, long rhs, long error)) {
+
990  if (isDone()) return false;
+
991  bool ok = opNear(lhs, rhs, error);
+
992  if (isOutputEnabled(ok)) {
+
993  printAssertionNearMessageVerbose(Printer::getPrinter(), ok, file, line,
+
994  lhs, lhsString, rhs, rhsString, opName, error, errorString);
+
995  }
+
996  setPassOrFail(ok);
+
997  return ok;
+
998 }
+
999 
+
1000 bool Assertion::assertionNearVerbose(const char* file, uint16_t line,
+
1001  unsigned long lhs, const __FlashStringHelper* lhsString,
+
1002  unsigned long rhs, const __FlashStringHelper* rhsString,
+
1003  unsigned long error, const __FlashStringHelper* errorString,
+
1004  const char* opName,
+
1005  bool (*opNear)(unsigned long lhs, unsigned long rhs, unsigned long error)) {
+
1006  if (isDone()) return false;
+
1007  bool ok = opNear(lhs, rhs, error);
+
1008  if (isOutputEnabled(ok)) {
+
1009  printAssertionNearMessageVerbose(Printer::getPrinter(), ok, file, line,
+
1010  lhs, lhsString, rhs, rhsString, opName, error, errorString);
+
1011  }
+
1012  setPassOrFail(ok);
+
1013  return ok;
+
1014 }
+
1015 
+
1016 bool Assertion::assertionNearVerbose(const char* file, uint16_t line,
+
1017  double lhs, const __FlashStringHelper* lhsString,
+
1018  double rhs, const __FlashStringHelper* rhsString,
+
1019  double error, const __FlashStringHelper* errorString,
+
1020  const char* opName,
+
1021  bool (*opNear)(double lhs, double rhs, double error)) {
+
1022  if (isDone()) return false;
+
1023  bool ok = opNear(lhs, rhs, error);
+
1024  if (isOutputEnabled(ok)) {
+
1025  printAssertionNearMessageVerbose(Printer::getPrinter(), ok, file, line,
+
1026  lhs, lhsString, rhs, rhsString, opName, error, errorString);
+
1027  }
+
1028  setPassOrFail(ok);
+
1029  return ok;
+
1030 }
+
1031 
+
1032 }
+
static Print * getPrinter()
Get the output printer used by the various assertion() methods and the TestRunner.
Definition: Printer.h:48
+
bool isOutputEnabled(bool ok) const
Returns true if an assertion message should be printed.
Definition: Assertion.cpp:183
+
static const uint8_t kAssertionPassed
Print assertXxx() passed message.
Definition: Verbosity.h:40
+
static const uint8_t kAssertionFailed
Print assertXxx() failed message.
Definition: Verbosity.h:43
+ + diff --git a/docs/html/Assertion_8h_source.html b/docs/html/Assertion_8h_source.html index df16d11..c9885cd 100644 --- a/docs/html/Assertion_8h_source.html +++ b/docs/html/Assertion_8h_source.html @@ -1,11 +1,11 @@ - + - + -AUnit: /home/brian/dev/AUnit/src/aunit/Assertion.h Source File +AUnit: /home/brian/src/AUnit/src/aunit/Assertion.h Source File @@ -22,7 +22,7 @@
AUnit -  1.3.2 +  1.3.3
Unit testing framework for Arduino platforms inspired by ArduinoUnit and Google Test.
@@ -31,18 +31,21 @@
- + +/* @license-end */
Assertion.h
-
1 /*
2 MIT License
3 
4 Copyright (c) 2018 Brian T. Park
5 
6 Permission is hereby granted, free of charge, to any person obtaining a copy
7 of this software and associated documentation files (the "Software"), to deal
8 in the Software without restriction, including without limitation the rights
9 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 copies of the Software, and to permit persons to whom the Software is
11 furnished to do so, subject to the following conditions:
12 
13 The above copyright notice and this permission notice shall be included in all
14 copies or substantial portions of the Software.
15 
16 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22 SOFTWARE.
23 */
24 
25 #ifndef AUNIT_ASSERTION_H
26 #define AUNIT_ASSERTION_H
27 
28 #include "Flash.h"
29 #include "Test.h"
30 
31 class __FlashStringHelper;
32 class String;
33 
34 namespace aunit {
35 
55 class Assertion: public Test {
56  protected:
58  Assertion() {}
59 
61  bool isOutputEnabled(bool ok) const;
62 
63  // Terse assertions. Prints only the argument values.
64 
65  bool assertionBool(const char* file, uint16_t line, bool arg,
66  bool value);
67 
68  bool assertion(const char* file, uint16_t line, bool lhs,
69  const char* opName, bool (*op)(bool lhs, bool rhs),
70  bool rhs);
71 
72  bool assertion(const char* file, uint16_t line, char lhs,
73  const char* opName, bool (*op)(char lhs, char rhs),
74  char rhs);
75 
76  bool assertion(const char* file, uint16_t line, int lhs,
77  const char* opName, bool (*op)(int lhs, int rhs),
78  int rhs);
79 
80  bool assertion(const char* file, uint16_t line, unsigned int lhs,
81  const char* opName, bool (*op)(unsigned int lhs, unsigned int rhs),
82  unsigned int rhs);
83 
84  bool assertion(const char* file, uint16_t line, long lhs,
85  const char* opName, bool (*op)(long lhs, long rhs),
86  long rhs);
87 
88  bool assertion(const char* file, uint16_t line, unsigned long lhs,
89  const char* opName, bool (*op)(unsigned long lhs, unsigned long rhs),
90  unsigned long rhs);
91 
92  bool assertion(const char* file, uint16_t line, long long lhs,
93  const char* opName, bool (*op)(long long lhs, long long rhs),
94  long long rhs);
95 
96  bool assertion(const char* file, uint16_t line, unsigned long long lhs,
97  const char* opName,
98  bool (*op)(unsigned long long lhs, unsigned long long rhs),
99  unsigned long long rhs);
100 
101  bool assertion(const char* file, uint16_t line, double lhs,
102  const char* opName, bool (*op)(double lhs, double rhs),
103  double rhs);
104 
105  bool assertion(const char* file, uint16_t line, const char* lhs,
106  const char* opName, bool (*op)(const char* lhs, const char* rhs),
107  const char* rhs);
108 
109  bool assertion(const char* file, uint16_t line, const char* lhs,
110  const char* opName, bool (*op)(const char* lhs, const String& rhs),
111  const String& rhs);
112 
113  bool assertion(const char* file, uint16_t line, const char* lhs,
114  const char* opName,
115  bool (*op)(const char* lhs, const __FlashStringHelper* rhs),
116  const __FlashStringHelper* rhs);
117 
118  bool assertion(const char* file, uint16_t line, const String& lhs,
119  const char* opName, bool (*op)(const String& lhs, const char* rhs),
120  const char* rhs);
121 
122  bool assertion(const char* file, uint16_t line, const String& lhs,
123  const char* opName, bool (*op)(const String& lhs, const String& rhs),
124  const String& rhs);
125 
126  bool assertion(const char* file, uint16_t line, const String& lhs,
127  const char* opName,
128  bool (*op)(const String& lhs, const __FlashStringHelper* rhs),
129  const __FlashStringHelper* rhs);
130 
131  bool assertion(const char* file, uint16_t line,
132  const __FlashStringHelper* lhs, const char* opName,
133  bool (*op)(const __FlashStringHelper* lhs, const char* rhs),
134  const char* rhs);
135 
136  bool assertion(const char* file, uint16_t line,
137  const __FlashStringHelper* lhs, const char* opName,
138  bool (*op)(const __FlashStringHelper* lhs, const String& rhs),
139  const String& rhs);
140 
141  bool assertion(const char* file, uint16_t line,
142  const __FlashStringHelper* lhs, const char* opName,
143  bool (*op)(const __FlashStringHelper* lhs,
144  const __FlashStringHelper* rhs),
145  const __FlashStringHelper* rhs);
146 
147  bool assertionNear(const char* file, uint16_t line,
148  int lhs, int rhs, int error, const char* opName,
149  bool (*compareNear)(int lhs, int rhs, int error));
150 
151  bool assertionNear(const char* file, uint16_t line,
152  unsigned int lhs, unsigned int rhs, unsigned int error,
153  const char* opName,
154  bool (*compareNear)(
155  unsigned int lhs, unsigned int rhs, unsigned int error));
156 
157  bool assertionNear(const char* file, uint16_t line,
158  long lhs, long rhs, long error, const char* opName,
159  bool (*compareNear)(long lhs, long rhs, long error));
160 
161  bool assertionNear(const char* file, uint16_t line,
162  unsigned long lhs, unsigned long rhs, unsigned long error,
163  const char* opName,
164  bool (*compareNear)(
165  unsigned long lhs, unsigned long rhs, unsigned long error));
166 
167  bool assertionNear(const char* file, uint16_t line,
168  double lhs, double rhs, double error, const char* opName,
169  bool (*compareNear)(double lhs, double rhs, double error));
170 
171  // Verbose versions of above.
172 
173  bool assertionBoolVerbose(const char* file, uint16_t line, bool arg,
174  const __FlashStringHelper* argString, bool value);
175 
176  bool assertionVerbose(const char* file, uint16_t line, bool lhs,
177  const __FlashStringHelper* lhsString, const char* opName,
178  bool (*op)(bool lhs, bool rhs),
179  bool rhs, const __FlashStringHelper* rhsString);
180 
181  bool assertionVerbose(const char* file, uint16_t line, char lhs,
182  const __FlashStringHelper* lhsString, const char* opName,
183  bool (*op)(char lhs, char rhs),
184  char rhs, const __FlashStringHelper* rhsString);
185 
186  bool assertionVerbose(const char* file, uint16_t line, int lhs,
187  const __FlashStringHelper* lhsString, const char* opName,
188  bool (*op)(int lhs, int rhs),
189  int rhs, const __FlashStringHelper* rhsString);
190 
191  bool assertionVerbose(const char* file, uint16_t line, unsigned int lhs,
192  const __FlashStringHelper* lhsString, const char* opName,
193  bool (*op)(unsigned int lhs, unsigned int rhs),
194  unsigned int rhs, const __FlashStringHelper* rhsString);
195 
196  bool assertionVerbose(const char* file, uint16_t line, long lhs,
197  const __FlashStringHelper* lhsString, const char* opName,
198  bool (*op)(long lhs, long rhs),
199  long rhs, const __FlashStringHelper* rhsString);
200 
201  bool assertionVerbose(const char* file, uint16_t line, unsigned long lhs,
202  const __FlashStringHelper* lhsString, const char* opName,
203  bool (*op)(unsigned long lhs, unsigned long rhs),
204  unsigned long rhs, const __FlashStringHelper* rhsString);
205 
206  bool assertionVerbose(const char* file, uint16_t line, long long lhs,
207  const __FlashStringHelper* lhsString, const char* opName,
208  bool (*op)(long long lhs, long long rhs),
209  long long rhs, const __FlashStringHelper* rhsString);
210 
211  bool assertionVerbose(const char* file, uint16_t line,
212  unsigned long long lhs,
213  const __FlashStringHelper* lhsString, const char* opName,
214  bool (*op)(unsigned long long lhs, unsigned long long rhs),
215  unsigned long long rhs, const __FlashStringHelper* rhsString);
216 
217  bool assertionVerbose(const char* file, uint16_t line, double lhs,
218  const __FlashStringHelper* lhsString, const char* opName,
219  bool (*op)(double lhs, double rhs),
220  double rhs, const __FlashStringHelper* rhsString);
221 
222  bool assertionVerbose(const char* file, uint16_t line, const char* lhs,
223  const __FlashStringHelper* lhsString, const char* opName,
224  bool (*op)(const char* lhs, const char* rhs),
225  const char* rhs, const __FlashStringHelper* rhsString);
226 
227  bool assertionVerbose(const char* file, uint16_t line, const char* lhs,
228  const __FlashStringHelper* lhsString, const char* opName,
229  bool (*op)(const char* lhs, const String& rhs),
230  const String& rhs, const __FlashStringHelper* rhsString);
231 
232  bool assertionVerbose(const char* file, uint16_t line, const char* lhs,
233  const __FlashStringHelper* lhsString, const char* opName,
234  bool (*op)(const char* lhs, const __FlashStringHelper* rhs),
235  const __FlashStringHelper* rhs, const __FlashStringHelper* rhsString);
236 
237  bool assertionVerbose(const char* file, uint16_t line, const String& lhs,
238  const __FlashStringHelper* lhsString, const char* opName,
239  bool (*op)(const String& lhs, const char* rhs),
240  const char* rhs, const __FlashStringHelper* rhsString);
241 
242  bool assertionVerbose(const char* file, uint16_t line, const String& lhs,
243  const __FlashStringHelper* lhsString, const char* opName,
244  bool (*op)(const String& lhs, const String& rhs),
245  const String& rhs, const __FlashStringHelper* rhsString);
246 
247  bool assertionVerbose(const char* file, uint16_t line, const String& lhs,
248  const __FlashStringHelper* lhsString, const char* opName,
249  bool (*op)(const String& lhs, const __FlashStringHelper* rhs),
250  const __FlashStringHelper* rhs, const __FlashStringHelper* rhsString);
251 
252  bool assertionVerbose(const char* file, uint16_t line,
253  const __FlashStringHelper* lhs, const __FlashStringHelper* lhsString,
254  const char* opName,
255  bool (*op)(const __FlashStringHelper* lhs, const char* rhs),
256  const char* rhs, const __FlashStringHelper* rhsString);
257 
258  bool assertionVerbose(const char* file, uint16_t line,
259  const __FlashStringHelper* lhs, const __FlashStringHelper* lhsString,
260  const char* opName,
261  bool (*op)(const __FlashStringHelper* lhs, const String& rhs),
262  const String& rhs, const __FlashStringHelper* rhsString);
263 
264  bool assertionVerbose(const char* file, uint16_t line,
265  const __FlashStringHelper* lhs, const __FlashStringHelper* lhsString,
266  const char* opName,
267  bool (*op)(const __FlashStringHelper* lhs,
268  const __FlashStringHelper* rhs),
269  const __FlashStringHelper* rhs, const __FlashStringHelper* rhsString);
270 
271  bool assertionNearVerbose(const char* file, uint16_t line,
272  int lhs, const __FlashStringHelper* lhsString,
273  int rhs, const __FlashStringHelper* rhsString,
274  int error, const __FlashStringHelper* errorString,
275  const char* opName,
276  bool (*compareNear)(int lhs, int rhs, int error));
277 
278  bool assertionNearVerbose(const char* file, uint16_t line,
279  unsigned int lhs, const __FlashStringHelper* lhsString,
280  unsigned int rhs, const __FlashStringHelper* rhsString,
281  unsigned int error, const __FlashStringHelper* errorString,
282  const char* opName,
283  bool (*compareNear)(
284  unsigned int lhs, unsigned int rhs, unsigned int error));
285 
286  bool assertionNearVerbose(const char* file, uint16_t line,
287  long lhs, const __FlashStringHelper* lhsString,
288  long rhs, const __FlashStringHelper* rhsString,
289  long error, const __FlashStringHelper* errorString,
290  const char* opName,
291  bool (*compareNear)(long lhs, long rhs, long error));
292 
293  bool assertionNearVerbose(const char* file, uint16_t line,
294  unsigned long lhs, const __FlashStringHelper* lhsString,
295  unsigned long rhs, const __FlashStringHelper* rhsString,
296  unsigned long error, const __FlashStringHelper* errorString,
297  const char* opName,
298  bool (*compareNear)(
299  unsigned long lhs, unsigned long rhs, unsigned long error));
300 
301  bool assertionNearVerbose(const char* file, uint16_t line,
302  double lhs, const __FlashStringHelper* lhsString,
303  double rhs, const __FlashStringHelper* rhsString,
304  double error, const __FlashStringHelper* errorString,
305  const char* opName,
306  bool (*compareNear)(double lhs, double rhs, double error));
307 
308  private:
309  // Disable copy-constructor and assignment operator
310  Assertion(const Assertion&) = delete;
311  Assertion& operator=(const Assertion&) = delete;
312 };
313 
314 }
315 
316 #endif
Base class of all test cases.
Definition: Test.h:43
- -
An Assertion class is a subclass of Test and provides various overloaded assertion() functions...
Definition: Assertion.h:55
-
bool isOutputEnabled(bool ok) const
Returns true if an assertion message should be printed.
Definition: Assertion.cpp:183
-
Various macros to smooth over the differences among the various platforms with regards to their suppo...
-
Assertion()
Empty constructor.
Definition: Assertion.h:58
+
1 /*
+
2 MIT License
+
3 
+
4 Copyright (c) 2018 Brian T. Park
+
5 
+
6 Permission is hereby granted, free of charge, to any person obtaining a copy
+
7 of this software and associated documentation files (the "Software"), to deal
+
8 in the Software without restriction, including without limitation the rights
+
9 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+
10 copies of the Software, and to permit persons to whom the Software is
+
11 furnished to do so, subject to the following conditions:
+
12 
+
13 The above copyright notice and this permission notice shall be included in all
+
14 copies or substantial portions of the Software.
+
15 
+
16 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+
17 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+
18 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+
19 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+
20 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+
21 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+
22 SOFTWARE.
+
23 */
+
24 
+
25 #ifndef AUNIT_ASSERTION_H
+
26 #define AUNIT_ASSERTION_H
+
27 
+
28 #include "Flash.h"
+
29 #include "Test.h"
+
30 
+
31 class __FlashStringHelper;
+
32 class String;
+
33 
+
34 namespace aunit {
+
35 
+
55 class Assertion: public Test {
+
56  protected:
+
58  Assertion() {}
+
59 
+
61  bool isOutputEnabled(bool ok) const;
+
62 
+
63  // Terse assertions. Prints only the argument values.
+
64 
+
65  bool assertionBool(const char* file, uint16_t line, bool arg,
+
66  bool value);
+
67 
+
68  bool assertion(const char* file, uint16_t line, bool lhs,
+
69  const char* opName, bool (*op)(bool lhs, bool rhs),
+
70  bool rhs);
+
71 
+
72  bool assertion(const char* file, uint16_t line, char lhs,
+
73  const char* opName, bool (*op)(char lhs, char rhs),
+
74  char rhs);
+
75 
+
76  bool assertion(const char* file, uint16_t line, int lhs,
+
77  const char* opName, bool (*op)(int lhs, int rhs),
+
78  int rhs);
+
79 
+
80  bool assertion(const char* file, uint16_t line, unsigned int lhs,
+
81  const char* opName, bool (*op)(unsigned int lhs, unsigned int rhs),
+
82  unsigned int rhs);
+
83 
+
84  bool assertion(const char* file, uint16_t line, long lhs,
+
85  const char* opName, bool (*op)(long lhs, long rhs),
+
86  long rhs);
+
87 
+
88  bool assertion(const char* file, uint16_t line, unsigned long lhs,
+
89  const char* opName, bool (*op)(unsigned long lhs, unsigned long rhs),
+
90  unsigned long rhs);
+
91 
+
92  bool assertion(const char* file, uint16_t line, long long lhs,
+
93  const char* opName, bool (*op)(long long lhs, long long rhs),
+
94  long long rhs);
+
95 
+
96  bool assertion(const char* file, uint16_t line, unsigned long long lhs,
+
97  const char* opName,
+
98  bool (*op)(unsigned long long lhs, unsigned long long rhs),
+
99  unsigned long long rhs);
+
100 
+
101  bool assertion(const char* file, uint16_t line, double lhs,
+
102  const char* opName, bool (*op)(double lhs, double rhs),
+
103  double rhs);
+
104 
+
105  bool assertion(const char* file, uint16_t line, const char* lhs,
+
106  const char* opName, bool (*op)(const char* lhs, const char* rhs),
+
107  const char* rhs);
+
108 
+
109  bool assertion(const char* file, uint16_t line, const char* lhs,
+
110  const char* opName, bool (*op)(const char* lhs, const String& rhs),
+
111  const String& rhs);
+
112 
+
113  bool assertion(const char* file, uint16_t line, const char* lhs,
+
114  const char* opName,
+
115  bool (*op)(const char* lhs, const __FlashStringHelper* rhs),
+
116  const __FlashStringHelper* rhs);
+
117 
+
118  bool assertion(const char* file, uint16_t line, const String& lhs,
+
119  const char* opName, bool (*op)(const String& lhs, const char* rhs),
+
120  const char* rhs);
+
121 
+
122  bool assertion(const char* file, uint16_t line, const String& lhs,
+
123  const char* opName, bool (*op)(const String& lhs, const String& rhs),
+
124  const String& rhs);
+
125 
+
126  bool assertion(const char* file, uint16_t line, const String& lhs,
+
127  const char* opName,
+
128  bool (*op)(const String& lhs, const __FlashStringHelper* rhs),
+
129  const __FlashStringHelper* rhs);
+
130 
+
131  bool assertion(const char* file, uint16_t line,
+
132  const __FlashStringHelper* lhs, const char* opName,
+
133  bool (*op)(const __FlashStringHelper* lhs, const char* rhs),
+
134  const char* rhs);
+
135 
+
136  bool assertion(const char* file, uint16_t line,
+
137  const __FlashStringHelper* lhs, const char* opName,
+
138  bool (*op)(const __FlashStringHelper* lhs, const String& rhs),
+
139  const String& rhs);
+
140 
+
141  bool assertion(const char* file, uint16_t line,
+
142  const __FlashStringHelper* lhs, const char* opName,
+
143  bool (*op)(const __FlashStringHelper* lhs,
+
144  const __FlashStringHelper* rhs),
+
145  const __FlashStringHelper* rhs);
+
146 
+
147  bool assertionNear(const char* file, uint16_t line,
+
148  int lhs, int rhs, int error, const char* opName,
+
149  bool (*compareNear)(int lhs, int rhs, int error));
+
150 
+
151  bool assertionNear(const char* file, uint16_t line,
+
152  unsigned int lhs, unsigned int rhs, unsigned int error,
+
153  const char* opName,
+
154  bool (*compareNear)(
+
155  unsigned int lhs, unsigned int rhs, unsigned int error));
+
156 
+
157  bool assertionNear(const char* file, uint16_t line,
+
158  long lhs, long rhs, long error, const char* opName,
+
159  bool (*compareNear)(long lhs, long rhs, long error));
+
160 
+
161  bool assertionNear(const char* file, uint16_t line,
+
162  unsigned long lhs, unsigned long rhs, unsigned long error,
+
163  const char* opName,
+
164  bool (*compareNear)(
+
165  unsigned long lhs, unsigned long rhs, unsigned long error));
+
166 
+
167  bool assertionNear(const char* file, uint16_t line,
+
168  double lhs, double rhs, double error, const char* opName,
+
169  bool (*compareNear)(double lhs, double rhs, double error));
+
170 
+
171  // Verbose versions of above.
+
172 
+
173  bool assertionBoolVerbose(const char* file, uint16_t line, bool arg,
+
174  const __FlashStringHelper* argString, bool value);
+
175 
+
176  bool assertionVerbose(const char* file, uint16_t line, bool lhs,
+
177  const __FlashStringHelper* lhsString, const char* opName,
+
178  bool (*op)(bool lhs, bool rhs),
+
179  bool rhs, const __FlashStringHelper* rhsString);
+
180 
+
181  bool assertionVerbose(const char* file, uint16_t line, char lhs,
+
182  const __FlashStringHelper* lhsString, const char* opName,
+
183  bool (*op)(char lhs, char rhs),
+
184  char rhs, const __FlashStringHelper* rhsString);
+
185 
+
186  bool assertionVerbose(const char* file, uint16_t line, int lhs,
+
187  const __FlashStringHelper* lhsString, const char* opName,
+
188  bool (*op)(int lhs, int rhs),
+
189  int rhs, const __FlashStringHelper* rhsString);
+
190 
+
191  bool assertionVerbose(const char* file, uint16_t line, unsigned int lhs,
+
192  const __FlashStringHelper* lhsString, const char* opName,
+
193  bool (*op)(unsigned int lhs, unsigned int rhs),
+
194  unsigned int rhs, const __FlashStringHelper* rhsString);
+
195 
+
196  bool assertionVerbose(const char* file, uint16_t line, long lhs,
+
197  const __FlashStringHelper* lhsString, const char* opName,
+
198  bool (*op)(long lhs, long rhs),
+
199  long rhs, const __FlashStringHelper* rhsString);
+
200 
+
201  bool assertionVerbose(const char* file, uint16_t line, unsigned long lhs,
+
202  const __FlashStringHelper* lhsString, const char* opName,
+
203  bool (*op)(unsigned long lhs, unsigned long rhs),
+
204  unsigned long rhs, const __FlashStringHelper* rhsString);
+
205 
+
206  bool assertionVerbose(const char* file, uint16_t line, long long lhs,
+
207  const __FlashStringHelper* lhsString, const char* opName,
+
208  bool (*op)(long long lhs, long long rhs),
+
209  long long rhs, const __FlashStringHelper* rhsString);
+
210 
+
211  bool assertionVerbose(const char* file, uint16_t line,
+
212  unsigned long long lhs,
+
213  const __FlashStringHelper* lhsString, const char* opName,
+
214  bool (*op)(unsigned long long lhs, unsigned long long rhs),
+
215  unsigned long long rhs, const __FlashStringHelper* rhsString);
+
216 
+
217  bool assertionVerbose(const char* file, uint16_t line, double lhs,
+
218  const __FlashStringHelper* lhsString, const char* opName,
+
219  bool (*op)(double lhs, double rhs),
+
220  double rhs, const __FlashStringHelper* rhsString);
+
221 
+
222  bool assertionVerbose(const char* file, uint16_t line, const char* lhs,
+
223  const __FlashStringHelper* lhsString, const char* opName,
+
224  bool (*op)(const char* lhs, const char* rhs),
+
225  const char* rhs, const __FlashStringHelper* rhsString);
+
226 
+
227  bool assertionVerbose(const char* file, uint16_t line, const char* lhs,
+
228  const __FlashStringHelper* lhsString, const char* opName,
+
229  bool (*op)(const char* lhs, const String& rhs),
+
230  const String& rhs, const __FlashStringHelper* rhsString);
+
231 
+
232  bool assertionVerbose(const char* file, uint16_t line, const char* lhs,
+
233  const __FlashStringHelper* lhsString, const char* opName,
+
234  bool (*op)(const char* lhs, const __FlashStringHelper* rhs),
+
235  const __FlashStringHelper* rhs, const __FlashStringHelper* rhsString);
+
236 
+
237  bool assertionVerbose(const char* file, uint16_t line, const String& lhs,
+
238  const __FlashStringHelper* lhsString, const char* opName,
+
239  bool (*op)(const String& lhs, const char* rhs),
+
240  const char* rhs, const __FlashStringHelper* rhsString);
+
241 
+
242  bool assertionVerbose(const char* file, uint16_t line, const String& lhs,
+
243  const __FlashStringHelper* lhsString, const char* opName,
+
244  bool (*op)(const String& lhs, const String& rhs),
+
245  const String& rhs, const __FlashStringHelper* rhsString);
+
246 
+
247  bool assertionVerbose(const char* file, uint16_t line, const String& lhs,
+
248  const __FlashStringHelper* lhsString, const char* opName,
+
249  bool (*op)(const String& lhs, const __FlashStringHelper* rhs),
+
250  const __FlashStringHelper* rhs, const __FlashStringHelper* rhsString);
+
251 
+
252  bool assertionVerbose(const char* file, uint16_t line,
+
253  const __FlashStringHelper* lhs, const __FlashStringHelper* lhsString,
+
254  const char* opName,
+
255  bool (*op)(const __FlashStringHelper* lhs, const char* rhs),
+
256  const char* rhs, const __FlashStringHelper* rhsString);
+
257 
+
258  bool assertionVerbose(const char* file, uint16_t line,
+
259  const __FlashStringHelper* lhs, const __FlashStringHelper* lhsString,
+
260  const char* opName,
+
261  bool (*op)(const __FlashStringHelper* lhs, const String& rhs),
+
262  const String& rhs, const __FlashStringHelper* rhsString);
+
263 
+
264  bool assertionVerbose(const char* file, uint16_t line,
+
265  const __FlashStringHelper* lhs, const __FlashStringHelper* lhsString,
+
266  const char* opName,
+
267  bool (*op)(const __FlashStringHelper* lhs,
+
268  const __FlashStringHelper* rhs),
+
269  const __FlashStringHelper* rhs, const __FlashStringHelper* rhsString);
+
270 
+
271  bool assertionNearVerbose(const char* file, uint16_t line,
+
272  int lhs, const __FlashStringHelper* lhsString,
+
273  int rhs, const __FlashStringHelper* rhsString,
+
274  int error, const __FlashStringHelper* errorString,
+
275  const char* opName,
+
276  bool (*compareNear)(int lhs, int rhs, int error));
+
277 
+
278  bool assertionNearVerbose(const char* file, uint16_t line,
+
279  unsigned int lhs, const __FlashStringHelper* lhsString,
+
280  unsigned int rhs, const __FlashStringHelper* rhsString,
+
281  unsigned int error, const __FlashStringHelper* errorString,
+
282  const char* opName,
+
283  bool (*compareNear)(
+
284  unsigned int lhs, unsigned int rhs, unsigned int error));
+
285 
+
286  bool assertionNearVerbose(const char* file, uint16_t line,
+
287  long lhs, const __FlashStringHelper* lhsString,
+
288  long rhs, const __FlashStringHelper* rhsString,
+
289  long error, const __FlashStringHelper* errorString,
+
290  const char* opName,
+
291  bool (*compareNear)(long lhs, long rhs, long error));
+
292 
+
293  bool assertionNearVerbose(const char* file, uint16_t line,
+
294  unsigned long lhs, const __FlashStringHelper* lhsString,
+
295  unsigned long rhs, const __FlashStringHelper* rhsString,
+
296  unsigned long error, const __FlashStringHelper* errorString,
+
297  const char* opName,
+
298  bool (*compareNear)(
+
299  unsigned long lhs, unsigned long rhs, unsigned long error));
+
300 
+
301  bool assertionNearVerbose(const char* file, uint16_t line,
+
302  double lhs, const __FlashStringHelper* lhsString,
+
303  double rhs, const __FlashStringHelper* rhsString,
+
304  double error, const __FlashStringHelper* errorString,
+
305  const char* opName,
+
306  bool (*compareNear)(double lhs, double rhs, double error));
+
307 
+
308  private:
+
309  // Disable copy-constructor and assignment operator
+
310  Assertion(const Assertion&) = delete;
+
311  Assertion& operator=(const Assertion&) = delete;
+
312 };
+
313 
+
314 }
+
315 
+
316 #endif
+
An Assertion class is a subclass of Test and provides various overloaded assertion() functions.
Definition: Assertion.h:55
+
bool isOutputEnabled(bool ok) const
Returns true if an assertion message should be printed.
Definition: Assertion.cpp:183
+
Base class of all test cases.
Definition: Test.h:43
+
Assertion()
Empty constructor.
Definition: Assertion.h:58
+ diff --git a/docs/html/Compare_8cpp_source.html b/docs/html/Compare_8cpp_source.html index 76d0e74..5a9f97c 100644 --- a/docs/html/Compare_8cpp_source.html +++ b/docs/html/Compare_8cpp_source.html @@ -1,11 +1,11 @@ - + - + -AUnit: /home/brian/dev/AUnit/src/aunit/Compare.cpp Source File +AUnit: /home/brian/src/AUnit/src/aunit/Compare.cpp Source File @@ -22,7 +22,7 @@
AUnit -  1.3.2 +  1.3.3
Unit testing framework for Arduino platforms inspired by ArduinoUnit and Google Test.
@@ -31,18 +31,21 @@
- + +/* @license-end */
Compare.cpp
-
1 /*
2 MIT License
3 
4 Copyright (c) 2018 Brian T. Park
5 
6 Permission is hereby granted, free of charge, to any person obtaining a copy
7 of this software and associated documentation files (the "Software"), to deal
8 in the Software without restriction, including without limitation the rights
9 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 copies of the Software, and to permit persons to whom the Software is
11 furnished to do so, subject to the following conditions:
12 
13 The above copyright notice and this permission notice shall be included in all
14 copies or substantial portions of the Software.
15 
16 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22 SOFTWARE.
23 */
24 
25 /*
26 Design Notes:
27 ============
28 
29 Template Specialization:
30 -----------------------
31 One way to implement the compareEqual() for these types is to use template
32 specialization. The problem with Template specialization is that templates
33 use strict type matching, and does not perform the normal implicit type
34 conversion, including const-casting. Therefore, all of the various c-style
35 string types, for example:
36 
37  - char*
38  - const char*
39  - char[1]
40  - char[N]
41  - const char[1]
42  - const char[N]
43 
44 are considered to be different types under the C++ templating system. This
45 causes a combinatorial explosion of template specialization which produces
46 code that is difficult to understand, test and maintain.
47 An example can be seen in the Compare.h file of the ArduinoUnit project:
48 https://github.com/mmurdoch/arduinounit/blob/master/src/ArduinoUnitUtility/Compare.h
49 
50 Function Overloading:
51 ---------------------
52 In this project, I used function overloading instead of template
53 specialization. Function overloading handles c-style strings (i.e. character
54 arrays) naturally, in the way most users expect. For example, (char*) is
55 automarically cast to (const char*), and (char[N]) is autonmatically
56 cast to (const char*).
57 
58 For the primitive value types (e.g. (char), (int), (unsigned char), etc.) I
59 attempted to use a generic templatized version, using sonmething like:
60 
61  template<typename T>
62  compareEqual(const T& a, const T& b) { ... }
63 
64 However, this template introduced this method:
65 
66  compareEqual(char* const& a, char* const& b);
67 
68 that seemed to take precedence over the explicitly defined overload:
69 
70  compareEqual(const char* a, const char*b);
71 
72 When the compareEqual() method is called with a (char*) or a (char[N]),
73 like this:
74 
75  char a[3] = {...};
76  char b[4] = {...};
77  compareEqual(a, b);
78 
79 this calls compareEqual(char* const&, const* const&), which is the wrong
80 version for a c-style string. The only way I could get this to work was to
81 avoid templates completely and manually define all the function overloads
82 even for primitive integer types.
83 
84 Implicit Conversions:
85 ---------------------
86 For basic primitive types, I depend on some casts to avoid having to define
87 some functions. I assume that signed and unsigned integers smaller or equal
88 to (int) will be converted to an (int) to match compareEqual(int, int).
89 
90 I provided an explicit compareEqual(char, char) overload because in C++, a
91 (char) type is distinct from (signed char) and (unsigned char).
92 
93 Technically, there should be a (long long) version and an (unsigned long
94 long) version of compareEqual(). However, it turns out that the Arduino
95 Print::print() method does not have an overload for these types, so it would
96 not do us much good to provide an assertEqual() or compareEqual() for the
97 (long long) and (unsigned long long) types.
98 
99 Custom Assert and Compare Functions:
100 ------------------------------------
101 Another advantage of using function overloading instead of template
102 specialization is that the user is able to add additional function overloads
103 into the 'aunit' namespace. This should allow the user to define the various
104 comporeXxx() and assertXxx() functions for a custom class. I have not
105 tested this though.
106 
107 Comparing Flash Strings:
108 ------------------------
109 Flash memory must be read using 4-byte alignment on the ESP8266. AVR doesn't
110 care. Teensy-ARM fakes the flash memory API but really just uses the normal
111 static RAM. The following code for comparing two (__FlashStringHelper*)
112 against each other will work for all 3 environments.
113 
114 Inlining:
115 --------
116 Even though most of these functions are one-liners, there is no advantage to
117 inlining them because they are almost always used through a function pointer.
118 */
119 
120 #include <stdint.h>
121 #include <string.h>
122 #include <math.h> // fabs()
123 #include <WString.h>
124 #include "Flash.h"
125 #include "Compare.h"
126 
127 namespace aunit {
128 namespace internal {
129 
130 //---------------------------------------------------------------------------
131 // compareString()
132 //---------------------------------------------------------------------------
133 
134 int compareString(const char* a, const char* b) {
135  if (a == b) { return 0; }
136  if (a == nullptr) { return -1; }
137  if (b == nullptr) { return 1; }
138  return strcmp(a, b);
139 }
140 
141 int compareString(const char* a, const String& b) {
142  if (a == nullptr) { return -1; }
143  return strcmp(a, b.c_str());
144 }
145 
146 int compareString(const char* a, const __FlashStringHelper* b) {
147  if (a == (const char*) b) { return 0; }
148  if (a == nullptr) { return -1; }
149  if (b == nullptr) { return 1; }
150  return strcmp_P(a, (const char*) b);
151 }
152 
153 int compareString(const String& a, const char* b) {
154  return -compareString(b, a);
155 }
156 
157 int compareString(const String& a, const String& b) {
158  return strcmp(a.c_str(), b.c_str());
159 }
160 
161 int compareString(const String& a, const __FlashStringHelper* b) {
162  if (b == nullptr) { return 1; }
163  return strcmp_P(a.c_str(), (const char*) b);
164 }
165 
166 int compareString(const __FlashStringHelper* a, const char* b) {
167  return -compareString(b, a);
168 }
169 
170 int compareString(const __FlashStringHelper* a, const String& b) {
171  return -compareString(b, a);
172 }
173 
174 // On ESP8266, pgm_read_byte() already takes care of 4-byte alignment, and
175 // memcpy_P(s, p, 4) makes 4 calls to pgm_read_byte() anyway, so don't bother
176 // optimizing for 4-byte alignment here.
177 int compareString(const __FlashStringHelper* a, const __FlashStringHelper* b) {
178  if (a == b) { return 0; }
179  if (a == nullptr) { return -1; }
180  if (b == nullptr) { return 1; }
181  const char* aa = reinterpret_cast<const char*>(a);
182  const char* bb = reinterpret_cast<const char*>(b);
183 
184  while (true) {
185  uint8_t ca = pgm_read_byte(aa);
186  uint8_t cb = pgm_read_byte(bb);
187  if (ca != cb) return (int) ca - (int) cb;
188  if (ca == '\0') return 0;
189  aa++;
190  bb++;
191  }
192 }
193 
194 //---------------------------------------------------------------------------
195 // compareStringCase()
196 //---------------------------------------------------------------------------
197 
198 int compareStringCase(const char* a, const char* b) {
199  if (a == b) { return 0; }
200  if (a == nullptr) { return -1; }
201  if (b == nullptr) { return 1; }
202  return strcasecmp(a, b);
203 }
204 
205 int compareStringCase(const char* a, const String& b) {
206  if (a == nullptr) { return -1; }
207  return strcasecmp(a, b.c_str());
208 }
209 
210 int compareStringCase(const char* a, const __FlashStringHelper* b) {
211  if (a == (const char*) b) { return 0; }
212  if (a == nullptr) { return -1; }
213  if (b == nullptr) { return 1; }
214  return strcasecmp_P(a, (const char*) b);
215 }
216 
217 int compareStringCase(const String& a, const char* b) {
218  return -compareStringCase(b, a);
219 }
220 
221 int compareStringCase(const String& a, const String& b) {
222  return strcasecmp(a.c_str(), b.c_str());
223 }
224 
225 int compareStringCase(const String& a, const __FlashStringHelper* b) {
226  if (b == nullptr) { return 1; }
227  return strcasecmp_P(a.c_str(), (const char*) b);
228 }
229 
230 int compareStringCase(const __FlashStringHelper* a, const char* b) {
231  return -compareStringCase(b, a);
232 }
233 
234 int compareStringCase(const __FlashStringHelper* a, const String& b) {
235  return -compareStringCase(b, a);
236 }
237 
238 // On ESP8266, pgm_read_byte() already takes care of 4-byte alignment, and
239 // memcpy_P(s, p, 4) makes 4 calls to pgm_read_byte() anyway, so don't bother
240 // optimizing for 4-byte alignment here.
241 int compareStringCase(const __FlashStringHelper* a,
242  const __FlashStringHelper* b) {
243  if (a == b) { return 0; }
244  if (a == nullptr) { return -1; }
245  if (b == nullptr) { return 1; }
246  const char* aa = reinterpret_cast<const char*>(a);
247  const char* bb = reinterpret_cast<const char*>(b);
248 
249  while (true) {
250  uint8_t ca = pgm_read_byte(aa);
251  uint8_t cb = pgm_read_byte(bb);
252  uint8_t la = tolower(ca);
253  uint8_t lb = tolower(cb);
254  if (la != lb) return (int) la - (int) lb;
255  if (ca == '\0') return 0;
256  aa++;
257  bb++;
258  }
259 }
260 
261 //---------------------------------------------------------------------------
262 // compareStringN
263 //---------------------------------------------------------------------------
264 
265 // We need compareStringN() to support only (const char*) and (const
266 // __FlashStringHelper*). And it turns out that compareStringN(a, b, N) ==
267 // -compareString(b, a, N).
268 
269 int compareStringN(const char* a, const char* b, size_t n) {
270  if (a == b) { return 0; }
271  if (a == nullptr) { return -1; }
272  if (b == nullptr) { return 1; }
273  return strncmp(a, b, n);
274 }
275 
276 int compareStringN(const char* a, const __FlashStringHelper* b, size_t n) {
277  if (a == (const char*) b) { return 0; }
278  if (a == nullptr) { return -1; }
279  if (b == nullptr) { return 1; }
280  return strncmp_P(a, (const char*) b, n);
281 }
282 
283 int compareStringN(const __FlashStringHelper* a, const char* b, size_t n) {
284  return -compareStringN(b, a, n);
285 }
286 
287 // On ESP8266, pgm_read_byte() already takes care of 4-byte alignment, and
288 // memcpy_P(s, p, 4) makes 4 calls to pgm_read_byte() anyway, so don't bother
289 // optimizing for 4-byte alignment here.
290 int compareStringN(const __FlashStringHelper* a, const __FlashStringHelper* b,
291  size_t n) {
292  if (a == b) { return 0; }
293  if (a == nullptr) { return -1; }
294  if (b == nullptr) { return 1; }
295  const char* aa = reinterpret_cast<const char*>(a);
296  const char* bb = reinterpret_cast<const char*>(b);
297 
298  while (n > 0) {
299  uint8_t ca = pgm_read_byte(aa);
300  uint8_t cb = pgm_read_byte(bb);
301  if (ca != cb) return (int) ca - (int) cb;
302  if (ca == '\0') return 0;
303  aa++;
304  bb++;
305  n--;
306  }
307  return 0;
308 }
309 
310 //---------------------------------------------------------------------------
311 // compareEqual()
312 //---------------------------------------------------------------------------
313 
314 bool compareEqual(bool a, bool b) {
315  return (a == b);
316 }
317 
318 bool compareEqual(char a, char b) {
319  return (a == b);
320 }
321 
322 bool compareEqual(int a, int b) {
323  return (a == b);
324 }
325 
326 bool compareEqual(unsigned int a, unsigned int b) {
327  return (a == b);
328 }
329 
330 bool compareEqual(long a, long b) {
331  return (a == b);
332 }
333 
334 bool compareEqual(unsigned long a, unsigned long b) {
335  return (a == b);
336 }
337 
338 bool compareEqual(long long a, long long b) {
339  return (a == b);
340 }
341 
342 bool compareEqual(unsigned long long a, unsigned long long b) {
343  return (a == b);
344 }
345 
346 bool compareEqual(double a, double b) {
347  return (a == b);
348 }
349 
350 bool compareEqual(const char* a, const char* b) {
351  return compareString(a, b) == 0;
352 }
353 
354 bool compareEqual(const char* a, const String& b) {
355  return compareString(a, b) == 0;
356 }
357 
358 bool compareEqual(const char* a, const __FlashStringHelper* b) {
359  return compareString(a, b) == 0;
360 }
361 
362 bool compareEqual(const __FlashStringHelper* a, const char* b) {
363  return compareString(a, b) == 0;
364 }
365 
366 bool compareEqual(const __FlashStringHelper* a, const __FlashStringHelper* b) {
367  return compareString(a, b) == 0;
368 }
369 
370 bool compareEqual(const __FlashStringHelper* a, const String& b) {
371  return compareString(a, b) == 0;
372 }
373 
374 bool compareEqual(const String& a, const char* b) {
375  return compareString(a, b) == 0;
376 }
377 
378 bool compareEqual(const String& a, const String& b) {
379  return compareString(a, b) == 0;
380 }
381 
382 bool compareEqual(const String& a, const __FlashStringHelper* b) {
383  return compareString(a, b) == 0;
384 }
385 
386 //---------------------------------------------------------------------------
387 // compareLess()
388 //---------------------------------------------------------------------------
389 
390 bool compareLess(bool a, bool b) {
391  return (a < b);
392 }
393 
394 bool compareLess(char a, char b) {
395  return (a < b);
396 }
397 
398 bool compareLess(int a, int b) {
399  return (a < b);
400 }
401 
402 bool compareLess(unsigned int a, unsigned int b) {
403  return (a < b);
404 }
405 
406 bool compareLess(long a, long b) {
407  return (a < b);
408 }
409 
410 bool compareLess(unsigned long a, unsigned long b) {
411  return (a < b);
412 }
413 
414 bool compareLess(long long a, long long b) {
415  return (a < b);
416 }
417 
418 bool compareLess(unsigned long long a, unsigned long long b) {
419  return (a < b);
420 }
421 
422 bool compareLess(double a, double b) {
423  return (a < b);
424 }
425 
426 bool compareLess(const char* a, const char* b) {
427  return compareString(a, b) < 0;
428 }
429 
430 bool compareLess(const char* a, const String& b) {
431  return compareString(a, b) < 0;
432 }
433 
434 bool compareLess(const char* a, const __FlashStringHelper* b) {
435  return compareString(a, b) < 0;
436 }
437 
438 bool compareLess(const __FlashStringHelper* a, const char* b) {
439  return compareString(a, b) < 0;
440 }
441 
442 bool compareLess(
443  const __FlashStringHelper* a, const __FlashStringHelper* b) {
444  return compareString(a, b) < 0;
445 }
446 
447 bool compareLess(const __FlashStringHelper* a, const String& b) {
448  return compareString(a, b) < 0;
449 }
450 
451 bool compareLess(const String& a, const char* b) {
452  return compareString(a, b) < 0;
453 }
454 
455 bool compareLess(const String& a, const String& b) {
456  return compareString(a, b) < 0;
457 }
458 
459 bool compareLess(const String& a, const __FlashStringHelper* b) {
460  return compareString(a, b) < 0;
461 }
462 
463 //---------------------------------------------------------------------------
464 // compareMore()
465 //---------------------------------------------------------------------------
466 
467 bool compareMore(bool a, bool b) {
468  return (a > b);
469 }
470 
471 bool compareMore(char a, char b) {
472  return (a > b);
473 }
474 
475 bool compareMore(int a, int b) {
476  return (a > b);
477 }
478 
479 bool compareMore(unsigned int a, unsigned int b) {
480  return (a > b);
481 }
482 
483 bool compareMore(long a, long b) {
484  return (a > b);
485 }
486 
487 bool compareMore(unsigned long a, unsigned long b) {
488  return (a > b);
489 }
490 
491 bool compareMore(long long a, long long b) {
492  return (a > b);
493 }
494 
495 bool compareMore(unsigned long long a, unsigned long long b) {
496  return (a > b);
497 }
498 
499 bool compareMore(double a, double b) {
500  return (a > b);
501 }
502 
503 bool compareMore(const char* a, const char* b) {
504  return compareString(a, b) > 0;
505 }
506 
507 bool compareMore(const char* a, const String& b) {
508  return compareString(a, b) > 0;
509 }
510 
511 bool compareMore(const char* a, const __FlashStringHelper* b) {
512  return compareString(a, b) > 0;
513 }
514 
515 bool compareMore(const __FlashStringHelper* a, const char* b) {
516  return compareString(a, b) > 0;
517 }
518 
519 bool compareMore(const __FlashStringHelper* a, const __FlashStringHelper* b) {
520  return compareString(a, b) > 0;
521 }
522 
523 bool compareMore(const __FlashStringHelper* a, const String& b) {
524  return compareString(a, b) > 0;
525 }
526 
527 bool compareMore(const String& a, const char* b) {
528  return compareString(a, b) > 0;
529 }
530 
531 bool compareMore(const String& a, const String& b) {
532  return compareString(a, b) > 0;
533 }
534 
535 bool compareMore(const String& a, const __FlashStringHelper* b) {
536  return compareString(a, b) > 0;
537 }
538 
539 //---------------------------------------------------------------------------
540 // compareLessOrEqual
541 //---------------------------------------------------------------------------
542 
543 bool compareLessOrEqual(bool a, bool b) {
544  return (a <= b);
545 }
546 
547 bool compareLessOrEqual(char a, char b) {
548  return (a <= b);
549 }
550 
551 bool compareLessOrEqual(int a, int b) {
552  return (a <= b);
553 }
554 
555 bool compareLessOrEqual(unsigned int a, unsigned int b) {
556  return (a <= b);
557 }
558 
559 bool compareLessOrEqual(long a, long b) {
560  return (a <= b);
561 }
562 
563 bool compareLessOrEqual(unsigned long a, unsigned long b) {
564  return (a <= b);
565 }
566 
567 bool compareLessOrEqual(long long a, long long b) {
568  return (a <= b);
569 }
570 
571 bool compareLessOrEqual(unsigned long long a, unsigned long long b) {
572  return (a <= b);
573 }
574 
575 bool compareLessOrEqual(double a, double b) {
576  return (a <= b);
577 }
578 
579 bool compareLessOrEqual(const char* a, const char* b) {
580  return compareString(a, b) <= 0;
581 }
582 
583 bool compareLessOrEqual(const char* a, const String& b) {
584  return compareString(a, b) <= 0;
585 }
586 
587 bool compareLessOrEqual(const char* a, const __FlashStringHelper* b) {
588  return compareString(a, b) <= 0;
589 }
590 
591 bool compareLessOrEqual(const __FlashStringHelper* a, const char* b) {
592  return compareString(a, b) <= 0;
593 }
594 
595 bool compareLessOrEqual(
596  const __FlashStringHelper* a, const __FlashStringHelper* b) {
597  return compareString(a, b) <= 0;
598 }
599 
600 bool compareLessOrEqual(const __FlashStringHelper* a, const String& b) {
601  return compareString(a, b) <= 0;
602 }
603 
604 bool compareLessOrEqual(const String& a, const char* b) {
605  return compareString(a, b) <= 0;
606 }
607 
608 bool compareLessOrEqual(const String& a, const String& b) {
609  return compareString(a, b) <= 0;
610 }
611 
612 bool compareLessOrEqual(const String& a, const __FlashStringHelper* b) {
613  return compareString(a, b) <= 0;
614 }
615 
616 //---------------------------------------------------------------------------
617 // compareMoreOrEqual
618 //---------------------------------------------------------------------------
619 
620 bool compareMoreOrEqual(bool a, bool b) {
621  return (a >= b);
622 }
623 
624 bool compareMoreOrEqual(char a, char b) {
625  return (a >= b);
626 }
627 
628 bool compareMoreOrEqual(int a, int b) {
629  return (a >= b);
630 }
631 
632 bool compareMoreOrEqual(unsigned int a, unsigned int b) {
633  return (a >= b);
634 }
635 
636 bool compareMoreOrEqual(long a, long b) {
637  return (a >= b);
638 }
639 
640 bool compareMoreOrEqual(unsigned long a, unsigned long b) {
641  return (a >= b);
642 }
643 
644 bool compareMoreOrEqual(long long a, long long b) {
645  return (a >= b);
646 }
647 
648 bool compareMoreOrEqual(unsigned long long a, unsigned long long b) {
649  return (a >= b);
650 }
651 
652 bool compareMoreOrEqual(double a, double b) {
653  return (a >= b);
654 }
655 
656 bool compareMoreOrEqual(const char* a, const char* b) {
657  return compareString(a, b) >= 0;
658 }
659 
660 bool compareMoreOrEqual(const char* a, const String& b) {
661  return compareString(a, b) >= 0;
662 }
663 
664 bool compareMoreOrEqual(const char* a, const __FlashStringHelper* b) {
665  return compareString(a, b) >= 0;
666 }
667 
668 bool compareMoreOrEqual(const __FlashStringHelper* a, const char* b) {
669  return compareString(a, b) >= 0;
670 }
671 
672 bool compareMoreOrEqual(
673  const __FlashStringHelper* a, const __FlashStringHelper* b) {
674  return compareString(a, b) >= 0;
675 }
676 
677 bool compareMoreOrEqual(const __FlashStringHelper* a, const String& b) {
678  return compareString(a, b) >= 0;
679 }
680 
681 bool compareMoreOrEqual(const String& a, const char* b) {
682  return compareString(a, b) >= 0;
683 }
684 
685 bool compareMoreOrEqual(const String& a, const String& b) {
686  return compareString(a, b) >= 0;
687 }
688 
689 bool compareMoreOrEqual(const String& a, const __FlashStringHelper* b) {
690  return compareString(a, b) >= 0;
691 }
692 
693 //---------------------------------------------------------------------------
694 // compareNotEqual
695 //---------------------------------------------------------------------------
696 
697 bool compareNotEqual(bool a, bool b) {
698  return (a != b);
699 }
700 
701 bool compareNotEqual(char a, char b) {
702  return (a != b);
703 }
704 
705 bool compareNotEqual(int a, int b) {
706  return (a != b);
707 }
708 
709 bool compareNotEqual(unsigned int a, unsigned int b) {
710  return (a != b);
711 }
712 
713 bool compareNotEqual(long a, long b) {
714  return (a != b);
715 }
716 
717 bool compareNotEqual(unsigned long a, unsigned long b) {
718  return (a != b);
719 }
720 
721 bool compareNotEqual(long long a, long long b) {
722  return (a != b);
723 }
724 
725 bool compareNotEqual(unsigned long long a, unsigned long long b) {
726  return (a != b);
727 }
728 
729 bool compareNotEqual(double a, double b) {
730  return (a != b);
731 }
732 
733 bool compareNotEqual(const char* a, const char* b) {
734  return compareString(a, b) != 0;
735 }
736 
737 bool compareNotEqual(const char* a, const String& b) {
738  return compareString(a, b) != 0;
739 }
740 
741 bool compareNotEqual(const char* a, const __FlashStringHelper* b) {
742  return compareString(a, b) != 0;
743 }
744 
745 bool compareNotEqual(const __FlashStringHelper* a, const char* b) {
746  return compareString(a, b) != 0;
747 }
748 
749 bool compareNotEqual(
750  const __FlashStringHelper* a, const __FlashStringHelper* b) {
751  return compareString(a, b) != 0;
752 }
753 
754 bool compareNotEqual(const __FlashStringHelper* a, const String& b) {
755  return compareString(a, b) != 0;
756 }
757 
758 bool compareNotEqual(const String& a, const char* b) {
759  return compareString(a, b) != 0;
760 }
761 
762 bool compareNotEqual(const String& a, const String& b) {
763  return compareString(a, b) != 0;
764 }
765 
766 bool compareNotEqual(const String& a, const __FlashStringHelper* b) {
767  return compareString(a, b) != 0;
768 }
769 
770 //---------------------------------------------------------------------------
771 // compareStringCaseEqual()
772 //---------------------------------------------------------------------------
773 
774 bool compareStringCaseEqual(const char* a, const char* b) {
775  return compareStringCase(a, b) == 0;
776 }
777 
778 bool compareStringCaseEqual(const char* a, const String& b) {
779  return compareStringCase(a, b) == 0;
780 }
781 
782 bool compareStringCaseEqual(const char* a, const __FlashStringHelper* b) {
783  return compareStringCase(a, b) == 0;
784 }
785 
786 bool compareStringCaseEqual(const __FlashStringHelper* a, const char* b) {
787  return compareStringCase(a, b) == 0;
788 }
789 
790 bool compareStringCaseEqual(const __FlashStringHelper* a,
791  const __FlashStringHelper* b) {
792  return compareStringCase(a, b) == 0;
793 }
794 
795 bool compareStringCaseEqual(const __FlashStringHelper* a, const String& b) {
796  return compareStringCase(a, b) == 0;
797 }
798 
799 bool compareStringCaseEqual(const String& a, const char* b) {
800  return compareStringCase(a, b) == 0;
801 }
802 
803 bool compareStringCaseEqual(const String& a, const String& b) {
804  return compareStringCase(a, b) == 0;
805 }
806 
807 bool compareStringCaseEqual(const String& a, const __FlashStringHelper* b) {
808  return compareStringCase(a, b) == 0;
809 }
810 
811 //---------------------------------------------------------------------------
812 // compareStringCaseNotEqual()
813 //---------------------------------------------------------------------------
814 
815 bool compareStringCaseNotEqual(const char* a, const char* b) {
816  return compareStringCase(a, b) != 0;
817 }
818 
819 bool compareStringCaseNotEqual(const char* a, const String& b) {
820  return compareStringCase(a, b) != 0;
821 }
822 
823 bool compareStringCaseNotEqual(const char* a, const __FlashStringHelper* b) {
824  return compareStringCase(a, b) != 0;
825 }
826 
827 bool compareStringCaseNotEqual(const __FlashStringHelper* a, const char* b) {
828  return compareStringCase(a, b) != 0;
829 }
830 
831 bool compareStringCaseNotEqual(const __FlashStringHelper* a,
832  const __FlashStringHelper* b) {
833  return compareStringCase(a, b) != 0;
834 }
835 
836 bool compareStringCaseNotEqual(const __FlashStringHelper* a, const String& b) {
837  return compareStringCase(a, b) != 0;
838 }
839 
840 bool compareStringCaseNotEqual(const String& a, const char* b) {
841  return compareStringCase(a, b) != 0;
842 }
843 
844 bool compareStringCaseNotEqual(const String& a, const String& b) {
845  return compareStringCase(a, b) != 0;
846 }
847 
848 bool compareStringCaseNotEqual(const String& a, const __FlashStringHelper* b) {
849  return compareStringCase(a, b) != 0;
850 }
851 
852 //---------------------------------------------------------------------------
853 // compareNear()
854 //---------------------------------------------------------------------------
855 
856 bool compareNear(int a, int b, int error) {
857  return abs(a - b) <= error;
858 }
859 
860 bool compareNear(unsigned int a, unsigned int b, unsigned int error) {
861  return (unsigned int) abs((int)(a - b)) <= error;
862 }
863 
864 bool compareNear(long a, long b, long error) {
865  return abs(a - b) <= error;
866 }
867 
868 bool compareNear(unsigned long a, unsigned long b, unsigned long error) {
869  return (unsigned long) abs((long)(a - b)) <= error;
870 }
871 
872 bool compareNear(double a, double b, double error) {
873  return fabs(a - b) <= error;
874 }
875 
876 bool compareNotNear(int a, int b, int error) {
877  return !compareNear(a, b, error);
878 }
879 
880 bool compareNotNear(unsigned int a, unsigned int b, unsigned int error) {
881  return !compareNear(a, b, error);
882 }
883 
884 bool compareNotNear(long a, long b, long error) {
885  return !compareNear(a, b, error);
886 }
887 
888 bool compareNotNear(unsigned long a, unsigned long b, unsigned long error) {
889  return !compareNear(a, b, error);
890 }
891 
892 bool compareNotNear(double a, double b, double error) {
893  return !compareNear(a, b, error);
894 }
895 
896 }
897 }
This file provides overloaded compareXxx(a, b) functions which are used by the various assertXxx(a...
- -
Various macros to smooth over the differences among the various platforms with regards to their suppo...
+
1 /*
+
2 MIT License
+
3 
+
4 Copyright (c) 2018 Brian T. Park
+
5 
+
6 Permission is hereby granted, free of charge, to any person obtaining a copy
+
7 of this software and associated documentation files (the "Software"), to deal
+
8 in the Software without restriction, including without limitation the rights
+
9 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+
10 copies of the Software, and to permit persons to whom the Software is
+
11 furnished to do so, subject to the following conditions:
+
12 
+
13 The above copyright notice and this permission notice shall be included in all
+
14 copies or substantial portions of the Software.
+
15 
+
16 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+
17 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+
18 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+
19 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+
20 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+
21 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+
22 SOFTWARE.
+
23 */
+
24 
+
25 /*
+
26 Design Notes:
+
27 ============
+
28 
+
29 Template Specialization:
+
30 -----------------------
+
31 One way to implement the compareEqual() for these types is to use template
+
32 specialization. The problem with Template specialization is that templates
+
33 use strict type matching, and does not perform the normal implicit type
+
34 conversion, including const-casting. Therefore, all of the various c-style
+
35 string types, for example:
+
36 
+
37  - char*
+
38  - const char*
+
39  - char[1]
+
40  - char[N]
+
41  - const char[1]
+
42  - const char[N]
+
43 
+
44 are considered to be different types under the C++ templating system. This
+
45 causes a combinatorial explosion of template specialization which produces
+
46 code that is difficult to understand, test and maintain.
+
47 An example can be seen in the Compare.h file of the ArduinoUnit project:
+
48 https://github.com/mmurdoch/arduinounit/blob/master/src/ArduinoUnitUtility/Compare.h
+
49 
+
50 Function Overloading:
+
51 ---------------------
+
52 In this project, I used function overloading instead of template
+
53 specialization. Function overloading handles c-style strings (i.e. character
+
54 arrays) naturally, in the way most users expect. For example, (char*) is
+
55 automarically cast to (const char*), and (char[N]) is autonmatically
+
56 cast to (const char*).
+
57 
+
58 For the primitive value types (e.g. (char), (int), (unsigned char), etc.) I
+
59 attempted to use a generic templatized version, using sonmething like:
+
60 
+
61  template<typename T>
+
62  compareEqual(const T& a, const T& b) { ... }
+
63 
+
64 However, this template introduced this method:
+
65 
+
66  compareEqual(char* const& a, char* const& b);
+
67 
+
68 that seemed to take precedence over the explicitly defined overload:
+
69 
+
70  compareEqual(const char* a, const char*b);
+
71 
+
72 When the compareEqual() method is called with a (char*) or a (char[N]),
+
73 like this:
+
74 
+
75  char a[3] = {...};
+
76  char b[4] = {...};
+
77  compareEqual(a, b);
+
78 
+
79 this calls compareEqual(char* const&, const* const&), which is the wrong
+
80 version for a c-style string. The only way I could get this to work was to
+
81 avoid templates completely and manually define all the function overloads
+
82 even for primitive integer types.
+
83 
+
84 Implicit Conversions:
+
85 ---------------------
+
86 For basic primitive types, I depend on some casts to avoid having to define
+
87 some functions. I assume that signed and unsigned integers smaller or equal
+
88 to (int) will be converted to an (int) to match compareEqual(int, int).
+
89 
+
90 I provided an explicit compareEqual(char, char) overload because in C++, a
+
91 (char) type is distinct from (signed char) and (unsigned char).
+
92 
+
93 Technically, there should be a (long long) version and an (unsigned long
+
94 long) version of compareEqual(). However, it turns out that the Arduino
+
95 Print::print() method does not have an overload for these types, so it would
+
96 not do us much good to provide an assertEqual() or compareEqual() for the
+
97 (long long) and (unsigned long long) types.
+
98 
+
99 Custom Assert and Compare Functions:
+
100 ------------------------------------
+
101 Another advantage of using function overloading instead of template
+
102 specialization is that the user is able to add additional function overloads
+
103 into the 'aunit' namespace. This should allow the user to define the various
+
104 comporeXxx() and assertXxx() functions for a custom class. I have not
+
105 tested this though.
+
106 
+
107 Comparing Flash Strings:
+
108 ------------------------
+
109 Flash memory must be read using 4-byte alignment on the ESP8266. AVR doesn't
+
110 care. Teensy-ARM fakes the flash memory API but really just uses the normal
+
111 static RAM. The following code for comparing two (__FlashStringHelper*)
+
112 against each other will work for all 3 environments.
+
113 
+
114 Inlining:
+
115 --------
+
116 Even though most of these functions are one-liners, there is no advantage to
+
117 inlining them because they are almost always used through a function pointer.
+
118 */
+
119 
+
120 #include <stdint.h>
+
121 #include <string.h>
+
122 #include <math.h> // fabs()
+
123 #include <WString.h>
+
124 #include "Flash.h"
+
125 #include "Compare.h"
+
126 
+
127 namespace aunit {
+
128 namespace internal {
+
129 
+
130 //---------------------------------------------------------------------------
+
131 // compareString()
+
132 //---------------------------------------------------------------------------
+
133 
+
134 int compareString(const char* a, const char* b) {
+
135  if (a == b) { return 0; }
+
136  if (a == nullptr) { return -1; }
+
137  if (b == nullptr) { return 1; }
+
138  return strcmp(a, b);
+
139 }
+
140 
+
141 int compareString(const char* a, const String& b) {
+
142  if (a == nullptr) { return -1; }
+
143  return strcmp(a, b.c_str());
+
144 }
+
145 
+
146 int compareString(const char* a, const __FlashStringHelper* b) {
+
147  if (a == (const char*) b) { return 0; }
+
148  if (a == nullptr) { return -1; }
+
149  if (b == nullptr) { return 1; }
+
150  return strcmp_P(a, (const char*) b);
+
151 }
+
152 
+
153 int compareString(const String& a, const char* b) {
+
154  return -compareString(b, a);
+
155 }
+
156 
+
157 int compareString(const String& a, const String& b) {
+
158  return strcmp(a.c_str(), b.c_str());
+
159 }
+
160 
+
161 int compareString(const String& a, const __FlashStringHelper* b) {
+
162  if (b == nullptr) { return 1; }
+
163  return strcmp_P(a.c_str(), (const char*) b);
+
164 }
+
165 
+
166 int compareString(const __FlashStringHelper* a, const char* b) {
+
167  return -compareString(b, a);
+
168 }
+
169 
+
170 int compareString(const __FlashStringHelper* a, const String& b) {
+
171  return -compareString(b, a);
+
172 }
+
173 
+
174 // On ESP8266, pgm_read_byte() already takes care of 4-byte alignment, and
+
175 // memcpy_P(s, p, 4) makes 4 calls to pgm_read_byte() anyway, so don't bother
+
176 // optimizing for 4-byte alignment here.
+
177 int compareString(const __FlashStringHelper* a, const __FlashStringHelper* b) {
+
178  if (a == b) { return 0; }
+
179  if (a == nullptr) { return -1; }
+
180  if (b == nullptr) { return 1; }
+
181  const char* aa = reinterpret_cast<const char*>(a);
+
182  const char* bb = reinterpret_cast<const char*>(b);
+
183 
+
184  while (true) {
+
185  uint8_t ca = pgm_read_byte(aa);
+
186  uint8_t cb = pgm_read_byte(bb);
+
187  if (ca != cb) return (int) ca - (int) cb;
+
188  if (ca == '\0') return 0;
+
189  aa++;
+
190  bb++;
+
191  }
+
192 }
+
193 
+
194 //---------------------------------------------------------------------------
+
195 // compareStringCase()
+
196 //---------------------------------------------------------------------------
+
197 
+
198 int compareStringCase(const char* a, const char* b) {
+
199  if (a == b) { return 0; }
+
200  if (a == nullptr) { return -1; }
+
201  if (b == nullptr) { return 1; }
+
202  return strcasecmp(a, b);
+
203 }
+
204 
+
205 int compareStringCase(const char* a, const String& b) {
+
206  if (a == nullptr) { return -1; }
+
207  return strcasecmp(a, b.c_str());
+
208 }
+
209 
+
210 int compareStringCase(const char* a, const __FlashStringHelper* b) {
+
211  if (a == (const char*) b) { return 0; }
+
212  if (a == nullptr) { return -1; }
+
213  if (b == nullptr) { return 1; }
+
214  return strcasecmp_P(a, (const char*) b);
+
215 }
+
216 
+
217 int compareStringCase(const String& a, const char* b) {
+
218  return -compareStringCase(b, a);
+
219 }
+
220 
+
221 int compareStringCase(const String& a, const String& b) {
+
222  return strcasecmp(a.c_str(), b.c_str());
+
223 }
+
224 
+
225 int compareStringCase(const String& a, const __FlashStringHelper* b) {
+
226  if (b == nullptr) { return 1; }
+
227  return strcasecmp_P(a.c_str(), (const char*) b);
+
228 }
+
229 
+
230 int compareStringCase(const __FlashStringHelper* a, const char* b) {
+
231  return -compareStringCase(b, a);
+
232 }
+
233 
+
234 int compareStringCase(const __FlashStringHelper* a, const String& b) {
+
235  return -compareStringCase(b, a);
+
236 }
+
237 
+
238 // On ESP8266, pgm_read_byte() already takes care of 4-byte alignment, and
+
239 // memcpy_P(s, p, 4) makes 4 calls to pgm_read_byte() anyway, so don't bother
+
240 // optimizing for 4-byte alignment here.
+
241 int compareStringCase(const __FlashStringHelper* a,
+
242  const __FlashStringHelper* b) {
+
243  if (a == b) { return 0; }
+
244  if (a == nullptr) { return -1; }
+
245  if (b == nullptr) { return 1; }
+
246  const char* aa = reinterpret_cast<const char*>(a);
+
247  const char* bb = reinterpret_cast<const char*>(b);
+
248 
+
249  while (true) {
+
250  uint8_t ca = pgm_read_byte(aa);
+
251  uint8_t cb = pgm_read_byte(bb);
+
252  uint8_t la = tolower(ca);
+
253  uint8_t lb = tolower(cb);
+
254  if (la != lb) return (int) la - (int) lb;
+
255  if (ca == '\0') return 0;
+
256  aa++;
+
257  bb++;
+
258  }
+
259 }
+
260 
+
261 //---------------------------------------------------------------------------
+
262 // compareStringN
+
263 //---------------------------------------------------------------------------
+
264 
+
265 // We need compareStringN() to support only (const char*) and (const
+
266 // __FlashStringHelper*). And it turns out that compareStringN(a, b, N) ==
+
267 // -compareString(b, a, N).
+
268 
+
269 int compareStringN(const char* a, const char* b, size_t n) {
+
270  if (a == b) { return 0; }
+
271  if (a == nullptr) { return -1; }
+
272  if (b == nullptr) { return 1; }
+
273  return strncmp(a, b, n);
+
274 }
+
275 
+
276 int compareStringN(const char* a, const __FlashStringHelper* b, size_t n) {
+
277  if (a == (const char*) b) { return 0; }
+
278  if (a == nullptr) { return -1; }
+
279  if (b == nullptr) { return 1; }
+
280  return strncmp_P(a, (const char*) b, n);
+
281 }
+
282 
+
283 int compareStringN(const __FlashStringHelper* a, const char* b, size_t n) {
+
284  return -compareStringN(b, a, n);
+
285 }
+
286 
+
287 // On ESP8266, pgm_read_byte() already takes care of 4-byte alignment, and
+
288 // memcpy_P(s, p, 4) makes 4 calls to pgm_read_byte() anyway, so don't bother
+
289 // optimizing for 4-byte alignment here.
+
290 int compareStringN(const __FlashStringHelper* a, const __FlashStringHelper* b,
+
291  size_t n) {
+
292  if (a == b) { return 0; }
+
293  if (a == nullptr) { return -1; }
+
294  if (b == nullptr) { return 1; }
+
295  const char* aa = reinterpret_cast<const char*>(a);
+
296  const char* bb = reinterpret_cast<const char*>(b);
+
297 
+
298  while (n > 0) {
+
299  uint8_t ca = pgm_read_byte(aa);
+
300  uint8_t cb = pgm_read_byte(bb);
+
301  if (ca != cb) return (int) ca - (int) cb;
+
302  if (ca == '\0') return 0;
+
303  aa++;
+
304  bb++;
+
305  n--;
+
306  }
+
307  return 0;
+
308 }
+
309 
+
310 //---------------------------------------------------------------------------
+
311 // compareEqual()
+
312 //---------------------------------------------------------------------------
+
313 
+
314 bool compareEqual(bool a, bool b) {
+
315  return (a == b);
+
316 }
+
317 
+
318 bool compareEqual(char a, char b) {
+
319  return (a == b);
+
320 }
+
321 
+
322 bool compareEqual(int a, int b) {
+
323  return (a == b);
+
324 }
+
325 
+
326 bool compareEqual(unsigned int a, unsigned int b) {
+
327  return (a == b);
+
328 }
+
329 
+
330 bool compareEqual(long a, long b) {
+
331  return (a == b);
+
332 }
+
333 
+
334 bool compareEqual(unsigned long a, unsigned long b) {
+
335  return (a == b);
+
336 }
+
337 
+
338 bool compareEqual(long long a, long long b) {
+
339  return (a == b);
+
340 }
+
341 
+
342 bool compareEqual(unsigned long long a, unsigned long long b) {
+
343  return (a == b);
+
344 }
+
345 
+
346 bool compareEqual(double a, double b) {
+
347  return (a == b);
+
348 }
+
349 
+
350 bool compareEqual(const char* a, const char* b) {
+
351  return compareString(a, b) == 0;
+
352 }
+
353 
+
354 bool compareEqual(const char* a, const String& b) {
+
355  return compareString(a, b) == 0;
+
356 }
+
357 
+
358 bool compareEqual(const char* a, const __FlashStringHelper* b) {
+
359  return compareString(a, b) == 0;
+
360 }
+
361 
+
362 bool compareEqual(const __FlashStringHelper* a, const char* b) {
+
363  return compareString(a, b) == 0;
+
364 }
+
365 
+
366 bool compareEqual(const __FlashStringHelper* a, const __FlashStringHelper* b) {
+
367  return compareString(a, b) == 0;
+
368 }
+
369 
+
370 bool compareEqual(const __FlashStringHelper* a, const String& b) {
+
371  return compareString(a, b) == 0;
+
372 }
+
373 
+
374 bool compareEqual(const String& a, const char* b) {
+
375  return compareString(a, b) == 0;
+
376 }
+
377 
+
378 bool compareEqual(const String& a, const String& b) {
+
379  return compareString(a, b) == 0;
+
380 }
+
381 
+
382 bool compareEqual(const String& a, const __FlashStringHelper* b) {
+
383  return compareString(a, b) == 0;
+
384 }
+
385 
+
386 //---------------------------------------------------------------------------
+
387 // compareLess()
+
388 //---------------------------------------------------------------------------
+
389 
+
390 bool compareLess(bool a, bool b) {
+
391  return (a < b);
+
392 }
+
393 
+
394 bool compareLess(char a, char b) {
+
395  return (a < b);
+
396 }
+
397 
+
398 bool compareLess(int a, int b) {
+
399  return (a < b);
+
400 }
+
401 
+
402 bool compareLess(unsigned int a, unsigned int b) {
+
403  return (a < b);
+
404 }
+
405 
+
406 bool compareLess(long a, long b) {
+
407  return (a < b);
+
408 }
+
409 
+
410 bool compareLess(unsigned long a, unsigned long b) {
+
411  return (a < b);
+
412 }
+
413 
+
414 bool compareLess(long long a, long long b) {
+
415  return (a < b);
+
416 }
+
417 
+
418 bool compareLess(unsigned long long a, unsigned long long b) {
+
419  return (a < b);
+
420 }
+
421 
+
422 bool compareLess(double a, double b) {
+
423  return (a < b);
+
424 }
+
425 
+
426 bool compareLess(const char* a, const char* b) {
+
427  return compareString(a, b) < 0;
+
428 }
+
429 
+
430 bool compareLess(const char* a, const String& b) {
+
431  return compareString(a, b) < 0;
+
432 }
+
433 
+
434 bool compareLess(const char* a, const __FlashStringHelper* b) {
+
435  return compareString(a, b) < 0;
+
436 }
+
437 
+
438 bool compareLess(const __FlashStringHelper* a, const char* b) {
+
439  return compareString(a, b) < 0;
+
440 }
+
441 
+
442 bool compareLess(
+
443  const __FlashStringHelper* a, const __FlashStringHelper* b) {
+
444  return compareString(a, b) < 0;
+
445 }
+
446 
+
447 bool compareLess(const __FlashStringHelper* a, const String& b) {
+
448  return compareString(a, b) < 0;
+
449 }
+
450 
+
451 bool compareLess(const String& a, const char* b) {
+
452  return compareString(a, b) < 0;
+
453 }
+
454 
+
455 bool compareLess(const String& a, const String& b) {
+
456  return compareString(a, b) < 0;
+
457 }
+
458 
+
459 bool compareLess(const String& a, const __FlashStringHelper* b) {
+
460  return compareString(a, b) < 0;
+
461 }
+
462 
+
463 //---------------------------------------------------------------------------
+
464 // compareMore()
+
465 //---------------------------------------------------------------------------
+
466 
+
467 bool compareMore(bool a, bool b) {
+
468  return (a > b);
+
469 }
+
470 
+
471 bool compareMore(char a, char b) {
+
472  return (a > b);
+
473 }
+
474 
+
475 bool compareMore(int a, int b) {
+
476  return (a > b);
+
477 }
+
478 
+
479 bool compareMore(unsigned int a, unsigned int b) {
+
480  return (a > b);
+
481 }
+
482 
+
483 bool compareMore(long a, long b) {
+
484  return (a > b);
+
485 }
+
486 
+
487 bool compareMore(unsigned long a, unsigned long b) {
+
488  return (a > b);
+
489 }
+
490 
+
491 bool compareMore(long long a, long long b) {
+
492  return (a > b);
+
493 }
+
494 
+
495 bool compareMore(unsigned long long a, unsigned long long b) {
+
496  return (a > b);
+
497 }
+
498 
+
499 bool compareMore(double a, double b) {
+
500  return (a > b);
+
501 }
+
502 
+
503 bool compareMore(const char* a, const char* b) {
+
504  return compareString(a, b) > 0;
+
505 }
+
506 
+
507 bool compareMore(const char* a, const String& b) {
+
508  return compareString(a, b) > 0;
+
509 }
+
510 
+
511 bool compareMore(const char* a, const __FlashStringHelper* b) {
+
512  return compareString(a, b) > 0;
+
513 }
+
514 
+
515 bool compareMore(const __FlashStringHelper* a, const char* b) {
+
516  return compareString(a, b) > 0;
+
517 }
+
518 
+
519 bool compareMore(const __FlashStringHelper* a, const __FlashStringHelper* b) {
+
520  return compareString(a, b) > 0;
+
521 }
+
522 
+
523 bool compareMore(const __FlashStringHelper* a, const String& b) {
+
524  return compareString(a, b) > 0;
+
525 }
+
526 
+
527 bool compareMore(const String& a, const char* b) {
+
528  return compareString(a, b) > 0;
+
529 }
+
530 
+
531 bool compareMore(const String& a, const String& b) {
+
532  return compareString(a, b) > 0;
+
533 }
+
534 
+
535 bool compareMore(const String& a, const __FlashStringHelper* b) {
+
536  return compareString(a, b) > 0;
+
537 }
+
538 
+
539 //---------------------------------------------------------------------------
+
540 // compareLessOrEqual
+
541 //---------------------------------------------------------------------------
+
542 
+
543 bool compareLessOrEqual(bool a, bool b) {
+
544  return (a <= b);
+
545 }
+
546 
+
547 bool compareLessOrEqual(char a, char b) {
+
548  return (a <= b);
+
549 }
+
550 
+
551 bool compareLessOrEqual(int a, int b) {
+
552  return (a <= b);
+
553 }
+
554 
+
555 bool compareLessOrEqual(unsigned int a, unsigned int b) {
+
556  return (a <= b);
+
557 }
+
558 
+
559 bool compareLessOrEqual(long a, long b) {
+
560  return (a <= b);
+
561 }
+
562 
+
563 bool compareLessOrEqual(unsigned long a, unsigned long b) {
+
564  return (a <= b);
+
565 }
+
566 
+
567 bool compareLessOrEqual(long long a, long long b) {
+
568  return (a <= b);
+
569 }
+
570 
+
571 bool compareLessOrEqual(unsigned long long a, unsigned long long b) {
+
572  return (a <= b);
+
573 }
+
574 
+
575 bool compareLessOrEqual(double a, double b) {
+
576  return (a <= b);
+
577 }
+
578 
+
579 bool compareLessOrEqual(const char* a, const char* b) {
+
580  return compareString(a, b) <= 0;
+
581 }
+
582 
+
583 bool compareLessOrEqual(const char* a, const String& b) {
+
584  return compareString(a, b) <= 0;
+
585 }
+
586 
+
587 bool compareLessOrEqual(const char* a, const __FlashStringHelper* b) {
+
588  return compareString(a, b) <= 0;
+
589 }
+
590 
+
591 bool compareLessOrEqual(const __FlashStringHelper* a, const char* b) {
+
592  return compareString(a, b) <= 0;
+
593 }
+
594 
+
595 bool compareLessOrEqual(
+
596  const __FlashStringHelper* a, const __FlashStringHelper* b) {
+
597  return compareString(a, b) <= 0;
+
598 }
+
599 
+
600 bool compareLessOrEqual(const __FlashStringHelper* a, const String& b) {
+
601  return compareString(a, b) <= 0;
+
602 }
+
603 
+
604 bool compareLessOrEqual(const String& a, const char* b) {
+
605  return compareString(a, b) <= 0;
+
606 }
+
607 
+
608 bool compareLessOrEqual(const String& a, const String& b) {
+
609  return compareString(a, b) <= 0;
+
610 }
+
611 
+
612 bool compareLessOrEqual(const String& a, const __FlashStringHelper* b) {
+
613  return compareString(a, b) <= 0;
+
614 }
+
615 
+
616 //---------------------------------------------------------------------------
+
617 // compareMoreOrEqual
+
618 //---------------------------------------------------------------------------
+
619 
+
620 bool compareMoreOrEqual(bool a, bool b) {
+
621  return (a >= b);
+
622 }
+
623 
+
624 bool compareMoreOrEqual(char a, char b) {
+
625  return (a >= b);
+
626 }
+
627 
+
628 bool compareMoreOrEqual(int a, int b) {
+
629  return (a >= b);
+
630 }
+
631 
+
632 bool compareMoreOrEqual(unsigned int a, unsigned int b) {
+
633  return (a >= b);
+
634 }
+
635 
+
636 bool compareMoreOrEqual(long a, long b) {
+
637  return (a >= b);
+
638 }
+
639 
+
640 bool compareMoreOrEqual(unsigned long a, unsigned long b) {
+
641  return (a >= b);
+
642 }
+
643 
+
644 bool compareMoreOrEqual(long long a, long long b) {
+
645  return (a >= b);
+
646 }
+
647 
+
648 bool compareMoreOrEqual(unsigned long long a, unsigned long long b) {
+
649  return (a >= b);
+
650 }
+
651 
+
652 bool compareMoreOrEqual(double a, double b) {
+
653  return (a >= b);
+
654 }
+
655 
+
656 bool compareMoreOrEqual(const char* a, const char* b) {
+
657  return compareString(a, b) >= 0;
+
658 }
+
659 
+
660 bool compareMoreOrEqual(const char* a, const String& b) {
+
661  return compareString(a, b) >= 0;
+
662 }
+
663 
+
664 bool compareMoreOrEqual(const char* a, const __FlashStringHelper* b) {
+
665  return compareString(a, b) >= 0;
+
666 }
+
667 
+
668 bool compareMoreOrEqual(const __FlashStringHelper* a, const char* b) {
+
669  return compareString(a, b) >= 0;
+
670 }
+
671 
+
672 bool compareMoreOrEqual(
+
673  const __FlashStringHelper* a, const __FlashStringHelper* b) {
+
674  return compareString(a, b) >= 0;
+
675 }
+
676 
+
677 bool compareMoreOrEqual(const __FlashStringHelper* a, const String& b) {
+
678  return compareString(a, b) >= 0;
+
679 }
+
680 
+
681 bool compareMoreOrEqual(const String& a, const char* b) {
+
682  return compareString(a, b) >= 0;
+
683 }
+
684 
+
685 bool compareMoreOrEqual(const String& a, const String& b) {
+
686  return compareString(a, b) >= 0;
+
687 }
+
688 
+
689 bool compareMoreOrEqual(const String& a, const __FlashStringHelper* b) {
+
690  return compareString(a, b) >= 0;
+
691 }
+
692 
+
693 //---------------------------------------------------------------------------
+
694 // compareNotEqual
+
695 //---------------------------------------------------------------------------
+
696 
+
697 bool compareNotEqual(bool a, bool b) {
+
698  return (a != b);
+
699 }
+
700 
+
701 bool compareNotEqual(char a, char b) {
+
702  return (a != b);
+
703 }
+
704 
+
705 bool compareNotEqual(int a, int b) {
+
706  return (a != b);
+
707 }
+
708 
+
709 bool compareNotEqual(unsigned int a, unsigned int b) {
+
710  return (a != b);
+
711 }
+
712 
+
713 bool compareNotEqual(long a, long b) {
+
714  return (a != b);
+
715 }
+
716 
+
717 bool compareNotEqual(unsigned long a, unsigned long b) {
+
718  return (a != b);
+
719 }
+
720 
+
721 bool compareNotEqual(long long a, long long b) {
+
722  return (a != b);
+
723 }
+
724 
+
725 bool compareNotEqual(unsigned long long a, unsigned long long b) {
+
726  return (a != b);
+
727 }
+
728 
+
729 bool compareNotEqual(double a, double b) {
+
730  return (a != b);
+
731 }
+
732 
+
733 bool compareNotEqual(const char* a, const char* b) {
+
734  return compareString(a, b) != 0;
+
735 }
+
736 
+
737 bool compareNotEqual(const char* a, const String& b) {
+
738  return compareString(a, b) != 0;
+
739 }
+
740 
+
741 bool compareNotEqual(const char* a, const __FlashStringHelper* b) {
+
742  return compareString(a, b) != 0;
+
743 }
+
744 
+
745 bool compareNotEqual(const __FlashStringHelper* a, const char* b) {
+
746  return compareString(a, b) != 0;
+
747 }
+
748 
+
749 bool compareNotEqual(
+
750  const __FlashStringHelper* a, const __FlashStringHelper* b) {
+
751  return compareString(a, b) != 0;
+
752 }
+
753 
+
754 bool compareNotEqual(const __FlashStringHelper* a, const String& b) {
+
755  return compareString(a, b) != 0;
+
756 }
+
757 
+
758 bool compareNotEqual(const String& a, const char* b) {
+
759  return compareString(a, b) != 0;
+
760 }
+
761 
+
762 bool compareNotEqual(const String& a, const String& b) {
+
763  return compareString(a, b) != 0;
+
764 }
+
765 
+
766 bool compareNotEqual(const String& a, const __FlashStringHelper* b) {
+
767  return compareString(a, b) != 0;
+
768 }
+
769 
+
770 //---------------------------------------------------------------------------
+
771 // compareStringCaseEqual()
+
772 //---------------------------------------------------------------------------
+
773 
+
774 bool compareStringCaseEqual(const char* a, const char* b) {
+
775  return compareStringCase(a, b) == 0;
+
776 }
+
777 
+
778 bool compareStringCaseEqual(const char* a, const String& b) {
+
779  return compareStringCase(a, b) == 0;
+
780 }
+
781 
+
782 bool compareStringCaseEqual(const char* a, const __FlashStringHelper* b) {
+
783  return compareStringCase(a, b) == 0;
+
784 }
+
785 
+
786 bool compareStringCaseEqual(const __FlashStringHelper* a, const char* b) {
+
787  return compareStringCase(a, b) == 0;
+
788 }
+
789 
+
790 bool compareStringCaseEqual(const __FlashStringHelper* a,
+
791  const __FlashStringHelper* b) {
+
792  return compareStringCase(a, b) == 0;
+
793 }
+
794 
+
795 bool compareStringCaseEqual(const __FlashStringHelper* a, const String& b) {
+
796  return compareStringCase(a, b) == 0;
+
797 }
+
798 
+
799 bool compareStringCaseEqual(const String& a, const char* b) {
+
800  return compareStringCase(a, b) == 0;
+
801 }
+
802 
+
803 bool compareStringCaseEqual(const String& a, const String& b) {
+
804  return compareStringCase(a, b) == 0;
+
805 }
+
806 
+
807 bool compareStringCaseEqual(const String& a, const __FlashStringHelper* b) {
+
808  return compareStringCase(a, b) == 0;
+
809 }
+
810 
+
811 //---------------------------------------------------------------------------
+
812 // compareStringCaseNotEqual()
+
813 //---------------------------------------------------------------------------
+
814 
+
815 bool compareStringCaseNotEqual(const char* a, const char* b) {
+
816  return compareStringCase(a, b) != 0;
+
817 }
+
818 
+
819 bool compareStringCaseNotEqual(const char* a, const String& b) {
+
820  return compareStringCase(a, b) != 0;
+
821 }
+
822 
+
823 bool compareStringCaseNotEqual(const char* a, const __FlashStringHelper* b) {
+
824  return compareStringCase(a, b) != 0;
+
825 }
+
826 
+
827 bool compareStringCaseNotEqual(const __FlashStringHelper* a, const char* b) {
+
828  return compareStringCase(a, b) != 0;
+
829 }
+
830 
+
831 bool compareStringCaseNotEqual(const __FlashStringHelper* a,
+
832  const __FlashStringHelper* b) {
+
833  return compareStringCase(a, b) != 0;
+
834 }
+
835 
+
836 bool compareStringCaseNotEqual(const __FlashStringHelper* a, const String& b) {
+
837  return compareStringCase(a, b) != 0;
+
838 }
+
839 
+
840 bool compareStringCaseNotEqual(const String& a, const char* b) {
+
841  return compareStringCase(a, b) != 0;
+
842 }
+
843 
+
844 bool compareStringCaseNotEqual(const String& a, const String& b) {
+
845  return compareStringCase(a, b) != 0;
+
846 }
+
847 
+
848 bool compareStringCaseNotEqual(const String& a, const __FlashStringHelper* b) {
+
849  return compareStringCase(a, b) != 0;
+
850 }
+
851 
+
852 //---------------------------------------------------------------------------
+
853 // compareNear()
+
854 //---------------------------------------------------------------------------
+
855 
+
856 bool compareNear(int a, int b, int error) {
+
857  return abs(a - b) <= error;
+
858 }
+
859 
+
860 bool compareNear(unsigned int a, unsigned int b, unsigned int error) {
+
861  return (unsigned int) abs((int)(a - b)) <= error;
+
862 }
+
863 
+
864 bool compareNear(long a, long b, long error) {
+
865  return abs(a - b) <= error;
+
866 }
+
867 
+
868 bool compareNear(unsigned long a, unsigned long b, unsigned long error) {
+
869  return (unsigned long) abs((long)(a - b)) <= error;
+
870 }
+
871 
+
872 bool compareNear(double a, double b, double error) {
+
873  return fabs(a - b) <= error;
+
874 }
+
875 
+
876 bool compareNotNear(int a, int b, int error) {
+
877  return !compareNear(a, b, error);
+
878 }
+
879 
+
880 bool compareNotNear(unsigned int a, unsigned int b, unsigned int error) {
+
881  return !compareNear(a, b, error);
+
882 }
+
883 
+
884 bool compareNotNear(long a, long b, long error) {
+
885  return !compareNear(a, b, error);
+
886 }
+
887 
+
888 bool compareNotNear(unsigned long a, unsigned long b, unsigned long error) {
+
889  return !compareNear(a, b, error);
+
890 }
+
891 
+
892 bool compareNotNear(double a, double b, double error) {
+
893  return !compareNear(a, b, error);
+
894 }
+
895 
+
896 }
+
897 }
+ + diff --git a/docs/html/Compare_8h.html b/docs/html/Compare_8h.html index 1cda50e..3d3afa6 100644 --- a/docs/html/Compare_8h.html +++ b/docs/html/Compare_8h.html @@ -1,11 +1,11 @@ - + - + -AUnit: /home/brian/dev/AUnit/src/aunit/Compare.h File Reference +AUnit: /home/brian/src/AUnit/src/aunit/Compare.h File Reference @@ -22,7 +22,7 @@
AUnit -  1.3.2 +  1.3.3
Unit testing framework for Arduino platforms inspired by ArduinoUnit and Google Test.
@@ -31,18 +31,21 @@
- + +/* @license-end */
Compare.h File Reference
- -

This file provides overloaded compareXxx(a, b) functions which are used by the various assertXxx(a, b) macros. -More...

#include <stddef.h>
Include dependency graph for Compare.h:
-
+
+ + + +
This graph shows which files directly or indirectly include this file:
-
- - - - - - - - +
+ + + + + + + + +
@@ -152,17 +157,21 @@ int aunit::internal::compareStringCase (const __FlashStringHelper *a, const String &b)   -int aunit::internal::compareStringN (const char *a, const char *b, size_t n) - Compare only the first n characters of 'a' or 'b'. More...
+ +int aunit::internal::compareStringN (const char *a, const char *b, size_t n) + Compare only the first n characters of 'a' or 'b'.
  -int aunit::internal::compareStringN (const char *a, const __FlashStringHelper *b, size_t n) - Compare only the first n characters of 'a' or 'b'. More...
+ +int aunit::internal::compareStringN (const char *a, const __FlashStringHelper *b, size_t n) + Compare only the first n characters of 'a' or 'b'.
  -int aunit::internal::compareStringN (const __FlashStringHelper *a, const char *b, size_t n) - Compare only the first n characters of 'a' or 'b'. More...
+ +int aunit::internal::compareStringN (const __FlashStringHelper *a, const char *b, size_t n) + Compare only the first n characters of 'a' or 'b'.
  -int aunit::internal::compareStringN (const __FlashStringHelper *a, const __FlashStringHelper *b, size_t n) - Compare only the first n characters of 'a' or 'b'. More...
+ +int aunit::internal::compareStringN (const __FlashStringHelper *a, const __FlashStringHelper *b, size_t n) + Compare only the first n characters of 'a' or 'b'.
  bool aunit::internal::compareEqual (bool a, bool b) @@ -574,8 +583,7 @@  

Detailed Description

-

This file provides overloaded compareXxx(a, b) functions which are used by the various assertXxx(a, b) macros.

-

We wanted to allow users to use the assertXxx() macros with all combinations of the 3 types of strings available in the Arduino platform:

+

This file provides overloaded compareXxx(a, b) functions which are used by the various assertXxx(a, b) macros. We wanted to allow users to use the assertXxx() macros with all combinations of the 3 types of strings available in the Arduino platform:

  • (const char*)
  • (String&)
  • @@ -597,165 +605,12 @@

    All versions of compareString() and compareStringN() accept nullptr arguments (in constrast to strcmp() and strncmp() where their behavior for nullptr are undefined by the C standard.) If both arguments are nullptr, then the strings are considered equal (returns 0). Otherwise, the nullptr is arbitrarily defined to be less than all non-null strings, including the empty string.

    Definition in file Compare.h.

    -

Function Documentation

- -

◆ compareStringN() [1/4]

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
int aunit::internal::compareStringN (const char * a,
const char * b,
size_t n 
)
-
- -

Compare only the first n characters of 'a' or 'b'.

- -

Definition at line 269 of file Compare.cpp.

- -
-
- -

◆ compareStringN() [2/4]

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
int aunit::internal::compareStringN (const char * a,
const __FlashStringHelper * b,
size_t n 
)
-
- -

Compare only the first n characters of 'a' or 'b'.

- -

Definition at line 276 of file Compare.cpp.

- -
-
- -

◆ compareStringN() [3/4]

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
int aunit::internal::compareStringN (const __FlashStringHelper * a,
const char * b,
size_t n 
)
-
- -

Compare only the first n characters of 'a' or 'b'.

- -

Definition at line 283 of file Compare.cpp.

- -
-
- -

◆ compareStringN() [4/4]

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
int aunit::internal::compareStringN (const __FlashStringHelper * a,
const __FlashStringHelper * b,
size_t n 
)
-
- -

Compare only the first n characters of 'a' or 'b'.

- -

Definition at line 290 of file Compare.cpp.

- -
-
-
+
diff --git a/docs/html/Compare_8h__dep__incl.map b/docs/html/Compare_8h__dep__incl.map index e48ca90..85fd6e6 100644 --- a/docs/html/Compare_8h__dep__incl.map +++ b/docs/html/Compare_8h__dep__incl.map @@ -1,9 +1,10 @@ - - - - - - - - + + + + + + + + + diff --git a/docs/html/Compare_8h__dep__incl.md5 b/docs/html/Compare_8h__dep__incl.md5 index 47346b4..62bf38e 100644 --- a/docs/html/Compare_8h__dep__incl.md5 +++ b/docs/html/Compare_8h__dep__incl.md5 @@ -1 +1 @@ -f1af7db182fcd2c98b2893c406509619 \ No newline at end of file +717bec503875478bb8387511e895c26a \ No newline at end of file diff --git a/docs/html/Compare_8h__dep__incl.png b/docs/html/Compare_8h__dep__incl.png index b0a9e374056f1b515e9d6c670320ab2ef7453ce7..4169284a81baa0288c3cc7114bc662202cea57ca 100644 GIT binary patch literal 21789 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 MF6e6&VeLZx34{NE{r~^~ literal 21472 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

%fciDmMYw_hLY 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 z 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 + + + diff --git a/docs/html/Compare_8h__incl.md5 b/docs/html/Compare_8h__incl.md5 index 28a9dbd..94c7df8 100644 --- a/docs/html/Compare_8h__incl.md5 +++ b/docs/html/Compare_8h__incl.md5 @@ -1 +1 @@ -22688536d25baaafd41ed616906cb254 \ No newline at end of file +818457bae890d928f290ad166ecfd944 \ No newline at end of file diff --git a/docs/html/Compare_8h__incl.png b/docs/html/Compare_8h__incl.png index 5276a4c6116678deb4cb9131f3db12dfe0ebb2c0..fa6ff4273ecdc04984bcc3374e9098177eddd822 100644 GIT binary patch literal 4700 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 + - + -AUnit: /home/brian/dev/AUnit/src/aunit/Compare.h Source File +AUnit: /home/brian/src/AUnit/src/aunit/Compare.h Source File @@ -22,7 +22,7 @@

AUnit -  1.3.2 +  1.3.3
Unit testing framework for Arduino platforms inspired by ArduinoUnit and Google Test.
@@ -31,18 +31,21 @@ - + +/* @license-end */
Compare.h
-Go to the documentation of this file.
1 /*
2 MIT License
3 
4 Copyright (c) 2018 Brian T. Park
5 
6 Permission is hereby granted, free of charge, to any person obtaining a copy
7 of this software and associated documentation files (the "Software"), to deal
8 in the Software without restriction, including without limitation the rights
9 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 copies of the Software, and to permit persons to whom the Software is
11 furnished to do so, subject to the following conditions:
12 
13 The above copyright notice and this permission notice shall be included in all
14 copies or substantial portions of the Software.
15 
16 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22 SOFTWARE.
23 */
24 
25 // Significant portions of the design and implementation of this file came from
26 // https://github.com/mmurdoch/arduinounit/blob/master/src/ArduinoUnitUtility/Compare.h
27 
70 #ifndef AUNIT_COMPARE_H
71 #define AUNIT_COMPARE_H
72 
73 #include <stddef.h> // size_t
74 
75 class String;
76 class __FlashStringHelper;
77 
78 namespace aunit {
79 namespace internal {
80 
81 // compareString()
82 
83 int compareString(const char* a, const char* b);
84 
85 int compareString(const char* a, const String& b);
86 
87 int compareString(const char* a, const __FlashStringHelper* b);
88 
89 int compareString(const String& a, const char* b);
90 
91 int compareString(const String& a, const String& b);
92 
93 int compareString(const String& a, const __FlashStringHelper* b);
94 
95 int compareString(const __FlashStringHelper* a, const char* b);
96 
97 int compareString(const __FlashStringHelper* a, const __FlashStringHelper* b);
98 
99 int compareString(const __FlashStringHelper* a, const String& b);
100 
101 // compareStringCase() - case insensitive versions of compareString()
102 
103 int compareStringCase(const char* a, const char* b);
104 
105 int compareStringCase(const char* a, const String& b);
106 
107 int compareStringCase(const char* a, const __FlashStringHelper* b);
108 
109 int compareStringCase(const String& a, const char* b);
110 
111 int compareStringCase(const String& a, const String& b);
112 
113 int compareStringCase(const String& a, const __FlashStringHelper* b);
114 
115 int compareStringCase(const __FlashStringHelper* a, const char* b);
116 
117 int compareStringCase(const __FlashStringHelper* a,
118  const __FlashStringHelper* b);
119 
120 int compareStringCase(const __FlashStringHelper* a, const String& b);
121 
122 // compareStringN()
123 //
124 // These functions are used to implement the TestRunner::exclude() and
125 // TestRunner::include() features.
126 
128 int compareStringN(const char* a, const char* b, size_t n);
129 
131 int compareStringN(const char* a, const __FlashStringHelper* b, size_t n);
132 
134 int compareStringN(const __FlashStringHelper* a, const char* b, size_t n);
135 
137 int compareStringN(const __FlashStringHelper* a, const __FlashStringHelper* b,
138  size_t n);
139 
140 // compareEqual()
141 
142 bool compareEqual(bool a, bool b);
143 
144 bool compareEqual(char a, char b);
145 
146 bool compareEqual(int a, int b);
147 
148 bool compareEqual(unsigned int a, unsigned int b);
149 
150 bool compareEqual(long a, long b);
151 
152 bool compareEqual(unsigned long a, unsigned long b);
153 
154 bool compareEqual(long long a, long long b);
155 
156 bool compareEqual(unsigned long long a, unsigned long long b);
157 
158 bool compareEqual(double a, double b);
159 
160 bool compareEqual(const char* a, const char* b);
161 
162 bool compareEqual(const char* a, const String& b);
163 
164 bool compareEqual(const char* a, const __FlashStringHelper* b);
165 
166 bool compareEqual(const __FlashStringHelper* a, const char* b);
167 
168 bool compareEqual( const __FlashStringHelper* a, const __FlashStringHelper* b);
169 
170 bool compareEqual(const __FlashStringHelper* a, const String& b);
171 
172 bool compareEqual(const String& a, const char* b);
173 
174 bool compareEqual(const String& a, const String& b);
175 
176 bool compareEqual(const String& a, const __FlashStringHelper* b);
177 
178 // compareLess()
179 
180 bool compareLess(bool a, bool b);
181 
182 bool compareLess(char a, char b);
183 
184 bool compareLess(int a, int b);
185 
186 bool compareLess(unsigned int a, unsigned int b);
187 
188 bool compareLess(long a, long b);
189 
190 bool compareLess(unsigned long a, unsigned long b);
191 
192 bool compareLess(long long a, long long b);
193 
194 bool compareLess(unsigned long long a, unsigned long long b);
195 
196 bool compareLess(double a, double b);
197 
198 bool compareLess(const char* a, const char* b);
199 
200 bool compareLess(const char* a, const String& b);
201 
202 bool compareLess(const char* a, const __FlashStringHelper* b);
203 
204 bool compareLess(const __FlashStringHelper* a, const char* b);
205 
206 bool compareLess(const __FlashStringHelper* a, const __FlashStringHelper* b);
207 
208 bool compareLess(const __FlashStringHelper* a, const String& b);
209 
210 bool compareLess(const String& a, const char* b);
211 
212 bool compareLess(const String& a, const String& b);
213 
214 bool compareLess(const String& a, const __FlashStringHelper* b);
215 
216 // compareMore()
217 
218 bool compareMore(bool a, bool b);
219 
220 bool compareMore(char a, char b);
221 
222 bool compareMore(int a, int b);
223 
224 bool compareMore(unsigned int a, unsigned int b);
225 
226 bool compareMore(long a, long b);
227 
228 bool compareMore(unsigned long a, unsigned long b);
229 
230 bool compareMore(long long a, long long b);
231 
232 bool compareMore(unsigned long long a, unsigned long long b);
233 
234 bool compareMore(double a, double b);
235 
236 bool compareMore(const char* a, const char* b);
237 
238 bool compareMore(const char* a, const String& b);
239 
240 bool compareMore(const char* a, const __FlashStringHelper* b);
241 
242 bool compareMore(const __FlashStringHelper* a, const char* b);
243 
244 bool compareMore(const __FlashStringHelper* a, const __FlashStringHelper* b);
245 
246 bool compareMore(const __FlashStringHelper* a, const String& b);
247 
248 bool compareMore(const String& a, const char* b);
249 
250 bool compareMore(const String& a, const String& b);
251 
252 bool compareMore(const String& a, const __FlashStringHelper* b);
253 
254 // compareLessOrEqual
255 
256 bool compareLessOrEqual(bool a, bool b);
257 
258 bool compareLessOrEqual(char a, char b);
259 
260 bool compareLessOrEqual(int a, int b);
261 
262 bool compareLessOrEqual(unsigned int a, unsigned int b);
263 
264 bool compareLessOrEqual(long a, long b);
265 
266 bool compareLessOrEqual(unsigned long a, unsigned long b);
267 
268 bool compareLessOrEqual(long long a, long long b);
269 
270 bool compareLessOrEqual(unsigned long long a, unsigned long long b);
271 
272 bool compareLessOrEqual(double a, double b);
273 
274 bool compareLessOrEqual(const char* a, const char* b);
275 
276 bool compareLessOrEqual(const char* a, const String& b);
277 
278 bool compareLessOrEqual(const char* a, const __FlashStringHelper* b);
279 
280 bool compareLessOrEqual(const __FlashStringHelper* a, const char* b);
281 
282 bool compareLessOrEqual(
283  const __FlashStringHelper* a, const __FlashStringHelper* b);
284 
285 bool compareLessOrEqual(const __FlashStringHelper* a, const String& b);
286 
287 bool compareLessOrEqual(const String& a, const char* b);
288 
289 bool compareLessOrEqual(const String& a, const String& b);
290 
291 bool compareLessOrEqual(const String& a, const __FlashStringHelper* b);
292 
293 // compareMoreOrEqual
294 
295 bool compareMoreOrEqual(bool a, bool b);
296 
297 bool compareMoreOrEqual(char a, char b);
298 
299 bool compareMoreOrEqual(int a, int b);
300 
301 bool compareMoreOrEqual(unsigned int a, unsigned int b);
302 
303 bool compareMoreOrEqual(long a, long b);
304 
305 bool compareMoreOrEqual(unsigned long a, unsigned long b);
306 
307 bool compareMoreOrEqual(long long a, long long b);
308 
309 bool compareMoreOrEqual(unsigned long long a, unsigned long long b);
310 
311 bool compareMoreOrEqual(double a, double b);
312 
313 bool compareMoreOrEqual(const char* a, const char* b);
314 
315 bool compareMoreOrEqual(const char* a, const String& b);
316 
317 bool compareMoreOrEqual(const char* a, const __FlashStringHelper* b);
318 
319 bool compareMoreOrEqual(const __FlashStringHelper* a, const char* b);
320 
321 bool compareMoreOrEqual(
322  const __FlashStringHelper* a, const __FlashStringHelper* b);
323 
324 bool compareMoreOrEqual(const __FlashStringHelper* a, const String& b);
325 
326 bool compareMoreOrEqual(const String& a, const char* b);
327 
328 bool compareMoreOrEqual(const String& a, const String& b);
329 
330 bool compareMoreOrEqual(const String& a, const __FlashStringHelper* b);
331 
332 // compareNotEqual
333 
334 bool compareNotEqual(bool a, bool b);
335 
336 bool compareNotEqual(char a, char b);
337 
338 bool compareNotEqual(int a, int b);
339 
340 bool compareNotEqual(unsigned int a, unsigned int b);
341 
342 bool compareNotEqual(long a, long b);
343 
344 bool compareNotEqual(unsigned long a, unsigned long b);
345 
346 bool compareNotEqual(long long a, long long b);
347 
348 bool compareNotEqual(unsigned long long a, unsigned long long b);
349 
350 bool compareNotEqual(double a, double b);
351 
352 bool compareNotEqual(const char* a, const char* b);
353 
354 bool compareNotEqual(const char* a, const String& b);
355 
356 bool compareNotEqual(const char* a, const __FlashStringHelper* b);
357 
358 bool compareNotEqual(const __FlashStringHelper* a, const char* b);
359 
360 bool compareNotEqual(
361  const __FlashStringHelper* a, const __FlashStringHelper* b);
362 
363 bool compareNotEqual(const __FlashStringHelper* a, const String& b);
364 
365 bool compareNotEqual(const String& a, const char* b);
366 
367 bool compareNotEqual(const String& a, const String& b);
368 
369 bool compareNotEqual(const String& a, const __FlashStringHelper* b);
370 
371 // compareStringCaseEqual
372 
373 bool compareStringCaseEqual(const char* a, const char* b);
374 
375 bool compareStringCaseEqual(const char* a, const String& b);
376 
377 bool compareStringCaseEqual(const char* a, const __FlashStringHelper* b);
378 
379 bool compareStringCaseEqual(const __FlashStringHelper* a, const char* b);
380 
381 bool compareStringCaseEqual( const __FlashStringHelper* a,
382  const __FlashStringHelper* b);
383 
384 bool compareStringCaseEqual(const __FlashStringHelper* a, const String& b);
385 
386 bool compareStringCaseEqual(const String& a, const char* b);
387 
388 bool compareStringCaseEqual(const String& a, const String& b);
389 
390 bool compareStringCaseEqual(const String& a, const __FlashStringHelper* b);
391 
392 // compareStringCaseNotEqual
393 
394 bool compareStringCaseNotEqual(const char* a, const char* b);
395 
396 bool compareStringCaseNotEqual(const char* a, const String& b);
397 
398 bool compareStringCaseNotEqual(const char* a, const __FlashStringHelper* b);
399 
400 bool compareStringCaseNotEqual(const __FlashStringHelper* a, const char* b);
401 
402 bool compareStringCaseNotEqual( const __FlashStringHelper* a,
403  const __FlashStringHelper* b);
404 
405 bool compareStringCaseNotEqual(const __FlashStringHelper* a, const String& b);
406 
407 bool compareStringCaseNotEqual(const String& a, const char* b);
408 
409 bool compareStringCaseNotEqual(const String& a, const String& b);
410 
411 bool compareStringCaseNotEqual(const String& a, const __FlashStringHelper* b);
412 
413 // compareNear
414 
415 bool compareNear(int a, int b, int error);
416 
417 bool compareNear(unsigned int a, unsigned int b, unsigned int error);
418 
419 bool compareNear(long a, long b, long error);
420 
421 bool compareNear(unsigned long a, unsigned long b, unsigned long error);
422 
423 bool compareNear(double a, double b, double error);
424 
425 // compareNotNear
426 
427 bool compareNotNear(int a, int b, int error);
428 
429 bool compareNotNear(unsigned int a, unsigned int b, unsigned int error);
430 
431 bool compareNotNear(long a, long b, long error);
432 
433 bool compareNotNear(unsigned long a, unsigned long b, unsigned long error);
434 
435 bool compareNotNear(double a, double b, double error);
436 
437 }
438 }
439 
440 #endif
+Go to the documentation of this file.
1 /*
+
2 MIT License
+
3 
+
4 Copyright (c) 2018 Brian T. Park
+
5 
+
6 Permission is hereby granted, free of charge, to any person obtaining a copy
+
7 of this software and associated documentation files (the "Software"), to deal
+
8 in the Software without restriction, including without limitation the rights
+
9 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+
10 copies of the Software, and to permit persons to whom the Software is
+
11 furnished to do so, subject to the following conditions:
+
12 
+
13 The above copyright notice and this permission notice shall be included in all
+
14 copies or substantial portions of the Software.
+
15 
+
16 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+
17 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+
18 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+
19 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+
20 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+
21 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+
22 SOFTWARE.
+
23 */
+
24 
+
25 // Significant portions of the design and implementation of this file came from
+
26 // https://github.com/mmurdoch/arduinounit/blob/master/src/ArduinoUnitUtility/Compare.h
+
27 
+
70 #ifndef AUNIT_COMPARE_H
+
71 #define AUNIT_COMPARE_H
+
72 
+
73 #include <stddef.h> // size_t
+
74 
+
75 class String;
+
76 class __FlashStringHelper;
+
77 
+
78 namespace aunit {
+
79 namespace internal {
+
80 
+
81 // compareString()
+
82 
+
83 int compareString(const char* a, const char* b);
+
84 
+
85 int compareString(const char* a, const String& b);
+
86 
+
87 int compareString(const char* a, const __FlashStringHelper* b);
+
88 
+
89 int compareString(const String& a, const char* b);
+
90 
+
91 int compareString(const String& a, const String& b);
+
92 
+
93 int compareString(const String& a, const __FlashStringHelper* b);
+
94 
+
95 int compareString(const __FlashStringHelper* a, const char* b);
+
96 
+
97 int compareString(const __FlashStringHelper* a, const __FlashStringHelper* b);
+
98 
+
99 int compareString(const __FlashStringHelper* a, const String& b);
+
100 
+
101 // compareStringCase() - case insensitive versions of compareString()
+
102 
+
103 int compareStringCase(const char* a, const char* b);
+
104 
+
105 int compareStringCase(const char* a, const String& b);
+
106 
+
107 int compareStringCase(const char* a, const __FlashStringHelper* b);
+
108 
+
109 int compareStringCase(const String& a, const char* b);
+
110 
+
111 int compareStringCase(const String& a, const String& b);
+
112 
+
113 int compareStringCase(const String& a, const __FlashStringHelper* b);
+
114 
+
115 int compareStringCase(const __FlashStringHelper* a, const char* b);
+
116 
+
117 int compareStringCase(const __FlashStringHelper* a,
+
118  const __FlashStringHelper* b);
+
119 
+
120 int compareStringCase(const __FlashStringHelper* a, const String& b);
+
121 
+
122 // compareStringN()
+
123 //
+
124 // These functions are used to implement the TestRunner::exclude() and
+
125 // TestRunner::include() features.
+
126 
+
128 int compareStringN(const char* a, const char* b, size_t n);
+
129 
+
131 int compareStringN(const char* a, const __FlashStringHelper* b, size_t n);
+
132 
+
134 int compareStringN(const __FlashStringHelper* a, const char* b, size_t n);
+
135 
+
137 int compareStringN(const __FlashStringHelper* a, const __FlashStringHelper* b,
+
138  size_t n);
+
139 
+
140 // compareEqual()
+
141 
+
142 bool compareEqual(bool a, bool b);
+
143 
+
144 bool compareEqual(char a, char b);
+
145 
+
146 bool compareEqual(int a, int b);
+
147 
+
148 bool compareEqual(unsigned int a, unsigned int b);
+
149 
+
150 bool compareEqual(long a, long b);
+
151 
+
152 bool compareEqual(unsigned long a, unsigned long b);
+
153 
+
154 bool compareEqual(long long a, long long b);
+
155 
+
156 bool compareEqual(unsigned long long a, unsigned long long b);
+
157 
+
158 bool compareEqual(double a, double b);
+
159 
+
160 bool compareEqual(const char* a, const char* b);
+
161 
+
162 bool compareEqual(const char* a, const String& b);
+
163 
+
164 bool compareEqual(const char* a, const __FlashStringHelper* b);
+
165 
+
166 bool compareEqual(const __FlashStringHelper* a, const char* b);
+
167 
+
168 bool compareEqual( const __FlashStringHelper* a, const __FlashStringHelper* b);
+
169 
+
170 bool compareEqual(const __FlashStringHelper* a, const String& b);
+
171 
+
172 bool compareEqual(const String& a, const char* b);
+
173 
+
174 bool compareEqual(const String& a, const String& b);
+
175 
+
176 bool compareEqual(const String& a, const __FlashStringHelper* b);
+
177 
+
178 // compareLess()
+
179 
+
180 bool compareLess(bool a, bool b);
+
181 
+
182 bool compareLess(char a, char b);
+
183 
+
184 bool compareLess(int a, int b);
+
185 
+
186 bool compareLess(unsigned int a, unsigned int b);
+
187 
+
188 bool compareLess(long a, long b);
+
189 
+
190 bool compareLess(unsigned long a, unsigned long b);
+
191 
+
192 bool compareLess(long long a, long long b);
+
193 
+
194 bool compareLess(unsigned long long a, unsigned long long b);
+
195 
+
196 bool compareLess(double a, double b);
+
197 
+
198 bool compareLess(const char* a, const char* b);
+
199 
+
200 bool compareLess(const char* a, const String& b);
+
201 
+
202 bool compareLess(const char* a, const __FlashStringHelper* b);
+
203 
+
204 bool compareLess(const __FlashStringHelper* a, const char* b);
+
205 
+
206 bool compareLess(const __FlashStringHelper* a, const __FlashStringHelper* b);
+
207 
+
208 bool compareLess(const __FlashStringHelper* a, const String& b);
+
209 
+
210 bool compareLess(const String& a, const char* b);
+
211 
+
212 bool compareLess(const String& a, const String& b);
+
213 
+
214 bool compareLess(const String& a, const __FlashStringHelper* b);
+
215 
+
216 // compareMore()
+
217 
+
218 bool compareMore(bool a, bool b);
+
219 
+
220 bool compareMore(char a, char b);
+
221 
+
222 bool compareMore(int a, int b);
+
223 
+
224 bool compareMore(unsigned int a, unsigned int b);
+
225 
+
226 bool compareMore(long a, long b);
+
227 
+
228 bool compareMore(unsigned long a, unsigned long b);
+
229 
+
230 bool compareMore(long long a, long long b);
+
231 
+
232 bool compareMore(unsigned long long a, unsigned long long b);
+
233 
+
234 bool compareMore(double a, double b);
+
235 
+
236 bool compareMore(const char* a, const char* b);
+
237 
+
238 bool compareMore(const char* a, const String& b);
+
239 
+
240 bool compareMore(const char* a, const __FlashStringHelper* b);
+
241 
+
242 bool compareMore(const __FlashStringHelper* a, const char* b);
+
243 
+
244 bool compareMore(const __FlashStringHelper* a, const __FlashStringHelper* b);
+
245 
+
246 bool compareMore(const __FlashStringHelper* a, const String& b);
+
247 
+
248 bool compareMore(const String& a, const char* b);
+
249 
+
250 bool compareMore(const String& a, const String& b);
+
251 
+
252 bool compareMore(const String& a, const __FlashStringHelper* b);
+
253 
+
254 // compareLessOrEqual
+
255 
+
256 bool compareLessOrEqual(bool a, bool b);
+
257 
+
258 bool compareLessOrEqual(char a, char b);
+
259 
+
260 bool compareLessOrEqual(int a, int b);
+
261 
+
262 bool compareLessOrEqual(unsigned int a, unsigned int b);
+
263 
+
264 bool compareLessOrEqual(long a, long b);
+
265 
+
266 bool compareLessOrEqual(unsigned long a, unsigned long b);
+
267 
+
268 bool compareLessOrEqual(long long a, long long b);
+
269 
+
270 bool compareLessOrEqual(unsigned long long a, unsigned long long b);
+
271 
+
272 bool compareLessOrEqual(double a, double b);
+
273 
+
274 bool compareLessOrEqual(const char* a, const char* b);
+
275 
+
276 bool compareLessOrEqual(const char* a, const String& b);
+
277 
+
278 bool compareLessOrEqual(const char* a, const __FlashStringHelper* b);
+
279 
+
280 bool compareLessOrEqual(const __FlashStringHelper* a, const char* b);
+
281 
+
282 bool compareLessOrEqual(
+
283  const __FlashStringHelper* a, const __FlashStringHelper* b);
+
284 
+
285 bool compareLessOrEqual(const __FlashStringHelper* a, const String& b);
+
286 
+
287 bool compareLessOrEqual(const String& a, const char* b);
+
288 
+
289 bool compareLessOrEqual(const String& a, const String& b);
+
290 
+
291 bool compareLessOrEqual(const String& a, const __FlashStringHelper* b);
+
292 
+
293 // compareMoreOrEqual
+
294 
+
295 bool compareMoreOrEqual(bool a, bool b);
+
296 
+
297 bool compareMoreOrEqual(char a, char b);
+
298 
+
299 bool compareMoreOrEqual(int a, int b);
+
300 
+
301 bool compareMoreOrEqual(unsigned int a, unsigned int b);
+
302 
+
303 bool compareMoreOrEqual(long a, long b);
+
304 
+
305 bool compareMoreOrEqual(unsigned long a, unsigned long b);
+
306 
+
307 bool compareMoreOrEqual(long long a, long long b);
+
308 
+
309 bool compareMoreOrEqual(unsigned long long a, unsigned long long b);
+
310 
+
311 bool compareMoreOrEqual(double a, double b);
+
312 
+
313 bool compareMoreOrEqual(const char* a, const char* b);
+
314 
+
315 bool compareMoreOrEqual(const char* a, const String& b);
+
316 
+
317 bool compareMoreOrEqual(const char* a, const __FlashStringHelper* b);
+
318 
+
319 bool compareMoreOrEqual(const __FlashStringHelper* a, const char* b);
+
320 
+
321 bool compareMoreOrEqual(
+
322  const __FlashStringHelper* a, const __FlashStringHelper* b);
+
323 
+
324 bool compareMoreOrEqual(const __FlashStringHelper* a, const String& b);
+
325 
+
326 bool compareMoreOrEqual(const String& a, const char* b);
+
327 
+
328 bool compareMoreOrEqual(const String& a, const String& b);
+
329 
+
330 bool compareMoreOrEqual(const String& a, const __FlashStringHelper* b);
+
331 
+
332 // compareNotEqual
+
333 
+
334 bool compareNotEqual(bool a, bool b);
+
335 
+
336 bool compareNotEqual(char a, char b);
+
337 
+
338 bool compareNotEqual(int a, int b);
+
339 
+
340 bool compareNotEqual(unsigned int a, unsigned int b);
+
341 
+
342 bool compareNotEqual(long a, long b);
+
343 
+
344 bool compareNotEqual(unsigned long a, unsigned long b);
+
345 
+
346 bool compareNotEqual(long long a, long long b);
+
347 
+
348 bool compareNotEqual(unsigned long long a, unsigned long long b);
+
349 
+
350 bool compareNotEqual(double a, double b);
+
351 
+
352 bool compareNotEqual(const char* a, const char* b);
+
353 
+
354 bool compareNotEqual(const char* a, const String& b);
+
355 
+
356 bool compareNotEqual(const char* a, const __FlashStringHelper* b);
+
357 
+
358 bool compareNotEqual(const __FlashStringHelper* a, const char* b);
+
359 
+
360 bool compareNotEqual(
+
361  const __FlashStringHelper* a, const __FlashStringHelper* b);
+
362 
+
363 bool compareNotEqual(const __FlashStringHelper* a, const String& b);
+
364 
+
365 bool compareNotEqual(const String& a, const char* b);
+
366 
+
367 bool compareNotEqual(const String& a, const String& b);
+
368 
+
369 bool compareNotEqual(const String& a, const __FlashStringHelper* b);
+
370 
+
371 // compareStringCaseEqual
+
372 
+
373 bool compareStringCaseEqual(const char* a, const char* b);
+
374 
+
375 bool compareStringCaseEqual(const char* a, const String& b);
+
376 
+
377 bool compareStringCaseEqual(const char* a, const __FlashStringHelper* b);
+
378 
+
379 bool compareStringCaseEqual(const __FlashStringHelper* a, const char* b);
+
380 
+
381 bool compareStringCaseEqual( const __FlashStringHelper* a,
+
382  const __FlashStringHelper* b);
+
383 
+
384 bool compareStringCaseEqual(const __FlashStringHelper* a, const String& b);
+
385 
+
386 bool compareStringCaseEqual(const String& a, const char* b);
+
387 
+
388 bool compareStringCaseEqual(const String& a, const String& b);
+
389 
+
390 bool compareStringCaseEqual(const String& a, const __FlashStringHelper* b);
+
391 
+
392 // compareStringCaseNotEqual
+
393 
+
394 bool compareStringCaseNotEqual(const char* a, const char* b);
+
395 
+
396 bool compareStringCaseNotEqual(const char* a, const String& b);
+
397 
+
398 bool compareStringCaseNotEqual(const char* a, const __FlashStringHelper* b);
+
399 
+
400 bool compareStringCaseNotEqual(const __FlashStringHelper* a, const char* b);
+
401 
+
402 bool compareStringCaseNotEqual( const __FlashStringHelper* a,
+
403  const __FlashStringHelper* b);
+
404 
+
405 bool compareStringCaseNotEqual(const __FlashStringHelper* a, const String& b);
+
406 
+
407 bool compareStringCaseNotEqual(const String& a, const char* b);
+
408 
+
409 bool compareStringCaseNotEqual(const String& a, const String& b);
+
410 
+
411 bool compareStringCaseNotEqual(const String& a, const __FlashStringHelper* b);
+
412 
+
413 // compareNear
+
414 
+
415 bool compareNear(int a, int b, int error);
+
416 
+
417 bool compareNear(unsigned int a, unsigned int b, unsigned int error);
+
418 
+
419 bool compareNear(long a, long b, long error);
+
420 
+
421 bool compareNear(unsigned long a, unsigned long b, unsigned long error);
+
422 
+
423 bool compareNear(double a, double b, double error);
+
424 
+
425 // compareNotNear
+
426 
+
427 bool compareNotNear(int a, int b, int error);
+
428 
+
429 bool compareNotNear(unsigned int a, unsigned int b, unsigned int error);
+
430 
+
431 bool compareNotNear(long a, long b, long error);
+
432 
+
433 bool compareNotNear(unsigned long a, unsigned long b, unsigned long error);
+
434 
+
435 bool compareNotNear(double a, double b, double error);
+
436 
+
437 }
+
438 }
+
439 
+
440 #endif
diff --git a/docs/html/FCString_8cpp_source.html b/docs/html/FCString_8cpp_source.html index aea06d1..81cac1d 100644 --- a/docs/html/FCString_8cpp_source.html +++ b/docs/html/FCString_8cpp_source.html @@ -1,11 +1,11 @@ - + - + -AUnit: /home/brian/dev/AUnit/src/aunit/FCString.cpp Source File +AUnit: /home/brian/src/AUnit/src/aunit/FCString.cpp Source File @@ -22,7 +22,7 @@
AUnit -  1.3.2 +  1.3.3
Unit testing framework for Arduino platforms inspired by ArduinoUnit and Google Test.
@@ -31,18 +31,21 @@
- + +/* @license-end */
FCString.cpp
-
1 /*
2 MIT License
3 
4 Copyright (c) 2018 Brian T. Park
5 
6 Permission is hereby granted, free of charge, to any person obtaining a copy
7 of this software and associated documentation files (the "Software"), to deal
8 in the Software without restriction, including without limitation the rights
9 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 copies of the Software, and to permit persons to whom the Software is
11 furnished to do so, subject to the following conditions:
12 
13 The above copyright notice and this permission notice shall be included in all
14 copies or substantial portions of the Software.
15 
16 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22 SOFTWARE.
23 */
24 
25 #include <Print.h>
26 #include "Compare.h"
27 #include "FCString.h"
28 
29 namespace aunit {
30 namespace internal {
31 
32 void FCString::print(Print* printer) const {
33  if (mString.cstring == nullptr) return;
34 
35  if (mStringType == kCStringType) {
36  printer->print(getCString());
37  } else {
38  printer->print(getFString());
39  }
40 }
41 
42 void FCString::println(Print* printer) const {
43  if (mString.cstring == nullptr) {
44  printer->println();
45  return;
46  }
47 
48  if (mStringType == kCStringType) {
49  printer->println(getCString());
50  } else {
51  printer->println(getFString());
52  }
53 }
54 
55 int FCString::compareTo(const FCString& that) const {
56  if (getType() == FCString::kCStringType) {
57  if (that.getType() == FCString::kCStringType) {
58  return compareString(getCString(), that.getCString());
59  } else {
60  return compareString(getCString(), that.getFString());
61  }
62  } else {
63  if (that.getType() == FCString::kCStringType) {
64  return compareString(getFString(), that.getCString());
65  } else {
66  return compareString(getFString(), that.getFString());
67  }
68  }
69 }
70 
71 int FCString::compareToN(const char* that, size_t n) const {
72  if (getType() == FCString::kCStringType) {
73  return compareStringN(getCString(), that, n);
74  } else {
75  return compareStringN(getFString(), that, n);
76  }
77 }
78 
79 int FCString::compareToN(const __FlashStringHelper* that, size_t n) const {
80  if (getType() == FCString::kCStringType) {
81  return compareStringN(getCString(), that, n);
82  } else {
83  return compareStringN(getFString(), that, n);
84  }
85 }
86 
87 }
88 }
void println(Print *printer) const
Convenience method for printing an FCString.
Definition: FCString.cpp:42
-
int compareToN(const char *that, size_t n) const
Compare to C-string using the first n characters.
Definition: FCString.cpp:71
-
A union of (const char*) and (const __FlashStringHelper*) with a discriminator.
Definition: FCString.h:55
-
const __FlashStringHelper * getFString() const
Get the flash string pointer.
Definition: FCString.h:82
-
const char * getCString() const
Get the c-string pointer.
Definition: FCString.h:79
-
int compareTo(const FCString &that) const
Compare to another FCString.
Definition: FCString.cpp:55
-
This file provides overloaded compareXxx(a, b) functions which are used by the various assertXxx(a...
- -
uint8_t getType() const
Get the internal type of string.
Definition: FCString.h:76
-
void print(Print *printer) const
Convenience method for printing an FCString.
Definition: FCString.cpp:32
+
1 /*
+
2 MIT License
+
3 
+
4 Copyright (c) 2018 Brian T. Park
+
5 
+
6 Permission is hereby granted, free of charge, to any person obtaining a copy
+
7 of this software and associated documentation files (the "Software"), to deal
+
8 in the Software without restriction, including without limitation the rights
+
9 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+
10 copies of the Software, and to permit persons to whom the Software is
+
11 furnished to do so, subject to the following conditions:
+
12 
+
13 The above copyright notice and this permission notice shall be included in all
+
14 copies or substantial portions of the Software.
+
15 
+
16 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+
17 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+
18 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+
19 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+
20 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+
21 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+
22 SOFTWARE.
+
23 */
+
24 
+
25 #include <Print.h>
+
26 #include "Compare.h"
+
27 #include "FCString.h"
+
28 
+
29 namespace aunit {
+
30 namespace internal {
+
31 
+
32 void FCString::print(Print* printer) const {
+
33  if (mString.cstring == nullptr) return;
+
34 
+
35  if (mStringType == kCStringType) {
+
36  printer->print(getCString());
+
37  } else {
+
38  printer->print(getFString());
+
39  }
+
40 }
+
41 
+
42 void FCString::println(Print* printer) const {
+
43  if (mString.cstring == nullptr) {
+
44  printer->println();
+
45  return;
+
46  }
+
47 
+
48  if (mStringType == kCStringType) {
+
49  printer->println(getCString());
+
50  } else {
+
51  printer->println(getFString());
+
52  }
+
53 }
+
54 
+
55 int FCString::compareTo(const FCString& that) const {
+
56  if (getType() == FCString::kCStringType) {
+
57  if (that.getType() == FCString::kCStringType) {
+
58  return compareString(getCString(), that.getCString());
+
59  } else {
+
60  return compareString(getCString(), that.getFString());
+
61  }
+
62  } else {
+
63  if (that.getType() == FCString::kCStringType) {
+
64  return compareString(getFString(), that.getCString());
+
65  } else {
+
66  return compareString(getFString(), that.getFString());
+
67  }
+
68  }
+
69 }
+
70 
+
71 int FCString::compareToN(const char* that, size_t n) const {
+
72  if (getType() == FCString::kCStringType) {
+
73  return compareStringN(getCString(), that, n);
+
74  } else {
+
75  return compareStringN(getFString(), that, n);
+
76  }
+
77 }
+
78 
+
79 int FCString::compareToN(const __FlashStringHelper* that, size_t n) const {
+
80  if (getType() == FCString::kCStringType) {
+
81  return compareStringN(getCString(), that, n);
+
82  } else {
+
83  return compareStringN(getFString(), that, n);
+
84  }
+
85 }
+
86 
+
87 }
+
88 }
+ +
void println(Print *printer) const
Convenience method for printing an FCString.
Definition: FCString.cpp:42
+
int compareToN(const char *that, size_t n) const
Compare to C-string using the first n characters.
Definition: FCString.cpp:71
+
A union of (const char*) and (const __FlashStringHelper*) with a discriminator.
Definition: FCString.h:55
+
const __FlashStringHelper * getFString() const
Get the flash string pointer.
Definition: FCString.h:82
+
const char * getCString() const
Get the c-string pointer.
Definition: FCString.h:79
+
int compareTo(const FCString &that) const
Compare to another FCString.
Definition: FCString.cpp:55
+
uint8_t getType() const
Get the internal type of string.
Definition: FCString.h:76
+
void print(Print *printer) const
Convenience method for printing an FCString.
Definition: FCString.cpp:32
diff --git a/docs/html/FCString_8h_source.html b/docs/html/FCString_8h_source.html index 96b9f16..1b64615 100644 --- a/docs/html/FCString_8h_source.html +++ b/docs/html/FCString_8h_source.html @@ -1,11 +1,11 @@ - + - + -AUnit: /home/brian/dev/AUnit/src/aunit/FCString.h Source File +AUnit: /home/brian/src/AUnit/src/aunit/FCString.h Source File @@ -22,7 +22,7 @@
AUnit -  1.3.2 +  1.3.3
Unit testing framework for Arduino platforms inspired by ArduinoUnit and Google Test.
@@ -31,18 +31,21 @@
- + +/* @license-end */
FCString.h
-
1 /*
2 MIT License
3 
4 Copyright (c) 2018 Brian T. Park
5 
6 Permission is hereby granted, free of charge, to any person obtaining a copy
7 of this software and associated documentation files (the "Software"), to deal
8 in the Software without restriction, including without limitation the rights
9 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 copies of the Software, and to permit persons to whom the Software is
11 furnished to do so, subject to the following conditions:
12 
13 The above copyright notice and this permission notice shall be included in all
14 copies or substantial portions of the Software.
15 
16 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22 SOFTWARE.
23 */
24 
25 #ifndef AUNIT_FSTRING_H
26 #define AUNIT_FSTRING_H
27 
28 #include <stddef.h> // size_t
29 
30 class Print;
31 class __FlashStringHelper;
32 
33 namespace aunit {
34 namespace internal {
35 
55 class FCString {
56  public:
57  static const uint8_t kCStringType = 0;
58  static const uint8_t kFStringType = 1;
59 
61  FCString() {}
62 
64  explicit FCString(const char* s):
65  mStringType(kCStringType) {
66  mString.cstring = s;
67  }
68 
70  explicit FCString(const __FlashStringHelper* s):
71  mStringType(kFStringType) {
72  mString.fstring = s;
73  }
74 
76  uint8_t getType() const { return mStringType; }
77 
79  const char* getCString() const { return mString.cstring; }
80 
82  const __FlashStringHelper* getFString() const { return mString.fstring; }
83 
85  void print(Print* printer) const;
86 
88  void println(Print* printer) const;
89 
91  int compareTo(const FCString& that) const;
92 
98  int compareToN(const char* that, size_t n) const;
99 
105  int compareToN(const __FlashStringHelper* that, size_t n) const;
106 
107  private:
108  // NOTE: It might be possible just use a (void *) instead of a union.
109  union {
110  const char* cstring;
111  const __FlashStringHelper* fstring;
112  } mString = { nullptr };
113 
114  uint8_t mStringType = kCStringType;
115 };
116 
117 }
118 }
119 
120 #endif
void println(Print *printer) const
Convenience method for printing an FCString.
Definition: FCString.cpp:42
-
FCString(const char *s)
Construct with a c-string.
Definition: FCString.h:64
-
int compareToN(const char *that, size_t n) const
Compare to C-string using the first n characters.
Definition: FCString.cpp:71
-
A union of (const char*) and (const __FlashStringHelper*) with a discriminator.
Definition: FCString.h:55
-
const __FlashStringHelper * getFString() const
Get the flash string pointer.
Definition: FCString.h:82
-
const char * getCString() const
Get the c-string pointer.
Definition: FCString.h:79
-
int compareTo(const FCString &that) const
Compare to another FCString.
Definition: FCString.cpp:55
-
FCString(const __FlashStringHelper *s)
Construct with a flash string.
Definition: FCString.h:70
-
FCString()
Default constructor initializes to a nullptr of kCStringType.
Definition: FCString.h:61
- -
uint8_t getType() const
Get the internal type of string.
Definition: FCString.h:76
-
void print(Print *printer) const
Convenience method for printing an FCString.
Definition: FCString.cpp:32
+
1 /*
+
2 MIT License
+
3 
+
4 Copyright (c) 2018 Brian T. Park
+
5 
+
6 Permission is hereby granted, free of charge, to any person obtaining a copy
+
7 of this software and associated documentation files (the "Software"), to deal
+
8 in the Software without restriction, including without limitation the rights
+
9 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+
10 copies of the Software, and to permit persons to whom the Software is
+
11 furnished to do so, subject to the following conditions:
+
12 
+
13 The above copyright notice and this permission notice shall be included in all
+
14 copies or substantial portions of the Software.
+
15 
+
16 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+
17 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+
18 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+
19 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+
20 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+
21 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+
22 SOFTWARE.
+
23 */
+
24 
+
25 #ifndef AUNIT_FSTRING_H
+
26 #define AUNIT_FSTRING_H
+
27 
+
28 #include <stddef.h> // size_t
+
29 
+
30 class Print;
+
31 class __FlashStringHelper;
+
32 
+
33 namespace aunit {
+
34 namespace internal {
+
35 
+
55 class FCString {
+
56  public:
+
57  static const uint8_t kCStringType = 0;
+
58  static const uint8_t kFStringType = 1;
+
59 
+
61  FCString() {}
+
62 
+
64  explicit FCString(const char* s):
+
65  mStringType(kCStringType) {
+
66  mString.cstring = s;
+
67  }
+
68 
+
70  explicit FCString(const __FlashStringHelper* s):
+
71  mStringType(kFStringType) {
+
72  mString.fstring = s;
+
73  }
+
74 
+
76  uint8_t getType() const { return mStringType; }
+
77 
+
79  const char* getCString() const { return mString.cstring; }
+
80 
+
82  const __FlashStringHelper* getFString() const { return mString.fstring; }
+
83 
+
85  void print(Print* printer) const;
+
86 
+
88  void println(Print* printer) const;
+
89 
+
91  int compareTo(const FCString& that) const;
+
92 
+
98  int compareToN(const char* that, size_t n) const;
+
99 
+
105  int compareToN(const __FlashStringHelper* that, size_t n) const;
+
106 
+
107  private:
+
108  // NOTE: It might be possible just use a (void *) instead of a union.
+
109  union {
+
110  const char* cstring;
+
111  const __FlashStringHelper* fstring;
+
112  } mString = { nullptr };
+
113 
+
114  uint8_t mStringType = kCStringType;
+
115 };
+
116 
+
117 }
+
118 }
+
119 
+
120 #endif
+
void println(Print *printer) const
Convenience method for printing an FCString.
Definition: FCString.cpp:42
+
FCString(const char *s)
Construct with a c-string.
Definition: FCString.h:64
+
int compareToN(const char *that, size_t n) const
Compare to C-string using the first n characters.
Definition: FCString.cpp:71
+
A union of (const char*) and (const __FlashStringHelper*) with a discriminator.
Definition: FCString.h:55
+
const __FlashStringHelper * getFString() const
Get the flash string pointer.
Definition: FCString.h:82
+
const char * getCString() const
Get the c-string pointer.
Definition: FCString.h:79
+
int compareTo(const FCString &that) const
Compare to another FCString.
Definition: FCString.cpp:55
+
FCString(const __FlashStringHelper *s)
Construct with a flash string.
Definition: FCString.h:70
+
FCString()
Default constructor initializes to a nullptr of kCStringType.
Definition: FCString.h:61
+
uint8_t getType() const
Get the internal type of string.
Definition: FCString.h:76
+
void print(Print *printer) const
Convenience method for printing an FCString.
Definition: FCString.cpp:32
diff --git a/docs/html/FakePrint_8h_source.html b/docs/html/FakePrint_8h_source.html index 5740eec..428eafe 100644 --- a/docs/html/FakePrint_8h_source.html +++ b/docs/html/FakePrint_8h_source.html @@ -1,11 +1,11 @@ - + - + -AUnit: /home/brian/dev/AUnit/src/aunit/fake/FakePrint.h Source File +AUnit: /home/brian/src/AUnit/src/aunit/fake/FakePrint.h Source File @@ -22,7 +22,7 @@
AUnit -  1.3.2 +  1.3.3
Unit testing framework for Arduino platforms inspired by ArduinoUnit and Google Test.
@@ -31,18 +31,21 @@
- + +/* @license-end */
FakePrint.h
-
1 /*
2 MIT License
3 
4 Copyright (c) 2018 Brian T. Park
5 
6 Permission is hereby granted, free of charge, to any person obtaining a copy
7 of this software and associated documentation files (the "Software"), to deal
8 in the Software without restriction, including without limitation the rights
9 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 copies of the Software, and to permit persons to whom the Software is
11 furnished to do so, subject to the following conditions:
12 
13 The above copyright notice and this permission notice shall be included in all
14 copies or substantial portions of the Software.
15 
16 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22 SOFTWARE.
23 */
24 
25 #ifndef AUNIT_FAKE_PRINT_H
26 #define AUNIT_FAKE_PRINT_H
27 
28 #include <stddef.h> // size_t
29 #include <Print.h>
30 
31 namespace aunit {
32 namespace fake {
33 
50 class FakePrint: public Print {
51  public:
58  static const uint8_t kBufSize = 8 * sizeof(long long) + 2 + 1;
59 
60  size_t write(uint8_t c) override {
61  if (mIndex < kBufSize - 1) {
62  mBuf[mIndex] = c;
63  mIndex++;
64  return 1;
65  } else {
66  return 0;
67  }
68  }
69 
70  size_t write(const uint8_t *buffer, size_t size) override {
71  if (buffer == nullptr) return 0;
72 
73  while (size > 0 && mIndex < kBufSize - 1) {
74  write(*buffer++);
75  size--;
76  }
77  return size;
78  }
79 
80 // ESP32 version of Print class does not define a virtual flush() method.
81 #ifdef ESP32
82  void flush() {
83  mIndex = 0;
84  }
85 #else
86  void flush() override {
87  mIndex = 0;
88  }
89 #endif
90 
96  const char* getBuffer() const {
97  mBuf[mIndex] = '\0';
98  return mBuf;
99  }
100 
101  private:
102  mutable char mBuf[kBufSize];
103  uint8_t mIndex = 0;
104 };
105 
106 }
107 }
108 
109 #endif
const char * getBuffer() const
Return the NUL terminated string buffer.
Definition: FakePrint.h:96
-
static const uint8_t kBufSize
Size of the internal buffer.
Definition: FakePrint.h:58
-
An implementation of Print that writes to an in-memory buffer.
Definition: FakePrint.h:50
- +
1 /*
+
2 MIT License
+
3 
+
4 Copyright (c) 2018 Brian T. Park
+
5 
+
6 Permission is hereby granted, free of charge, to any person obtaining a copy
+
7 of this software and associated documentation files (the "Software"), to deal
+
8 in the Software without restriction, including without limitation the rights
+
9 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+
10 copies of the Software, and to permit persons to whom the Software is
+
11 furnished to do so, subject to the following conditions:
+
12 
+
13 The above copyright notice and this permission notice shall be included in all
+
14 copies or substantial portions of the Software.
+
15 
+
16 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+
17 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+
18 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+
19 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+
20 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+
21 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+
22 SOFTWARE.
+
23 */
+
24 
+
25 #ifndef AUNIT_FAKE_PRINT_H
+
26 #define AUNIT_FAKE_PRINT_H
+
27 
+
28 #include <stddef.h> // size_t
+
29 #include <Print.h>
+
30 
+
31 namespace aunit {
+
32 namespace fake {
+
33 
+
50 class FakePrint: public Print {
+
51  public:
+
58  static const uint8_t kBufSize = 8 * sizeof(long long) + 2 + 1;
+
59 
+
60  size_t write(uint8_t c) override {
+
61  if (mIndex < kBufSize - 1) {
+
62  mBuf[mIndex] = c;
+
63  mIndex++;
+
64  return 1;
+
65  } else {
+
66  return 0;
+
67  }
+
68  }
+
69 
+
70  size_t write(const uint8_t *buffer, size_t size) override {
+
71  if (buffer == nullptr) return 0;
+
72 
+
73  while (size > 0 && mIndex < kBufSize - 1) {
+
74  write(*buffer++);
+
75  size--;
+
76  }
+
77  return size;
+
78  }
+
79 
+
80 // ESP32 version of Print class does not define a virtual flush() method.
+
81 #ifdef ESP32
+
82  void flush() {
+
83  mIndex = 0;
+
84  }
+
85 #else
+
86  void flush() override {
+
87  mIndex = 0;
+
88  }
+
89 #endif
+
90 
+
96  const char* getBuffer() const {
+
97  mBuf[mIndex] = '\0';
+
98  return mBuf;
+
99  }
+
100 
+
101  private:
+
102  mutable char mBuf[kBufSize];
+
103  uint8_t mIndex = 0;
+
104 };
+
105 
+
106 }
+
107 }
+
108 
+
109 #endif
+
static const uint8_t kBufSize
Size of the internal buffer.
Definition: FakePrint.h:58
+
const char * getBuffer() const
Return the NUL terminated string buffer.
Definition: FakePrint.h:96
+
An implementation of Print that writes to an in-memory buffer.
Definition: FakePrint.h:50
diff --git a/docs/html/Flash_8h.html b/docs/html/Flash_8h.html index 95b35c1..b8d45fc 100644 --- a/docs/html/Flash_8h.html +++ b/docs/html/Flash_8h.html @@ -1,11 +1,11 @@ - + - + -AUnit: /home/brian/dev/AUnit/src/aunit/Flash.h File Reference +AUnit: /home/brian/src/AUnit/src/aunit/Flash.h File Reference @@ -22,7 +22,7 @@
AUnit -  1.3.2 +  1.3.3
Unit testing framework for Arduino platforms inspired by ArduinoUnit and Google Test.
@@ -31,18 +31,21 @@
- + +/* @license-end */
Flash.h File Reference
- -

Various macros to smooth over the differences among the various platforms with regards to their support for flash strings and the various macros used to create and access them. -More...

This graph shows which files directly or indirectly include this file:
-
- - - - - - - - - - - - - - - - +
+ + + + + + + + + + + + + + + + +
@@ -101,14 +102,14 @@

Macros

#define AUNIT_FPSTR(pstr_pointer)   (reinterpret_cast<const __FlashStringHelper *>(pstr_pointer)) - The FPSTR() macro is defined on ESP8266, not defined on Teensy and AVR, and broken on ESP32. More...
+ The FPSTR() macro is defined on ESP8266, not defined on Teensy and AVR, and broken on ESP32. More...
 

Detailed Description

-

Various macros to smooth over the differences among the various platforms with regards to their support for flash strings and the various macros used to create and access them.

+

Various macros to smooth over the differences among the various platforms with regards to their support for flash strings and the various macros used to create and access them.

On AVR, flash strings are fully supported through the F() and PSTR() macros, and the (const __FlashStringHelper*) pointer. However, the useful FPSTR() macro is not defined.

On Teensy-ARM, flash strings are not supported, but F(), PSTR() and (const __FlashStringHelper*) are defined. The useful FPSTR() macro is not defined.

-

On the ESP8266 platform, flash strings are implemented, and the F(), PSTR() and __FlashStringHelper are defined, but the implementation is brittle and can fail with obscure errors messages. For a single compilation unit, a flash string cannot be defined in both an inline and non-inline contexts (see https://github.com/esp8266/Arduino/issues/3369). In some cases (e.g. TestMacros.h), we were able to move the F() macro into a non-inline context. But in other cases (e.g. AssertVerboseMacros.h), the end-user can choose to use an assertXxx() macro inside an inline function, which breaks the compiler. Therefore, I chose to use normal (const char*) strings instead of flash strings in those assertXxx() macros. In addition, the ESP8266 platform defines a useful FPSTR() macro which converts a (const char*) returned by PSTR() into a (const __FlashStringHelper*) pointer.

+

On the ESP8266 platform, flash strings are implemented, and the F(), PSTR() and __FlashStringHelper are defined, but the implementation is brittle and can fail with obscure errors messages. For a single compilation unit, a flash string cannot be defined in both an inline and non-inline contexts (see https://github.com/esp8266/Arduino/issues/3369). In some cases (e.g. TestMacros.h), we were able to move the F() macro into a non-inline context. But in other cases (e.g. AssertVerboseMacros.h), the end-user can choose to use an assertXxx() macro inside an inline function, which breaks the compiler. Therefore, I chose to use normal (const char*) strings instead of flash strings in those assertXxx() macros. In addition, the ESP8266 platform defines a useful FPSTR() macro which converts a (const char*) returned by PSTR() into a (const __FlashStringHelper*) pointer.

On the ESP32, flash strings are not implemented, but the various F(), PSTR() and __FlashStringHelper symbols are defined for compatibility, similar to Teensy-ARM. However, the implementation of FPSTR() is incorrect, see https://github.com/espressif/arduino-esp32/issues/1371. That macro should return a (const __FlashStringHelper*) pointer, but is defined to return a (const char*) pointer.

To make AUnit work under all of the above platforms, I chose to support flash strings only on the AVR. I create custom versions of the F() and FPSTR() macros below to accomplish this.

@@ -142,7 +143,7 @@

diff --git a/docs/html/Flash_8h__dep__incl.map b/docs/html/Flash_8h__dep__incl.map index 00c5213..9023783 100644 --- a/docs/html/Flash_8h__dep__incl.map +++ b/docs/html/Flash_8h__dep__incl.map @@ -1,17 +1,18 @@ - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + diff --git a/docs/html/Flash_8h__dep__incl.md5 b/docs/html/Flash_8h__dep__incl.md5 index 4335448..550a9d1 100644 --- a/docs/html/Flash_8h__dep__incl.md5 +++ b/docs/html/Flash_8h__dep__incl.md5 @@ -1 +1 @@ -d0bfb43f21b625e1b7a6024fd37cd2d8 \ No newline at end of file +9bd510e2a5f82cd5b46274ea9f9d5917 \ No newline at end of file diff --git a/docs/html/Flash_8h__dep__incl.png b/docs/html/Flash_8h__dep__incl.png index f97daa90e67cd49e5bb6a1f751a47411eebdb9b2..9033cca18f591342523619c86ef2b78b9a8068e3 100644 GIT binary patch literal 125222 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 literal 124868 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

!wD54E(QLcxPu4U(Ar&AW*SD>y&T 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 j5=rs!B%ujI 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 J>87->{{oWjA!h&p diff --git a/docs/html/Flash_8h_source.html b/docs/html/Flash_8h_source.html index 05151f8..027f57e 100644 --- a/docs/html/Flash_8h_source.html +++ b/docs/html/Flash_8h_source.html @@ -1,11 +1,11 @@ - + - + -AUnit: /home/brian/dev/AUnit/src/aunit/Flash.h Source File +AUnit: /home/brian/src/AUnit/src/aunit/Flash.h Source File @@ -22,7 +22,7 @@

Unit testing framework for Arduino platforms inspired by ArduinoUnit and Google Test.
@@ -31,18 +31,21 @@

- + +/* @license-end */
Flash.h
-Go to the documentation of this file.
1 /*
2 MIT License
3 
4 Copyright (c) 2018 Brian T. Park
5 
6 Permission is hereby granted, free of charge, to any person obtaining a copy
7 of this software and associated documentation files (the "Software"), to deal
8 in the Software without restriction, including without limitation the rights
9 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 copies of the Software, and to permit persons to whom the Software is
11 furnished to do so, subject to the following conditions:
12 
13 The above copyright notice and this permission notice shall be included in all
14 copies or substantial portions of the Software.
15 
16 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22 SOFTWARE.
23 */
24 
64 #ifndef AUNIT_FLASH_H
65 #define AUNIT_FLASH_H
66 
67 class __FlashStringHelper;
68 
75 #define AUNIT_FPSTR(pstr_pointer) \
76  (reinterpret_cast<const __FlashStringHelper *>(pstr_pointer))
77 
78 #if defined(__AVR__) || defined(__arm__)
79  #include <avr/pgmspace.h>
80 #elif defined(ESP8266) || defined(ESP32)
81  #include <pgmspace.h>
82 #elif defined(__linux__) or defined(__APPLE__)
83  #include <pgmspace.h>
84 #else
85  #error Unsupported platform
86 #endif
87 
88 #if defined(__AVR__)
89  #define AUNIT_F(x) F(x)
90 #elif defined(ESP8266) || defined(ESP32) || defined(__arm__)
91  #define AUNIT_F(x) AUNIT_FPSTR(x)
92 #elif defined(__linux__) or defined(__APPLE__)
93  #define AUNIT_F(x) F(x)
94 #else
95  #error Unsupported platform
96 #endif
97 
98 // Define SERIAL_PORT_MONITOR consistently. We should also rename this file to
99 // something like "compat.h".
100 #if defined(ARDUINO_SAMD_ZERO)
101  // If have a real Arduino Zero and using the "Arduino/Genuino Zero (Native
102  // USB Port)" configuration on the Arduino IDE, you may need to uncomment
103  // the following to clobber SERIAL_PORT_MONITOR to point to the correct
104  // SerialUSB.
105  //
106  // On the other hand, if you are using a SparkFun breakout board, or one of
107  // the "SAMD21 M0 Mini" clones, you should be using the SparkFun SAMD Boards,
108  // and selecting the "SparkFun SAMD21 Dev Breakout" or the "SparkFun SAMD21
109  // Mini Breakout" settings, which will set the SERIAL_PORT_MONITOR macro
110  // correctly to SerialUSB.
111  #if 0
112  #undef SERIAL_PORT_MONITOR
113  #define SERIAL_PORT_MONITOR SerialUSB
114  #endif
115 #elif defined(ESP32)
116  #if ! defined(SERIAL_PORT_MONITOR)
117  #define SERIAL_PORT_MONITOR Serial
118  #endif
119 #elif defined(__linux__) or defined(__APPLE__)
120  #define SERIAL_PORT_MONITOR Serial
121 #endif
122 
123 #endif
+Go to the documentation of this file.
1 /*
+
2 MIT License
+
3 
+
4 Copyright (c) 2018 Brian T. Park
+
5 
+
6 Permission is hereby granted, free of charge, to any person obtaining a copy
+
7 of this software and associated documentation files (the "Software"), to deal
+
8 in the Software without restriction, including without limitation the rights
+
9 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+
10 copies of the Software, and to permit persons to whom the Software is
+
11 furnished to do so, subject to the following conditions:
+
12 
+
13 The above copyright notice and this permission notice shall be included in all
+
14 copies or substantial portions of the Software.
+
15 
+
16 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+
17 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+
18 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+
19 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+
20 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+
21 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+
22 SOFTWARE.
+
23 */
+
24 
+
64 #ifndef AUNIT_FLASH_H
+
65 #define AUNIT_FLASH_H
+
66 
+
67 class __FlashStringHelper;
+
68 
+
75 #define AUNIT_FPSTR(pstr_pointer) \
+
76  (reinterpret_cast<const __FlashStringHelper *>(pstr_pointer))
+
77 
+
78 #if defined(__AVR__) || defined(__arm__)
+
79  #include <avr/pgmspace.h>
+
80 #elif defined(ESP8266) || defined(ESP32)
+
81  #include <pgmspace.h>
+
82 #elif defined(__linux__) or defined(__APPLE__)
+
83  #include <pgmspace.h>
+
84 #else
+
85  #error Unsupported platform
+
86 #endif
+
87 
+
88 #if defined(__AVR__)
+
89  #define AUNIT_F(x) F(x)
+
90 #elif defined(ESP8266) || defined(ESP32) || defined(__arm__)
+
91  #define AUNIT_F(x) AUNIT_FPSTR(x)
+
92 #elif defined(__linux__) or defined(__APPLE__)
+
93  #define AUNIT_F(x) F(x)
+
94 #else
+
95  #error Unsupported platform
+
96 #endif
+
97 
+
98 // Define SERIAL_PORT_MONITOR consistently. We should also rename this file to
+
99 // something like "compat.h".
+
100 #if defined(ARDUINO_SAMD_ZERO)
+
101  // If have a real Arduino Zero and using the "Arduino/Genuino Zero (Native
+
102  // USB Port)" configuration on the Arduino IDE, you may need to uncomment
+
103  // the following to clobber SERIAL_PORT_MONITOR to point to the correct
+
104  // SerialUSB.
+
105  //
+
106  // On the other hand, if you are using a SparkFun breakout board, or one of
+
107  // the "SAMD21 M0 Mini" clones, you should be using the SparkFun SAMD Boards,
+
108  // and selecting the "SparkFun SAMD21 Dev Breakout" or the "SparkFun SAMD21
+
109  // Mini Breakout" settings, which will set the SERIAL_PORT_MONITOR macro
+
110  // correctly to SerialUSB.
+
111  #if 0
+
112  #undef SERIAL_PORT_MONITOR
+
113  #define SERIAL_PORT_MONITOR SerialUSB
+
114  #endif
+
115 #elif defined(ESP32)
+
116  #if ! defined(SERIAL_PORT_MONITOR)
+
117  #define SERIAL_PORT_MONITOR Serial
+
118  #endif
+
119 #elif defined(__linux__) or defined(__APPLE__)
+
120  #define SERIAL_PORT_MONITOR Serial
+
121 #endif
+
122 
+
123 #endif
+
diff --git a/docs/html/MetaAssertMacros_8h.html b/docs/html/MetaAssertMacros_8h.html index 5ec76ff..39b169a 100644 --- a/docs/html/MetaAssertMacros_8h.html +++ b/docs/html/MetaAssertMacros_8h.html @@ -1,11 +1,11 @@ - + - + -AUnit: /home/brian/dev/AUnit/src/aunit/MetaAssertMacros.h File Reference +AUnit: /home/brian/src/AUnit/src/aunit/MetaAssertMacros.h File Reference @@ -22,7 +22,7 @@
AUnit -  1.3.2 +  1.3.3
Unit testing framework for Arduino platforms inspired by ArduinoUnit and Google Test.
@@ -31,18 +31,21 @@ - + +/* @license-end */
MetaAssertMacros.h File Reference
- -

Various assertTestXxx(), checkTestXxx(), assertTestXxxF() and checkTestXxxF() macros are defined in this header. -More...

#include "Flash.h"
Include dependency graph for MetaAssertMacros.h:
-
- - +
+ + +
This graph shows which files directly or indirectly include this file:
-
- - - +
+ + + +
@@ -97,7 +99,7 @@

Macros

#define checkTestDone(...) - Return true if test 'name' is done. More...
+ Return true if test 'name' is done. More...
  #define get_checkTestDone(_1, _2, NAME, ...)   NAME @@ -109,7 +111,7 @@ #define checkTestDone2(testSuite, name)   (testSuite##_##name##_instance.isDone())   #define checkTestNotDone(...) - Return true if test 'name' is not done. More...
+ Return true if test 'name' is not done. More...
  #define get_checkTestNotDone(_1, _2, NAME, ...)   NAME @@ -121,7 +123,7 @@ #define checkTestNotDone2(testSuite, name)   (testSuite##_##name##_instance.isNotDone())   #define checkTestPass(...) - Return true if test 'name' has passed. More...
+ Return true if test 'name' has passed. More...
  #define get_checkTestPass(_1, _2, NAME, ...)   NAME @@ -133,7 +135,7 @@ #define checkTestPass2(testSuite, name)   (testSuite##_##name##_instance.isPassed())   #define checkTestNotPass(...) - Return true if test 'name' has not passed. More...
+ Return true if test 'name' has not passed. More...
  #define get_checkTestNotPass(_1, _2, NAME, ...)   NAME @@ -145,7 +147,7 @@ #define checkTestNotPass2(testSuite, name)   (testSuite##_##name##_instance.isNotPassed())   #define checkTestFail(...) - Return true if test 'name' has failed. More...
+ Return true if test 'name' has failed. More...
  #define get_checkTestFail(_1, _2, NAME, ...)   NAME @@ -157,7 +159,7 @@ #define checkTestFail2(testSuite, name)   (testSuite##_##name##_instance.isFailed())   #define checkTestNotFail(...) - Return true if test 'name' has not failed. More...
+ Return true if test 'name' has not failed. More...
  #define get_checkTestNotFail(_1, _2, NAME, ...)   NAME @@ -169,7 +171,7 @@ #define checkTestNotFail2(testSuite, name)   (testSuite##_##name##_instance.isNotFailed())   #define checkTestSkip(...) - Return true if test 'name' has been skipped. More...
+ Return true if test 'name' has been skipped. More...
  #define get_checkTestSkip(_1, _2, NAME, ...)   NAME @@ -181,7 +183,7 @@ #define checkTestSkip2(testSuite, name)   (testSuite##_##name##_instance.isSkipped())   #define checkTestNotSkip(...) - Return true if test 'name' has not been skipped. More...
+ Return true if test 'name' has not been skipped. More...
  #define get_checkTestNotSkip(_1, _2, NAME, ...)   NAME @@ -193,7 +195,7 @@ #define checkTestNotSkip2(testSuite, name)   (testSuite##_##name##_instance.isNotSkipped())   #define checkTestExpire(...) - Return true if test 'name' has timed out. More...
+ Return true if test 'name' has timed out. More...
  #define get_checkTestExpire(_1, _2, NAME, ...)   NAME @@ -205,7 +207,7 @@ #define checkTestExpire2(testSuite, name)   (testSuite##_##name##_instance.isExpired())   #define checkTestNotExpire(...) - Return true if test 'name' has not timed out. More...
+ Return true if test 'name' has not timed out. More...
  #define get_checkTestNotExpire(_1, _2, NAME, ...)   NAME @@ -217,7 +219,7 @@ #define checkTestNotExpire2(testSuite, name)   (testSuite##_##name##_instance.isNotExpired())   #define assertTestDone(...) - Assert that test 'name' is done. More...
+ Assert that test 'name' is done. More...
  #define get_assertTestDone(_1, _2, NAME, ...)   NAME @@ -229,7 +231,7 @@ #define assertTestDone2(testSuite, name)   assertTestStatusInternal2(testSuite, name, isDone, kMessageDone)   #define assertTestNotDone(...) - Assert that test 'name' is not done. More...
+ Assert that test 'name' is not done. More...
  #define get_assertTestNotDone(_1, _2, NAME, ...)   NAME @@ -241,7 +243,7 @@ #define assertTestNotDone2(testSuite, name)   assertTestStatusInternal2(testSuite, name, isNotDone, kMessageNotDone)   #define assertTestPass(...) - Assert that test 'name' has passed. More...
+ Assert that test 'name' has passed. More...
  #define get_assertTestPass(_1, _2, NAME, ...)   NAME @@ -253,7 +255,7 @@ #define assertTestPass2(testSuite, name)   assertTestStatusInternal2(testSuite, name, isPassed, kMessagePassed)   #define assertTestNotPass(...) - Assert that test 'name' has not passed. More...
+ Assert that test 'name' has not passed. More...
  #define get_assertTestNotPass(_1, _2, NAME, ...)   NAME @@ -265,7 +267,7 @@ #define assertTestNotPass2(testSuite, name)   assertTestStatusInternal2(testSuite, name, isNotPassed, kMessageNotPassed)   #define assertTestFail(...) - Assert that test 'name' has failed. More...
+ Assert that test 'name' has failed. More...
  #define get_assertTestFail(_1, _2, NAME, ...)   NAME @@ -277,7 +279,7 @@ #define assertTestFail2(testSuite, name)   assertTestStatusInternal2(testSuite, name, isFailed, kMessageFailed)   #define assertTestNotFail(...) - Assert that test 'name' has not failed. More...
+ Assert that test 'name' has not failed. More...
  #define get_assertTestNotFail(_1, _2, NAME, ...)   NAME @@ -289,7 +291,7 @@ #define assertTestNotFail2(testSuite, name)   assertTestStatusInternal2(testSuite, name, isNotFailed, kMessageNotFailed)   #define assertTestSkip(...) - Assert that test 'name' has been skipped. More...
+ Assert that test 'name' has been skipped. More...
  #define get_assertTestSkip(_1, _2, NAME, ...)   NAME @@ -301,7 +303,7 @@ #define assertTestSkip2(testSuite, name)   assertTestStatusInternal2(testSuite, name, isSkipped, kMessageSkipped)   #define assertTestNotSkip(...) - Assert that test 'name' has not been skipped. More...
+ Assert that test 'name' has not been skipped. More...
  #define get_assertTestNotSkip(_1, _2, NAME, ...)   NAME @@ -313,7 +315,7 @@ #define assertTestNotSkip2(testSuite, name)   assertTestStatusInternal2(testSuite, name, isNotSkipped, kMessageNotSkipped)   #define assertTestExpire(...) - Assert that test 'name' has timed out. More...
+ Assert that test 'name' has timed out. More...
  #define get_assertTestExpire(_1, _2, NAME, ...)   NAME @@ -325,7 +327,7 @@ #define assertTestExpire2(testSuite, name)   assertTestStatusInternal2(testSuite, name, isExpired, kMessageExpired)   #define assertTestNotExpire(...) - Assert that test 'name' has not timed out. More...
+ Assert that test 'name' has not timed out. More...
  #define get_assertTestNotExpire(_1, _2, NAME, ...)   NAME @@ -337,84 +339,102 @@ #define assertTestNotExpire2(testSuite, name)   assertTestStatusInternal2(testSuite, name, isNotExpired, kMessageNotExpired)   #define assertTestStatusInternal1(name, method, message) - Internal helper macro, shouldn't be called directly by users. More...
+ Internal helper macro, shouldn't be called directly by users. More...
  #define assertTestStatusInternal2(testSuite, name, method, message)   -#define checkTestDoneF(testClass, name)   (testClass##_##name##_instance.isDone()) - Return true if test 'name' is done. More...
+ +#define checkTestDoneF(testClass, name)   (testClass##_##name##_instance.isDone()) + Return true if test 'name' is done.
  -#define checkTestNotDoneF(testClass, name)   (testClass##_##name##_instance.isNotDone()) - Return true if test 'name' is not done. More...
+ +#define checkTestNotDoneF(testClass, name)   (testClass##_##name##_instance.isNotDone()) + Return true if test 'name' is not done.
  -#define checkTestPassF(testClass, name)   (testClass##_##name##_instance.isPassed()) - Return true if test 'name' has passed. More...
+ +#define checkTestPassF(testClass, name)   (testClass##_##name##_instance.isPassed()) + Return true if test 'name' has passed.
  -#define checkTestNotPassF(testClass, name)   (testClass##_##name##_instance.isNotPassed()) - Return true if test 'name' has not passed. More...
+ +#define checkTestNotPassF(testClass, name)   (testClass##_##name##_instance.isNotPassed()) + Return true if test 'name' has not passed.
  -#define checkTestFailF(testClass, name)   (testClass##_##name##_instance.isFailed()) - Return true if test 'name' has failed. More...
+ +#define checkTestFailF(testClass, name)   (testClass##_##name##_instance.isFailed()) + Return true if test 'name' has failed.
  -#define checkTestNotFailF(testClass, name)   (testClass##_##name##_instance.isNotFailed()) - Return true if test 'name' has not failed. More...
+ +#define checkTestNotFailF(testClass, name)   (testClass##_##name##_instance.isNotFailed()) + Return true if test 'name' has not failed.
  -#define checkTestSkipF(testClass, name)   (testClass##_##name##_instance.isSkipped()) - Return true if test 'name' has been skipped. More...
+ +#define checkTestSkipF(testClass, name)   (testClass##_##name##_instance.isSkipped()) + Return true if test 'name' has been skipped.
  -#define checkTestNotSkipF(testClass, name)   (testClass##_##name##_instance.isNotSkipped()) - Return true if test 'name' has not been skipped. More...
+ +#define checkTestNotSkipF(testClass, name)   (testClass##_##name##_instance.isNotSkipped()) + Return true if test 'name' has not been skipped.
  -#define checkTestExpireF(testClass, name)   (testClass##_##name##_instance.isExpired()) - Return true if test 'name' has timed out. More...
+ +#define checkTestExpireF(testClass, name)   (testClass##_##name##_instance.isExpired()) + Return true if test 'name' has timed out.
  -#define checkTestNotExpireF(testClass, name)   (testClass##_##name##_instance.isNotExpired()) - Return true if test 'name' has not timed out. More...
+ +#define checkTestNotExpireF(testClass, name)   (testClass##_##name##_instance.isNotExpired()) + Return true if test 'name' has not timed out.
  -#define assertTestDoneF(testClass, name)   assertTestStatusInternalF(testClass, name, isDone, kMessageDone) - Assert that test 'name' is done. More...
+ +#define assertTestDoneF(testClass, name)   assertTestStatusInternalF(testClass, name, isDone, kMessageDone) + Assert that test 'name' is done.
  -#define assertTestNotDoneF(testClass, name)   assertTestStatusInternalF(testClass, name, isNotDone, kMessageNotDone) - Assert that test 'name' is not done. More...
+ +#define assertTestNotDoneF(testClass, name)   assertTestStatusInternalF(testClass, name, isNotDone, kMessageNotDone) + Assert that test 'name' is not done.
  -#define assertTestPassF(testClass, name)   assertTestStatusInternalF(testClass, name, isPassed, kMessagePassed) - Assert that test 'name' has passed. More...
+ +#define assertTestPassF(testClass, name)   assertTestStatusInternalF(testClass, name, isPassed, kMessagePassed) + Assert that test 'name' has passed.
  -#define assertTestNotPassF(testClass, name)   assertTestStatusInternalF(testClass, name, isNotPassed, kMessageNotPassed) - Assert that test 'name' has not passed. More...
+ +#define assertTestNotPassF(testClass, name)   assertTestStatusInternalF(testClass, name, isNotPassed, kMessageNotPassed) + Assert that test 'name' has not passed.
  -#define assertTestFailF(testClass, name)   assertTestStatusInternalF(testClass, name, isFailed, kMessageFailed) - Assert that test 'name' has failed. More...
+ +#define assertTestFailF(testClass, name)   assertTestStatusInternalF(testClass, name, isFailed, kMessageFailed) + Assert that test 'name' has failed.
  -#define assertTestNotFailF(testClass, name)   assertTestStatusInternalF(testClass, name, isNotFailed, kMessageNotFailed) - Assert that test 'name' has not failed. More...
+ +#define assertTestNotFailF(testClass, name)   assertTestStatusInternalF(testClass, name, isNotFailed, kMessageNotFailed) + Assert that test 'name' has not failed.
  -#define assertTestSkipF(testClass, name)   assertTestStatusInternalF(testClass, name, isSkipped, kMessageSkipped) - Assert that test 'name' has been skipped. More...
+ +#define assertTestSkipF(testClass, name)   assertTestStatusInternalF(testClass, name, isSkipped, kMessageSkipped) + Assert that test 'name' has been skipped.
  #define assertTestNotSkipF(testClass, name) - Assert that test 'name' has not been skipped. More...
+ Assert that test 'name' has not been skipped. More...
  -#define assertTestExpireF(testClass, name)   assertTestStatusInternalF(testClass, name, isExpired, kMessageExpired) - Assert that test 'name' has timed out. More...
+ +#define assertTestExpireF(testClass, name)   assertTestStatusInternalF(testClass, name, isExpired, kMessageExpired) + Assert that test 'name' has timed out.
  #define assertTestNotExpireF(testClass, name) - Assert that test 'name' has not timed out. More...
+ Assert that test 'name' has not timed out. More...
  #define assertTestStatusInternalF(testClass, name, method, message) - Internal helper macro, shouldn't be called directly by users. More...
+ Internal helper macro, shouldn't be called directly by users. More...
  #define failTestNow() - Fail the current test, return immediately, and print a status message. More...
+ Fail the current test, return immediately, and print a status message. More...
  #define passTestNow() - Pass the current test, print a status message, and return immediately. More...
+ Pass the current test, print a status message, and return immediately. More...
  #define skipTestNow() - Skip the current test, print a status message, and return immediately. More...
+ Skip the current test, print a status message, and return immediately. More...
  #define expireTestNow() - Expire the current test, print a status message, and return immediately. More...
+ Expire the current test, print a status message, and return immediately. More...
 

Detailed Description

@@ -437,43 +457,13 @@

-Value:
get_assertTestDone(__VA_ARGS__, assertTestDone2, assertTestDone1)\
(__VA_ARGS__)
+Value:
get_assertTestDone(__VA_ARGS__, assertTestDone2, assertTestDone1)\
+
(__VA_ARGS__)
+

Assert that test 'name' is done.

Definition at line 127 of file MetaAssertMacros.h.

-

- - -

◆ assertTestDoneF

- -
-
- - - - - - - - - - - - - - - - - - -
#define assertTestDoneF( testClass,
 name 
)   assertTestStatusInternalF(testClass, name, isDone, kMessageDone)
-
- -

Assert that test 'name' is done.

- -

Definition at line 288 of file MetaAssertMacros.h.

-
@@ -491,43 +481,13 @@

-Value:
get_assertTestExpire(__VA_ARGS__, assertTestExpire2, assertTestExpire1)\
(__VA_ARGS__)
+Value:
get_assertTestExpire(__VA_ARGS__, assertTestExpire2, assertTestExpire1)\
+
(__VA_ARGS__)
+

Assert that test 'name' has timed out.

Definition at line 207 of file MetaAssertMacros.h.

- - - -

◆ assertTestExpireF

- -
-
- - - - - - - - - - - - - - - - - - -
#define assertTestExpireF( testClass,
 name 
)   assertTestStatusInternalF(testClass, name, isExpired, kMessageExpired)
-
- -

Assert that test 'name' has timed out.

- -

Definition at line 321 of file MetaAssertMacros.h.

-
@@ -545,43 +505,13 @@

-Value:
get_assertTestFail(__VA_ARGS__, assertTestFail2, assertTestFail1)\
(__VA_ARGS__)
+Value:
get_assertTestFail(__VA_ARGS__, assertTestFail2, assertTestFail1)\
+
(__VA_ARGS__)
+

Assert that test 'name' has failed.

Definition at line 167 of file MetaAssertMacros.h.

- - - -

◆ assertTestFailF

- -
-
- - - - - - - - - - - - - - - - - - -
#define assertTestFailF( testClass,
 name 
)   assertTestStatusInternalF(testClass, name, isFailed, kMessageFailed)
-
- -

Assert that test 'name' has failed.

- -

Definition at line 304 of file MetaAssertMacros.h.

-
@@ -599,43 +529,13 @@

-Value:
get_assertTestNotDone(__VA_ARGS__, assertTestNotDone2, assertTestNotDone1)\
(__VA_ARGS__)
+Value:
get_assertTestNotDone(__VA_ARGS__, assertTestNotDone2, assertTestNotDone1)\
+
(__VA_ARGS__)
+

Assert that test 'name' is not done.

Definition at line 137 of file MetaAssertMacros.h.

- - - -

◆ assertTestNotDoneF

- -
-
- - - - - - - - - - - - - - - - - - -
#define assertTestNotDoneF( testClass,
 name 
)   assertTestStatusInternalF(testClass, name, isNotDone, kMessageNotDone)
-
- -

Assert that test 'name' is not done.

- -

Definition at line 292 of file MetaAssertMacros.h.

-
@@ -653,7 +553,9 @@

-Value:
get_assertTestNotExpire(__VA_ARGS__, assertTestNotExpire2, assertTestNotExpire1)\
(__VA_ARGS__)
+Value:
get_assertTestNotExpire(__VA_ARGS__, assertTestNotExpire2, assertTestNotExpire1)\
+
(__VA_ARGS__)
+

Assert that test 'name' has not timed out.

Definition at line 217 of file MetaAssertMacros.h.

@@ -685,7 +587,8 @@

-Value:
assertTestStatusInternalF(testClass, name, isNotExpired, \
kMessageNotExpired)
#define assertTestStatusInternalF(testClass, name, method, message)
Internal helper macro, shouldn&#39;t be called directly by users.
+Value:
assertTestStatusInternalF(testClass, name, isNotExpired, \
+
kMessageNotExpired)

Assert that test 'name' has not timed out.

@@ -708,43 +611,13 @@

-Value:
get_assertTestNotFail(__VA_ARGS__, assertTestNotFail2, assertTestNotFail1)\
(__VA_ARGS__)
+Value:
get_assertTestNotFail(__VA_ARGS__, assertTestNotFail2, assertTestNotFail1)\
+
(__VA_ARGS__)
+

Assert that test 'name' has not failed.

Definition at line 177 of file MetaAssertMacros.h.

-

- - -

◆ assertTestNotFailF

- -
-
- - - - - - - - - - - - - - - - - - -
#define assertTestNotFailF( testClass,
 name 
)   assertTestStatusInternalF(testClass, name, isNotFailed, kMessageNotFailed)
-
- -

Assert that test 'name' has not failed.

- -

Definition at line 308 of file MetaAssertMacros.h.

-
@@ -762,43 +635,13 @@

-Value:
get_assertTestNotPass(__VA_ARGS__, assertTestNotPass2, assertTestNotPass1)\
(__VA_ARGS__)
+Value:
get_assertTestNotPass(__VA_ARGS__, assertTestNotPass2, assertTestNotPass1)\
+
(__VA_ARGS__)
+

Assert that test 'name' has not passed.

Definition at line 157 of file MetaAssertMacros.h.

- - - -

◆ assertTestNotPassF

- -
-
- - - - - - - - - - - - - - - - - - -
#define assertTestNotPassF( testClass,
 name 
)   assertTestStatusInternalF(testClass, name, isNotPassed, kMessageNotPassed)
-
- -

Assert that test 'name' has not passed.

- -

Definition at line 300 of file MetaAssertMacros.h.

-
@@ -816,7 +659,9 @@

-Value:
get_assertTestNotSkip(__VA_ARGS__, assertTestNotSkip2, assertTestNotSkip1)\
(__VA_ARGS__)
+Value:
get_assertTestNotSkip(__VA_ARGS__, assertTestNotSkip2, assertTestNotSkip1)\
+
(__VA_ARGS__)
+

Assert that test 'name' has not been skipped.

Definition at line 197 of file MetaAssertMacros.h.

@@ -848,7 +693,8 @@

-Value:
assertTestStatusInternalF(testClass, name, isNotSkipped, \
kMessageNotSkipped)
#define assertTestStatusInternalF(testClass, name, method, message)
Internal helper macro, shouldn&#39;t be called directly by users.
+Value:
assertTestStatusInternalF(testClass, name, isNotSkipped, \
+
kMessageNotSkipped)

Assert that test 'name' has not been skipped.

@@ -871,43 +717,13 @@

-Value:
get_assertTestPass(__VA_ARGS__, assertTestPass2, assertTestPass1)\
(__VA_ARGS__)
+Value:
get_assertTestPass(__VA_ARGS__, assertTestPass2, assertTestPass1)\
+
(__VA_ARGS__)
+

Assert that test 'name' has passed.

Definition at line 147 of file MetaAssertMacros.h.

-

- - -

◆ assertTestPassF

- -
-
- - - - - - - - - - - - - - - - - - -
#define assertTestPassF( testClass,
 name 
)   assertTestStatusInternalF(testClass, name, isPassed, kMessagePassed)
-
- -

Assert that test 'name' has passed.

- -

Definition at line 296 of file MetaAssertMacros.h.

-
@@ -925,43 +741,13 @@

-Value:
get_assertTestSkip(__VA_ARGS__, assertTestSkip2, assertTestSkip1)\
(__VA_ARGS__)
+Value:
get_assertTestSkip(__VA_ARGS__, assertTestSkip2, assertTestSkip1)\
+
(__VA_ARGS__)
+

Assert that test 'name' has been skipped.

Definition at line 187 of file MetaAssertMacros.h.

- - - -

◆ assertTestSkipF

- -
-
- - - - - - - - - - - - - - - - - - -
#define assertTestSkipF( testClass,
 name 
)   assertTestStatusInternalF(testClass, name, isSkipped, kMessageSkipped)
-
- -

Assert that test 'name' has been skipped.

- -

Definition at line 312 of file MetaAssertMacros.h.

-
@@ -995,7 +781,12 @@

-Value:
do {\
if (!assertionTestStatus(\
test_##name##_instance.method()))\
return;\
} while (false)
#define AUNIT_FPSTR(pstr_pointer)
The FPSTR() macro is defined on ESP8266, not defined on Teensy and AVR, and broken on ESP32...
Definition: Flash.h:75
+Value:
do {\
+
if (!assertionTestStatus(\
+
__FILE__,__LINE__,#name,AUNIT_FPSTR(message),\
+
test_##name##_instance.method()))\
+
return;\
+
} while (false)

Internal helper macro, shouldn't be called directly by users.

@@ -1040,7 +831,12 @@

-Value:
do {\
if (!assertionTestStatus(\
testSuite##_##name##_instance.method()))\
return;\
} while (false)
#define AUNIT_FPSTR(pstr_pointer)
The FPSTR() macro is defined on ESP8266, not defined on Teensy and AVR, and broken on ESP32...
Definition: Flash.h:75
+Value:
do {\
+
if (!assertionTestStatus(\
+
__FILE__,__LINE__,#testSuite "_" #name,AUNIT_FPSTR(message),\
+
testSuite##_##name##_instance.method()))\
+
return;\
+
} while (false)

Definition at line 234 of file MetaAssertMacros.h.

@@ -1083,7 +879,11 @@

-Value:
do {\
testClass##_##name##_instance.method()))\
return;\
} while (false)
#define AUNIT_FPSTR(pstr_pointer)
The FPSTR() macro is defined on ESP8266, not defined on Teensy and AVR, and broken on ESP32...
Definition: Flash.h:75
+Value:
do {\
+
if (!assertionTestStatus(__FILE__, __LINE__, #name, AUNIT_FPSTR(message),\
+
testClass##_##name##_instance.method()))\
+
return;\
+
} while (false)

Internal helper macro, shouldn't be called directly by users.

@@ -1106,43 +906,13 @@

-Value:
get_checkTestDone(__VA_ARGS__, checkTestDone2, checkTestDone1)\
(__VA_ARGS__)
+Value:
get_checkTestDone(__VA_ARGS__, checkTestDone2, checkTestDone1)\
+
(__VA_ARGS__)
+

Return true if test 'name' is done.

Definition at line 44 of file MetaAssertMacros.h.

-

-

- -

◆ checkTestDoneF

- -
-
- - - - - - - - - - - - - - - - - - -
#define checkTestDoneF( testClass,
 name 
)   (testClass##_##name##_instance.isDone())
-
- -

Return true if test 'name' is done.

- -

Definition at line 245 of file MetaAssertMacros.h.

-
@@ -1160,43 +930,13 @@

-Value:
get_checkTestExpire(__VA_ARGS__, checkTestExpire2, checkTestExpire1)\
(__VA_ARGS__)
+Value:
get_checkTestExpire(__VA_ARGS__, checkTestExpire2, checkTestExpire1)\
+
(__VA_ARGS__)
+

Return true if test 'name' has timed out.

Definition at line 108 of file MetaAssertMacros.h.

-

- - -

◆ checkTestExpireF

- -
-
- - - - - - - - - - - - - - - - - - -
#define checkTestExpireF( testClass,
 name 
)   (testClass##_##name##_instance.isExpired())
-
- -

Return true if test 'name' has timed out.

- -

Definition at line 277 of file MetaAssertMacros.h.

-
@@ -1214,43 +954,13 @@

-Value:
get_checkTestFail(__VA_ARGS__, checkTestFail2, checkTestFail1)\
(__VA_ARGS__)
+Value:
get_checkTestFail(__VA_ARGS__, checkTestFail2, checkTestFail1)\
+
(__VA_ARGS__)
+

Return true if test 'name' has failed.

Definition at line 76 of file MetaAssertMacros.h.

- - - -

◆ checkTestFailF

- -
-
- - - - - - - - - - - - - - - - - - -
#define checkTestFailF( testClass,
 name 
)   (testClass##_##name##_instance.isFailed())
-
- -

Return true if test 'name' has failed.

- -

Definition at line 261 of file MetaAssertMacros.h.

-
@@ -1268,43 +978,13 @@

-Value:
get_checkTestNotDone(__VA_ARGS__, checkTestNotDone2, checkTestNotDone1)\
(__VA_ARGS__)
+Value:
get_checkTestNotDone(__VA_ARGS__, checkTestNotDone2, checkTestNotDone1)\
+
(__VA_ARGS__)
+

Return true if test 'name' is not done.

Definition at line 52 of file MetaAssertMacros.h.

- - - -

◆ checkTestNotDoneF

- -
-
- - - - - - - - - - - - - - - - - - -
#define checkTestNotDoneF( testClass,
 name 
)   (testClass##_##name##_instance.isNotDone())
-
- -

Return true if test 'name' is not done.

- -

Definition at line 249 of file MetaAssertMacros.h.

-
@@ -1322,43 +1002,13 @@

-Value:
get_checkTestNotExpire(__VA_ARGS__, checkTestNotExpire2, checkTestNotExpire1)\
(__VA_ARGS__)
+Value:
get_checkTestNotExpire(__VA_ARGS__, checkTestNotExpire2, checkTestNotExpire1)\
+
(__VA_ARGS__)
+

Return true if test 'name' has not timed out.

Definition at line 116 of file MetaAssertMacros.h.

- - - -

◆ checkTestNotExpireF

- -
-
- - - - - - - - - - - - - - - - - - -
#define checkTestNotExpireF( testClass,
 name 
)   (testClass##_##name##_instance.isNotExpired())
-
- -

Return true if test 'name' has not timed out.

- -

Definition at line 281 of file MetaAssertMacros.h.

-
@@ -1376,43 +1026,13 @@

-Value:
get_checkTestNotFail(__VA_ARGS__, checkTestNotFail2, checkTestNotFail1)\
(__VA_ARGS__)
+Value:
get_checkTestNotFail(__VA_ARGS__, checkTestNotFail2, checkTestNotFail1)\
+
(__VA_ARGS__)
+

Return true if test 'name' has not failed.

Definition at line 84 of file MetaAssertMacros.h.

- - - -

◆ checkTestNotFailF

- -
-
- - - - - - - - - - - - - - - - - - -
#define checkTestNotFailF( testClass,
 name 
)   (testClass##_##name##_instance.isNotFailed())
-
- -

Return true if test 'name' has not failed.

- -

Definition at line 265 of file MetaAssertMacros.h.

-
@@ -1430,43 +1050,13 @@

-Value:
get_checkTestNotPass(__VA_ARGS__, checkTestNotPass2, checkTestNotPass1)\
(__VA_ARGS__)
+Value:
get_checkTestNotPass(__VA_ARGS__, checkTestNotPass2, checkTestNotPass1)\
+
(__VA_ARGS__)
+

Return true if test 'name' has not passed.

Definition at line 68 of file MetaAssertMacros.h.

- - - -

◆ checkTestNotPassF

- -
-
- - - - - - - - - - - - - - - - - - -
#define checkTestNotPassF( testClass,
 name 
)   (testClass##_##name##_instance.isNotPassed())
-
- -

Return true if test 'name' has not passed.

- -

Definition at line 257 of file MetaAssertMacros.h.

-
@@ -1484,43 +1074,13 @@

-Value:
get_checkTestNotSkip(__VA_ARGS__, checkTestNotSkip2, checkTestNotSkip1)\
(__VA_ARGS__)
+Value:
get_checkTestNotSkip(__VA_ARGS__, checkTestNotSkip2, checkTestNotSkip1)\
+
(__VA_ARGS__)
+

Return true if test 'name' has not been skipped.

Definition at line 100 of file MetaAssertMacros.h.

- - - -

◆ checkTestNotSkipF

- -
-
- - - - - - - - - - - - - - - - - - -
#define checkTestNotSkipF( testClass,
 name 
)   (testClass##_##name##_instance.isNotSkipped())
-
- -

Return true if test 'name' has not been skipped.

- -

Definition at line 273 of file MetaAssertMacros.h.

-
@@ -1538,43 +1098,13 @@

-Value:
get_checkTestPass(__VA_ARGS__, checkTestPass2, checkTestPass1)\
(__VA_ARGS__)
+Value:
get_checkTestPass(__VA_ARGS__, checkTestPass2, checkTestPass1)\
+
(__VA_ARGS__)
+

Return true if test 'name' has passed.

Definition at line 60 of file MetaAssertMacros.h.

- - - -

◆ checkTestPassF

- -
-
- - - - - - - - - - - - - - - - - - -
#define checkTestPassF( testClass,
 name 
)   (testClass##_##name##_instance.isPassed())
-
- -

Return true if test 'name' has passed.

- -

Definition at line 253 of file MetaAssertMacros.h.

-
@@ -1592,43 +1122,13 @@

-Value:
get_checkTestSkip(__VA_ARGS__, checkTestSkip2, checkTestSkip1)\
(__VA_ARGS__)
+Value:
get_checkTestSkip(__VA_ARGS__, checkTestSkip2, checkTestSkip1)\
+
(__VA_ARGS__)
+

Return true if test 'name' has been skipped.

Definition at line 92 of file MetaAssertMacros.h.

- - - -

◆ checkTestSkipF

- -
-
- - - - - - - - - - - - - - - - - - -
#define checkTestSkipF( testClass,
 name 
)   (testClass##_##name##_instance.isSkipped())
-
- -

Return true if test 'name' has been skipped.

- -

Definition at line 269 of file MetaAssertMacros.h.

-
@@ -1645,7 +1145,11 @@

-Value:
do {\
setStatusNow(__FILE__, __LINE__, kStatusExpired,\
AUNIT_FPSTR(kMessageExpired));\
return;\
} while (false)
#define AUNIT_FPSTR(pstr_pointer)
The FPSTR() macro is defined on ESP8266, not defined on Teensy and AVR, and broken on ESP32...
Definition: Flash.h:75
+Value:
do {\
+
setStatusNow(__FILE__, __LINE__, kStatusExpired,\
+
AUNIT_FPSTR(kMessageExpired));\
+
return;\
+
} while (false)

Expire the current test, print a status message, and return immediately.

Similar to Test::expire() except that this prints a status message.

@@ -1668,7 +1172,10 @@

-Value:
do {\
return;\
} while (false)
#define AUNIT_FPSTR(pstr_pointer)
The FPSTR() macro is defined on ESP8266, not defined on Teensy and AVR, and broken on ESP32...
Definition: Flash.h:75
+Value:
do {\
+
setStatusNow(__FILE__, __LINE__, kStatusFailed, AUNIT_FPSTR(kMessageFailed));\
+
return;\
+
} while (false)

Fail the current test, return immediately, and print a status message.

Similar to Test::fail() except that this prints a status message.

@@ -1691,7 +1198,10 @@

-Value:
do {\
return;\
} while (false)
#define AUNIT_FPSTR(pstr_pointer)
The FPSTR() macro is defined on ESP8266, not defined on Teensy and AVR, and broken on ESP32...
Definition: Flash.h:75
+Value:
do {\
+
setStatusNow(__FILE__, __LINE__, kStatusPassed, AUNIT_FPSTR(kMessagePassed));\
+
return;\
+
} while (false)

Pass the current test, print a status message, and return immediately.

Similar to Test::pass() except that this prints a status message.

@@ -1714,7 +1224,11 @@

-Value:
do {\
setStatusNow(__FILE__, __LINE__, kStatusSkipped,\
AUNIT_FPSTR(kMessageSkipped));\
return;\
} while (false)
#define AUNIT_FPSTR(pstr_pointer)
The FPSTR() macro is defined on ESP8266, not defined on Teensy and AVR, and broken on ESP32...
Definition: Flash.h:75
+Value:
do {\
+
setStatusNow(__FILE__, __LINE__, kStatusSkipped,\
+
AUNIT_FPSTR(kMessageSkipped));\
+
return;\
+
} while (false)

Skip the current test, print a status message, and return immediately.

Similar to Test::skip() except that this prints a status message.

@@ -1724,11 +1238,13 @@

#define assertTestStatusInternalF(testClass, name, method, message)
Internal helper macro, shouldn't be called directly by users.

+
#define AUNIT_FPSTR(pstr_pointer)
The FPSTR() macro is defined on ESP8266, not defined on Teensy and AVR, and broken on ESP32.
Definition: Flash.h:75
diff --git a/docs/html/MetaAssertMacros_8h__dep__incl.map b/docs/html/MetaAssertMacros_8h__dep__incl.map index eb9b235..e6fb470 100644 --- a/docs/html/MetaAssertMacros_8h__dep__incl.map +++ b/docs/html/MetaAssertMacros_8h__dep__incl.map @@ -1,4 +1,5 @@ - - - + + + + diff --git a/docs/html/MetaAssertMacros_8h__dep__incl.md5 b/docs/html/MetaAssertMacros_8h__dep__incl.md5 index f737e3c..02f9a8f 100644 --- a/docs/html/MetaAssertMacros_8h__dep__incl.md5 +++ b/docs/html/MetaAssertMacros_8h__dep__incl.md5 @@ -1 +1 @@ -cb6086c17fed0564fbe72b410ea0d45e \ No newline at end of file +7538b8338922c26cd9cbe77dd5c63af4 \ No newline at end of file diff --git a/docs/html/MetaAssertMacros_8h__dep__incl.png b/docs/html/MetaAssertMacros_8h__dep__incl.png index a0fd052d1059228b1e7507a69a9cd9a53e7067e1..b19b8cb95f968843f870c910ac3e5ef9796a0cec 100644 GIT binary patch literal 7539 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 - + + + diff --git a/docs/html/MetaAssertMacros_8h__incl.md5 b/docs/html/MetaAssertMacros_8h__incl.md5 index f4f78d1..6d49898 100644 --- a/docs/html/MetaAssertMacros_8h__incl.md5 +++ b/docs/html/MetaAssertMacros_8h__incl.md5 @@ -1 +1 @@ -25d129eafeced6d740df9d596b82fe72 \ No newline at end of file +d20877806d99ec052d967117ef7035fe \ No newline at end of file diff --git a/docs/html/MetaAssertMacros_8h__incl.png b/docs/html/MetaAssertMacros_8h__incl.png index 48a1e3f1e2a6a28fe52b5f1a5b76c6e74edd0df3..9d9bf7416ddb855fd019768b7d89586c264780d3 100644 GIT binary patch literal 4710 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 z + - + -AUnit: /home/brian/dev/AUnit/src/aunit/MetaAssertMacros.h Source File +AUnit: /home/brian/src/AUnit/src/aunit/MetaAssertMacros.h Source File @@ -22,7 +22,7 @@
AUnit -  1.3.2 +  1.3.3
Unit testing framework for Arduino platforms inspired by ArduinoUnit and Google Test.
@@ -31,18 +31,21 @@

- + +/* @license-end */
MetaAssertMacros.h

-Go to the documentation of this file.
1 /*
2 MIT License
3 
4 Copyright (c) 2018 Brian T. Park
5 
6 Permission is hereby granted, free of charge, to any person obtaining a copy
7 of this software and associated documentation files (the "Software"), to deal
8 in the Software without restriction, including without limitation the rights
9 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 copies of the Software, and to permit persons to whom the Software is
11 furnished to do so, subject to the following conditions:
12 
13 The above copyright notice and this permission notice shall be included in all
14 copies or substantial portions of the Software.
15 
16 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22 SOFTWARE.
23 */
24 
25 // Significant portions of the design and implementation of this file came from
26 // https://github.com/mmurdoch/arduinounit/blob/master/src/ArduinoUnit.h
27 
35 #ifndef AUNIT_META_ASSERT_MACROS_H
36 #define AUNIT_META_ASSERT_MACROS_H
37 
38 #include "Flash.h"
39 
40 // Meta tests, same syntax as ArduinoUnit for compatibility.
41 // The checkTestXxx() macros return a boolean, and execution continues.
42 
44 #define checkTestDone(...)\
45  get_checkTestDone(__VA_ARGS__, checkTestDone2, checkTestDone1)\
46  (__VA_ARGS__)
47 #define get_checkTestDone(_1, _2, NAME, ...) NAME
48 #define checkTestDone1(name) (test_##name##_instance.isDone())
49 #define checkTestDone2(testSuite, name) (testSuite##_##name##_instance.isDone())
50 
52 #define checkTestNotDone(...)\
53  get_checkTestNotDone(__VA_ARGS__, checkTestNotDone2, checkTestNotDone1)\
54  (__VA_ARGS__)
55 #define get_checkTestNotDone(_1, _2, NAME, ...) NAME
56 #define checkTestNotDone1(name) (test_##name##_instance.isNotDone())
57 #define checkTestNotDone2(testSuite, name) (testSuite##_##name##_instance.isNotDone())
58 
60 #define checkTestPass(...)\
61  get_checkTestPass(__VA_ARGS__, checkTestPass2, checkTestPass1)\
62  (__VA_ARGS__)
63 #define get_checkTestPass(_1, _2, NAME, ...) NAME
64 #define checkTestPass1(name) (test_##name##_instance.isPassed())
65 #define checkTestPass2(testSuite, name) (testSuite##_##name##_instance.isPassed())
66 
68 #define checkTestNotPass(...)\
69  get_checkTestNotPass(__VA_ARGS__, checkTestNotPass2, checkTestNotPass1)\
70  (__VA_ARGS__)
71 #define get_checkTestNotPass(_1, _2, NAME, ...) NAME
72 #define checkTestNotPass1(name) (test_##name##_instance.isNotPassed())
73 #define checkTestNotPass2(testSuite, name) (testSuite##_##name##_instance.isNotPassed())
74 
76 #define checkTestFail(...)\
77  get_checkTestFail(__VA_ARGS__, checkTestFail2, checkTestFail1)\
78  (__VA_ARGS__)
79 #define get_checkTestFail(_1, _2, NAME, ...) NAME
80 #define checkTestFail1(name) (test_##name##_instance.isFailed())
81 #define checkTestFail2(testSuite, name) (testSuite##_##name##_instance.isFailed())
82 
84 #define checkTestNotFail(...)\
85  get_checkTestNotFail(__VA_ARGS__, checkTestNotFail2, checkTestNotFail1)\
86  (__VA_ARGS__)
87 #define get_checkTestNotFail(_1, _2, NAME, ...) NAME
88 #define checkTestNotFail1(name) (test_##name##_instance.isNotFailed())
89 #define checkTestNotFail2(testSuite, name) (testSuite##_##name##_instance.isNotFailed())
90 
92 #define checkTestSkip(...)\
93  get_checkTestSkip(__VA_ARGS__, checkTestSkip2, checkTestSkip1)\
94  (__VA_ARGS__)
95 #define get_checkTestSkip(_1, _2, NAME, ...) NAME
96 #define checkTestSkip1(name) (test_##name##_instance.isSkipped())
97 #define checkTestSkip2(testSuite, name) (testSuite##_##name##_instance.isSkipped())
98 
100 #define checkTestNotSkip(...)\
101  get_checkTestNotSkip(__VA_ARGS__, checkTestNotSkip2, checkTestNotSkip1)\
102  (__VA_ARGS__)
103 #define get_checkTestNotSkip(_1, _2, NAME, ...) NAME
104 #define checkTestNotSkip1(name) (test_##name##_instance.isNotSkipped())
105 #define checkTestNotSkip2(testSuite, name) (testSuite##_##name##_instance.isNotSkipped())
106 
108 #define checkTestExpire(...)\
109  get_checkTestExpire(__VA_ARGS__, checkTestExpire2, checkTestExpire1)\
110  (__VA_ARGS__)
111 #define get_checkTestExpire(_1, _2, NAME, ...) NAME
112 #define checkTestExpire1(name) (test_##name##_instance.isExpired())
113 #define checkTestExpire2(testSuite, name) (testSuite##_##name##_instance.isExpired())
114 
116 #define checkTestNotExpire(...)\
117  get_checkTestNotExpire(__VA_ARGS__, checkTestNotExpire2, checkTestNotExpire1)\
118  (__VA_ARGS__)
119 #define get_checkTestNotExpire(_1, _2, NAME, ...) NAME
120 #define checkTestNotExpire1(name) (test_##name##_instance.isNotExpired())
121 #define checkTestNotExpire2(testSuite, name) (testSuite##_##name##_instance.isNotExpired())
122 
123 // If the assertTestXxx() macros fail, they generate an optional output, calls
124 // fail(), and returns from the current test case.
125 
127 #define assertTestDone(...)\
128  get_assertTestDone(__VA_ARGS__, assertTestDone2, assertTestDone1)\
129  (__VA_ARGS__)
130 #define get_assertTestDone(_1, _2, NAME, ...) NAME
131 #define assertTestDone1(name) \
132  assertTestStatusInternal1(name, isDone, kMessageDone)
133 #define assertTestDone2(testSuite, name) \
134  assertTestStatusInternal2(testSuite, name, isDone, kMessageDone)
135 
137 #define assertTestNotDone(...)\
138  get_assertTestNotDone(__VA_ARGS__, assertTestNotDone2, assertTestNotDone1)\
139  (__VA_ARGS__)
140 #define get_assertTestNotDone(_1, _2, NAME, ...) NAME
141 #define assertTestNotDone1(name) \
142  assertTestStatusInternal1(name, isNotDone, kMessageNotDone)
143 #define assertTestNotDone2(testSuite, name) \
144  assertTestStatusInternal2(testSuite, name, isNotDone, kMessageNotDone)
145 
147 #define assertTestPass(...)\
148  get_assertTestPass(__VA_ARGS__, assertTestPass2, assertTestPass1)\
149  (__VA_ARGS__)
150 #define get_assertTestPass(_1, _2, NAME, ...) NAME
151 #define assertTestPass1(name) \
152  assertTestStatusInternal1(name, isPassed, kMessagePassed)
153 #define assertTestPass2(testSuite, name) \
154  assertTestStatusInternal2(testSuite, name, isPassed, kMessagePassed)
155 
157 #define assertTestNotPass(...)\
158  get_assertTestNotPass(__VA_ARGS__, assertTestNotPass2, assertTestNotPass1)\
159  (__VA_ARGS__)
160 #define get_assertTestNotPass(_1, _2, NAME, ...) NAME
161 #define assertTestNotPass1(name) \
162  assertTestStatusInternal1(name, isNotPassed, kMessageNotPassed)
163 #define assertTestNotPass2(testSuite, name) \
164  assertTestStatusInternal2(testSuite, name, isNotPassed, kMessageNotPassed)
165 
167 #define assertTestFail(...)\
168  get_assertTestFail(__VA_ARGS__, assertTestFail2, assertTestFail1)\
169  (__VA_ARGS__)
170 #define get_assertTestFail(_1, _2, NAME, ...) NAME
171 #define assertTestFail1(name) \
172  assertTestStatusInternal1(name, isFailed, kMessageFailed)
173 #define assertTestFail2(testSuite, name) \
174  assertTestStatusInternal2(testSuite, name, isFailed, kMessageFailed)
175 
177 #define assertTestNotFail(...)\
178  get_assertTestNotFail(__VA_ARGS__, assertTestNotFail2, assertTestNotFail1)\
179  (__VA_ARGS__)
180 #define get_assertTestNotFail(_1, _2, NAME, ...) NAME
181 #define assertTestNotFail1(name) \
182  assertTestStatusInternal1(name, isNotFailed, kMessageNotFailed)
183 #define assertTestNotFail2(testSuite, name) \
184  assertTestStatusInternal2(testSuite, name, isNotFailed, kMessageNotFailed)
185 
187 #define assertTestSkip(...)\
188  get_assertTestSkip(__VA_ARGS__, assertTestSkip2, assertTestSkip1)\
189  (__VA_ARGS__)
190 #define get_assertTestSkip(_1, _2, NAME, ...) NAME
191 #define assertTestSkip1(name) \
192  assertTestStatusInternal1(name, isSkipped, kMessageSkipped)
193 #define assertTestSkip2(testSuite, name) \
194  assertTestStatusInternal2(testSuite, name, isSkipped, kMessageSkipped)
195 
197 #define assertTestNotSkip(...)\
198  get_assertTestNotSkip(__VA_ARGS__, assertTestNotSkip2, assertTestNotSkip1)\
199  (__VA_ARGS__)
200 #define get_assertTestNotSkip(_1, _2, NAME, ...) NAME
201 #define assertTestNotSkip1(name) \
202  assertTestStatusInternal1(name, isNotSkipped, kMessageNotSkipped)
203 #define assertTestNotSkip2(testSuite, name) \
204  assertTestStatusInternal2(testSuite, name, isNotSkipped, kMessageNotSkipped)
205 
207 #define assertTestExpire(...)\
208  get_assertTestExpire(__VA_ARGS__, assertTestExpire2, assertTestExpire1)\
209  (__VA_ARGS__)
210 #define get_assertTestExpire(_1, _2, NAME, ...) NAME
211 #define assertTestExpire1(name) \
212  assertTestStatusInternal1(name, isExpired, kMessageExpired)
213 #define assertTestExpire2(testSuite, name) \
214  assertTestStatusInternal2(testSuite, name, isExpired, kMessageExpired)
215 
217 #define assertTestNotExpire(...)\
218  get_assertTestNotExpire(__VA_ARGS__, assertTestNotExpire2, assertTestNotExpire1)\
219  (__VA_ARGS__)
220 #define get_assertTestNotExpire(_1, _2, NAME, ...) NAME
221 #define assertTestNotExpire1(name) \
222  assertTestStatusInternal1(name, isNotExpired, kMessageNotExpired)
223 #define assertTestNotExpire2(testSuite, name) \
224  assertTestStatusInternal2(testSuite, name, isNotExpired, kMessageNotExpired)
225 
227 #define assertTestStatusInternal1(name,method,message) do {\
228  if (!assertionTestStatus(\
229  __FILE__,__LINE__,#name,AUNIT_FPSTR(message),\
230  test_##name##_instance.method()))\
231  return;\
232 } while (false)
233 
234 #define assertTestStatusInternal2(testSuite,name,method,message) do {\
235  if (!assertionTestStatus(\
236  __FILE__,__LINE__,#testSuite "_" #name,AUNIT_FPSTR(message),\
237  testSuite##_##name##_instance.method()))\
238  return;\
239 } while (false)
240 
241 // Meta tests for testF() and testingF() are slightly different because
242 // the name of the fixture class is appended to the instance name.
243 
245 #define checkTestDoneF(testClass,name) \
246  (testClass##_##name##_instance.isDone())
247 
249 #define checkTestNotDoneF(testClass,name) \
250  (testClass##_##name##_instance.isNotDone())
251 
253 #define checkTestPassF(testClass,name) \
254  (testClass##_##name##_instance.isPassed())
255 
257 #define checkTestNotPassF(testClass,name) \
258  (testClass##_##name##_instance.isNotPassed())
259 
261 #define checkTestFailF(testClass,name) \
262  (testClass##_##name##_instance.isFailed())
263 
265 #define checkTestNotFailF(testClass,name) \
266  (testClass##_##name##_instance.isNotFailed())
267 
269 #define checkTestSkipF(testClass,name) \
270  (testClass##_##name##_instance.isSkipped())
271 
273 #define checkTestNotSkipF(testClass,name) \
274  (testClass##_##name##_instance.isNotSkipped())
275 
277 #define checkTestExpireF(testClass,name) \
278  (testClass##_##name##_instance.isExpired())
279 
281 #define checkTestNotExpireF(testClass,name) \
282  (testClass##_##name##_instance.isNotExpired())
283 
284 // If the assertTestXxx() macros fail, they generate an optional output, calls
285 // fail(), and returns from the current test case.
286 
288 #define assertTestDoneF(testClass,name) \
289  assertTestStatusInternalF(testClass, name, isDone, kMessageDone)
290 
292 #define assertTestNotDoneF(testClass,name) \
293  assertTestStatusInternalF(testClass, name, isNotDone, kMessageNotDone)
294 
296 #define assertTestPassF(testClass,name) \
297  assertTestStatusInternalF(testClass, name, isPassed, kMessagePassed)
298 
300 #define assertTestNotPassF(testClass,name) \
301  assertTestStatusInternalF(testClass, name, isNotPassed, kMessageNotPassed)
302 
304 #define assertTestFailF(testClass,name) \
305  assertTestStatusInternalF(testClass, name, isFailed, kMessageFailed)
306 
308 #define assertTestNotFailF(testClass,name) \
309  assertTestStatusInternalF(testClass, name, isNotFailed, kMessageNotFailed)
310 
312 #define assertTestSkipF(testClass,name) \
313  assertTestStatusInternalF(testClass, name, isSkipped, kMessageSkipped)
314 
316 #define assertTestNotSkipF(testClass,name) \
317  assertTestStatusInternalF(testClass, name, isNotSkipped, \
318  kMessageNotSkipped)
319 
321 #define assertTestExpireF(testClass,name) \
322  assertTestStatusInternalF(testClass, name, isExpired, kMessageExpired)
323 
325 #define assertTestNotExpireF(testClass,name) \
326  assertTestStatusInternalF(testClass, name, isNotExpired, \
327  kMessageNotExpired)
328 
330 #define assertTestStatusInternalF(testClass,name,method,message) do {\
331  if (!assertionTestStatus(__FILE__, __LINE__, #name, AUNIT_FPSTR(message),\
332  testClass##_##name##_instance.method()))\
333  return;\
334 } while (false)
335 
336 // Methods that sets the status of the current test, prints a message, and
337 // exits immediately.
338 
343 #define failTestNow() do {\
344  setStatusNow(__FILE__, __LINE__, kStatusFailed, AUNIT_FPSTR(kMessageFailed));\
345  return;\
346 } while (false)
347 
352 #define passTestNow() do {\
353  setStatusNow(__FILE__, __LINE__, kStatusPassed, AUNIT_FPSTR(kMessagePassed));\
354  return;\
355 } while (false)
356 
361 #define skipTestNow() do {\
362  setStatusNow(__FILE__, __LINE__, kStatusSkipped,\
363  AUNIT_FPSTR(kMessageSkipped));\
364  return;\
365 } while (false)
366 
371 #define expireTestNow() do {\
372  setStatusNow(__FILE__, __LINE__, kStatusExpired,\
373  AUNIT_FPSTR(kMessageExpired));\
374  return;\
375 } while (false)
376 
377 #endif
Various macros to smooth over the differences among the various platforms with regards to their suppo...
+Go to the documentation of this file.
1 /*
+
2 MIT License
+
3 
+
4 Copyright (c) 2018 Brian T. Park
+
5 
+
6 Permission is hereby granted, free of charge, to any person obtaining a copy
+
7 of this software and associated documentation files (the "Software"), to deal
+
8 in the Software without restriction, including without limitation the rights
+
9 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+
10 copies of the Software, and to permit persons to whom the Software is
+
11 furnished to do so, subject to the following conditions:
+
12 
+
13 The above copyright notice and this permission notice shall be included in all
+
14 copies or substantial portions of the Software.
+
15 
+
16 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+
17 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+
18 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+
19 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+
20 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+
21 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+
22 SOFTWARE.
+
23 */
+
24 
+
25 // Significant portions of the design and implementation of this file came from
+
26 // https://github.com/mmurdoch/arduinounit/blob/master/src/ArduinoUnit.h
+
27 
+
35 #ifndef AUNIT_META_ASSERT_MACROS_H
+
36 #define AUNIT_META_ASSERT_MACROS_H
+
37 
+
38 #include "Flash.h"
+
39 
+
40 // Meta tests, same syntax as ArduinoUnit for compatibility.
+
41 // The checkTestXxx() macros return a boolean, and execution continues.
+
42 
+
44 #define checkTestDone(...)\
+
45  get_checkTestDone(__VA_ARGS__, checkTestDone2, checkTestDone1)\
+
46  (__VA_ARGS__)
+
47 #define get_checkTestDone(_1, _2, NAME, ...) NAME
+
48 #define checkTestDone1(name) (test_##name##_instance.isDone())
+
49 #define checkTestDone2(testSuite, name) (testSuite##_##name##_instance.isDone())
+
50 
+
52 #define checkTestNotDone(...)\
+
53  get_checkTestNotDone(__VA_ARGS__, checkTestNotDone2, checkTestNotDone1)\
+
54  (__VA_ARGS__)
+
55 #define get_checkTestNotDone(_1, _2, NAME, ...) NAME
+
56 #define checkTestNotDone1(name) (test_##name##_instance.isNotDone())
+
57 #define checkTestNotDone2(testSuite, name) (testSuite##_##name##_instance.isNotDone())
+
58 
+
60 #define checkTestPass(...)\
+
61  get_checkTestPass(__VA_ARGS__, checkTestPass2, checkTestPass1)\
+
62  (__VA_ARGS__)
+
63 #define get_checkTestPass(_1, _2, NAME, ...) NAME
+
64 #define checkTestPass1(name) (test_##name##_instance.isPassed())
+
65 #define checkTestPass2(testSuite, name) (testSuite##_##name##_instance.isPassed())
+
66 
+
68 #define checkTestNotPass(...)\
+
69  get_checkTestNotPass(__VA_ARGS__, checkTestNotPass2, checkTestNotPass1)\
+
70  (__VA_ARGS__)
+
71 #define get_checkTestNotPass(_1, _2, NAME, ...) NAME
+
72 #define checkTestNotPass1(name) (test_##name##_instance.isNotPassed())
+
73 #define checkTestNotPass2(testSuite, name) (testSuite##_##name##_instance.isNotPassed())
+
74 
+
76 #define checkTestFail(...)\
+
77  get_checkTestFail(__VA_ARGS__, checkTestFail2, checkTestFail1)\
+
78  (__VA_ARGS__)
+
79 #define get_checkTestFail(_1, _2, NAME, ...) NAME
+
80 #define checkTestFail1(name) (test_##name##_instance.isFailed())
+
81 #define checkTestFail2(testSuite, name) (testSuite##_##name##_instance.isFailed())
+
82 
+
84 #define checkTestNotFail(...)\
+
85  get_checkTestNotFail(__VA_ARGS__, checkTestNotFail2, checkTestNotFail1)\
+
86  (__VA_ARGS__)
+
87 #define get_checkTestNotFail(_1, _2, NAME, ...) NAME
+
88 #define checkTestNotFail1(name) (test_##name##_instance.isNotFailed())
+
89 #define checkTestNotFail2(testSuite, name) (testSuite##_##name##_instance.isNotFailed())
+
90 
+
92 #define checkTestSkip(...)\
+
93  get_checkTestSkip(__VA_ARGS__, checkTestSkip2, checkTestSkip1)\
+
94  (__VA_ARGS__)
+
95 #define get_checkTestSkip(_1, _2, NAME, ...) NAME
+
96 #define checkTestSkip1(name) (test_##name##_instance.isSkipped())
+
97 #define checkTestSkip2(testSuite, name) (testSuite##_##name##_instance.isSkipped())
+
98 
+
100 #define checkTestNotSkip(...)\
+
101  get_checkTestNotSkip(__VA_ARGS__, checkTestNotSkip2, checkTestNotSkip1)\
+
102  (__VA_ARGS__)
+
103 #define get_checkTestNotSkip(_1, _2, NAME, ...) NAME
+
104 #define checkTestNotSkip1(name) (test_##name##_instance.isNotSkipped())
+
105 #define checkTestNotSkip2(testSuite, name) (testSuite##_##name##_instance.isNotSkipped())
+
106 
+
108 #define checkTestExpire(...)\
+
109  get_checkTestExpire(__VA_ARGS__, checkTestExpire2, checkTestExpire1)\
+
110  (__VA_ARGS__)
+
111 #define get_checkTestExpire(_1, _2, NAME, ...) NAME
+
112 #define checkTestExpire1(name) (test_##name##_instance.isExpired())
+
113 #define checkTestExpire2(testSuite, name) (testSuite##_##name##_instance.isExpired())
+
114 
+
116 #define checkTestNotExpire(...)\
+
117  get_checkTestNotExpire(__VA_ARGS__, checkTestNotExpire2, checkTestNotExpire1)\
+
118  (__VA_ARGS__)
+
119 #define get_checkTestNotExpire(_1, _2, NAME, ...) NAME
+
120 #define checkTestNotExpire1(name) (test_##name##_instance.isNotExpired())
+
121 #define checkTestNotExpire2(testSuite, name) (testSuite##_##name##_instance.isNotExpired())
+
122 
+
123 // If the assertTestXxx() macros fail, they generate an optional output, calls
+
124 // fail(), and returns from the current test case.
+
125 
+
127 #define assertTestDone(...)\
+
128  get_assertTestDone(__VA_ARGS__, assertTestDone2, assertTestDone1)\
+
129  (__VA_ARGS__)
+
130 #define get_assertTestDone(_1, _2, NAME, ...) NAME
+
131 #define assertTestDone1(name) \
+
132  assertTestStatusInternal1(name, isDone, kMessageDone)
+
133 #define assertTestDone2(testSuite, name) \
+
134  assertTestStatusInternal2(testSuite, name, isDone, kMessageDone)
+
135 
+
137 #define assertTestNotDone(...)\
+
138  get_assertTestNotDone(__VA_ARGS__, assertTestNotDone2, assertTestNotDone1)\
+
139  (__VA_ARGS__)
+
140 #define get_assertTestNotDone(_1, _2, NAME, ...) NAME
+
141 #define assertTestNotDone1(name) \
+
142  assertTestStatusInternal1(name, isNotDone, kMessageNotDone)
+
143 #define assertTestNotDone2(testSuite, name) \
+
144  assertTestStatusInternal2(testSuite, name, isNotDone, kMessageNotDone)
+
145 
+
147 #define assertTestPass(...)\
+
148  get_assertTestPass(__VA_ARGS__, assertTestPass2, assertTestPass1)\
+
149  (__VA_ARGS__)
+
150 #define get_assertTestPass(_1, _2, NAME, ...) NAME
+
151 #define assertTestPass1(name) \
+
152  assertTestStatusInternal1(name, isPassed, kMessagePassed)
+
153 #define assertTestPass2(testSuite, name) \
+
154  assertTestStatusInternal2(testSuite, name, isPassed, kMessagePassed)
+
155 
+
157 #define assertTestNotPass(...)\
+
158  get_assertTestNotPass(__VA_ARGS__, assertTestNotPass2, assertTestNotPass1)\
+
159  (__VA_ARGS__)
+
160 #define get_assertTestNotPass(_1, _2, NAME, ...) NAME
+
161 #define assertTestNotPass1(name) \
+
162  assertTestStatusInternal1(name, isNotPassed, kMessageNotPassed)
+
163 #define assertTestNotPass2(testSuite, name) \
+
164  assertTestStatusInternal2(testSuite, name, isNotPassed, kMessageNotPassed)
+
165 
+
167 #define assertTestFail(...)\
+
168  get_assertTestFail(__VA_ARGS__, assertTestFail2, assertTestFail1)\
+
169  (__VA_ARGS__)
+
170 #define get_assertTestFail(_1, _2, NAME, ...) NAME
+
171 #define assertTestFail1(name) \
+
172  assertTestStatusInternal1(name, isFailed, kMessageFailed)
+
173 #define assertTestFail2(testSuite, name) \
+
174  assertTestStatusInternal2(testSuite, name, isFailed, kMessageFailed)
+
175 
+
177 #define assertTestNotFail(...)\
+
178  get_assertTestNotFail(__VA_ARGS__, assertTestNotFail2, assertTestNotFail1)\
+
179  (__VA_ARGS__)
+
180 #define get_assertTestNotFail(_1, _2, NAME, ...) NAME
+
181 #define assertTestNotFail1(name) \
+
182  assertTestStatusInternal1(name, isNotFailed, kMessageNotFailed)
+
183 #define assertTestNotFail2(testSuite, name) \
+
184  assertTestStatusInternal2(testSuite, name, isNotFailed, kMessageNotFailed)
+
185 
+
187 #define assertTestSkip(...)\
+
188  get_assertTestSkip(__VA_ARGS__, assertTestSkip2, assertTestSkip1)\
+
189  (__VA_ARGS__)
+
190 #define get_assertTestSkip(_1, _2, NAME, ...) NAME
+
191 #define assertTestSkip1(name) \
+
192  assertTestStatusInternal1(name, isSkipped, kMessageSkipped)
+
193 #define assertTestSkip2(testSuite, name) \
+
194  assertTestStatusInternal2(testSuite, name, isSkipped, kMessageSkipped)
+
195 
+
197 #define assertTestNotSkip(...)\
+
198  get_assertTestNotSkip(__VA_ARGS__, assertTestNotSkip2, assertTestNotSkip1)\
+
199  (__VA_ARGS__)
+
200 #define get_assertTestNotSkip(_1, _2, NAME, ...) NAME
+
201 #define assertTestNotSkip1(name) \
+
202  assertTestStatusInternal1(name, isNotSkipped, kMessageNotSkipped)
+
203 #define assertTestNotSkip2(testSuite, name) \
+
204  assertTestStatusInternal2(testSuite, name, isNotSkipped, kMessageNotSkipped)
+
205 
+
207 #define assertTestExpire(...)\
+
208  get_assertTestExpire(__VA_ARGS__, assertTestExpire2, assertTestExpire1)\
+
209  (__VA_ARGS__)
+
210 #define get_assertTestExpire(_1, _2, NAME, ...) NAME
+
211 #define assertTestExpire1(name) \
+
212  assertTestStatusInternal1(name, isExpired, kMessageExpired)
+
213 #define assertTestExpire2(testSuite, name) \
+
214  assertTestStatusInternal2(testSuite, name, isExpired, kMessageExpired)
+
215 
+
217 #define assertTestNotExpire(...)\
+
218  get_assertTestNotExpire(__VA_ARGS__, assertTestNotExpire2, assertTestNotExpire1)\
+
219  (__VA_ARGS__)
+
220 #define get_assertTestNotExpire(_1, _2, NAME, ...) NAME
+
221 #define assertTestNotExpire1(name) \
+
222  assertTestStatusInternal1(name, isNotExpired, kMessageNotExpired)
+
223 #define assertTestNotExpire2(testSuite, name) \
+
224  assertTestStatusInternal2(testSuite, name, isNotExpired, kMessageNotExpired)
+
225 
+
227 #define assertTestStatusInternal1(name,method,message) do {\
+
228  if (!assertionTestStatus(\
+
229  __FILE__,__LINE__,#name,AUNIT_FPSTR(message),\
+
230  test_##name##_instance.method()))\
+
231  return;\
+
232 } while (false)
+
233 
+
234 #define assertTestStatusInternal2(testSuite,name,method,message) do {\
+
235  if (!assertionTestStatus(\
+
236  __FILE__,__LINE__,#testSuite "_" #name,AUNIT_FPSTR(message),\
+
237  testSuite##_##name##_instance.method()))\
+
238  return;\
+
239 } while (false)
+
240 
+
241 // Meta tests for testF() and testingF() are slightly different because
+
242 // the name of the fixture class is appended to the instance name.
+
243 
+
245 #define checkTestDoneF(testClass,name) \
+
246  (testClass##_##name##_instance.isDone())
+
247 
+
249 #define checkTestNotDoneF(testClass,name) \
+
250  (testClass##_##name##_instance.isNotDone())
+
251 
+
253 #define checkTestPassF(testClass,name) \
+
254  (testClass##_##name##_instance.isPassed())
+
255 
+
257 #define checkTestNotPassF(testClass,name) \
+
258  (testClass##_##name##_instance.isNotPassed())
+
259 
+
261 #define checkTestFailF(testClass,name) \
+
262  (testClass##_##name##_instance.isFailed())
+
263 
+
265 #define checkTestNotFailF(testClass,name) \
+
266  (testClass##_##name##_instance.isNotFailed())
+
267 
+
269 #define checkTestSkipF(testClass,name) \
+
270  (testClass##_##name##_instance.isSkipped())
+
271 
+
273 #define checkTestNotSkipF(testClass,name) \
+
274  (testClass##_##name##_instance.isNotSkipped())
+
275 
+
277 #define checkTestExpireF(testClass,name) \
+
278  (testClass##_##name##_instance.isExpired())
+
279 
+
281 #define checkTestNotExpireF(testClass,name) \
+
282  (testClass##_##name##_instance.isNotExpired())
+
283 
+
284 // If the assertTestXxx() macros fail, they generate an optional output, calls
+
285 // fail(), and returns from the current test case.
+
286 
+
288 #define assertTestDoneF(testClass,name) \
+
289  assertTestStatusInternalF(testClass, name, isDone, kMessageDone)
+
290 
+
292 #define assertTestNotDoneF(testClass,name) \
+
293  assertTestStatusInternalF(testClass, name, isNotDone, kMessageNotDone)
+
294 
+
296 #define assertTestPassF(testClass,name) \
+
297  assertTestStatusInternalF(testClass, name, isPassed, kMessagePassed)
+
298 
+
300 #define assertTestNotPassF(testClass,name) \
+
301  assertTestStatusInternalF(testClass, name, isNotPassed, kMessageNotPassed)
+
302 
+
304 #define assertTestFailF(testClass,name) \
+
305  assertTestStatusInternalF(testClass, name, isFailed, kMessageFailed)
+
306 
+
308 #define assertTestNotFailF(testClass,name) \
+
309  assertTestStatusInternalF(testClass, name, isNotFailed, kMessageNotFailed)
+
310 
+
312 #define assertTestSkipF(testClass,name) \
+
313  assertTestStatusInternalF(testClass, name, isSkipped, kMessageSkipped)
+
314 
+
316 #define assertTestNotSkipF(testClass,name) \
+
317  assertTestStatusInternalF(testClass, name, isNotSkipped, \
+
318  kMessageNotSkipped)
+
319 
+
321 #define assertTestExpireF(testClass,name) \
+
322  assertTestStatusInternalF(testClass, name, isExpired, kMessageExpired)
+
323 
+
325 #define assertTestNotExpireF(testClass,name) \
+
326  assertTestStatusInternalF(testClass, name, isNotExpired, \
+
327  kMessageNotExpired)
+
328 
+
330 #define assertTestStatusInternalF(testClass,name,method,message) do {\
+
331  if (!assertionTestStatus(__FILE__, __LINE__, #name, AUNIT_FPSTR(message),\
+
332  testClass##_##name##_instance.method()))\
+
333  return;\
+
334 } while (false)
+
335 
+
336 // Methods that sets the status of the current test, prints a message, and
+
337 // exits immediately.
+
338 
+
343 #define failTestNow() do {\
+
344  setStatusNow(__FILE__, __LINE__, kStatusFailed, AUNIT_FPSTR(kMessageFailed));\
+
345  return;\
+
346 } while (false)
+
347 
+
352 #define passTestNow() do {\
+
353  setStatusNow(__FILE__, __LINE__, kStatusPassed, AUNIT_FPSTR(kMessagePassed));\
+
354  return;\
+
355 } while (false)
+
356 
+
361 #define skipTestNow() do {\
+
362  setStatusNow(__FILE__, __LINE__, kStatusSkipped,\
+
363  AUNIT_FPSTR(kMessageSkipped));\
+
364  return;\
+
365 } while (false)
+
366 
+
371 #define expireTestNow() do {\
+
372  setStatusNow(__FILE__, __LINE__, kStatusExpired,\
+
373  AUNIT_FPSTR(kMessageExpired));\
+
374  return;\
+
375 } while (false)
+
376 
+
377 #endif
+ diff --git a/docs/html/MetaAssertion_8cpp_source.html b/docs/html/MetaAssertion_8cpp_source.html index bfaf965..b6cb85b 100644 --- a/docs/html/MetaAssertion_8cpp_source.html +++ b/docs/html/MetaAssertion_8cpp_source.html @@ -1,11 +1,11 @@ - + - + -AUnit: /home/brian/dev/AUnit/src/aunit/MetaAssertion.cpp Source File +AUnit: /home/brian/src/AUnit/src/aunit/MetaAssertion.cpp Source File @@ -22,7 +22,7 @@
AUnit -  1.3.2 +  1.3.3
Unit testing framework for Arduino platforms inspired by ArduinoUnit and Google Test.
@@ -31,18 +31,21 @@
- + +/* @license-end */
MetaAssertion.cpp
-
1 /*
2 MIT License
3 
4 Copyright (c) 2018 Brian T. Park
5 
6 Permission is hereby granted, free of charge, to any person obtaining a copy
7 of this software and associated documentation files (the "Software"), to deal
8 in the Software without restriction, including without limitation the rights
9 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 copies of the Software, and to permit persons to whom the Software is
11 furnished to do so, subject to the following conditions:
12 
13 The above copyright notice and this permission notice shall be included in all
14 copies or substantial portions of the Software.
15 
16 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22 SOFTWARE.
23 */
24 
25 #include <Arduino.h> // definition of Print
26 #include "Flash.h"
27 #include "Printer.h"
28 #include "Verbosity.h"
29 #include "Compare.h"
30 #include "TestRunner.h"
31 #include "MetaAssertion.h"
32 
33 namespace aunit {
34 
35 // Moving these strings into PROGMEM saves 162 bytes of flash memory (from
36 // elimination of a function) and 130 bytes of static memory,
37 const char MetaAssertion::kMessageDone[] PROGMEM = "done";
38 const char MetaAssertion::kMessageNotDone[] PROGMEM = "not done";
39 const char MetaAssertion::kMessagePassed[] PROGMEM = "passed";
40 const char MetaAssertion::kMessageNotPassed[] PROGMEM = "not passed";
41 const char MetaAssertion::kMessageFailed[] PROGMEM = "failed";
42 const char MetaAssertion::kMessageNotFailed[] PROGMEM = "not failed";
43 const char MetaAssertion::kMessageSkipped[] PROGMEM = "skipped";
44 const char MetaAssertion::kMessageNotSkipped[] PROGMEM = "not skipped";
45 const char MetaAssertion::kMessageExpired[] PROGMEM = "timed out";
46 const char MetaAssertion::kMessageNotExpired[] PROGMEM = "not timed out";
47 
48 namespace {
49 
50 // Print an assertion message describing whether the given 'testName' has passed
51 // or failed
52 void printAssertionTestStatusMessage(
53  bool ok, const char* file, uint16_t line,
54  const char* testName, const __FlashStringHelper* statusMessage) {
55  // Many of the following strings are duplicated in Assertion.cpp and
56  // the compiler/linker will dedupe them.
57  Print* printer = Printer::getPrinter();
58  printer->print("Assertion ");
59  printer->print(ok ? "passed" : "failed");
60  printer->print(F(": Test "));
61  printer->print(testName);
62  printer->print(" is ");
63  printer->print(statusMessage);
64  printer->print(", file ");
65  printer->print(file);
66  printer->print(", line ");
67  printer->print(line);
68  printer->println('.');
69 }
70 
71 }
72 
73 bool MetaAssertion::assertionTestStatus(const char* file, uint16_t line,
74  const char* testName, const __FlashStringHelper* statusMessage, bool ok) {
75  if (isDone()) return false;
76  if (isOutputEnabled(ok)) {
77  printAssertionTestStatusMessage(ok, file, line, testName, statusMessage);
78  }
79  setPassOrFail(ok);
80  return ok;
81 }
82 
83 namespace {
84 
85 // Print message for failNow() macro.
86 // "Status failed, file xxx, line yyy."
87 void printStatusNowMessage(const char* file, uint16_t line,
88  const __FlashStringHelper* statusString) {
89  // Many of these strings are duplicated in Assertion.cpp and will be deduped
90  // by the compiler/linker.
91  Print* printer = Printer::getPrinter();
92  printer->print(F("Status "));
93  printer->print(statusString);
94  printer->print(", file ");
95  printer->print(file);
96  printer->print(", line ");
97  printer->print(line);
98  printer->println('.');
99 }
100 
101 }
102 
103 bool MetaAssertion::isOutputEnabledForStatus(uint8_t status) const {
104  return (status == kStatusFailed && isVerbosity(Verbosity::kTestFailed))
108 }
109 
110 void MetaAssertion::setStatusNow(const char* file, uint16_t line,
111  uint8_t status, const __FlashStringHelper* statusString) {
112  if (isDone()) return;
113  if (isOutputEnabledForStatus(status)) {
114  printStatusNowMessage(file, line, statusString);
115  }
116  setStatus(status);
117 }
118 
119 }
bool isOutputEnabledForStatus(uint8_t status) const
Return true if setting of status should print a message.
-
static const uint8_t kTestExpired
Print test timed out message.
Definition: Verbosity.h:55
-
static const uint8_t kStatusFailed
Test has failed, or fail() was called.
Definition: Test.h:102
-
bool isVerbosity(uint8_t verbosity) const
Determine if any of the given verbosity is enabled.
Definition: Test.h:275
-
void setPassOrFail(bool ok)
Set the status to Passed or Failed depending on ok.
Definition: Test.cpp:50
-
static const uint8_t kTestPassed
Print test passed message.
Definition: Verbosity.h:46
-
static const uint8_t kStatusPassed
Test has passed, or pass() was called.
Definition: Test.h:99
-
bool assertionTestStatus(const char *file, uint16_t line, const char *testName, const __FlashStringHelper *statusMessage, bool ok)
Set the status of the current test using the &#39;ok&#39; status from another test, and print the assertion m...
-
static const uint8_t kStatusSkipped
Test is skipped through the exclude() method or skip() was called.
Definition: Test.h:105
-
This file provides overloaded compareXxx(a, b) functions which are used by the various assertXxx(a...
- -
void setStatusNow(const char *file, uint16_t line, uint8_t status, const __FlashStringHelper *statusString)
Set the status of the current test to &#39;status&#39; and print a message.
-
static Print * getPrinter()
Get the output printer used by the various assertion() methods and the TestRunner.
Definition: Printer.h:48
-
bool isOutputEnabled(bool ok) const
Returns true if an assertion message should be printed.
Definition: Assertion.cpp:183
-
bool isDone() const
Return true if test has been asserted.
Definition: Test.h:196
-
static const uint8_t kStatusExpired
Test has timed out, or expire() called.
Definition: Test.h:108
-
static const uint8_t kTestSkipped
Print test skipped message.
Definition: Verbosity.h:52
-
Various macros to smooth over the differences among the various platforms with regards to their suppo...
-
static const uint8_t kTestFailed
Print test failed message.
Definition: Verbosity.h:49
-
void setStatus(uint8_t status)
Set the status of the test.
Definition: Test.h:173
+
1 /*
+
2 MIT License
+
3 
+
4 Copyright (c) 2018 Brian T. Park
+
5 
+
6 Permission is hereby granted, free of charge, to any person obtaining a copy
+
7 of this software and associated documentation files (the "Software"), to deal
+
8 in the Software without restriction, including without limitation the rights
+
9 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+
10 copies of the Software, and to permit persons to whom the Software is
+
11 furnished to do so, subject to the following conditions:
+
12 
+
13 The above copyright notice and this permission notice shall be included in all
+
14 copies or substantial portions of the Software.
+
15 
+
16 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+
17 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+
18 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+
19 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+
20 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+
21 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+
22 SOFTWARE.
+
23 */
+
24 
+
25 #include <Arduino.h> // definition of Print
+
26 #include "Flash.h"
+
27 #include "Printer.h"
+
28 #include "Verbosity.h"
+
29 #include "Compare.h"
+
30 #include "TestRunner.h"
+
31 #include "MetaAssertion.h"
+
32 
+
33 namespace aunit {
+
34 
+
35 // Moving these strings into PROGMEM saves 162 bytes of flash memory (from
+
36 // elimination of a function) and 130 bytes of static memory,
+
37 const char MetaAssertion::kMessageDone[] PROGMEM = "done";
+
38 const char MetaAssertion::kMessageNotDone[] PROGMEM = "not done";
+
39 const char MetaAssertion::kMessagePassed[] PROGMEM = "passed";
+
40 const char MetaAssertion::kMessageNotPassed[] PROGMEM = "not passed";
+
41 const char MetaAssertion::kMessageFailed[] PROGMEM = "failed";
+
42 const char MetaAssertion::kMessageNotFailed[] PROGMEM = "not failed";
+
43 const char MetaAssertion::kMessageSkipped[] PROGMEM = "skipped";
+
44 const char MetaAssertion::kMessageNotSkipped[] PROGMEM = "not skipped";
+
45 const char MetaAssertion::kMessageExpired[] PROGMEM = "timed out";
+
46 const char MetaAssertion::kMessageNotExpired[] PROGMEM = "not timed out";
+
47 
+
48 namespace {
+
49 
+
50 // Print an assertion message describing whether the given 'testName' has passed
+
51 // or failed
+
52 void printAssertionTestStatusMessage(
+
53  bool ok, const char* file, uint16_t line,
+
54  const char* testName, const __FlashStringHelper* statusMessage) {
+
55  // Many of the following strings are duplicated in Assertion.cpp and
+
56  // the compiler/linker will dedupe them.
+
57  Print* printer = Printer::getPrinter();
+
58  printer->print("Assertion ");
+
59  printer->print(ok ? "passed" : "failed");
+
60  printer->print(F(": Test "));
+
61  printer->print(testName);
+
62  printer->print(" is ");
+
63  printer->print(statusMessage);
+
64  printer->print(", file ");
+
65  printer->print(file);
+
66  printer->print(", line ");
+
67  printer->print(line);
+
68  printer->println('.');
+
69 }
+
70 
+
71 }
+
72 
+
73 bool MetaAssertion::assertionTestStatus(const char* file, uint16_t line,
+
74  const char* testName, const __FlashStringHelper* statusMessage, bool ok) {
+
75  if (isDone()) return false;
+
76  if (isOutputEnabled(ok)) {
+
77  printAssertionTestStatusMessage(ok, file, line, testName, statusMessage);
+
78  }
+
79  setPassOrFail(ok);
+
80  return ok;
+
81 }
+
82 
+
83 namespace {
+
84 
+
85 // Print message for failNow() macro.
+
86 // "Status failed, file xxx, line yyy."
+
87 void printStatusNowMessage(const char* file, uint16_t line,
+
88  const __FlashStringHelper* statusString) {
+
89  // Many of these strings are duplicated in Assertion.cpp and will be deduped
+
90  // by the compiler/linker.
+
91  Print* printer = Printer::getPrinter();
+
92  printer->print(F("Status "));
+
93  printer->print(statusString);
+
94  printer->print(", file ");
+
95  printer->print(file);
+
96  printer->print(", line ");
+
97  printer->print(line);
+
98  printer->println('.');
+
99 }
+
100 
+
101 }
+
102 
+
103 bool MetaAssertion::isOutputEnabledForStatus(uint8_t status) const {
+
104  return (status == kStatusFailed && isVerbosity(Verbosity::kTestFailed))
+ + + +
108 }
+
109 
+
110 void MetaAssertion::setStatusNow(const char* file, uint16_t line,
+
111  uint8_t status, const __FlashStringHelper* statusString) {
+
112  if (isDone()) return;
+
113  if (isOutputEnabledForStatus(status)) {
+
114  printStatusNowMessage(file, line, statusString);
+
115  }
+
116  setStatus(status);
+
117 }
+
118 
+
119 }
+
static const uint8_t kTestSkipped
Print test skipped message.
Definition: Verbosity.h:52
+ +
static const uint8_t kStatusFailed
Test has failed, or fail() was called.
Definition: Test.h:102
+
bool assertionTestStatus(const char *file, uint16_t line, const char *testName, const __FlashStringHelper *statusMessage, bool ok)
Set the status of the current test using the 'ok' status from another test, and print the assertion m...
+
bool isOutputEnabledForStatus(uint8_t status) const
Return true if setting of status should print a message.
+
static const uint8_t kTestFailed
Print test failed message.
Definition: Verbosity.h:49
+
void setPassOrFail(bool ok)
Set the status to Passed or Failed depending on ok.
Definition: Test.cpp:50
+
static Print * getPrinter()
Get the output printer used by the various assertion() methods and the TestRunner.
Definition: Printer.h:48
+
bool isOutputEnabled(bool ok) const
Returns true if an assertion message should be printed.
Definition: Assertion.cpp:183
+
static const uint8_t kStatusPassed
Test has passed, or pass() was called.
Definition: Test.h:99
+
static const uint8_t kTestPassed
Print test passed message.
Definition: Verbosity.h:46
+
static const uint8_t kStatusExpired
Test has timed out, or expire() called.
Definition: Test.h:108
+
bool isDone() const
Return true if test has been asserted.
Definition: Test.h:196
+
static const uint8_t kStatusSkipped
Test is skipped through the exclude() method or skip() was called.
Definition: Test.h:105
+
void setStatus(uint8_t status)
Set the status of the test.
Definition: Test.h:173
+
bool isVerbosity(uint8_t verbosity) const
Determine if any of the given verbosity is enabled.
Definition: Test.h:275
+
void setStatusNow(const char *file, uint16_t line, uint8_t status, const __FlashStringHelper *statusString)
Set the status of the current test to 'status' and print a message.
+
static const uint8_t kTestExpired
Print test timed out message.
Definition: Verbosity.h:55
+ diff --git a/docs/html/MetaAssertion_8h_source.html b/docs/html/MetaAssertion_8h_source.html index b061dda..c832f4b 100644 --- a/docs/html/MetaAssertion_8h_source.html +++ b/docs/html/MetaAssertion_8h_source.html @@ -1,11 +1,11 @@ - + - + -AUnit: /home/brian/dev/AUnit/src/aunit/MetaAssertion.h Source File +AUnit: /home/brian/src/AUnit/src/aunit/MetaAssertion.h Source File @@ -22,7 +22,7 @@
AUnit -  1.3.2 +  1.3.3
Unit testing framework for Arduino platforms inspired by ArduinoUnit and Google Test.
@@ -31,18 +31,21 @@
- + +/* @license-end */
MetaAssertion.h
-
1 /*
2 MIT License
3 
4 Copyright (c) 2018 Brian T. Park
5 
6 Permission is hereby granted, free of charge, to any person obtaining a copy
7 of this software and associated documentation files (the "Software"), to deal
8 in the Software without restriction, including without limitation the rights
9 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 copies of the Software, and to permit persons to whom the Software is
11 furnished to do so, subject to the following conditions:
12 
13 The above copyright notice and this permission notice shall be included in all
14 copies or substantial portions of the Software.
15 
16 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22 SOFTWARE.
23 */
24 
25 // Significant portions of the design and implementation of this file came from
26 // https://github.com/mmurdoch/arduinounit/blob/master/src/ArduinoUnit.h
27 
28 #ifndef AUNIT_META_ASSERTION_H
29 #define AUNIT_META_ASSERTION_H
30 
31 #include "Printer.h"
32 #include "Assertion.h"
33 
34 class __FlashStringHelper;
35 
36 namespace aunit {
37 
42 class MetaAssertion: public Assertion {
43  protected:
44  // Human-readable strings for various meta-asssertion messages.
45  // They need to be protected, not private, because they are used by
46  // subclasses through the test() and testing() macros.
47  static const char kMessageDone[];
48  static const char kMessageNotDone[];
49  static const char kMessagePassed[];
50  static const char kMessageNotPassed[];
51  static const char kMessageFailed[];
52  static const char kMessageNotFailed[];
53  static const char kMessageSkipped[];
54  static const char kMessageNotSkipped[];
55  static const char kMessageExpired[];
56  static const char kMessageNotExpired[];
57 
60 
65  bool assertionTestStatus(const char* file, uint16_t line,
66  const char* testName, const __FlashStringHelper* statusMessage,
67  bool ok);
68 
70  bool isOutputEnabledForStatus(uint8_t status) const;
71 
73  void setStatusNow(const char* file, uint16_t line, uint8_t status,
74  const __FlashStringHelper* statusString);
75 
76  private:
77  // Disable copy-constructor and assignment operator
78  MetaAssertion(const MetaAssertion&) = delete;
79  MetaAssertion& operator=(const MetaAssertion&) = delete;
80 
81 };
82 
83 }
84 
85 #endif
bool isOutputEnabledForStatus(uint8_t status) const
Return true if setting of status should print a message.
-
Class that extends the Assertion class to support the checkTestXxx() and assertTestXxx() macros that ...
Definition: MetaAssertion.h:42
-
bool assertionTestStatus(const char *file, uint16_t line, const char *testName, const __FlashStringHelper *statusMessage, bool ok)
Set the status of the current test using the &#39;ok&#39; status from another test, and print the assertion m...
-
MetaAssertion()
Empty constructor.
Definition: MetaAssertion.h:59
- -
void setStatusNow(const char *file, uint16_t line, uint8_t status, const __FlashStringHelper *statusString)
Set the status of the current test to &#39;status&#39; and print a message.
-
An Assertion class is a subclass of Test and provides various overloaded assertion() functions...
Definition: Assertion.h:55
+
1 /*
+
2 MIT License
+
3 
+
4 Copyright (c) 2018 Brian T. Park
+
5 
+
6 Permission is hereby granted, free of charge, to any person obtaining a copy
+
7 of this software and associated documentation files (the "Software"), to deal
+
8 in the Software without restriction, including without limitation the rights
+
9 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+
10 copies of the Software, and to permit persons to whom the Software is
+
11 furnished to do so, subject to the following conditions:
+
12 
+
13 The above copyright notice and this permission notice shall be included in all
+
14 copies or substantial portions of the Software.
+
15 
+
16 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+
17 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+
18 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+
19 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+
20 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+
21 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+
22 SOFTWARE.
+
23 */
+
24 
+
25 // Significant portions of the design and implementation of this file came from
+
26 // https://github.com/mmurdoch/arduinounit/blob/master/src/ArduinoUnit.h
+
27 
+
28 #ifndef AUNIT_META_ASSERTION_H
+
29 #define AUNIT_META_ASSERTION_H
+
30 
+
31 #include "Printer.h"
+
32 #include "Assertion.h"
+
33 
+
34 class __FlashStringHelper;
+
35 
+
36 namespace aunit {
+
37 
+
42 class MetaAssertion: public Assertion {
+
43  protected:
+
44  // Human-readable strings for various meta-asssertion messages.
+
45  // They need to be protected, not private, because they are used by
+
46  // subclasses through the test() and testing() macros.
+
47  static const char kMessageDone[];
+
48  static const char kMessageNotDone[];
+
49  static const char kMessagePassed[];
+
50  static const char kMessageNotPassed[];
+
51  static const char kMessageFailed[];
+
52  static const char kMessageNotFailed[];
+
53  static const char kMessageSkipped[];
+
54  static const char kMessageNotSkipped[];
+
55  static const char kMessageExpired[];
+
56  static const char kMessageNotExpired[];
+
57 
+ +
60 
+
65  bool assertionTestStatus(const char* file, uint16_t line,
+
66  const char* testName, const __FlashStringHelper* statusMessage,
+
67  bool ok);
+
68 
+
70  bool isOutputEnabledForStatus(uint8_t status) const;
+
71 
+
73  void setStatusNow(const char* file, uint16_t line, uint8_t status,
+
74  const __FlashStringHelper* statusString);
+
75 
+
76  private:
+
77  // Disable copy-constructor and assignment operator
+
78  MetaAssertion(const MetaAssertion&) = delete;
+
79  MetaAssertion& operator=(const MetaAssertion&) = delete;
+
80 
+
81 };
+
82 
+
83 }
+
84 
+
85 #endif
+
An Assertion class is a subclass of Test and provides various overloaded assertion() functions.
Definition: Assertion.h:55
+
Class that extends the Assertion class to support the checkTestXxx() and assertTestXxx() macros that ...
Definition: MetaAssertion.h:42
+
bool assertionTestStatus(const char *file, uint16_t line, const char *testName, const __FlashStringHelper *statusMessage, bool ok)
Set the status of the current test using the 'ok' status from another test, and print the assertion m...
+
bool isOutputEnabledForStatus(uint8_t status) const
Return true if setting of status should print a message.
+
MetaAssertion()
Empty constructor.
Definition: MetaAssertion.h:59
+
void setStatusNow(const char *file, uint16_t line, uint8_t status, const __FlashStringHelper *statusString)
Set the status of the current test to 'status' and print a message.
diff --git a/docs/html/Printer_8cpp_source.html b/docs/html/Printer_8cpp_source.html index f691927..f292248 100644 --- a/docs/html/Printer_8cpp_source.html +++ b/docs/html/Printer_8cpp_source.html @@ -1,11 +1,11 @@ - + - + -AUnit: /home/brian/dev/AUnit/src/aunit/Printer.cpp Source File +AUnit: /home/brian/src/AUnit/src/aunit/Printer.cpp Source File @@ -22,7 +22,7 @@
AUnit -  1.3.2 +  1.3.3
Unit testing framework for Arduino platforms inspired by ArduinoUnit and Google Test.
@@ -31,18 +31,21 @@
- + +/* @license-end */
Printer.cpp
-
1 /*
2 MIT License
3 
4 Copyright (c) 2018 Brian T. Park
5 
6 Permission is hereby granted, free of charge, to any person obtaining a copy
7 of this software and associated documentation files (the "Software"), to deal
8 in the Software without restriction, including without limitation the rights
9 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 copies of the Software, and to permit persons to whom the Software is
11 furnished to do so, subject to the following conditions:
12 
13 The above copyright notice and this permission notice shall be included in all
14 copies or substantial portions of the Software.
15 
16 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22 SOFTWARE.
23 */
24 
25 #include <Arduino.h> // Serial
26 #include "Flash.h"
27 #include "Printer.h"
28 
29 namespace aunit {
30 
31 Print* Printer::sPrinter = &SERIAL_PORT_MONITOR;
32 
33 }
-
Various macros to smooth over the differences among the various platforms with regards to their suppo...
+
1 /*
+
2 MIT License
+
3 
+
4 Copyright (c) 2018 Brian T. Park
+
5 
+
6 Permission is hereby granted, free of charge, to any person obtaining a copy
+
7 of this software and associated documentation files (the "Software"), to deal
+
8 in the Software without restriction, including without limitation the rights
+
9 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+
10 copies of the Software, and to permit persons to whom the Software is
+
11 furnished to do so, subject to the following conditions:
+
12 
+
13 The above copyright notice and this permission notice shall be included in all
+
14 copies or substantial portions of the Software.
+
15 
+
16 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+
17 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+
18 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+
19 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+
20 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+
21 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+
22 SOFTWARE.
+
23 */
+
24 
+
25 #include <Arduino.h> // Serial
+
26 #include "Flash.h"
+
27 #include "Printer.h"
+
28 
+
29 namespace aunit {
+
30 
+
31 Print* Printer::sPrinter = &SERIAL_PORT_MONITOR;
+
32 
+
33 }
+ diff --git a/docs/html/Printer_8h_source.html b/docs/html/Printer_8h_source.html index 0906c1e..ee8f35d 100644 --- a/docs/html/Printer_8h_source.html +++ b/docs/html/Printer_8h_source.html @@ -1,11 +1,11 @@ - + - + -AUnit: /home/brian/dev/AUnit/src/aunit/Printer.h Source File +AUnit: /home/brian/src/AUnit/src/aunit/Printer.h Source File @@ -22,7 +22,7 @@
AUnit -  1.3.2 +  1.3.3
Unit testing framework for Arduino platforms inspired by ArduinoUnit and Google Test.
@@ -31,18 +31,21 @@
- + +/* @license-end */
Printer.h
-
1 /*
2 MIT License
3 
4 Copyright (c) 2018 Brian T. Park
5 
6 Permission is hereby granted, free of charge, to any person obtaining a copy
7 of this software and associated documentation files (the "Software"), to deal
8 in the Software without restriction, including without limitation the rights
9 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 copies of the Software, and to permit persons to whom the Software is
11 furnished to do so, subject to the following conditions:
12 
13 The above copyright notice and this permission notice shall be included in all
14 copies or substantial portions of the Software.
15 
16 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22 SOFTWARE.
23 */
24 
25 #ifndef AUNIT_PRINTER_H
26 #define AUNIT_PRINTER_H
27 
28 class Print;
29 
30 namespace aunit {
31 
41 class Printer {
42  public:
48  static Print* getPrinter() { return sPrinter; }
49 
51  static void setPrinter(Print* printer) { sPrinter = printer; }
52 
53  private:
54  // Disable copy-constructor and assignment operator
55  Printer(const Printer&) = delete;
56  Printer& operator=(const Printer&) = delete;
57 
58  static Print* sPrinter;
59 };
60 
61 }
62 
63 #endif
static void setPrinter(Print *printer)
Set the printer.
Definition: Printer.h:51
-
Utility class that provides a level of indirection to the Print class where test results can be sent...
Definition: Printer.h:41
- -
static Print * getPrinter()
Get the output printer used by the various assertion() methods and the TestRunner.
Definition: Printer.h:48
+
1 /*
+
2 MIT License
+
3 
+
4 Copyright (c) 2018 Brian T. Park
+
5 
+
6 Permission is hereby granted, free of charge, to any person obtaining a copy
+
7 of this software and associated documentation files (the "Software"), to deal
+
8 in the Software without restriction, including without limitation the rights
+
9 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+
10 copies of the Software, and to permit persons to whom the Software is
+
11 furnished to do so, subject to the following conditions:
+
12 
+
13 The above copyright notice and this permission notice shall be included in all
+
14 copies or substantial portions of the Software.
+
15 
+
16 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+
17 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+
18 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+
19 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+
20 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+
21 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+
22 SOFTWARE.
+
23 */
+
24 
+
25 #ifndef AUNIT_PRINTER_H
+
26 #define AUNIT_PRINTER_H
+
27 
+
28 class Print;
+
29 
+
30 namespace aunit {
+
31 
+
41 class Printer {
+
42  public:
+
48  static Print* getPrinter() { return sPrinter; }
+
49 
+
51  static void setPrinter(Print* printer) { sPrinter = printer; }
+
52 
+
53  private:
+
54  // Disable copy-constructor and assignment operator
+
55  Printer(const Printer&) = delete;
+
56  Printer& operator=(const Printer&) = delete;
+
57 
+
58  static Print* sPrinter;
+
59 };
+
60 
+
61 }
+
62 
+
63 #endif
+
Utility class that provides a level of indirection to the Print class where test results can be sent.
Definition: Printer.h:41
+
static Print * getPrinter()
Get the output printer used by the various assertion() methods and the TestRunner.
Definition: Printer.h:48
+
static void setPrinter(Print *printer)
Set the printer.
Definition: Printer.h:51
diff --git a/docs/html/README_8md_source.html b/docs/html/README_8md_source.html deleted file mode 100644 index 2b1cc97..0000000 --- a/docs/html/README_8md_source.html +++ /dev/null @@ -1,75 +0,0 @@ - - - - - - - -AUnit: /home/brian/dev/AUnit/src/aunit/fake/README.md Source File - - - - - - - - - -
-
- - - - - - -
-
AUnit -  1.3.2 -
-
Unit testing framework for Arduino platforms inspired by ArduinoUnit and Google Test.
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
-
/home/brian/dev/AUnit/src/aunit/fake/README.md
-
-
-
1 # Fake Arduino Classes
2 
3 This directory contains fake versions of some Arduino classes for the purposes
4 of unit testing. These header files are *not* included automatically by the
5 `#include <AUnit.h>` preprocessor directive. The various fake classes must be
6 included manually just after the `<AUnit.h>` is included. The fake classes
7 live in the `aunit::fake` namespace.
8 
9 ## FakePrint
10 
11 The `FakePrint` class is an implementation of the
12 [Print](https://github.com/arduino/ArduinoCore-avr/blob/master/cores/arduino/Print.h)
13 class which is the base class of the
14 [HardwareSerial](https://github.com/arduino/ArduinoCore-avr/blob/master/cores/arduino/HardwareSerial.h)
15 and other output classes. The `Serial` global object is an instance of the
16 `HardwareSerial` class. If a user-defined class or method is defined to use an
17 instance of the `Print` object, instead of hardcoding a dependency to the
18 `Serial` instance, then an instance of the `FakePrint` class can be substituted
19 and used to write unit tests for the user-defined class or method.
20 
21 Let's say the user-defined class is called `Greeter` and a method called
22 `greet()` prints something out to `Serial`:
23 
24 ```C++
25 class Greeter {
26  public:
27  Greeter(Print& printer):
28  mPrinter(printer) {}
29 
30  void greet(int n) {
31  mPrinter.print("hello ");
32  mPrinter.print(n);
33  mPrinter.println(" world(s)");
34  }
35 
36  private:
37  Print& mPrinter;
38 };
39 ```
40 
41 If we want to verify that the `Greeter::greet()` method prints what is expected,
42 we inject an instance of `FakePrint` (instead of `Serial`) in a test called
43 `GreeterTest.ino`:
44 
45 ```C++
46 #line 2 "GreeterTest.ino"
47 
48 #include <AUnit.h>
49 #include <aunit/fake/FakePrint.h>
50 
51 using namespace aunit;
52 using namespace aunit::fake;
53 
54 test(GreeterTest, greet) {
55  FakePrint fakePrint;
56  Greeter greeter(fakePrint);
57 
58  greeter.greet(1);
59  assertEqual("hello 1 world(s)\r\n", fakePrint.getBuffer());
60  fakePrint.flush();
61 
62  greeter.greet(2);
63  assertEqual("hello 2 world(s)\r\n", fakePrint.getBuffer());
64  fakePrint.flush();
65 }
66 
67 void setup() {
68  delay(1000);
69  Serial.begin(115200);
70  while (! Serial); // Wait until Serial is ready - Leonardo/Micro
71 }
72 
73 void loop() {
74  TestRunner::run();
75 }
76 ```
- - - - diff --git a/docs/html/TestAgain_8cpp_source.html b/docs/html/TestAgain_8cpp_source.html index 2e8fc58..0acce7a 100644 --- a/docs/html/TestAgain_8cpp_source.html +++ b/docs/html/TestAgain_8cpp_source.html @@ -1,11 +1,11 @@ - + - + -AUnit: /home/brian/dev/AUnit/src/aunit/TestAgain.cpp Source File +AUnit: /home/brian/src/AUnit/src/aunit/TestAgain.cpp Source File @@ -22,7 +22,7 @@
AUnit -  1.3.2 +  1.3.3
Unit testing framework for Arduino platforms inspired by ArduinoUnit and Google Test.
@@ -31,18 +31,21 @@
- + +/* @license-end */
TestAgain.cpp
-
1 /*
2 MIT License
3 
4 Copyright (c) 2018 Brian T. Park
5 
6 Permission is hereby granted, free of charge, to any person obtaining a copy
7 of this software and associated documentation files (the "Software"), to deal
8 in the Software without restriction, including without limitation the rights
9 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 copies of the Software, and to permit persons to whom the Software is
11 furnished to do so, subject to the following conditions:
12 
13 The above copyright notice and this permission notice shall be included in all
14 copies or substantial portions of the Software.
15 
16 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22 SOFTWARE.
23 */
24 
25 #include "TestAgain.h"
26 
27 namespace aunit {
28 
30  again();
31 }
32 
33 }
34 
virtual void again()=0
User-provided test case.
- -
void loop() override
Calls the user-provided again() method multiple times until the user code explicitly resolves the tes...
Definition: TestAgain.cpp:29
+
1 /*
+
2 MIT License
+
3 
+
4 Copyright (c) 2018 Brian T. Park
+
5 
+
6 Permission is hereby granted, free of charge, to any person obtaining a copy
+
7 of this software and associated documentation files (the "Software"), to deal
+
8 in the Software without restriction, including without limitation the rights
+
9 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+
10 copies of the Software, and to permit persons to whom the Software is
+
11 furnished to do so, subject to the following conditions:
+
12 
+
13 The above copyright notice and this permission notice shall be included in all
+
14 copies or substantial portions of the Software.
+
15 
+
16 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+
17 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+
18 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+
19 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+
20 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+
21 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+
22 SOFTWARE.
+
23 */
+
24 
+
25 #include "TestAgain.h"
+
26 
+
27 namespace aunit {
+
28 
+ +
30  again();
+
31 }
+
32 
+
33 }
+
34 
+
void loop() override
Calls the user-provided again() method multiple times until the user code explicitly resolves the tes...
Definition: TestAgain.cpp:29
+
virtual void again()=0
User-provided test case.
diff --git a/docs/html/TestAgain_8h_source.html b/docs/html/TestAgain_8h_source.html index 4150fe2..de4e09e 100644 --- a/docs/html/TestAgain_8h_source.html +++ b/docs/html/TestAgain_8h_source.html @@ -1,11 +1,11 @@ - + - + -AUnit: /home/brian/dev/AUnit/src/aunit/TestAgain.h Source File +AUnit: /home/brian/src/AUnit/src/aunit/TestAgain.h Source File @@ -22,7 +22,7 @@
AUnit -  1.3.2 +  1.3.3
Unit testing framework for Arduino platforms inspired by ArduinoUnit and Google Test.
@@ -31,18 +31,21 @@
- + +/* @license-end */
TestAgain.h
-
1 /*
2 MIT License
3 
4 Copyright (c) 2018 Brian T. Park
5 
6 Permission is hereby granted, free of charge, to any person obtaining a copy
7 of this software and associated documentation files (the "Software"), to deal
8 in the Software without restriction, including without limitation the rights
9 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 copies of the Software, and to permit persons to whom the Software is
11 furnished to do so, subject to the following conditions:
12 
13 The above copyright notice and this permission notice shall be included in all
14 copies or substantial portions of the Software.
15 
16 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22 SOFTWARE.
23 */
24 
25 #ifndef AUNIT_TEST_AGAIN_H
26 #define AUNIT_TEST_AGAIN_H
27 
28 #include <stdint.h>
29 #include "FCString.h"
30 #include "MetaAssertion.h"
31 
32 class __FlashStringHelper;
33 
34 namespace aunit {
35 
37 class TestAgain: public MetaAssertion {
38  public:
40  TestAgain() {}
41 
47  void loop() override;
48 
50  virtual void again() = 0;
51 
52  private:
53  // Disable copy-constructor and assignment operator
54  TestAgain(const TestAgain&) = delete;
55  TestAgain& operator=(const TestAgain&) = delete;
56 };
57 
58 }
59 
60 #endif
virtual void again()=0
User-provided test case.
-
Similar to TestOnce but performs the user-defined test multiple times.
Definition: TestAgain.h:37
-
Class that extends the Assertion class to support the checkTestXxx() and assertTestXxx() macros that ...
Definition: MetaAssertion.h:42
-
TestAgain()
Constructor.
Definition: TestAgain.h:40
- -
void loop() override
Calls the user-provided again() method multiple times until the user code explicitly resolves the tes...
Definition: TestAgain.cpp:29
+
1 /*
+
2 MIT License
+
3 
+
4 Copyright (c) 2018 Brian T. Park
+
5 
+
6 Permission is hereby granted, free of charge, to any person obtaining a copy
+
7 of this software and associated documentation files (the "Software"), to deal
+
8 in the Software without restriction, including without limitation the rights
+
9 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+
10 copies of the Software, and to permit persons to whom the Software is
+
11 furnished to do so, subject to the following conditions:
+
12 
+
13 The above copyright notice and this permission notice shall be included in all
+
14 copies or substantial portions of the Software.
+
15 
+
16 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+
17 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+
18 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+
19 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+
20 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+
21 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+
22 SOFTWARE.
+
23 */
+
24 
+
25 #ifndef AUNIT_TEST_AGAIN_H
+
26 #define AUNIT_TEST_AGAIN_H
+
27 
+
28 #include <stdint.h>
+
29 #include "FCString.h"
+
30 #include "MetaAssertion.h"
+
31 
+
32 class __FlashStringHelper;
+
33 
+
34 namespace aunit {
+
35 
+
37 class TestAgain: public MetaAssertion {
+
38  public:
+
40  TestAgain() {}
+
41 
+
47  void loop() override;
+
48 
+
50  virtual void again() = 0;
+
51 
+
52  private:
+
53  // Disable copy-constructor and assignment operator
+
54  TestAgain(const TestAgain&) = delete;
+
55  TestAgain& operator=(const TestAgain&) = delete;
+
56 };
+
57 
+
58 }
+
59 
+
60 #endif
+
Class that extends the Assertion class to support the checkTestXxx() and assertTestXxx() macros that ...
Definition: MetaAssertion.h:42
+
void loop() override
Calls the user-provided again() method multiple times until the user code explicitly resolves the tes...
Definition: TestAgain.cpp:29
+
virtual void again()=0
User-provided test case.
+
TestAgain()
Constructor.
Definition: TestAgain.h:40
+
Similar to TestOnce but performs the user-defined test multiple times.
Definition: TestAgain.h:37
diff --git a/docs/html/TestMacros_8h.html b/docs/html/TestMacros_8h.html index 86e32f8..3d4d05f 100644 --- a/docs/html/TestMacros_8h.html +++ b/docs/html/TestMacros_8h.html @@ -1,11 +1,11 @@ - + - + -AUnit: /home/brian/dev/AUnit/src/aunit/TestMacros.h File Reference +AUnit: /home/brian/src/AUnit/src/aunit/TestMacros.h File Reference @@ -22,7 +22,7 @@
AUnit -  1.3.2 +  1.3.3
Unit testing framework for Arduino platforms inspired by ArduinoUnit and Google Test.
@@ -31,18 +31,21 @@
- + +/* @license-end */
TestMacros.h File Reference
- -

Various macros (test(), testF(), testing(), testingF(), externTest(), externTestF(), externTesting(), externTestingF()) are defined in this header. -More...

#include <stdint.h>
#include <Arduino.h>
#include "Flash.h"
@@ -82,26 +82,31 @@
Include dependency graph for TestMacros.h:
-
- - - - - - - - - - +
+ + + + + + + + + + + + + +
This graph shows which files directly or indirectly include this file:
-
- - - +
+ + + +
@@ -110,7 +115,7 @@

Macros

#define test(...)   GET_TEST(__VA_ARGS__, TEST2, TEST1)(__VA_ARGS__) - Macro to define a test that will be run only once. More...
+ Macro to define a test that will be run only once. More...
  #define GET_TEST(_1, _2, NAME, ...)   NAME @@ -120,7 +125,7 @@ #define TEST2(suiteName, name)   #define testing(...)   GET_TESTING(__VA_ARGS__, TESTING2, TESTING1)(__VA_ARGS__) - Macro to define a test that will run repeatly upon each iteration of the global loop() method, stopping when the something calls Test::pass(), Test::fail() or Test::skip(). More...
+ Macro to define a test that will run repeatly upon each iteration of the global loop() method, stopping when the something calls Test::pass(), Test::fail() or Test::skip(). More...
  #define GET_TESTING(_1, _2, NAME, ...)   NAME @@ -130,7 +135,7 @@ #define TESTING2(suiteName, name)   #define externTest(...)   GET_EXTERN_TEST(__VA_ARGS__, EXTERN_TEST2, EXTERN_TEST1)(__VA_ARGS__) - Create an extern reference to a test() test case object defined elsewhere. More...
+ Create an extern reference to a test() test case object defined elsewhere. More...
  #define GET_EXTERN_TEST(_1, _2, NAME, ...)   NAME @@ -140,7 +145,7 @@ #define EXTERN_TEST2(suiteName, name)   #define externTesting(...)   GET_EXTERN_TESTING(__VA_ARGS__, EXTERN_TESTING2, EXTERN_TESTING1)(__VA_ARGS__) - Create an extern reference to a testing() test case object defined elsewhere. More...
+ Create an extern reference to a testing() test case object defined elsewhere. More...
  #define GET_EXTERN_TESTING(_1, _2, NAME, ...)   NAME @@ -150,20 +155,20 @@ #define EXTERN_TESTING2(suiteName, name)   #define testF(testClass, name) - Create a test that is derived from a custom TestOnce class. More...
+ Create a test that is derived from a custom TestOnce class. More...
  #define testingF(testClass, name) - Create a test that is derived from a custom TestAgain class. More...
+ Create a test that is derived from a custom TestAgain class. More...
  #define externTestF(testClass, name) - Create an extern reference to a testF() test case object defined elsewhere. More...
+ Create an extern reference to a testF() test case object defined elsewhere. More...
  #define externTestingF(testClass, name) - Create an extern reference to a testingF() test case object defined elsewhere. More...
+ Create an extern reference to a testingF() test case object defined elsewhere. More...
 

Detailed Description

-

Various macros (test(), testF(), testing(), testingF(), externTest(), externTestF(), externTesting(), externTestingF()) are defined in this header.

+

Various macros (test(), testF(), testing(), testingF(), externTest(), externTestF(), externTesting(), externTestingF()) are defined in this header.

Definition in file TestMacros.h.

Macro Definition Documentation

@@ -182,8 +187,12 @@

-Value:
public:\
test_##name();\
void once();\
};\
extern test_##name test_##name##_instance
virtual void once()=0
User-provided test case.
-
Similar to TestAgain but performs user-defined test only once.
Definition: TestOnce.h:40
+Value:
class test_##name : public aunit::TestOnce {\
+
public:\
+
test_##name();\
+
void once();\
+
};\
+
extern test_##name test_##name##_instance

Definition at line 139 of file TestMacros.h.

@@ -214,8 +223,12 @@

-Value:
public:\
suiteName##_##name();\
void once();\
};\
extern suiteName##_##name suiteName##_##name##_instance
virtual void once()=0
User-provided test case.
-
Similar to TestAgain but performs user-defined test only once.
Definition: TestOnce.h:40
+Value:
class suiteName##_##name : public aunit::TestOnce {\
+
public:\
+
suiteName##_##name();\
+
void once();\
+
};\
+
extern suiteName##_##name suiteName##_##name##_instance

Definition at line 147 of file TestMacros.h.

@@ -236,8 +249,12 @@

-Value:
public:\
test_ ## name();\
void again();\
};\
extern test_##name test_##name##_instance
virtual void again()=0
User-provided test case.
-
Similar to TestOnce but performs the user-defined test multiple times.
Definition: TestAgain.h:37
+Value:
class test_ ## name : public aunit::TestAgain {\
+
public:\
+
test_ ## name();\
+
void again();\
+
};\
+
extern test_##name test_##name##_instance

Definition at line 169 of file TestMacros.h.

@@ -268,8 +285,12 @@

-Value:
public:\
suiteName##_ ## name();\
void again();\
};\
extern suiteName##_##name suiteName##_##name##_instance
virtual void again()=0
User-provided test case.
-
Similar to TestOnce but performs the user-defined test multiple times.
Definition: TestAgain.h:37
+Value:
class suiteName##_ ## name : public aunit::TestAgain {\
+
public:\
+
suiteName##_ ## name();\
+
void again();\
+
};\
+
extern suiteName##_##name suiteName##_##name##_instance

Definition at line 177 of file TestMacros.h.

@@ -291,9 +312,9 @@

-

Create an extern reference to a test() test case object defined elsewhere.

+

Create an extern reference to a test() test case object defined elsewhere.

This is only necessary if you use assertTestXxx() or checkTestXxx() when the test is in another file (or defined after the assertion on it).

-

Two versions are supported: externTest(name) and externTest(suiteName, name). The 2-argument externTest(suiteName, name) is a convenience macro which is identical to externTest(suiteName_name).

+

Two versions are supported: externTest(name) and externTest(suiteName, name). The 2-argument externTest(suiteName, name) is a convenience macro which is identical to externTest(suiteName_name).

Definition at line 134 of file TestMacros.h.

@@ -324,8 +345,14 @@

-Value:
class testClass ## _ ## name : public testClass {\
public:\
testClass ## _ ## name();\
void once() override;\
};\
extern testClass ## _ ## name testClass##_##name##_instance
-

Create an extern reference to a testF() test case object defined elsewhere.

+Value:
class testClass ## _ ## name : public testClass {\
+
public:\
+
testClass ## _ ## name();\
+
void once() override;\
+
};\
+
extern testClass ## _ ## name testClass##_##name##_instance
+
+

Create an extern reference to a testF() test case object defined elsewhere.

This is only necessary if you use assertTestXxx() or checkTestXxx() when the test is in another file (or defined after the assertion on it).

Definition at line 225 of file TestMacros.h.

@@ -348,9 +375,9 @@

-

Create an extern reference to a testing() test case object defined elsewhere.

+

Create an extern reference to a testing() test case object defined elsewhere.

This is only necessary if you use assertTestXxx() or checkTestXxx() when the test is in another file (or defined after the assertion on it).

-

Two versions are supported: externTesting(name) and externTesting(suiteName, name).

+

Two versions are supported: externTesting(name) and externTesting(suiteName, name).

Definition at line 164 of file TestMacros.h.

@@ -381,8 +408,14 @@

-Value:
class testClass ## _ ## name : public testClass {\
public:\
testClass ## _ ## name();\
void again() override;\
};\
extern testClass ## _ ## name testClass##_##name##_instance
-

Create an extern reference to a testingF() test case object defined elsewhere.

+Value:
class testClass ## _ ## name : public testClass {\
+
public:\
+
testClass ## _ ## name();\
+
void again() override;\
+
};\
+
extern testClass ## _ ## name testClass##_##name##_instance
+
+

Create an extern reference to a testingF() test case object defined elsewhere.

This is only necessary if you use assertTestXxx() or checkTestXxx() when the test is in another file (or defined after the assertion on it).

Definition at line 239 of file TestMacros.h.

@@ -406,7 +439,7 @@

Macro to define a test that will be run only once.

-

Two versions are supported: test(name) and test(suiteName, name). The 2-argument test(suiteName, name) is a convenience macro which is identical to test(suiteName_name).

+

Two versions are supported: test(name) and test(suiteName, name). The 2-argument test(suiteName, name) is a convenience macro which is identical to test(suiteName_name).

Definition at line 62 of file TestMacros.h.

@@ -427,8 +460,15 @@

-Value:
public:\
test_##name();\
void once() override;\
} test_##name##_instance;\
test_##name :: test_##name() {\
init(AUNIT_F(#name)); \
}\
void test_##name :: once()
virtual void once()=0
User-provided test case.
-
Similar to TestAgain but performs user-defined test only once.
Definition: TestOnce.h:40
+Value:
class test_##name : public aunit::TestOnce {\
+
public:\
+
test_##name();\
+
void once() override;\
+
} test_##name##_instance;\
+
test_##name :: test_##name() {\
+
init(AUNIT_F(#name)); \
+
}\
+
void test_##name :: once()

Definition at line 67 of file TestMacros.h.

@@ -459,8 +499,15 @@

-Value:
public:\
suiteName##_##name();\
void once() override;\
} suiteName##_##name##_instance;\
suiteName##_##name :: suiteName##_##name() {\
init(AUNIT_F(#suiteName "_" #name)); \
}\
void suiteName##_##name :: once()
virtual void once()=0
User-provided test case.
-
Similar to TestAgain but performs user-defined test only once.
Definition: TestOnce.h:40
+Value:
class suiteName##_##name : public aunit::TestOnce {\
+
public:\
+
suiteName##_##name();\
+
void once() override;\
+
} suiteName##_##name##_instance;\
+
suiteName##_##name :: suiteName##_##name() {\
+
init(AUNIT_F(#suiteName "_" #name)); \
+
}\
+
void suiteName##_##name :: once()

Definition at line 78 of file TestMacros.h.

@@ -491,7 +538,16 @@

-Value:
class testClass ## _ ## name : public testClass {\
public:\
testClass ## _ ## name();\
void once() override;\
} testClass ## _ ## name ## _instance;\
testClass ## _ ## name :: testClass ## _ ## name() {\
init(AUNIT_F(#testClass "_" #name));\
}\
void testClass ## _ ## name :: once()
+Value:
class testClass ## _ ## name : public testClass {\
+
public:\
+
testClass ## _ ## name();\
+
void once() override;\
+
} testClass ## _ ## name ## _instance;\
+
testClass ## _ ## name :: testClass ## _ ## name() {\
+
init(AUNIT_F(#testClass "_" #name));\
+
}\
+
void testClass ## _ ## name :: once()
+

Create a test that is derived from a custom TestOnce class.

The name of the instance is prefixed by '{testClass}_' to avoid name collisions with similarly named tests using other fixtures.

@@ -516,7 +572,7 @@

Macro to define a test that will run repeatly upon each iteration of the global loop() method, stopping when the something calls Test::pass(), Test::fail() or Test::skip().

-

Two versions are supported: testing(name) and testing(suiteName, name). The 2-argument testing(suiteName, name) is a convenience macro which is identical to testing(suiteName_name).

+

Two versions are supported: testing(name) and testing(suiteName, name). The 2-argument testing(suiteName, name) is a convenience macro which is identical to testing(suiteName_name).

Definition at line 98 of file TestMacros.h.

@@ -537,8 +593,15 @@

-Value:
public:\
test_##name();\
void again() override;\
} test_##name##_instance;\
test_##name :: test_##name() {\
init(AUNIT_F(#name));\
}\
void test_##name :: again()
virtual void again()=0
User-provided test case.
-
Similar to TestOnce but performs the user-defined test multiple times.
Definition: TestAgain.h:37
+Value:
class test_##name : public aunit::TestAgain {\
+
public:\
+
test_##name();\
+
void again() override;\
+
} test_##name##_instance;\
+
test_##name :: test_##name() {\
+
init(AUNIT_F(#name));\
+
}\
+
void test_##name :: again()

Definition at line 103 of file TestMacros.h.

@@ -569,8 +632,15 @@

-Value:
public:\
suiteName##_##name();\
void again() override;\
} suiteName##_##name##_instance;\
suiteName##_##name :: suiteName##_##name() {\
init(AUNIT_F(#suiteName "_" #name));\
}\
void suiteName##_##name :: again()
virtual void again()=0
User-provided test case.
-
Similar to TestOnce but performs the user-defined test multiple times.
Definition: TestAgain.h:37
+Value:
class suiteName##_##name : public aunit::TestAgain {\
+
public:\
+
suiteName##_##name();\
+
void again() override;\
+
} suiteName##_##name##_instance;\
+
suiteName##_##name :: suiteName##_##name() {\
+
init(AUNIT_F(#suiteName "_" #name));\
+
}\
+
void suiteName##_##name :: again()

Definition at line 114 of file TestMacros.h.

@@ -601,21 +671,34 @@

-Value:
class testClass ## _ ## name : public testClass {\
public:\
testClass ## _ ## name();\
void again() override;\
} testClass ## _ ## name ## _instance;\
testClass ## _ ## name :: testClass ## _ ## name() {\
init(AUNIT_F(#testClass "_" #name));\
}\
void testClass ## _ ## name :: again()
+Value:
class testClass ## _ ## name : public testClass {\
+
public:\
+
testClass ## _ ## name();\
+
void again() override;\
+
} testClass ## _ ## name ## _instance;\
+
testClass ## _ ## name :: testClass ## _ ## name() {\
+
init(AUNIT_F(#testClass "_" #name));\
+
}\
+
void testClass ## _ ## name :: again()
+

Create a test that is derived from a custom TestAgain class.

The name of the instance is prefixed by '{testClass}_' to avoid name collisions with similarly named tests using other fixtures.

-

Note that test(suiteName, name) is different than testF(className, name), but there will be a name collision if suiteName is the same as className.

+

Note that test(suiteName, name) is different than testF(className, name), but there will be a name collision if suiteName is the same as className.

Definition at line 209 of file TestMacros.h.

+
virtual void again()=0
User-provided test case.
+
Similar to TestOnce but performs the user-defined test multiple times.
Definition: TestAgain.h:37
+
Similar to TestAgain but performs user-defined test only once.
Definition: TestOnce.h:40
+
virtual void once()=0
User-provided test case.
diff --git a/docs/html/TestMacros_8h__dep__incl.map b/docs/html/TestMacros_8h__dep__incl.map index 47a86c5..af81d27 100644 --- a/docs/html/TestMacros_8h__dep__incl.map +++ b/docs/html/TestMacros_8h__dep__incl.map @@ -1,4 +1,5 @@ - - - + + + + diff --git a/docs/html/TestMacros_8h__dep__incl.md5 b/docs/html/TestMacros_8h__dep__incl.md5 index 3846c0c..fe5290b 100644 --- a/docs/html/TestMacros_8h__dep__incl.md5 +++ b/docs/html/TestMacros_8h__dep__incl.md5 @@ -1 +1 @@ -96d41fe938e9bd2f41609fc9513de346 \ No newline at end of file +4a610e3832ac4022d1bb988986901048 \ No newline at end of file diff --git a/docs/html/TestMacros_8h__dep__incl.png b/docs/html/TestMacros_8h__dep__incl.png index 9313adb38d8168b55241ca167a2e9555c774cb88..27a75527398bd2bc47de4fd5a007285c68a2a292 100644 GIT binary patch literal 7433 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 R0Uv>ZD7;pcDU&h|`d?1uxbXl0 diff --git a/docs/html/TestMacros_8h__incl.map b/docs/html/TestMacros_8h__incl.map index a96b809..e01de40 100644 --- a/docs/html/TestMacros_8h__incl.map +++ b/docs/html/TestMacros_8h__incl.map @@ -1,11 +1,15 @@ - - - - - - - - - - + + + + + + + + + + + + + + diff --git a/docs/html/TestMacros_8h__incl.md5 b/docs/html/TestMacros_8h__incl.md5 index f47d5d2..a061aff 100644 --- a/docs/html/TestMacros_8h__incl.md5 +++ b/docs/html/TestMacros_8h__incl.md5 @@ -1 +1 @@ -2c30189d9ba27dee60e99d0cfa06277e \ No newline at end of file +d7cb566ae09c1c94cc1cbf08e3ccaabb \ No newline at end of file diff --git a/docs/html/TestMacros_8h__incl.png b/docs/html/TestMacros_8h__incl.png index 0a735518b14568612150cb89c1d46bb5cdfcc07f..7d40b71a004cf4b4fe9d8aacc32f7edafde67053 100644 GIT binary patch literal 62544 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 literal 55309 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ø*Y|G2Xf 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

hGrm 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 diff --git a/docs/html/TestMacros_8h_source.html b/docs/html/TestMacros_8h_source.html index 8f6513d..12374ca 100644 --- a/docs/html/TestMacros_8h_source.html +++ b/docs/html/TestMacros_8h_source.html @@ -1,11 +1,11 @@ - + - + -AUnit: /home/brian/dev/AUnit/src/aunit/TestMacros.h Source File +AUnit: /home/brian/src/AUnit/src/aunit/TestMacros.h Source File @@ -22,7 +22,7 @@

AUnit -  1.3.2 +  1.3.3
Unit testing framework for Arduino platforms inspired by ArduinoUnit and Google Test.
@@ -31,18 +31,21 @@

- + +/* @license-end */
TestMacros.h

-Go to the documentation of this file.
1 /*
2 MIT License
3 
4 Copyright (c) 2018 Brian T. Park
5 
6 Permission is hereby granted, free of charge, to any person obtaining a copy
7 of this software and associated documentation files (the "Software"), to deal
8 in the Software without restriction, including without limitation the rights
9 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 copies of the Software, and to permit persons to whom the Software is
11 furnished to do so, subject to the following conditions:
12 
13 The above copyright notice and this permission notice shall be included in all
14 copies or substantial portions of the Software.
15 
16 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22 SOFTWARE.
23 */
24 
25 // Significant portions of the design and implementation of this file came from
26 // https://github.com/mmurdoch/arduinounit/blob/master/src/ArduinoUnit.h
27 
36 #ifndef AUNIT_TEST_MACROS_H
37 #define AUNIT_TEST_MACROS_H
38 
39 #include <stdint.h>
40 #include <Arduino.h> // F() macro
41 #include "Flash.h" // AUNIT_F() macro
42 #include "FCString.h"
43 #include "TestOnce.h"
44 #include "TestAgain.h"
45 
46 // On the ESP8266 platform, the F() string cannot be placed in an inline
47 // context, because it interferes with other PROGMEM strings. See
48 // https://github.com/esp8266/Arduino/issues/3369. The solution was to move the
49 // constructor definition out from an inline function into a normal function
50 // defined outside of the class declaration. Unfortunately, if the user code
51 // has any other usage of F() in an inline context, those interfere with the
52 // F() used below. I have abandoned supporting the F() macro for these test*()
53 // macros on the ESP8266.
54 
62 #define test(...) \
63  GET_TEST(__VA_ARGS__, TEST2, TEST1)(__VA_ARGS__)
64 
65 #define GET_TEST(_1, _2, NAME, ...) NAME
66 
67 #define TEST1(name) \
68 class test_##name : public aunit::TestOnce {\
69 public:\
70  test_##name();\
71  void once() override;\
72 } test_##name##_instance;\
73 test_##name :: test_##name() {\
74  init(AUNIT_F(#name)); \
75 }\
76 void test_##name :: once()
77 
78 #define TEST2(suiteName, name) \
79 class suiteName##_##name : public aunit::TestOnce {\
80 public:\
81  suiteName##_##name();\
82  void once() override;\
83 } suiteName##_##name##_instance;\
84 suiteName##_##name :: suiteName##_##name() {\
85  init(AUNIT_F(#suiteName "_" #name)); \
86 }\
87 void suiteName##_##name :: once()
88 
98 #define testing(...) \
99  GET_TESTING(__VA_ARGS__, TESTING2, TESTING1)(__VA_ARGS__)
100 
101 #define GET_TESTING(_1, _2, NAME, ...) NAME
102 
103 #define TESTING1(name) \
104 class test_##name : public aunit::TestAgain {\
105 public:\
106  test_##name();\
107  void again() override;\
108 } test_##name##_instance;\
109 test_##name :: test_##name() {\
110  init(AUNIT_F(#name));\
111 }\
112 void test_##name :: again()
113 
114 #define TESTING2(suiteName, name) \
115 class suiteName##_##name : public aunit::TestAgain {\
116 public:\
117  suiteName##_##name();\
118  void again() override;\
119 } suiteName##_##name##_instance;\
120 suiteName##_##name :: suiteName##_##name() {\
121  init(AUNIT_F(#suiteName "_" #name));\
122 }\
123 void suiteName##_##name :: again()
124 
134 #define externTest(...) \
135  GET_EXTERN_TEST(__VA_ARGS__, EXTERN_TEST2, EXTERN_TEST1)(__VA_ARGS__)
136 
137 #define GET_EXTERN_TEST(_1, _2, NAME, ...) NAME
138 
139 #define EXTERN_TEST1(name) \
140 class test_##name : public aunit::TestOnce {\
141 public:\
142  test_##name();\
143  void once();\
144 };\
145 extern test_##name test_##name##_instance
146 
147 #define EXTERN_TEST2(suiteName, name) \
148 class suiteName##_##name : public aunit::TestOnce {\
149 public:\
150  suiteName##_##name();\
151  void once();\
152 };\
153 extern suiteName##_##name suiteName##_##name##_instance
154 
164 #define externTesting(...) \
165  GET_EXTERN_TESTING(__VA_ARGS__, EXTERN_TESTING2, EXTERN_TESTING1)(__VA_ARGS__)
166 
167 #define GET_EXTERN_TESTING(_1, _2, NAME, ...) NAME
168 
169 #define EXTERN_TESTING1(name) \
170 class test_ ## name : public aunit::TestAgain {\
171 public:\
172  test_ ## name();\
173  void again();\
174 };\
175 extern test_##name test_##name##_instance
176 
177 #define EXTERN_TESTING2(suiteName, name) \
178 class suiteName##_ ## name : public aunit::TestAgain {\
179 public:\
180  suiteName##_ ## name();\
181  void again();\
182 };\
183 extern suiteName##_##name suiteName##_##name##_instance
184 
190 #define testF(testClass, name) \
191 class testClass ## _ ## name : public testClass {\
192 public:\
193  testClass ## _ ## name();\
194  void once() override;\
195 } testClass ## _ ## name ## _instance;\
196 testClass ## _ ## name :: testClass ## _ ## name() {\
197  init(AUNIT_F(#testClass "_" #name));\
198 }\
199 void testClass ## _ ## name :: once()
200 
209 #define testingF(testClass, name) \
210 class testClass ## _ ## name : public testClass {\
211 public:\
212  testClass ## _ ## name();\
213  void again() override;\
214 } testClass ## _ ## name ## _instance;\
215 testClass ## _ ## name :: testClass ## _ ## name() {\
216  init(AUNIT_F(#testClass "_" #name));\
217 }\
218 void testClass ## _ ## name :: again()
219 
225 #define externTestF(testClass, name) \
226 class testClass ## _ ## name : public testClass {\
227 public:\
228  testClass ## _ ## name();\
229  void once() override;\
230 };\
231 extern testClass ## _ ## name testClass##_##name##_instance
232 
239 #define externTestingF(testClass, name) \
240 class testClass ## _ ## name : public testClass {\
241 public:\
242  testClass ## _ ## name();\
243  void again() override;\
244 };\
245 extern testClass ## _ ## name testClass##_##name##_instance
246 
247 #endif
Various macros to smooth over the differences among the various platforms with regards to their suppo...
+Go to the documentation of this file.
1 /*
+
2 MIT License
+
3 
+
4 Copyright (c) 2018 Brian T. Park
+
5 
+
6 Permission is hereby granted, free of charge, to any person obtaining a copy
+
7 of this software and associated documentation files (the "Software"), to deal
+
8 in the Software without restriction, including without limitation the rights
+
9 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+
10 copies of the Software, and to permit persons to whom the Software is
+
11 furnished to do so, subject to the following conditions:
+
12 
+
13 The above copyright notice and this permission notice shall be included in all
+
14 copies or substantial portions of the Software.
+
15 
+
16 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+
17 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+
18 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+
19 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+
20 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+
21 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+
22 SOFTWARE.
+
23 */
+
24 
+
25 // Significant portions of the design and implementation of this file came from
+
26 // https://github.com/mmurdoch/arduinounit/blob/master/src/ArduinoUnit.h
+
27 
+
36 #ifndef AUNIT_TEST_MACROS_H
+
37 #define AUNIT_TEST_MACROS_H
+
38 
+
39 #include <stdint.h>
+
40 #include <Arduino.h> // F() macro
+
41 #include "Flash.h" // AUNIT_F() macro
+
42 #include "FCString.h"
+
43 #include "TestOnce.h"
+
44 #include "TestAgain.h"
+
45 
+
46 // On the ESP8266 platform, the F() string cannot be placed in an inline
+
47 // context, because it interferes with other PROGMEM strings. See
+
48 // https://github.com/esp8266/Arduino/issues/3369. The solution was to move the
+
49 // constructor definition out from an inline function into a normal function
+
50 // defined outside of the class declaration. Unfortunately, if the user code
+
51 // has any other usage of F() in an inline context, those interfere with the
+
52 // F() used below. I have abandoned supporting the F() macro for these test*()
+
53 // macros on the ESP8266.
+
54 
+
62 #define test(...) \
+
63  GET_TEST(__VA_ARGS__, TEST2, TEST1)(__VA_ARGS__)
+
64 
+
65 #define GET_TEST(_1, _2, NAME, ...) NAME
+
66 
+
67 #define TEST1(name) \
+
68 class test_##name : public aunit::TestOnce {\
+
69 public:\
+
70  test_##name();\
+
71  void once() override;\
+
72 } test_##name##_instance;\
+
73 test_##name :: test_##name() {\
+
74  init(AUNIT_F(#name)); \
+
75 }\
+
76 void test_##name :: once()
+
77 
+
78 #define TEST2(suiteName, name) \
+
79 class suiteName##_##name : public aunit::TestOnce {\
+
80 public:\
+
81  suiteName##_##name();\
+
82  void once() override;\
+
83 } suiteName##_##name##_instance;\
+
84 suiteName##_##name :: suiteName##_##name() {\
+
85  init(AUNIT_F(#suiteName "_" #name)); \
+
86 }\
+
87 void suiteName##_##name :: once()
+
88 
+
98 #define testing(...) \
+
99  GET_TESTING(__VA_ARGS__, TESTING2, TESTING1)(__VA_ARGS__)
+
100 
+
101 #define GET_TESTING(_1, _2, NAME, ...) NAME
+
102 
+
103 #define TESTING1(name) \
+
104 class test_##name : public aunit::TestAgain {\
+
105 public:\
+
106  test_##name();\
+
107  void again() override;\
+
108 } test_##name##_instance;\
+
109 test_##name :: test_##name() {\
+
110  init(AUNIT_F(#name));\
+
111 }\
+
112 void test_##name :: again()
+
113 
+
114 #define TESTING2(suiteName, name) \
+
115 class suiteName##_##name : public aunit::TestAgain {\
+
116 public:\
+
117  suiteName##_##name();\
+
118  void again() override;\
+
119 } suiteName##_##name##_instance;\
+
120 suiteName##_##name :: suiteName##_##name() {\
+
121  init(AUNIT_F(#suiteName "_" #name));\
+
122 }\
+
123 void suiteName##_##name :: again()
+
124 
+
134 #define externTest(...) \
+
135  GET_EXTERN_TEST(__VA_ARGS__, EXTERN_TEST2, EXTERN_TEST1)(__VA_ARGS__)
+
136 
+
137 #define GET_EXTERN_TEST(_1, _2, NAME, ...) NAME
+
138 
+
139 #define EXTERN_TEST1(name) \
+
140 class test_##name : public aunit::TestOnce {\
+
141 public:\
+
142  test_##name();\
+
143  void once();\
+
144 };\
+
145 extern test_##name test_##name##_instance
+
146 
+
147 #define EXTERN_TEST2(suiteName, name) \
+
148 class suiteName##_##name : public aunit::TestOnce {\
+
149 public:\
+
150  suiteName##_##name();\
+
151  void once();\
+
152 };\
+
153 extern suiteName##_##name suiteName##_##name##_instance
+
154 
+
164 #define externTesting(...) \
+
165  GET_EXTERN_TESTING(__VA_ARGS__, EXTERN_TESTING2, EXTERN_TESTING1)(__VA_ARGS__)
+
166 
+
167 #define GET_EXTERN_TESTING(_1, _2, NAME, ...) NAME
+
168 
+
169 #define EXTERN_TESTING1(name) \
+
170 class test_ ## name : public aunit::TestAgain {\
+
171 public:\
+
172  test_ ## name();\
+
173  void again();\
+
174 };\
+
175 extern test_##name test_##name##_instance
+
176 
+
177 #define EXTERN_TESTING2(suiteName, name) \
+
178 class suiteName##_ ## name : public aunit::TestAgain {\
+
179 public:\
+
180  suiteName##_ ## name();\
+
181  void again();\
+
182 };\
+
183 extern suiteName##_##name suiteName##_##name##_instance
+
184 
+
190 #define testF(testClass, name) \
+
191 class testClass ## _ ## name : public testClass {\
+
192 public:\
+
193  testClass ## _ ## name();\
+
194  void once() override;\
+
195 } testClass ## _ ## name ## _instance;\
+
196 testClass ## _ ## name :: testClass ## _ ## name() {\
+
197  init(AUNIT_F(#testClass "_" #name));\
+
198 }\
+
199 void testClass ## _ ## name :: once()
+
200 
+
209 #define testingF(testClass, name) \
+
210 class testClass ## _ ## name : public testClass {\
+
211 public:\
+
212  testClass ## _ ## name();\
+
213  void again() override;\
+
214 } testClass ## _ ## name ## _instance;\
+
215 testClass ## _ ## name :: testClass ## _ ## name() {\
+
216  init(AUNIT_F(#testClass "_" #name));\
+
217 }\
+
218 void testClass ## _ ## name :: again()
+
219 
+
225 #define externTestF(testClass, name) \
+
226 class testClass ## _ ## name : public testClass {\
+
227 public:\
+
228  testClass ## _ ## name();\
+
229  void once() override;\
+
230 };\
+
231 extern testClass ## _ ## name testClass##_##name##_instance
+
232 
+
239 #define externTestingF(testClass, name) \
+
240 class testClass ## _ ## name : public testClass {\
+
241 public:\
+
242  testClass ## _ ## name();\
+
243  void again() override;\
+
244 };\
+
245 extern testClass ## _ ## name testClass##_##name##_instance
+
246 
+
247 #endif
+ diff --git a/docs/html/TestOnce_8cpp_source.html b/docs/html/TestOnce_8cpp_source.html index 1530e8f..88b19bc 100644 --- a/docs/html/TestOnce_8cpp_source.html +++ b/docs/html/TestOnce_8cpp_source.html @@ -1,11 +1,11 @@ - + - + -AUnit: /home/brian/dev/AUnit/src/aunit/TestOnce.cpp Source File +AUnit: /home/brian/src/AUnit/src/aunit/TestOnce.cpp Source File @@ -22,7 +22,7 @@
AUnit -  1.3.2 +  1.3.3
Unit testing framework for Arduino platforms inspired by ArduinoUnit and Google Test.
@@ -31,18 +31,21 @@
- + +/* @license-end */
TestOnce.cpp

-
1 /*
2 MIT License
3 
4 Copyright (c) 2018 Brian T. Park
5 
6 Permission is hereby granted, free of charge, to any person obtaining a copy
7 of this software and associated documentation files (the "Software"), to deal
8 in the Software without restriction, including without limitation the rights
9 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 copies of the Software, and to permit persons to whom the Software is
11 furnished to do so, subject to the following conditions:
12 
13 The above copyright notice and this permission notice shall be included in all
14 copies or substantial portions of the Software.
15 
16 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22 SOFTWARE.
23 */
24 
25 #include "TestOnce.h"
26 
27 namespace aunit {
28 
30  once();
31  if (isNotDone()) {
32  pass();
33  }
34 }
35 
36 }
virtual void once()=0
User-provided test case.
-
bool isNotDone() const
Return true if test is not has been asserted.
Definition: Test.h:199
- -
void pass()
Mark the test as passed.
Definition: Test.h:256
-
void loop() override
Calls the user-provided once() method.
Definition: TestOnce.cpp:29
+
1 /*
+
2 MIT License
+
3 
+
4 Copyright (c) 2018 Brian T. Park
+
5 
+
6 Permission is hereby granted, free of charge, to any person obtaining a copy
+
7 of this software and associated documentation files (the "Software"), to deal
+
8 in the Software without restriction, including without limitation the rights
+
9 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+
10 copies of the Software, and to permit persons to whom the Software is
+
11 furnished to do so, subject to the following conditions:
+
12 
+
13 The above copyright notice and this permission notice shall be included in all
+
14 copies or substantial portions of the Software.
+
15 
+
16 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+
17 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+
18 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+
19 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+
20 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+
21 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+
22 SOFTWARE.
+
23 */
+
24 
+
25 #include "TestOnce.h"
+
26 
+
27 namespace aunit {
+
28 
+ +
30  once();
+
31  if (isNotDone()) {
+
32  pass();
+
33  }
+
34 }
+
35 
+
36 }
+
bool isNotDone() const
Return true if test is not has been asserted.
Definition: Test.h:199
+
void pass()
Mark the test as passed.
Definition: Test.h:256
+
void loop() override
Calls the user-provided once() method.
Definition: TestOnce.cpp:29
+
virtual void once()=0
User-provided test case.
diff --git a/docs/html/TestOnce_8h_source.html b/docs/html/TestOnce_8h_source.html index 429e863..6ecac6f 100644 --- a/docs/html/TestOnce_8h_source.html +++ b/docs/html/TestOnce_8h_source.html @@ -1,11 +1,11 @@ - + - + -AUnit: /home/brian/dev/AUnit/src/aunit/TestOnce.h Source File +AUnit: /home/brian/src/AUnit/src/aunit/TestOnce.h Source File @@ -22,7 +22,7 @@
AUnit -  1.3.2 +  1.3.3
Unit testing framework for Arduino platforms inspired by ArduinoUnit and Google Test.
@@ -31,18 +31,21 @@
- + +/* @license-end */
TestOnce.h

-
1 /*
2 MIT License
3 
4 Copyright (c) 2018 Brian T. Park
5 
6 Permission is hereby granted, free of charge, to any person obtaining a copy
7 of this software and associated documentation files (the "Software"), to deal
8 in the Software without restriction, including without limitation the rights
9 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 copies of the Software, and to permit persons to whom the Software is
11 furnished to do so, subject to the following conditions:
12 
13 The above copyright notice and this permission notice shall be included in all
14 copies or substantial portions of the Software.
15 
16 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22 SOFTWARE.
23 */
24 
25 // Significant portions of the design and implementation of this file came from
26 // https://github.com/mmurdoch/arduinounit/blob/master/src/ArduinoUnit.h
27 
28 #ifndef AUNIT_TEST_ONCE_H
29 #define AUNIT_TEST_ONCE_H
30 
31 #include <stdint.h>
32 #include "FCString.h"
33 #include "MetaAssertion.h"
34 
35 class __FlashStringHelper;
36 
37 namespace aunit {
38 
40 class TestOnce: public MetaAssertion {
41  public:
43  TestOnce() {}
44 
50  void loop() override;
51 
53  virtual void once() = 0;
54 
55  private:
56  // Disable copy-constructor and assignment operator
57  TestOnce(const TestOnce&) = delete;
58  TestOnce& operator=(const TestOnce&) = delete;
59 };
60 
61 }
62 
63 #endif
virtual void once()=0
User-provided test case.
-
Similar to TestAgain but performs user-defined test only once.
Definition: TestOnce.h:40
-
Class that extends the Assertion class to support the checkTestXxx() and assertTestXxx() macros that ...
Definition: MetaAssertion.h:42
- -
TestOnce()
Constructor.
Definition: TestOnce.h:43
-
void loop() override
Calls the user-provided once() method.
Definition: TestOnce.cpp:29
+
1 /*
+
2 MIT License
+
3 
+
4 Copyright (c) 2018 Brian T. Park
+
5 
+
6 Permission is hereby granted, free of charge, to any person obtaining a copy
+
7 of this software and associated documentation files (the "Software"), to deal
+
8 in the Software without restriction, including without limitation the rights
+
9 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+
10 copies of the Software, and to permit persons to whom the Software is
+
11 furnished to do so, subject to the following conditions:
+
12 
+
13 The above copyright notice and this permission notice shall be included in all
+
14 copies or substantial portions of the Software.
+
15 
+
16 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+
17 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+
18 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+
19 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+
20 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+
21 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+
22 SOFTWARE.
+
23 */
+
24 
+
25 // Significant portions of the design and implementation of this file came from
+
26 // https://github.com/mmurdoch/arduinounit/blob/master/src/ArduinoUnit.h
+
27 
+
28 #ifndef AUNIT_TEST_ONCE_H
+
29 #define AUNIT_TEST_ONCE_H
+
30 
+
31 #include <stdint.h>
+
32 #include "FCString.h"
+
33 #include "MetaAssertion.h"
+
34 
+
35 class __FlashStringHelper;
+
36 
+
37 namespace aunit {
+
38 
+
40 class TestOnce: public MetaAssertion {
+
41  public:
+
43  TestOnce() {}
+
44 
+
50  void loop() override;
+
51 
+
53  virtual void once() = 0;
+
54 
+
55  private:
+
56  // Disable copy-constructor and assignment operator
+
57  TestOnce(const TestOnce&) = delete;
+
58  TestOnce& operator=(const TestOnce&) = delete;
+
59 };
+
60 
+
61 }
+
62 
+
63 #endif
+
Class that extends the Assertion class to support the checkTestXxx() and assertTestXxx() macros that ...
Definition: MetaAssertion.h:42
+
TestOnce()
Constructor.
Definition: TestOnce.h:43
+
Similar to TestAgain but performs user-defined test only once.
Definition: TestOnce.h:40
+
void loop() override
Calls the user-provided once() method.
Definition: TestOnce.cpp:29
+
virtual void once()=0
User-provided test case.
diff --git a/docs/html/TestRunner_8cpp_source.html b/docs/html/TestRunner_8cpp_source.html index 76ebb65..5376c6d 100644 --- a/docs/html/TestRunner_8cpp_source.html +++ b/docs/html/TestRunner_8cpp_source.html @@ -1,11 +1,11 @@ - + - + -AUnit: /home/brian/dev/AUnit/src/aunit/TestRunner.cpp Source File +AUnit: /home/brian/src/AUnit/src/aunit/TestRunner.cpp Source File @@ -22,7 +22,7 @@
AUnit -  1.3.2 +  1.3.3
Unit testing framework for Arduino platforms inspired by ArduinoUnit and Google Test.
@@ -31,18 +31,21 @@
- + +/* @license-end */
TestRunner.cpp
-
1 /*
2 MIT License
3 
4 Copyright (c) 2018 Brian T. Park
5 
6 Permission is hereby granted, free of charge, to any person obtaining a copy
7 of this software and associated documentation files (the "Software"), to deal
8 in the Software without restriction, including without limitation the rights
9 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 copies of the Software, and to permit persons to whom the Software is
11 furnished to do so, subject to the following conditions:
12 
13 The above copyright notice and this permission notice shall be included in all
14 copies or substantial portions of the Software.
15 
16 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22 SOFTWARE.
23 */
24 
25 #include <Arduino.h> // definition of 'Serial'
26 #include <string.h>
27 #include <stdint.h>
28 #include "FCString.h"
29 #include "Compare.h"
30 #include "Printer.h"
31 #include "Verbosity.h"
32 #include "Test.h"
33 #include "TestRunner.h"
34 #include "string_util.h"
35 
36 namespace aunit {
37 
38 // Use a function static singleton to avoid the static initialization ordering
39 // problem. It's probably not an issue right now, since TestRunner is expected
40 // to be called only after all static initialization, but future refactoring
41 // could change that so this is defensive programming.
42 TestRunner* TestRunner::getRunner() {
43  static TestRunner singletonRunner;
44  return &singletonRunner;
45 }
46 
47 void TestRunner::setPrinter(Print* printer) {
48  Printer::setPrinter(printer);
49 }
50 
51 void TestRunner::setLifeCycleMatchingPattern(const char* pattern,
52  uint8_t lifeCycle) {
53  size_t length = strlen(pattern);
54  if (length > 0 && pattern[length - 1] == '*') {
55  // prefix match
56  length--;
57  } else {
58  // exact match
59  length++;
60  }
61 
62  for (Test** p = Test::getRoot(); *p != nullptr; p = (*p)->getNext()) {
63  if ((*p)->getName().compareToN(pattern, length) == 0) {
64  (*p)->setLifeCycle(lifeCycle);
65  }
66  }
67 }
68 
69 void TestRunner::setLifeCycleMatchingPattern(const char* testClass,
70  const char* pattern, uint8_t lifeCycle) {
71  // The effective pattern is the join of testClass and pattern with a '_'
72  // delimiter. This must match the algorithm used by testF() and testingF().
73  // We use string_join() instead of String so that AUnit can avoid a direct
74  // dependency on the String class. AUnit thus avoids allocating any memory on
75  // the heap.
76  char fullPattern[kMaxPatternLength];
77  bool status = internal::string_join(fullPattern, kMaxPatternLength, '_',
78  testClass, pattern);
79  if (!status) return;
80 
81  setLifeCycleMatchingPattern(fullPattern, lifeCycle);
82 }
83 
84 TestRunner::TestRunner() {}
85 
86 void TestRunner::runTest() {
87  setupRunner();
88 
89  // Print initial header if this is the first run.
90  if (!mIsRunning) {
91  printStartRunner();
92  mIsRunning = true;
93  }
94 
95  // If no more test cases, then print out summary of run.
96  if (*Test::getRoot() == nullptr) {
97  if (!mIsResolved) {
98  mEndTime = millis();
99  resolveRun();
100  mIsResolved = true;
101  #if UNIX_HOST_DUINO
102  exit((mFailedCount || mExpiredCount) ? 1 : 0);
103  #endif
104  }
105  return;
106  }
107 
108  // If reached the end and there are still test cases left, start from the
109  // beginning again.
110  if (*mCurrent == nullptr) {
111  mCurrent = Test::getRoot();
112  }
113 
114  // Implement a finite state machine that calls the (*mCurrent)->setup() or
115  // (*mCurrent)->loop(), then changes the test case's mStatus.
116  switch ((*mCurrent)->getLifeCycle()) {
117  case Test::kLifeCycleNew:
118  // Transfer the verbosity of the TestRunner to the Test.
119  (*mCurrent)->enableVerbosity(mVerbosity);
120  (*mCurrent)->setup();
121 
122  // Support assertXxx() statements inside the setup() method by
123  // moving to the next lifeCycle state if an assertXxx() did not fail
124  // inside the setup().
125  if ((*mCurrent)->getLifeCycle() == Test::kLifeCycleNew) {
126  (*mCurrent)->setLifeCycle(Test::kLifeCycleSetup);
127  }
128  break;
130  // If a test is excluded, go directly to LifeCycleFinished, without
131  // calling setup() or teardown().
132  (*mCurrent)->enableVerbosity(mVerbosity);
133  (*mCurrent)->setStatus(Test::kStatusSkipped);
134  mSkippedCount++;
135  (*mCurrent)->setLifeCycle(Test::kLifeCycleFinished);
136  break;
138  {
139  // Check for timeout. mTimeout == 0 means infinite timeout.
140  // NOTE: It feels like this code should go into the Test::loop() method
141  // (like the extra bit of code in TestOnce::loop()) because it seems
142  // like we could want the timeout to be configurable on a case by case
143  // basis. This would cause the testing() code to move down into a new
144  // again() virtual method dispatched from Test::loop(), analogous to
145  // once(). But let's keep the code here for now.
146  unsigned long now = millis();
147  if (mTimeout > 0 && now >= mStartTime + 1000L * mTimeout) {
148  (*mCurrent)->expire();
149  } else {
150  (*mCurrent)->loop();
151 
152  // If test status is unresolved (i.e. still in kLifeCycleNew state)
153  // after loop(), then this is a continuous testing() test case, so
154  // skip to the next test. Otherwise, stay on the current test so that
155  // the next iteration of runTest() can resolve the current test.
156  if ((*mCurrent)->getLifeCycle() == Test::kLifeCycleSetup) {
157  // skip to the next one, but keep current test in the list
158  mCurrent = (*mCurrent)->getNext();
159  }
160  }
161  }
162  break;
164  switch ((*mCurrent)->getStatus()) {
166  mSkippedCount++;
167  break;
168  case Test::kStatusPassed:
169  mPassedCount++;
170  break;
171  case Test::kStatusFailed:
172  mFailedCount++;
173  break;
175  mExpiredCount++;
176  break;
177  default:
178  // should never get here
179  mStatusErrorCount++;
180  break;
181  }
182  (*mCurrent)->teardown();
183  (*mCurrent)->setLifeCycle(Test::kLifeCycleFinished);
184  break;
186  (*mCurrent)->resolve();
187  // skip to the next one by taking current test out of the list
188  *mCurrent = *(*mCurrent)->getNext();
189  break;
190  }
191 }
192 
193 void TestRunner::setupRunner() {
194  if (!mIsSetup) {
195  mIsSetup = true;
196  mCount = countTests();
197  mCurrent = Test::getRoot();
198  mStartTime = millis();
199  }
200 }
201 
202 // Count the number of tests in TestRunner instead of Test::insert() to avoid
203 // another C++ static initialization ordering problem.
204 uint16_t TestRunner::countTests() {
205  uint16_t count = 0;
206  for (Test** p = Test::getRoot(); *p != nullptr; p = (*p)->getNext()) {
207  count++;
208  }
209  return count;
210 }
211 
212 namespace {
213 
219 void printSeconds(Print* printer, unsigned long timeMillis) {
220  int s = timeMillis / 1000;
221  int ms = timeMillis % 1000;
222  printer->print(s);
223  printer->print('.');
224  if (ms < 100) printer->print('0');
225  if (ms < 10) printer->print('0');
226  printer->print(ms);
227 }
228 
229 }
230 
231 void TestRunner::printStartRunner() const {
233 
234  Print* printer = Printer::getPrinter();
235  printer->print(F("TestRunner started on "));
236  printer->print(mCount);
237  printer->println(F(" test(s)."));
238 }
239 
240 void TestRunner::resolveRun() const {
242  Print* printer = Printer::getPrinter();
243 
244  unsigned long elapsedTime = mEndTime - mStartTime;
245  printer->print(F("TestRunner duration: "));
246  printSeconds(printer, elapsedTime);
247  printer->println(" seconds.");
248 
249  printer->print(F("TestRunner summary: "));
250  printer->print(mPassedCount);
251  printer->print(F(" passed, "));
252  printer->print(mFailedCount);
253  printer->print(F(" failed, "));
254  printer->print(mSkippedCount);
255  printer->print(F(" skipped, "));
256  printer->print(mExpiredCount);
257  printer->print(F(" timed out, out of "));
258  printer->print(mCount);
259  printer->println(F(" test(s)."));
260 }
261 
262 void TestRunner::listTests() {
263  setupRunner();
264 
265  Print* printer = Printer::getPrinter();
266  printer->print(F("TestRunner test count: "));
267  printer->println(mCount);
268  for (Test** p = Test::getRoot(); (*p) != nullptr; p = (*p)->getNext()) {
269  printer->print(F("Test "));
270  (*p)->getName().print(printer);
271  printer->print(F("; lifeCycle: "));
272  printer->println((*p)->getLifeCycle());
273  }
274 }
275 
276 void TestRunner::setRunnerTimeout(TimeoutType timeout) {
277  mTimeout = timeout;
278 }
279 
280 }
Base class of all test cases.
Definition: Test.h:43
-
static const uint8_t kStatusFailed
Test has failed, or fail() was called.
Definition: Test.h:102
-
static const uint8_t kLifeCycleAsserted
Test is asserted (using pass(), fail(), expired() or skipped()) and the getStatus() has been determin...
Definition: Test.h:80
-
static void setPrinter(Print *printer)
Set the printer.
Definition: Printer.h:51
-
static const uint8_t kStatusPassed
Test has passed, or pass() was called.
Definition: Test.h:99
-
uint8_t TimeoutType
Integer type of the timeout parameter.
Definition: TestRunner.h:44
-
Test ** getNext()
Return the next pointer as a pointer to the pointer, similar to getRoot().
Definition: Test.h:188
-
static const uint8_t kStatusSkipped
Test is skipped through the exclude() method or skip() was called.
Definition: Test.h:105
-
This file provides overloaded compareXxx(a, b) functions which are used by the various assertXxx(a...
-
static const uint8_t kLifeCycleExcluded
Test is Excluded by an exclude() method.
Definition: Test.h:65
- -
static Test ** getRoot()
Get the pointer to the root pointer.
Definition: Test.cpp:36
-
static const uint8_t kLifeCycleFinished
The test has completed its life cycle.
Definition: Test.h:88
-
static void setPrinter(Print *printer)
Set the output printer.
Definition: TestRunner.cpp:47
-
static const uint8_t kLifeCycleNew
Test is new, needs to be setup.
Definition: Test.h:57
-
static Print * getPrinter()
Get the output printer used by the various assertion() methods and the TestRunner.
Definition: Printer.h:48
-
static const uint8_t kLifeCycleSetup
Test has been set up by calling setup() and ready to execute the test code.
Definition: Test.h:74
-
static const uint8_t kTestRunSummary
Print TestRunner summary message.
Definition: Verbosity.h:58
-
static const uint8_t kStatusExpired
Test has timed out, or expire() called.
Definition: Test.h:108
-
static bool isVerbosity(uint8_t verbosity)
Returns true if ANY of the bit flags of &#39;verbosity&#39; is set.
Definition: TestRunner.h:97
+
1 /*
+
2 MIT License
+
3 
+
4 Copyright (c) 2018 Brian T. Park
+
5 
+
6 Permission is hereby granted, free of charge, to any person obtaining a copy
+
7 of this software and associated documentation files (the "Software"), to deal
+
8 in the Software without restriction, including without limitation the rights
+
9 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+
10 copies of the Software, and to permit persons to whom the Software is
+
11 furnished to do so, subject to the following conditions:
+
12 
+
13 The above copyright notice and this permission notice shall be included in all
+
14 copies or substantial portions of the Software.
+
15 
+
16 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+
17 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+
18 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+
19 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+
20 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+
21 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+
22 SOFTWARE.
+
23 */
+
24 
+
25 #include <Arduino.h> // definition of 'Serial'
+
26 #include <string.h>
+
27 #include <stdint.h>
+
28 #include "FCString.h"
+
29 #include "Compare.h"
+
30 #include "Printer.h"
+
31 #include "Verbosity.h"
+
32 #include "Test.h"
+
33 #include "TestRunner.h"
+
34 #include "string_util.h"
+
35 
+
36 namespace aunit {
+
37 
+
38 // Use a function static singleton to avoid the static initialization ordering
+
39 // problem. It's probably not an issue right now, since TestRunner is expected
+
40 // to be called only after all static initialization, but future refactoring
+
41 // could change that so this is defensive programming.
+
42 TestRunner* TestRunner::getRunner() {
+
43  static TestRunner singletonRunner;
+
44  return &singletonRunner;
+
45 }
+
46 
+
47 void TestRunner::setPrinter(Print* printer) {
+
48  Printer::setPrinter(printer);
+
49 }
+
50 
+
51 void TestRunner::setLifeCycleMatchingPattern(const char* pattern,
+
52  uint8_t lifeCycle) {
+
53  size_t length = strlen(pattern);
+
54  if (length > 0 && pattern[length - 1] == '*') {
+
55  // prefix match
+
56  length--;
+
57  } else {
+
58  // exact match
+
59  length++;
+
60  }
+
61 
+
62  for (Test** p = Test::getRoot(); *p != nullptr; p = (*p)->getNext()) {
+
63  if ((*p)->getName().compareToN(pattern, length) == 0) {
+
64  (*p)->setLifeCycle(lifeCycle);
+
65  }
+
66  }
+
67 }
+
68 
+
69 void TestRunner::setLifeCycleMatchingPattern(const char* testClass,
+
70  const char* pattern, uint8_t lifeCycle) {
+
71  // The effective pattern is the join of testClass and pattern with a '_'
+
72  // delimiter. This must match the algorithm used by testF() and testingF().
+
73  // We use string_join() instead of String so that AUnit can avoid a direct
+
74  // dependency on the String class. AUnit thus avoids allocating any memory on
+
75  // the heap.
+
76  char fullPattern[kMaxPatternLength];
+
77  bool status = internal::string_join(fullPattern, kMaxPatternLength, '_',
+
78  testClass, pattern);
+
79  if (!status) return;
+
80 
+
81  setLifeCycleMatchingPattern(fullPattern, lifeCycle);
+
82 }
+
83 
+
84 TestRunner::TestRunner() {}
+
85 
+
86 void TestRunner::runTest() {
+
87  setupRunner();
+
88 
+
89  // Print initial header if this is the first run.
+
90  if (!mIsRunning) {
+
91  printStartRunner();
+
92  mIsRunning = true;
+
93  }
+
94 
+
95  // If no more test cases, then print out summary of run.
+
96  if (*Test::getRoot() == nullptr) {
+
97  if (!mIsResolved) {
+
98  mEndTime = millis();
+
99  resolveRun();
+
100  mIsResolved = true;
+
101  #if UNIX_HOST_DUINO
+
102  exit((mFailedCount || mExpiredCount) ? 1 : 0);
+
103  #endif
+
104  }
+
105  return;
+
106  }
+
107 
+
108  // If reached the end and there are still test cases left, start from the
+
109  // beginning again.
+
110  if (*mCurrent == nullptr) {
+
111  mCurrent = Test::getRoot();
+
112  }
+
113 
+
114  // Implement a finite state machine that calls the (*mCurrent)->setup() or
+
115  // (*mCurrent)->loop(), then changes the test case's mStatus.
+
116  switch ((*mCurrent)->getLifeCycle()) {
+
117  case Test::kLifeCycleNew:
+
118  // Transfer the verbosity of the TestRunner to the Test.
+
119  (*mCurrent)->enableVerbosity(mVerbosity);
+
120  (*mCurrent)->setup();
+
121 
+
122  // Support assertXxx() statements inside the setup() method by
+
123  // moving to the next lifeCycle state if an assertXxx() did not fail
+
124  // inside the setup().
+
125  if ((*mCurrent)->getLifeCycle() == Test::kLifeCycleNew) {
+
126  (*mCurrent)->setLifeCycle(Test::kLifeCycleSetup);
+
127  }
+
128  break;
+ +
130  // If a test is excluded, go directly to LifeCycleFinished, without
+
131  // calling setup() or teardown().
+
132  (*mCurrent)->enableVerbosity(mVerbosity);
+
133  (*mCurrent)->setStatus(Test::kStatusSkipped);
+
134  mSkippedCount++;
+
135  (*mCurrent)->setLifeCycle(Test::kLifeCycleFinished);
+
136  break;
+ +
138  {
+
139  // Check for timeout. mTimeout == 0 means infinite timeout.
+
140  // NOTE: It feels like this code should go into the Test::loop() method
+
141  // (like the extra bit of code in TestOnce::loop()) because it seems
+
142  // like we could want the timeout to be configurable on a case by case
+
143  // basis. This would cause the testing() code to move down into a new
+
144  // again() virtual method dispatched from Test::loop(), analogous to
+
145  // once(). But let's keep the code here for now.
+
146  unsigned long now = millis();
+
147  if (mTimeout > 0 && now >= mStartTime + 1000L * mTimeout) {
+
148  (*mCurrent)->expire();
+
149  } else {
+
150  (*mCurrent)->loop();
+
151 
+
152  // If test status is unresolved (i.e. still in kLifeCycleNew state)
+
153  // after loop(), then this is a continuous testing() test case, so
+
154  // skip to the next test. Otherwise, stay on the current test so that
+
155  // the next iteration of runTest() can resolve the current test.
+
156  if ((*mCurrent)->getLifeCycle() == Test::kLifeCycleSetup) {
+
157  // skip to the next one, but keep current test in the list
+
158  mCurrent = (*mCurrent)->getNext();
+
159  }
+
160  }
+
161  }
+
162  break;
+ +
164  switch ((*mCurrent)->getStatus()) {
+ +
166  mSkippedCount++;
+
167  break;
+
168  case Test::kStatusPassed:
+
169  mPassedCount++;
+
170  break;
+
171  case Test::kStatusFailed:
+
172  mFailedCount++;
+
173  break;
+ +
175  mExpiredCount++;
+
176  break;
+
177  default:
+
178  // should never get here
+
179  mStatusErrorCount++;
+
180  break;
+
181  }
+
182  (*mCurrent)->teardown();
+
183  (*mCurrent)->setLifeCycle(Test::kLifeCycleFinished);
+
184  break;
+ +
186  (*mCurrent)->resolve();
+
187  // skip to the next one by taking current test out of the list
+
188  *mCurrent = *(*mCurrent)->getNext();
+
189  break;
+
190  }
+
191 }
+
192 
+
193 void TestRunner::setupRunner() {
+
194  if (!mIsSetup) {
+
195  mIsSetup = true;
+
196  mCount = countTests();
+
197  mCurrent = Test::getRoot();
+
198  mStartTime = millis();
+
199  }
+
200 }
+
201 
+
202 // Count the number of tests in TestRunner instead of Test::insert() to avoid
+
203 // another C++ static initialization ordering problem.
+
204 uint16_t TestRunner::countTests() {
+
205  uint16_t count = 0;
+
206  for (Test** p = Test::getRoot(); *p != nullptr; p = (*p)->getNext()) {
+
207  count++;
+
208  }
+
209  return count;
+
210 }
+
211 
+
212 namespace {
+
213 
+
219 void printSeconds(Print* printer, unsigned long timeMillis) {
+
220  int s = timeMillis / 1000;
+
221  int ms = timeMillis % 1000;
+
222  printer->print(s);
+
223  printer->print('.');
+
224  if (ms < 100) printer->print('0');
+
225  if (ms < 10) printer->print('0');
+
226  printer->print(ms);
+
227 }
+
228 
+
229 }
+
230 
+
231 void TestRunner::printStartRunner() const {
+ +
233 
+
234  Print* printer = Printer::getPrinter();
+
235  printer->print(F("TestRunner started on "));
+
236  printer->print(mCount);
+
237  printer->println(F(" test(s)."));
+
238 }
+
239 
+
240 void TestRunner::resolveRun() const {
+ +
242  Print* printer = Printer::getPrinter();
+
243 
+
244  unsigned long elapsedTime = mEndTime - mStartTime;
+
245  printer->print(F("TestRunner duration: "));
+
246  printSeconds(printer, elapsedTime);
+
247  printer->println(" seconds.");
+
248 
+
249  printer->print(F("TestRunner summary: "));
+
250  printer->print(mPassedCount);
+
251  printer->print(F(" passed, "));
+
252  printer->print(mFailedCount);
+
253  printer->print(F(" failed, "));
+
254  printer->print(mSkippedCount);
+
255  printer->print(F(" skipped, "));
+
256  printer->print(mExpiredCount);
+
257  printer->print(F(" timed out, out of "));
+
258  printer->print(mCount);
+
259  printer->println(F(" test(s)."));
+
260 }
+
261 
+
262 void TestRunner::listTests() {
+
263  setupRunner();
+
264 
+
265  Print* printer = Printer::getPrinter();
+
266  printer->print(F("TestRunner test count: "));
+
267  printer->println(mCount);
+
268  for (Test** p = Test::getRoot(); (*p) != nullptr; p = (*p)->getNext()) {
+
269  printer->print(F("Test "));
+
270  (*p)->getName().print(printer);
+
271  printer->print(F("; lifeCycle: "));
+
272  printer->println((*p)->getLifeCycle());
+
273  }
+
274 }
+
275 
+
276 void TestRunner::setRunnerTimeout(TimeoutType timeout) {
+
277  mTimeout = timeout;
+
278 }
+
279 
+
280 }
+
static const uint8_t kLifeCycleFinished
The test has completed its life cycle.
Definition: Test.h:88
+ +
static const uint8_t kStatusFailed
Test has failed, or fail() was called.
Definition: Test.h:102
+
static void setPrinter(Print *printer)
Set the output printer.
Definition: TestRunner.cpp:47
+
static const uint8_t kLifeCycleAsserted
Test is asserted (using pass(), fail(), expired() or skipped()) and the getStatus() has been determin...
Definition: Test.h:80
+
static const uint8_t kLifeCycleExcluded
Test is Excluded by an exclude() method.
Definition: Test.h:65
+
static Print * getPrinter()
Get the output printer used by the various assertion() methods and the TestRunner.
Definition: Printer.h:48
+
static const uint8_t kStatusPassed
Test has passed, or pass() was called.
Definition: Test.h:99
+
static const uint8_t kStatusExpired
Test has timed out, or expire() called.
Definition: Test.h:108
+
static const uint8_t kTestRunSummary
Print TestRunner summary message.
Definition: Verbosity.h:58
+
static bool isVerbosity(uint8_t verbosity)
Returns true if ANY of the bit flags of 'verbosity' is set.
Definition: TestRunner.h:97
+
static const uint8_t kStatusSkipped
Test is skipped through the exclude() method or skip() was called.
Definition: Test.h:105
+
static const uint8_t kLifeCycleNew
Test is new, needs to be setup.
Definition: Test.h:57
+
Test ** getNext()
Return the next pointer as a pointer to the pointer, similar to getRoot().
Definition: Test.h:188
+
static Test ** getRoot()
Get the pointer to the root pointer.
Definition: Test.cpp:36
+
static void setPrinter(Print *printer)
Set the printer.
Definition: Printer.h:51
+
static const uint8_t kLifeCycleSetup
Test has been set up by calling setup() and ready to execute the test code.
Definition: Test.h:74
diff --git a/docs/html/TestRunner_8h_source.html b/docs/html/TestRunner_8h_source.html index 9d6b823..3ea3b99 100644 --- a/docs/html/TestRunner_8h_source.html +++ b/docs/html/TestRunner_8h_source.html @@ -1,11 +1,11 @@ - + - + -AUnit: /home/brian/dev/AUnit/src/aunit/TestRunner.h Source File +AUnit: /home/brian/src/AUnit/src/aunit/TestRunner.h Source File @@ -22,7 +22,7 @@
AUnit -  1.3.2 +  1.3.3
Unit testing framework for Arduino platforms inspired by ArduinoUnit and Google Test.
@@ -31,18 +31,21 @@
- + +/* @license-end */
TestRunner.h
-
1 /*
2 MIT License
3 
4 Copyright (c) 2018 Brian T. Park
5 
6 Permission is hereby granted, free of charge, to any person obtaining a copy
7 of this software and associated documentation files (the "Software"), to deal
8 in the Software without restriction, including without limitation the rights
9 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 copies of the Software, and to permit persons to whom the Software is
11 furnished to do so, subject to the following conditions:
12 
13 The above copyright notice and this permission notice shall be included in all
14 copies or substantial portions of the Software.
15 
16 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22 SOFTWARE.
23 */
24 
25 #ifndef AUNIT_TEST_RUNNER_H
26 #define AUNIT_TEST_RUNNER_H
27 
28 #include <stdint.h>
29 #include "Test.h"
30 
31 class Print;
32 
33 namespace aunit {
34 
41 class TestRunner {
42  public:
44  typedef uint8_t TimeoutType;
45 
47  static void run() { getRunner()->runTest(); }
48 
50  static void list() { getRunner()->listTests(); }
51 
56  static void exclude(const char* pattern) {
57  getRunner()->setLifeCycleMatchingPattern(
58  pattern, Test::kLifeCycleExcluded);
59  }
60 
67  static void exclude(const char* testClass, const char* pattern) {
68  getRunner()->setLifeCycleMatchingPattern(testClass, pattern,
70  }
71 
76  static void include(const char* pattern) {
77  getRunner()->setLifeCycleMatchingPattern(pattern, Test::kLifeCycleNew);
78  }
79 
86  static void include(const char* testClass, const char* pattern) {
87  getRunner()->setLifeCycleMatchingPattern(testClass, pattern,
89  }
90 
92  static void setVerbosity(uint8_t verbosity) {
93  getRunner()->setVerbosityFlag(verbosity);
94  }
95 
97  static bool isVerbosity(uint8_t verbosity) {
98  return getRunner()->isVerbosityFlag(verbosity);
99  }
100 
102  static void setPrinter(Print* printer);
103 
110  static void setTimeout(TimeoutType seconds) {
111  getRunner()->setRunnerTimeout(seconds);
112  }
113 
114  private:
116  static const TimeoutType kTimeoutDefault = 10;
117 
119  static const uint8_t kMaxPatternLength = 63 + 1;
120 
122  static TestRunner* getRunner();
123 
125  static uint16_t countTests();
126 
127  // Disable copy-constructor and assignment operator
128  TestRunner(const TestRunner&) = delete;
129  TestRunner& operator=(const TestRunner&) = delete;
130 
132  TestRunner();
133 
135  void runTest();
136 
138  void listTests();
139 
141  void printStartRunner() const;
142 
144  void resolveRun() const;
145 
147  void setupRunner();
148 
150  void setVerbosityFlag(uint8_t verbosity) { mVerbosity = verbosity; }
151 
153  bool isVerbosityFlag(uint8_t verbosity) const {
154  return mVerbosity & verbosity;
155  }
156 
158  void setLifeCycleMatchingPattern(const char* pattern, uint8_t lifeCycle);
159 
164  void setLifeCycleMatchingPattern(const char* testClass, const char* pattern,
165  uint8_t lifeCycle);
166 
168  void setRunnerTimeout(TimeoutType seconds);
169 
170  // The current test case is represented by a pointer to a pointer. This
171  // allows treating the root node the same as all the other nodes, and
172  // simplifies the code traversing the singly-linked list significantly.
173  Test** mCurrent = nullptr;
174 
175  bool mIsResolved = false;
176  bool mIsSetup = false;
177  bool mIsRunning = false;
178  uint8_t mVerbosity = Verbosity::kDefault;
179  uint16_t mCount = 0;
180  uint16_t mPassedCount = 0;
181  uint16_t mFailedCount = 0;
182  uint16_t mSkippedCount = 0;
183  uint16_t mExpiredCount = 0;
184  uint16_t mStatusErrorCount = 0;
185  TimeoutType mTimeout = kTimeoutDefault;
186  unsigned long mStartTime;
187  unsigned long mEndTime;
188 };
189 
190 }
191 
192 #endif
The class that runs the various test cases defined by the test() and testing() macros.
Definition: TestRunner.h:41
-
Base class of all test cases.
Definition: Test.h:43
-
static void exclude(const char *pattern)
Exclude the tests which match the pattern.
Definition: TestRunner.h:56
-
static void setTimeout(TimeoutType seconds)
Set test runner timeout across all tests, in seconds.
Definition: TestRunner.h:110
-
static void include(const char *pattern)
Include the tests which match the pattern.
Definition: TestRunner.h:76
-
static void exclude(const char *testClass, const char *pattern)
Exclude the tests which match the pattern given by (testClass + "_" + pattern), the same concatenatio...
Definition: TestRunner.h:67
-
static void setVerbosity(uint8_t verbosity)
Set the verbosity flag.
Definition: TestRunner.h:92
-
uint8_t TimeoutType
Integer type of the timeout parameter.
Definition: TestRunner.h:44
-
static void run()
Run all tests using the current runner.
Definition: TestRunner.h:47
-
static const uint8_t kDefault
The default verbosity.
Definition: Verbosity.h:69
-
static const uint8_t kLifeCycleExcluded
Test is Excluded by an exclude() method.
Definition: Test.h:65
- -
static void list()
Print out the known tests.
Definition: TestRunner.h:50
-
static void setPrinter(Print *printer)
Set the output printer.
Definition: TestRunner.cpp:47
-
static const uint8_t kLifeCycleNew
Test is new, needs to be setup.
Definition: Test.h:57
-
static void include(const char *testClass, const char *pattern)
Include the tests which match the pattern given by (testClass + "_" + pattern), the same concatenatio...
Definition: TestRunner.h:86
-
static bool isVerbosity(uint8_t verbosity)
Returns true if ANY of the bit flags of &#39;verbosity&#39; is set.
Definition: TestRunner.h:97
+
1 /*
+
2 MIT License
+
3 
+
4 Copyright (c) 2018 Brian T. Park
+
5 
+
6 Permission is hereby granted, free of charge, to any person obtaining a copy
+
7 of this software and associated documentation files (the "Software"), to deal
+
8 in the Software without restriction, including without limitation the rights
+
9 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+
10 copies of the Software, and to permit persons to whom the Software is
+
11 furnished to do so, subject to the following conditions:
+
12 
+
13 The above copyright notice and this permission notice shall be included in all
+
14 copies or substantial portions of the Software.
+
15 
+
16 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+
17 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+
18 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+
19 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+
20 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+
21 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+
22 SOFTWARE.
+
23 */
+
24 
+
25 #ifndef AUNIT_TEST_RUNNER_H
+
26 #define AUNIT_TEST_RUNNER_H
+
27 
+
28 #include <stdint.h>
+
29 #include "Test.h"
+
30 
+
31 class Print;
+
32 
+
33 namespace aunit {
+
34 
+
41 class TestRunner {
+
42  public:
+
44  typedef uint16_t TimeoutType;
+
45 
+
47  static void run() { getRunner()->runTest(); }
+
48 
+
50  static void list() { getRunner()->listTests(); }
+
51 
+
56  static void exclude(const char* pattern) {
+
57  getRunner()->setLifeCycleMatchingPattern(
+
58  pattern, Test::kLifeCycleExcluded);
+
59  }
+
60 
+
67  static void exclude(const char* testClass, const char* pattern) {
+
68  getRunner()->setLifeCycleMatchingPattern(testClass, pattern,
+ +
70  }
+
71 
+
76  static void include(const char* pattern) {
+
77  getRunner()->setLifeCycleMatchingPattern(pattern, Test::kLifeCycleNew);
+
78  }
+
79 
+
86  static void include(const char* testClass, const char* pattern) {
+
87  getRunner()->setLifeCycleMatchingPattern(testClass, pattern,
+ +
89  }
+
90 
+
92  static void setVerbosity(uint8_t verbosity) {
+
93  getRunner()->setVerbosityFlag(verbosity);
+
94  }
+
95 
+
97  static bool isVerbosity(uint8_t verbosity) {
+
98  return getRunner()->isVerbosityFlag(verbosity);
+
99  }
+
100 
+
102  static void setPrinter(Print* printer);
+
103 
+
110  static void setTimeout(TimeoutType seconds) {
+
111  getRunner()->setRunnerTimeout(seconds);
+
112  }
+
113 
+
114  private:
+
116  static const TimeoutType kTimeoutDefault = 10;
+
117 
+
119  static const uint8_t kMaxPatternLength = 63 + 1;
+
120 
+
122  static TestRunner* getRunner();
+
123 
+
125  static uint16_t countTests();
+
126 
+
127  // Disable copy-constructor and assignment operator
+
128  TestRunner(const TestRunner&) = delete;
+
129  TestRunner& operator=(const TestRunner&) = delete;
+
130 
+
132  TestRunner();
+
133 
+
135  void runTest();
+
136 
+
138  void listTests();
+
139 
+
141  void printStartRunner() const;
+
142 
+
144  void resolveRun() const;
+
145 
+
147  void setupRunner();
+
148 
+
150  void setVerbosityFlag(uint8_t verbosity) { mVerbosity = verbosity; }
+
151 
+
153  bool isVerbosityFlag(uint8_t verbosity) const {
+
154  return mVerbosity & verbosity;
+
155  }
+
156 
+
158  void setLifeCycleMatchingPattern(const char* pattern, uint8_t lifeCycle);
+
159 
+
164  void setLifeCycleMatchingPattern(const char* testClass, const char* pattern,
+
165  uint8_t lifeCycle);
+
166 
+
168  void setRunnerTimeout(TimeoutType seconds);
+
169 
+
170  // The current test case is represented by a pointer to a pointer. This
+
171  // allows treating the root node the same as all the other nodes, and
+
172  // simplifies the code traversing the singly-linked list significantly.
+
173  Test** mCurrent = nullptr;
+
174 
+
175  bool mIsResolved = false;
+
176  bool mIsSetup = false;
+
177  bool mIsRunning = false;
+
178  uint8_t mVerbosity = Verbosity::kDefault;
+
179  uint16_t mCount = 0;
+
180  uint16_t mPassedCount = 0;
+
181  uint16_t mFailedCount = 0;
+
182  uint16_t mSkippedCount = 0;
+
183  uint16_t mExpiredCount = 0;
+
184  uint16_t mStatusErrorCount = 0;
+
185  TimeoutType mTimeout = kTimeoutDefault;
+
186  unsigned long mStartTime;
+
187  unsigned long mEndTime;
+
188 };
+
189 
+
190 }
+
191 
+
192 #endif
+
static void setPrinter(Print *printer)
Set the output printer.
Definition: TestRunner.cpp:47
+
static const uint8_t kLifeCycleExcluded
Test is Excluded by an exclude() method.
Definition: Test.h:65
+
static void list()
Print out the known tests.
Definition: TestRunner.h:50
+
static void include(const char *testClass, const char *pattern)
Include the tests which match the pattern given by (testClass + "_" + pattern), the same concatenatio...
Definition: TestRunner.h:86
+
static void exclude(const char *testClass, const char *pattern)
Exclude the tests which match the pattern given by (testClass + "_" + pattern), the same concatenatio...
Definition: TestRunner.h:67
+
static const uint8_t kDefault
The default verbosity.
Definition: Verbosity.h:69
+
static void setVerbosity(uint8_t verbosity)
Set the verbosity flag.
Definition: TestRunner.h:92
+
uint16_t TimeoutType
Integer type of the timeout parameter.
Definition: TestRunner.h:44
+
The class that runs the various test cases defined by the test() and testing() macros.
Definition: TestRunner.h:41
+
static void run()
Run all tests using the current runner.
Definition: TestRunner.h:47
+
static void setTimeout(TimeoutType seconds)
Set test runner timeout across all tests, in seconds.
Definition: TestRunner.h:110
+
static bool isVerbosity(uint8_t verbosity)
Returns true if ANY of the bit flags of 'verbosity' is set.
Definition: TestRunner.h:97
+
static void exclude(const char *pattern)
Exclude the tests which match the pattern.
Definition: TestRunner.h:56
+
static const uint8_t kLifeCycleNew
Test is new, needs to be setup.
Definition: Test.h:57
+
static void include(const char *pattern)
Include the tests which match the pattern.
Definition: TestRunner.h:76
diff --git a/docs/html/Test_8cpp_source.html b/docs/html/Test_8cpp_source.html index b8e32dd..fca4625 100644 --- a/docs/html/Test_8cpp_source.html +++ b/docs/html/Test_8cpp_source.html @@ -1,11 +1,11 @@ - + - + -AUnit: /home/brian/dev/AUnit/src/aunit/Test.cpp Source File +AUnit: /home/brian/src/AUnit/src/aunit/Test.cpp Source File @@ -22,7 +22,7 @@
AUnit -  1.3.2 +  1.3.3
Unit testing framework for Arduino platforms inspired by ArduinoUnit and Google Test.
@@ -31,18 +31,21 @@
- + +/* @license-end */
Test.cpp
-
1 /*
2 MIT License
3 
4 Copyright (c) 2018 Brian T. Park
5 
6 Permission is hereby granted, free of charge, to any person obtaining a copy
7 of this software and associated documentation files (the "Software"), to deal
8 in the Software without restriction, including without limitation the rights
9 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 copies of the Software, and to permit persons to whom the Software is
11 furnished to do so, subject to the following conditions:
12 
13 The above copyright notice and this permission notice shall be included in all
14 copies or substantial portions of the Software.
15 
16 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22 SOFTWARE.
23 */
24 
25 #include <Arduino.h> // for declaration of 'Serial' on Teensy and others
26 #include "Flash.h"
27 #include "Verbosity.h"
28 #include "Printer.h"
29 #include "Compare.h"
30 #include "Test.h"
31 
32 namespace aunit {
33 
34 // Use a static variable inside a function to solve the static initialization
35 // ordering problem.
37  static Test* root;
38  return &root;
39 }
40 
42  mLifeCycle(kLifeCycleNew),
43  mStatus(kStatusUnknown),
44  mVerbosity(Verbosity::kNone),
45  mNext(nullptr) {
46 }
47 
48 // Resolve the status as kStatusFailed only if ok == false. Otherwise, keep the
49 // status as kStatusSetup to allow testing() test cases to continue.
50 void Test::setPassOrFail(bool ok) {
51  if (!ok) {
53  }
54 }
55 
56 // Insert the current test case into the singly linked list, sorted by
57 // getName(). This is an O(N^2) algorithm, but should be good enough for
58 // small N ~= 100. If N becomes bigger than that, it's probably better to insert
59 // using an O(N) algorithm, then sort the elements later in TestRunner::run().
60 // Also, we don't increment a static counter here, because that would introduce
61 // another static initialization ordering problem.
62 void Test::insert() {
63  // Find the element p whose p->next sorts after the current test
64  Test** p = getRoot();
65  while (*p != nullptr) {
66  if (getName().compareTo((*p)->getName()) < 0) break;
67  p = &(*p)->mNext;
68  }
69  mNext = *p;
70  *p = this;
71 }
72 
73 void Test::resolve() {
74  const __FlashStringHelper* const TEST_STRING = F("Test ");
75 
76  if (!isVerbosity(Verbosity::kTestAll)) return;
77 
78  Print* printer = Printer::getPrinter();
79  if (mStatus == Test::kStatusPassed
81  printer->print(TEST_STRING);
82  mName.print(printer);
83  printer->println(F(" passed."));
84  } else if (mStatus == Test::kStatusFailed
86  printer->print(TEST_STRING);
87  mName.print(printer);
88  printer->println(F(" failed."));
89  } else if (mStatus == Test::kStatusSkipped
91  printer->print(TEST_STRING);
92  mName.print(printer);
93  printer->println(F(" skipped."));
94  } else if (mStatus == Test::kStatusExpired
96  printer->print(TEST_STRING);
97  mName.print(printer);
98  printer->println(F(" timed out."));
99  }
100 }
101 
102 }
Base class of all test cases.
Definition: Test.h:43
-
const internal::FCString & getName() const
Get the name of the test.
Definition: Test.h:158
-
static const uint8_t kTestExpired
Print test timed out message.
Definition: Verbosity.h:55
-
static const uint8_t kStatusUnknown
Test status is unknown.
Definition: Test.h:96
-
static const uint8_t kStatusFailed
Test has failed, or fail() was called.
Definition: Test.h:102
-
bool isVerbosity(uint8_t verbosity) const
Determine if any of the given verbosity is enabled.
Definition: Test.h:275
-
Utility class to hold the Verbosity constants.
Definition: Verbosity.h:37
-
void setPassOrFail(bool ok)
Set the status to Passed or Failed depending on ok.
Definition: Test.cpp:50
-
void resolve()
Print out the summary of the current test.
Definition: Test.cpp:73
-
static const uint8_t kTestPassed
Print test passed message.
Definition: Verbosity.h:46
-
static const uint8_t kStatusPassed
Test has passed, or pass() was called.
Definition: Test.h:99
-
Test()
Empty constructor.
Definition: Test.cpp:41
-
static const uint8_t kStatusSkipped
Test is skipped through the exclude() method or skip() was called.
Definition: Test.h:105
-
This file provides overloaded compareXxx(a, b) functions which are used by the various assertXxx(a...
- -
static Test ** getRoot()
Get the pointer to the root pointer.
Definition: Test.cpp:36
-
static const uint8_t kLifeCycleNew
Test is new, needs to be setup.
Definition: Test.h:57
-
static Print * getPrinter()
Get the output printer used by the various assertion() methods and the TestRunner.
Definition: Printer.h:48
-
static const uint8_t kStatusExpired
Test has timed out, or expire() called.
Definition: Test.h:108
-
static const uint8_t kTestSkipped
Print test skipped message.
Definition: Verbosity.h:52
-
Various macros to smooth over the differences among the various platforms with regards to their suppo...
-
static const uint8_t kTestAll
Print all test status messages.
Definition: Verbosity.h:65
-
void print(Print *printer) const
Convenience method for printing an FCString.
Definition: FCString.cpp:32
-
static const uint8_t kTestFailed
Print test failed message.
Definition: Verbosity.h:49
-
void setStatus(uint8_t status)
Set the status of the test.
Definition: Test.h:173
+
1 /*
+
2 MIT License
+
3 
+
4 Copyright (c) 2018 Brian T. Park
+
5 
+
6 Permission is hereby granted, free of charge, to any person obtaining a copy
+
7 of this software and associated documentation files (the "Software"), to deal
+
8 in the Software without restriction, including without limitation the rights
+
9 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+
10 copies of the Software, and to permit persons to whom the Software is
+
11 furnished to do so, subject to the following conditions:
+
12 
+
13 The above copyright notice and this permission notice shall be included in all
+
14 copies or substantial portions of the Software.
+
15 
+
16 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+
17 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+
18 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+
19 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+
20 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+
21 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+
22 SOFTWARE.
+
23 */
+
24 
+
25 #include <Arduino.h> // for declaration of 'Serial' on Teensy and others
+
26 #include "Flash.h"
+
27 #include "Verbosity.h"
+
28 #include "Printer.h"
+
29 #include "Compare.h"
+
30 #include "Test.h"
+
31 
+
32 namespace aunit {
+
33 
+
34 // Use a static variable inside a function to solve the static initialization
+
35 // ordering problem.
+ +
37  static Test* root;
+
38  return &root;
+
39 }
+
40 
+ +
42  mLifeCycle(kLifeCycleNew),
+
43  mStatus(kStatusUnknown),
+
44  mVerbosity(Verbosity::kNone),
+
45  mNext(nullptr) {
+
46 }
+
47 
+
48 // Resolve the status as kStatusFailed only if ok == false. Otherwise, keep the
+
49 // status as kStatusSetup to allow testing() test cases to continue.
+
50 void Test::setPassOrFail(bool ok) {
+
51  if (!ok) {
+ +
53  }
+
54 }
+
55 
+
56 // Insert the current test case into the singly linked list, sorted by
+
57 // getName(). This is an O(N^2) algorithm, but should be good enough for
+
58 // small N ~= 100. If N becomes bigger than that, it's probably better to insert
+
59 // using an O(N) algorithm, then sort the elements later in TestRunner::run().
+
60 // Also, we don't increment a static counter here, because that would introduce
+
61 // another static initialization ordering problem.
+
62 void Test::insert() {
+
63  // Find the element p whose p->next sorts after the current test
+
64  Test** p = getRoot();
+
65  while (*p != nullptr) {
+
66  if (getName().compareTo((*p)->getName()) < 0) break;
+
67  p = &(*p)->mNext;
+
68  }
+
69  mNext = *p;
+
70  *p = this;
+
71 }
+
72 
+
73 void Test::resolve() {
+
74  const __FlashStringHelper* const TEST_STRING = F("Test ");
+
75 
+
76  if (!isVerbosity(Verbosity::kTestAll)) return;
+
77 
+
78  Print* printer = Printer::getPrinter();
+
79  if (mStatus == Test::kStatusPassed
+ +
81  printer->print(TEST_STRING);
+
82  mName.print(printer);
+
83  printer->println(F(" passed."));
+
84  } else if (mStatus == Test::kStatusFailed
+ +
86  printer->print(TEST_STRING);
+
87  mName.print(printer);
+
88  printer->println(F(" failed."));
+
89  } else if (mStatus == Test::kStatusSkipped
+ +
91  printer->print(TEST_STRING);
+
92  mName.print(printer);
+
93  printer->println(F(" skipped."));
+
94  } else if (mStatus == Test::kStatusExpired
+ +
96  printer->print(TEST_STRING);
+
97  mName.print(printer);
+
98  printer->println(F(" timed out."));
+
99  }
+
100 }
+
101 
+
102 }
+
static const uint8_t kTestSkipped
Print test skipped message.
Definition: Verbosity.h:52
+ +
static const uint8_t kStatusFailed
Test has failed, or fail() was called.
Definition: Test.h:102
+
static const uint8_t kTestFailed
Print test failed message.
Definition: Verbosity.h:49
+
Utility class to hold the Verbosity constants.
Definition: Verbosity.h:37
+
void setPassOrFail(bool ok)
Set the status to Passed or Failed depending on ok.
Definition: Test.cpp:50
+
static Print * getPrinter()
Get the output printer used by the various assertion() methods and the TestRunner.
Definition: Printer.h:48
+
const internal::FCString & getName() const
Get the name of the test.
Definition: Test.h:158
+
void resolve()
Print out the summary of the current test.
Definition: Test.cpp:73
+
static const uint8_t kStatusPassed
Test has passed, or pass() was called.
Definition: Test.h:99
+
static const uint8_t kTestPassed
Print test passed message.
Definition: Verbosity.h:46
+
static const uint8_t kStatusExpired
Test has timed out, or expire() called.
Definition: Test.h:108
+
Test()
Empty constructor.
Definition: Test.cpp:41
+
Base class of all test cases.
Definition: Test.h:43
+
static const uint8_t kStatusSkipped
Test is skipped through the exclude() method or skip() was called.
Definition: Test.h:105
+
static const uint8_t kTestAll
Print all test status messages.
Definition: Verbosity.h:65
+
void setStatus(uint8_t status)
Set the status of the test.
Definition: Test.h:173
+
bool isVerbosity(uint8_t verbosity) const
Determine if any of the given verbosity is enabled.
Definition: Test.h:275
+
static Test ** getRoot()
Get the pointer to the root pointer.
Definition: Test.cpp:36
+
static const uint8_t kTestExpired
Print test timed out message.
Definition: Verbosity.h:55
+ +
void print(Print *printer) const
Convenience method for printing an FCString.
Definition: FCString.cpp:32
diff --git a/docs/html/Test_8h_source.html b/docs/html/Test_8h_source.html index ef5ebe9..abf4afc 100644 --- a/docs/html/Test_8h_source.html +++ b/docs/html/Test_8h_source.html @@ -1,11 +1,11 @@ - + - + -AUnit: /home/brian/dev/AUnit/src/aunit/Test.h Source File +AUnit: /home/brian/src/AUnit/src/aunit/Test.h Source File @@ -22,7 +22,7 @@
AUnit -  1.3.2 +  1.3.3
Unit testing framework for Arduino platforms inspired by ArduinoUnit and Google Test.
@@ -31,18 +31,21 @@
- + +/* @license-end */
Test.h
-
1 /*
2 MIT License
3 
4 Copyright (c) 2018 Brian T. Park
5 
6 Permission is hereby granted, free of charge, to any person obtaining a copy
7 of this software and associated documentation files (the "Software"), to deal
8 in the Software without restriction, including without limitation the rights
9 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 copies of the Software, and to permit persons to whom the Software is
11 furnished to do so, subject to the following conditions:
12 
13 The above copyright notice and this permission notice shall be included in all
14 copies or substantial portions of the Software.
15 
16 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22 SOFTWARE.
23 */
24 
25 // Significant portions of the design and implementation of this file came from
26 // https://github.com/mmurdoch/arduinounit/blob/master/src/ArduinoUnit.h
27 
28 #ifndef AUNIT_TEST_H
29 #define AUNIT_TEST_H
30 
31 #include <stdint.h>
32 #include "FCString.h"
33 #include "Verbosity.h"
34 
35 namespace aunit {
36 
43 class Test {
44  public:
45  // The LifeCycle states are used by TestRunner to determine what a Test
46  // should do. Unlike the assertion Status, the LfeCycle is mostly hidden
47  // from client code. The state transition diagram looks like this:
48  //
49  // include()/exclude()
50  // .---------------------> Excluded -----------.
51  // v v
52  // New Finished -> (out of list)
53  // \ setup() assertion() teardown() ^
54  // -------> Setup -------> Asserted ----------'
55 
57  static const uint8_t kLifeCycleNew = 0;
58 
65  static const uint8_t kLifeCycleExcluded = 1;
66 
74  static const uint8_t kLifeCycleSetup = 2;
75 
80  static const uint8_t kLifeCycleAsserted = 3;
81 
88  static const uint8_t kLifeCycleFinished = 4;
89 
90  // The assertion Status is the result of an "assertion()". In addition to
91  // the usual pass() and fail(), there are meta-assertions such as skip()
92  // and expire(). When the Status is changed from kStatusUnknown, the
93  // lifeCycle state changes to kLifeCycleAsserted.
94 
96  static const uint8_t kStatusUnknown = 0;
97 
99  static const uint8_t kStatusPassed = 1;
100 
102  static const uint8_t kStatusFailed = 2;
103 
105  static const uint8_t kStatusSkipped = 3;
106 
108  static const uint8_t kStatusExpired = 4;
109 
115  static Test** getRoot();
116 
118  Test();
119 
120  // NOTE: Don't create a virtual destructor. That's the normal best practice
121  // for classes that will be used polymorphically. However, this class will
122  // never be deleted polymorphically (i.e. through its pointer) so it
123  // doesn't need a virtual destructor. In fact, adding it causes flash and
124  // static memory to increase dramatically because each test() and testing()
125  // macro creates a new subclass. AceButtonTest flash memory increases from
126  // 18928 to 20064 bytes, and static memory increases from 917 to 1055
127  // bytes.
128 
136  virtual void setup() {}
137 
145  virtual void teardown() {}
146 
152  virtual void loop() = 0;
153 
155  void resolve();
156 
158  const internal::FCString& getName() const { return mName; }
159 
161  uint8_t getLifeCycle() const { return mLifeCycle; }
162 
163  void setLifeCycle(uint8_t state) { mLifeCycle = state; }
164 
166  uint8_t getStatus() const { return mStatus; }
167 
173  void setStatus(uint8_t status) {
174  if (status != kStatusUnknown) {
175  setLifeCycle(kLifeCycleAsserted);
176  }
177  mStatus = status;
178  }
179 
181  void setPassOrFail(bool ok);
182 
188  Test** getNext() { return &mNext; }
189 
196  bool isDone() const { return mStatus != kStatusUnknown; }
197 
199  bool isNotDone() const { return !isDone(); }
200 
202  bool isPassed() const { return mStatus == kStatusPassed; }
203 
205  bool isNotPassed() const { return !isPassed(); }
206 
208  bool isFailed() const { return mStatus == kStatusFailed; }
209 
211  bool isNotFailed() const { return !isFailed(); }
212 
214  bool isSkipped() const { return mStatus == kStatusSkipped; }
215 
217  bool isNotSkipped() const { return !isSkipped(); }
218 
220  bool isExpired() const { return mStatus == kStatusExpired; }
221 
223  bool isNotExpired() const { return !isExpired(); }
224 
229  void skip() { setStatus(kStatusSkipped); }
230 
235  void expire() { setStatus(kStatusExpired); }
236 
238  void enableVerbosity(uint8_t verbosity) { mVerbosity |= verbosity; }
239 
241  void disableVerbosity(uint8_t verbosity) { mVerbosity &= ~verbosity; }
242 
243  protected:
248  void fail() { setStatus(kStatusFailed); }
249 
256  void pass() { setStatus(kStatusPassed); }
257 
258  void init(const char* name) {
259  mName = internal::FCString(name);
260  mLifeCycle = kLifeCycleNew;
261  mStatus = kStatusUnknown;
262  mVerbosity = 0;
263  insert();
264  }
265 
266  void init(const __FlashStringHelper* name) {
267  mName = internal::FCString(name);
268  mLifeCycle = kLifeCycleNew;
269  mStatus = kStatusUnknown;
270  mVerbosity = 0;
271  insert();
272  }
273 
275  bool isVerbosity(uint8_t verbosity) const { return mVerbosity & verbosity; }
276 
278  uint8_t getVerbosity() const { return mVerbosity; }
279 
280  private:
281  // Disable copy-constructor and assignment operator
282  Test(const Test&) = delete;
283  Test& operator=(const Test&) = delete;
284 
286  void insert();
287 
288  internal::FCString mName;
289  uint8_t mLifeCycle;
290  uint8_t mStatus;
291  uint8_t mVerbosity;
292  Test* mNext;
293 };
294 
295 }
296 
297 #endif
bool isNotPassed() const
Return true if test is not passed.
Definition: Test.h:205
-
bool isFailed() const
Return true if test is failed.
Definition: Test.h:208
-
void disableVerbosity(uint8_t verbosity)
Disable the given verbosity of the current test.
Definition: Test.h:241
-
Base class of all test cases.
Definition: Test.h:43
-
const internal::FCString & getName() const
Get the name of the test.
Definition: Test.h:158
-
void expire()
Mark the test as expired (i.e.
Definition: Test.h:235
-
static const uint8_t kStatusUnknown
Test status is unknown.
Definition: Test.h:96
-
static const uint8_t kStatusFailed
Test has failed, or fail() was called.
Definition: Test.h:102
-
bool isVerbosity(uint8_t verbosity) const
Determine if any of the given verbosity is enabled.
Definition: Test.h:275
-
void fail()
Mark the test as failed.
Definition: Test.h:248
-
static const uint8_t kLifeCycleAsserted
Test is asserted (using pass(), fail(), expired() or skipped()) and the getStatus() has been determin...
Definition: Test.h:80
-
void setPassOrFail(bool ok)
Set the status to Passed or Failed depending on ok.
Definition: Test.cpp:50
-
void resolve()
Print out the summary of the current test.
Definition: Test.cpp:73
-
A union of (const char*) and (const __FlashStringHelper*) with a discriminator.
Definition: FCString.h:55
-
static const uint8_t kStatusPassed
Test has passed, or pass() was called.
Definition: Test.h:99
-
bool isNotExpired() const
Return true if test is not expired.
Definition: Test.h:223
-
uint8_t getVerbosity() const
Get the verbosity.
Definition: Test.h:278
-
Test()
Empty constructor.
Definition: Test.cpp:41
-
bool isNotDone() const
Return true if test is not has been asserted.
Definition: Test.h:199
-
Test ** getNext()
Return the next pointer as a pointer to the pointer, similar to getRoot().
Definition: Test.h:188
-
static const uint8_t kStatusSkipped
Test is skipped through the exclude() method or skip() was called.
Definition: Test.h:105
-
virtual void setup()
Optional method that performs any initialization.
Definition: Test.h:136
-
static const uint8_t kLifeCycleExcluded
Test is Excluded by an exclude() method.
Definition: Test.h:65
-
bool isNotSkipped() const
Return true if test is not skipped.
Definition: Test.h:217
- -
virtual void loop()=0
The user-provided test case function.
-
void pass()
Mark the test as passed.
Definition: Test.h:256
-
void enableVerbosity(uint8_t verbosity)
Enable the given verbosity of the current test.
Definition: Test.h:238
-
static Test ** getRoot()
Get the pointer to the root pointer.
Definition: Test.cpp:36
-
static const uint8_t kLifeCycleFinished
The test has completed its life cycle.
Definition: Test.h:88
-
void skip()
Mark the test as skipped.
Definition: Test.h:229
-
bool isExpired() const
Return true if test is expired.
Definition: Test.h:220
-
static const uint8_t kLifeCycleNew
Test is new, needs to be setup.
Definition: Test.h:57
-
static const uint8_t kLifeCycleSetup
Test has been set up by calling setup() and ready to execute the test code.
Definition: Test.h:74
-
bool isDone() const
Return true if test has been asserted.
Definition: Test.h:196
-
uint8_t getLifeCycle() const
Get the life cycle state of the test.
Definition: Test.h:161
-
static const uint8_t kStatusExpired
Test has timed out, or expire() called.
Definition: Test.h:108
-
bool isPassed() const
Return true if test is passed.
Definition: Test.h:202
-
bool isNotFailed() const
Return true if test is not failed.
Definition: Test.h:211
-
bool isSkipped() const
Return true if test is skipped.
Definition: Test.h:214
-
virtual void teardown()
Optional method that performs any clean up after the test ends for any reasons, either passing or oth...
Definition: Test.h:145
-
void setStatus(uint8_t status)
Set the status of the test.
Definition: Test.h:173
-
uint8_t getStatus() const
Get the status of the test.
Definition: Test.h:166
+
1 /*
+
2 MIT License
+
3 
+
4 Copyright (c) 2018 Brian T. Park
+
5 
+
6 Permission is hereby granted, free of charge, to any person obtaining a copy
+
7 of this software and associated documentation files (the "Software"), to deal
+
8 in the Software without restriction, including without limitation the rights
+
9 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+
10 copies of the Software, and to permit persons to whom the Software is
+
11 furnished to do so, subject to the following conditions:
+
12 
+
13 The above copyright notice and this permission notice shall be included in all
+
14 copies or substantial portions of the Software.
+
15 
+
16 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+
17 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+
18 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+
19 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+
20 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+
21 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+
22 SOFTWARE.
+
23 */
+
24 
+
25 // Significant portions of the design and implementation of this file came from
+
26 // https://github.com/mmurdoch/arduinounit/blob/master/src/ArduinoUnit.h
+
27 
+
28 #ifndef AUNIT_TEST_H
+
29 #define AUNIT_TEST_H
+
30 
+
31 #include <stdint.h>
+
32 #include "FCString.h"
+
33 #include "Verbosity.h"
+
34 
+
35 namespace aunit {
+
36 
+
43 class Test {
+
44  public:
+
45  // The LifeCycle states are used by TestRunner to determine what a Test
+
46  // should do. Unlike the assertion Status, the LfeCycle is mostly hidden
+
47  // from client code. The state transition diagram looks like this:
+
48  //
+
49  // include()/exclude()
+
50  // .---------------------> Excluded -----------.
+
51  // v v
+
52  // New Finished -> (out of list)
+
53  // \ setup() assertion() teardown() ^
+
54  // -------> Setup -------> Asserted ----------'
+
55 
+
57  static const uint8_t kLifeCycleNew = 0;
+
58 
+
65  static const uint8_t kLifeCycleExcluded = 1;
+
66 
+
74  static const uint8_t kLifeCycleSetup = 2;
+
75 
+
80  static const uint8_t kLifeCycleAsserted = 3;
+
81 
+
88  static const uint8_t kLifeCycleFinished = 4;
+
89 
+
90  // The assertion Status is the result of an "assertion()". In addition to
+
91  // the usual pass() and fail(), there are meta-assertions such as skip()
+
92  // and expire(). When the Status is changed from kStatusUnknown, the
+
93  // lifeCycle state changes to kLifeCycleAsserted.
+
94 
+
96  static const uint8_t kStatusUnknown = 0;
+
97 
+
99  static const uint8_t kStatusPassed = 1;
+
100 
+
102  static const uint8_t kStatusFailed = 2;
+
103 
+
105  static const uint8_t kStatusSkipped = 3;
+
106 
+
108  static const uint8_t kStatusExpired = 4;
+
109 
+
115  static Test** getRoot();
+
116 
+
118  Test();
+
119 
+
120  // NOTE: Don't create a virtual destructor. That's the normal best practice
+
121  // for classes that will be used polymorphically. However, this class will
+
122  // never be deleted polymorphically (i.e. through its pointer) so it
+
123  // doesn't need a virtual destructor. In fact, adding it causes flash and
+
124  // static memory to increase dramatically because each test() and testing()
+
125  // macro creates a new subclass. AceButtonTest flash memory increases from
+
126  // 18928 to 20064 bytes, and static memory increases from 917 to 1055
+
127  // bytes.
+
128 
+
136  virtual void setup() {}
+
137 
+
145  virtual void teardown() {}
+
146 
+
152  virtual void loop() = 0;
+
153 
+
155  void resolve();
+
156 
+
158  const internal::FCString& getName() const { return mName; }
+
159 
+
161  uint8_t getLifeCycle() const { return mLifeCycle; }
+
162 
+
163  void setLifeCycle(uint8_t state) { mLifeCycle = state; }
+
164 
+
166  uint8_t getStatus() const { return mStatus; }
+
167 
+
173  void setStatus(uint8_t status) {
+
174  if (status != kStatusUnknown) {
+
175  setLifeCycle(kLifeCycleAsserted);
+
176  }
+
177  mStatus = status;
+
178  }
+
179 
+
181  void setPassOrFail(bool ok);
+
182 
+
188  Test** getNext() { return &mNext; }
+
189 
+
196  bool isDone() const { return mStatus != kStatusUnknown; }
+
197 
+
199  bool isNotDone() const { return !isDone(); }
+
200 
+
202  bool isPassed() const { return mStatus == kStatusPassed; }
+
203 
+
205  bool isNotPassed() const { return !isPassed(); }
+
206 
+
208  bool isFailed() const { return mStatus == kStatusFailed; }
+
209 
+
211  bool isNotFailed() const { return !isFailed(); }
+
212 
+
214  bool isSkipped() const { return mStatus == kStatusSkipped; }
+
215 
+
217  bool isNotSkipped() const { return !isSkipped(); }
+
218 
+
220  bool isExpired() const { return mStatus == kStatusExpired; }
+
221 
+
223  bool isNotExpired() const { return !isExpired(); }
+
224 
+ +
230 
+ +
236 
+
238  void enableVerbosity(uint8_t verbosity) { mVerbosity |= verbosity; }
+
239 
+
241  void disableVerbosity(uint8_t verbosity) { mVerbosity &= ~verbosity; }
+
242 
+
243  protected:
+ +
249 
+ +
257 
+
258  void init(const char* name) {
+
259  mName = internal::FCString(name);
+
260  mLifeCycle = kLifeCycleNew;
+
261  mStatus = kStatusUnknown;
+
262  mVerbosity = 0;
+
263  insert();
+
264  }
+
265 
+
266  void init(const __FlashStringHelper* name) {
+
267  mName = internal::FCString(name);
+
268  mLifeCycle = kLifeCycleNew;
+
269  mStatus = kStatusUnknown;
+
270  mVerbosity = 0;
+
271  insert();
+
272  }
+
273 
+
275  bool isVerbosity(uint8_t verbosity) const { return mVerbosity & verbosity; }
+
276 
+
278  uint8_t getVerbosity() const { return mVerbosity; }
+
279 
+
280  private:
+
281  // Disable copy-constructor and assignment operator
+
282  Test(const Test&) = delete;
+
283  Test& operator=(const Test&) = delete;
+
284 
+
286  void insert();
+
287 
+
288  internal::FCString mName;
+
289  uint8_t mLifeCycle;
+
290  uint8_t mStatus;
+
291  uint8_t mVerbosity;
+
292  Test* mNext;
+
293 };
+
294 
+
295 }
+
296 
+
297 #endif
+
bool isNotDone() const
Return true if test is not has been asserted.
Definition: Test.h:199
+
static const uint8_t kLifeCycleFinished
The test has completed its life cycle.
Definition: Test.h:88
+
virtual void loop()=0
The user-provided test case function.
+
static const uint8_t kStatusFailed
Test has failed, or fail() was called.
Definition: Test.h:102
+
bool isNotPassed() const
Return true if test is not passed.
Definition: Test.h:205
+
static const uint8_t kLifeCycleAsserted
Test is asserted (using pass(), fail(), expired() or skipped()) and the getStatus() has been determin...
Definition: Test.h:80
+
virtual void teardown()
Optional method that performs any clean up after the test ends for any reasons, either passing or oth...
Definition: Test.h:145
+
void setPassOrFail(bool ok)
Set the status to Passed or Failed depending on ok.
Definition: Test.cpp:50
+
bool isNotFailed() const
Return true if test is not failed.
Definition: Test.h:211
+
static const uint8_t kLifeCycleExcluded
Test is Excluded by an exclude() method.
Definition: Test.h:65
+
void expire()
Mark the test as expired (i.e.
Definition: Test.h:235
+
void fail()
Mark the test as failed.
Definition: Test.h:248
+
void pass()
Mark the test as passed.
Definition: Test.h:256
+
A union of (const char*) and (const __FlashStringHelper*) with a discriminator.
Definition: FCString.h:55
+
static const uint8_t kStatusUnknown
Test status is unknown.
Definition: Test.h:96
+
const internal::FCString & getName() const
Get the name of the test.
Definition: Test.h:158
+
bool isFailed() const
Return true if test is failed.
Definition: Test.h:208
+
void skip()
Mark the test as skipped.
Definition: Test.h:229
+
bool isExpired() const
Return true if test is expired.
Definition: Test.h:220
+
uint8_t getVerbosity() const
Get the verbosity.
Definition: Test.h:278
+
bool isNotExpired() const
Return true if test is not expired.
Definition: Test.h:223
+
void resolve()
Print out the summary of the current test.
Definition: Test.cpp:73
+
bool isNotSkipped() const
Return true if test is not skipped.
Definition: Test.h:217
+
void disableVerbosity(uint8_t verbosity)
Disable the given verbosity of the current test.
Definition: Test.h:241
+
static const uint8_t kStatusPassed
Test has passed, or pass() was called.
Definition: Test.h:99
+
static const uint8_t kStatusExpired
Test has timed out, or expire() called.
Definition: Test.h:108
+
virtual void setup()
Optional method that performs any initialization.
Definition: Test.h:136
+
Test()
Empty constructor.
Definition: Test.cpp:41
+
bool isDone() const
Return true if test has been asserted.
Definition: Test.h:196
+
Base class of all test cases.
Definition: Test.h:43
+
static const uint8_t kStatusSkipped
Test is skipped through the exclude() method or skip() was called.
Definition: Test.h:105
+
bool isSkipped() const
Return true if test is skipped.
Definition: Test.h:214
+
void setStatus(uint8_t status)
Set the status of the test.
Definition: Test.h:173
+
static const uint8_t kLifeCycleNew
Test is new, needs to be setup.
Definition: Test.h:57
+
bool isVerbosity(uint8_t verbosity) const
Determine if any of the given verbosity is enabled.
Definition: Test.h:275
+
Test ** getNext()
Return the next pointer as a pointer to the pointer, similar to getRoot().
Definition: Test.h:188
+
uint8_t getLifeCycle() const
Get the life cycle state of the test.
Definition: Test.h:161
+
static Test ** getRoot()
Get the pointer to the root pointer.
Definition: Test.cpp:36
+
bool isPassed() const
Return true if test is passed.
Definition: Test.h:202
+
uint8_t getStatus() const
Get the status of the test.
Definition: Test.h:166
+
void enableVerbosity(uint8_t verbosity)
Enable the given verbosity of the current test.
Definition: Test.h:238
+
static const uint8_t kLifeCycleSetup
Test has been set up by calling setup() and ready to execute the test code.
Definition: Test.h:74
diff --git a/docs/html/Verbosity_8h_source.html b/docs/html/Verbosity_8h_source.html index bcb5d3c..730ff27 100644 --- a/docs/html/Verbosity_8h_source.html +++ b/docs/html/Verbosity_8h_source.html @@ -1,11 +1,11 @@ - + - + -AUnit: /home/brian/dev/AUnit/src/aunit/Verbosity.h Source File +AUnit: /home/brian/src/AUnit/src/aunit/Verbosity.h Source File @@ -22,7 +22,7 @@
AUnit -  1.3.2 +  1.3.3
Unit testing framework for Arduino platforms inspired by ArduinoUnit and Google Test.
@@ -31,18 +31,21 @@
- + +/* @license-end */
Verbosity.h
-
1 /*
2 MIT License
3 
4 Copyright (c) 2018 Brian T. Park
5 
6 Permission is hereby granted, free of charge, to any person obtaining a copy
7 of this software and associated documentation files (the "Software"), to deal
8 in the Software without restriction, including without limitation the rights
9 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 copies of the Software, and to permit persons to whom the Software is
11 furnished to do so, subject to the following conditions:
12 
13 The above copyright notice and this permission notice shall be included in all
14 copies or substantial portions of the Software.
15 
16 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22 SOFTWARE.
23 */
24 
25 #ifndef AUNIT_VERBOSITY_H
26 #define AUNIT_VERBOSITY_H
27 
28 #include <stdint.h>
29 
30 namespace aunit {
31 
37 class Verbosity {
38  public:
40  static const uint8_t kAssertionPassed = 0x01;
41 
43  static const uint8_t kAssertionFailed = 0x02;
44 
46  static const uint8_t kTestPassed = 0x04;
47 
49  static const uint8_t kTestFailed = 0x08;
50 
52  static const uint8_t kTestSkipped = 0x10;
53 
55  static const uint8_t kTestExpired = 0x20;
56 
58  static const uint8_t kTestRunSummary = 0x40;
59 
60  // compound flags
62  static const uint8_t kAssertionAll = (kAssertionPassed | kAssertionFailed);
63 
65  static const uint8_t kTestAll =
66  (kTestPassed | kTestFailed | kTestSkipped | kTestExpired);
67 
69  static const uint8_t kDefault =
70  (kAssertionFailed | kTestAll | kTestRunSummary);
71 
73  static const uint8_t kAll = 0xFF;
74 
76  static const uint8_t kNone = 0x00;
77 
78  private:
79  // Disable constructor, copy-constructor and assignment operator
80  Verbosity() = delete;
81  Verbosity(const Verbosity&) = delete;
82  Verbosity& operator=(const Verbosity&) = delete;
83 };
84 
85 }
86 
87 #endif
static const uint8_t kTestExpired
Print test timed out message.
Definition: Verbosity.h:55
-
static const uint8_t kAll
Print all messages.
Definition: Verbosity.h:73
-
Utility class to hold the Verbosity constants.
Definition: Verbosity.h:37
-
static const uint8_t kTestPassed
Print test passed message.
Definition: Verbosity.h:46
-
static const uint8_t kDefault
The default verbosity.
Definition: Verbosity.h:69
- -
static const uint8_t kAssertionAll
Print all assertXxx() messages.
Definition: Verbosity.h:62
-
static const uint8_t kNone
Print no messages.
Definition: Verbosity.h:76
-
static const uint8_t kAssertionPassed
Print assertXxx() passed message.
Definition: Verbosity.h:40
-
static const uint8_t kTestRunSummary
Print TestRunner summary message.
Definition: Verbosity.h:58
-
static const uint8_t kTestSkipped
Print test skipped message.
Definition: Verbosity.h:52
-
static const uint8_t kAssertionFailed
Print assertXxx() failed message.
Definition: Verbosity.h:43
-
static const uint8_t kTestAll
Print all test status messages.
Definition: Verbosity.h:65
-
static const uint8_t kTestFailed
Print test failed message.
Definition: Verbosity.h:49
+
1 /*
+
2 MIT License
+
3 
+
4 Copyright (c) 2018 Brian T. Park
+
5 
+
6 Permission is hereby granted, free of charge, to any person obtaining a copy
+
7 of this software and associated documentation files (the "Software"), to deal
+
8 in the Software without restriction, including without limitation the rights
+
9 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+
10 copies of the Software, and to permit persons to whom the Software is
+
11 furnished to do so, subject to the following conditions:
+
12 
+
13 The above copyright notice and this permission notice shall be included in all
+
14 copies or substantial portions of the Software.
+
15 
+
16 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+
17 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+
18 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+
19 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+
20 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+
21 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+
22 SOFTWARE.
+
23 */
+
24 
+
25 #ifndef AUNIT_VERBOSITY_H
+
26 #define AUNIT_VERBOSITY_H
+
27 
+
28 #include <stdint.h>
+
29 
+
30 namespace aunit {
+
31 
+
37 class Verbosity {
+
38  public:
+
40  static const uint8_t kAssertionPassed = 0x01;
+
41 
+
43  static const uint8_t kAssertionFailed = 0x02;
+
44 
+
46  static const uint8_t kTestPassed = 0x04;
+
47 
+
49  static const uint8_t kTestFailed = 0x08;
+
50 
+
52  static const uint8_t kTestSkipped = 0x10;
+
53 
+
55  static const uint8_t kTestExpired = 0x20;
+
56 
+
58  static const uint8_t kTestRunSummary = 0x40;
+
59 
+
60  // compound flags
+
62  static const uint8_t kAssertionAll = (kAssertionPassed | kAssertionFailed);
+
63 
+
65  static const uint8_t kTestAll =
+ +
67 
+
69  static const uint8_t kDefault =
+ +
71 
+
73  static const uint8_t kAll = 0xFF;
+
74 
+
76  static const uint8_t kNone = 0x00;
+
77 
+
78  private:
+
79  // Disable constructor, copy-constructor and assignment operator
+
80  Verbosity() = delete;
+
81  Verbosity(const Verbosity&) = delete;
+
82  Verbosity& operator=(const Verbosity&) = delete;
+
83 };
+
84 
+
85 }
+
86 
+
87 #endif
+
static const uint8_t kTestSkipped
Print test skipped message.
Definition: Verbosity.h:52
+
static const uint8_t kAll
Print all messages.
Definition: Verbosity.h:73
+
static const uint8_t kTestFailed
Print test failed message.
Definition: Verbosity.h:49
+
Utility class to hold the Verbosity constants.
Definition: Verbosity.h:37
+
static const uint8_t kDefault
The default verbosity.
Definition: Verbosity.h:69
+
static const uint8_t kNone
Print no messages.
Definition: Verbosity.h:76
+
static const uint8_t kAssertionPassed
Print assertXxx() passed message.
Definition: Verbosity.h:40
+
static const uint8_t kTestPassed
Print test passed message.
Definition: Verbosity.h:46
+
static const uint8_t kTestRunSummary
Print TestRunner summary message.
Definition: Verbosity.h:58
+
static const uint8_t kAssertionFailed
Print assertXxx() failed message.
Definition: Verbosity.h:43
+
static const uint8_t kTestAll
Print all test status messages.
Definition: Verbosity.h:65
+
static const uint8_t kAssertionAll
Print all assertXxx() messages.
Definition: Verbosity.h:62
+
static const uint8_t kTestExpired
Print test timed out message.
Definition: Verbosity.h:55
diff --git a/docs/html/annotated.html b/docs/html/annotated.html index cbeef48..1269223 100644 --- a/docs/html/annotated.html +++ b/docs/html/annotated.html @@ -1,9 +1,9 @@ - + - + AUnit: Class List @@ -22,7 +22,7 @@
AUnit -  1.3.2 +  1.3.3
Unit testing framework for Arduino platforms inspired by ArduinoUnit and Google Test.
@@ -31,18 +31,21 @@
- + +/* @license-end */ @@ -71,14 +74,14 @@  CFakePrintAn implementation of Print that writes to an in-memory buffer  Ninternal  CFCStringA union of (const char*) and (const __FlashStringHelper*) with a discriminator - CAssertionAn Assertion class is a subclass of Test and provides various overloaded assertion() functions - CMetaAssertionClass that extends the Assertion class to support the checkTestXxx() and assertTestXxx() macros that look at the status of the named test + CAssertionAn Assertion class is a subclass of Test and provides various overloaded assertion() functions + CMetaAssertionClass that extends the Assertion class to support the checkTestXxx() and assertTestXxx() macros that look at the status of the named test  CPrinterUtility class that provides a level of indirection to the Print class where test results can be sent  CTestBase class of all test cases - CTestAgainSimilar to TestOnce but performs the user-defined test multiple times - CTestOnceSimilar to TestAgain but performs user-defined test only once - CTestRunnerThe class that runs the various test cases defined by the test() and testing() macros - CVerbosityUtility class to hold the Verbosity constants + CTestAgainSimilar to TestOnce but performs the user-defined test multiple times + CTestOnceSimilar to TestAgain but performs user-defined test only once + CTestRunnerThe class that runs the various test cases defined by the test() and testing() macros + CVerbosityUtility class to hold the Verbosity constants @@ -86,7 +89,7 @@ diff --git a/docs/html/classaunit_1_1Assertion-members.html b/docs/html/classaunit_1_1Assertion-members.html index 11da46e..e87fdc8 100644 --- a/docs/html/classaunit_1_1Assertion-members.html +++ b/docs/html/classaunit_1_1Assertion-members.html @@ -1,9 +1,9 @@ - + - + AUnit: Member List @@ -22,7 +22,7 @@
AUnit -  1.3.2 +  1.3.3
Unit testing framework for Arduino platforms inspired by ArduinoUnit and Google Test.
@@ -31,18 +31,21 @@ - + +/* @license-end */ - + +/* @license-end */
-

An Assertion class is a subclass of Test and provides various overloaded assertion() functions. +

An Assertion class is a subclass of Test and provides various overloaded assertion() functions. More...

#include <Assertion.h>

@@ -81,10 +84,11 @@
Inheritance graph
- - - - + + + + +
[legend]
@@ -92,17 +96,20 @@
Collaboration graph
- + +
[legend]
- - + + - - + + @@ -261,11 +268,13 @@ - - + + - - + +

Protected Member Functions

 Assertion ()
 Empty constructor. More...
Assertion ()
 Empty constructor.
 
bool isOutputEnabled (bool ok) const
 Returns true if an assertion message should be printed. More...
+bool isOutputEnabled (bool ok) const
 Returns true if an assertion message should be printed.
 
bool assertionBool (const char *file, uint16_t line, bool arg, bool value)
void init (const __FlashStringHelper *name)
 
bool isVerbosity (uint8_t verbosity) const
 Determine if any of the given verbosity is enabled. More...
+bool isVerbosity (uint8_t verbosity) const
 Determine if any of the given verbosity is enabled.
 
uint8_t getVerbosity () const
 Get the verbosity. More...
+uint8_t getVerbosity () const
 Get the verbosity.
 
- - + + - - + + - - + + - - + + - - + + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + @@ -343,126 +366,73 @@ - - + + - - + + - - + + - + - + - + - - + + - - + + - - + + - - + + - - + +

@@ -283,59 +292,73 @@

virtual void loop ()=0
 The user-provided test case function. More...
 
void resolve ()
 Print out the summary of the current test. More...
+void resolve ()
 Print out the summary of the current test.
 
const internal::FCStringgetName () const
 Get the name of the test. More...
+const internal::FCStringgetName () const
 Get the name of the test.
 
uint8_t getLifeCycle () const
 Get the life cycle state of the test. More...
+uint8_t getLifeCycle () const
 Get the life cycle state of the test.
 
void setLifeCycle (uint8_t state)
 
uint8_t getStatus () const
 Get the status of the test. More...
+uint8_t getStatus () const
 Get the status of the test.
 
void setStatus (uint8_t status)
 Set the status of the test. More...
 
void setPassOrFail (bool ok)
 Set the status to Passed or Failed depending on ok. More...
+void setPassOrFail (bool ok)
 Set the status to Passed or Failed depending on ok.
 
Test ** getNext ()
 Return the next pointer as a pointer to the pointer, similar to getRoot(). More...
 Return the next pointer as a pointer to the pointer, similar to getRoot(). More...
 
bool isDone () const
 Return true if test has been asserted. More...
 
bool isNotDone () const
 Return true if test is not has been asserted. More...
+bool isNotDone () const
 Return true if test is not has been asserted.
 
bool isPassed () const
 Return true if test is passed. More...
+bool isPassed () const
 Return true if test is passed.
 
bool isNotPassed () const
 Return true if test is not passed. More...
+bool isNotPassed () const
 Return true if test is not passed.
 
bool isFailed () const
 Return true if test is failed. More...
+bool isFailed () const
 Return true if test is failed.
 
bool isNotFailed () const
 Return true if test is not failed. More...
+bool isNotFailed () const
 Return true if test is not failed.
 
bool isSkipped () const
 Return true if test is skipped. More...
+bool isSkipped () const
 Return true if test is skipped.
 
bool isNotSkipped () const
 Return true if test is not skipped. More...
+bool isNotSkipped () const
 Return true if test is not skipped.
 
bool isExpired () const
 Return true if test is expired. More...
+bool isExpired () const
 Return true if test is expired.
 
bool isNotExpired () const
 Return true if test is not expired. More...
+bool isNotExpired () const
 Return true if test is not expired.
 
void skip ()
 Mark the test as skipped. More...
void expire ()
 Mark the test as expired (i.e. More...
 
void enableVerbosity (uint8_t verbosity)
 Enable the given verbosity of the current test. More...
+void enableVerbosity (uint8_t verbosity)
 Enable the given verbosity of the current test.
 
void disableVerbosity (uint8_t verbosity)
 Disable the given verbosity of the current test. More...
+void disableVerbosity (uint8_t verbosity)
 Disable the given verbosity of the current test.
 
- Static Public Member Functions inherited from aunit::Test
static Test ** getRoot ()
 Get the pointer to the root pointer. More...
 
- Static Public Attributes inherited from aunit::Test
static const uint8_t kLifeCycleNew = 0
 Test is new, needs to be setup. More...
+static const uint8_t kLifeCycleNew = 0
 Test is new, needs to be setup.
 
static const uint8_t kLifeCycleExcluded = 1
 Test is Excluded by an exclude() method. More...
 Test is Excluded by an exclude() method. More...
 
static const uint8_t kLifeCycleSetup = 2
 Test has been set up by calling setup() and ready to execute the test code. More...
 Test has been set up by calling setup() and ready to execute the test code. More...
 
static const uint8_t kLifeCycleAsserted = 3
 Test is asserted (using pass(), fail(), expired() or skipped()) and the getStatus() has been determined. More...
 Test is asserted (using pass(), fail(), expired() or skipped()) and the getStatus() has been determined. More...
 
static const uint8_t kLifeCycleFinished = 4
 The test has completed its life cycle. More...
 
static const uint8_t kStatusUnknown = 0
 Test status is unknown. More...
+static const uint8_t kStatusUnknown = 0
 Test status is unknown.
 
static const uint8_t kStatusPassed = 1
 Test has passed, or pass() was called. More...
+static const uint8_t kStatusPassed = 1
 Test has passed, or pass() was called.
 
static const uint8_t kStatusFailed = 2
 Test has failed, or fail() was called. More...
+static const uint8_t kStatusFailed = 2
 Test has failed, or fail() was called.
 
static const uint8_t kStatusSkipped = 3
 Test is skipped through the exclude() method or skip() was called. More...
+static const uint8_t kStatusSkipped = 3
 Test is skipped through the exclude() method or skip() was called.
 
static const uint8_t kStatusExpired = 4
 Test has timed out, or expire() called. More...
+static const uint8_t kStatusExpired = 4
 Test has timed out, or expire() called.
 

Detailed Description

-

An Assertion class is a subclass of Test and provides various overloaded assertion() functions.

-

Having this class inherit from Test allows it to have access to the mVerbosity setting, as well as the test's current mStatus. (An earlier implementation inverted the class hierarchy between Assertion and Test). That allows every assertion() method to bail out early if it detects the result of a previous assertion() in mStatus. This delayed bailout may happen if the assertXxx() macro was called from inside a helper method of a fixture class used by testF() or testingF() macros.

+

An Assertion class is a subclass of Test and provides various overloaded assertion() functions.

+

Having this class inherit from Test allows it to have access to the mVerbosity setting, as well as the test's current mStatus. (An earlier implementation inverted the class hierarchy between Assertion and Test). That allows every assertion() method to bail out early if it detects the result of a previous assertion() in mStatus. This delayed bailout may happen if the assertXxx() macro was called from inside a helper method of a fixture class used by testF() or testingF() macros.

For the same reason as the compareXxx() methods, we use explicit overloaded functions, instead of using template specialization. And just as before, I was unable to use a template function for primitive integer types, because it interfered with the resolution of assertion(char*, char*). The wrong function would be called.

The assertion() methods are internal helpers, they should not be called directly by users.

Definition at line 55 of file Assertion.h.

-

Constructor & Destructor Documentation

- -

◆ Assertion()

- -
-
- - - - - -
- - - - - - - -
aunit::Assertion::Assertion ()
-
-inlineprotected
-
- -

Empty constructor.

- -

Definition at line 58 of file Assertion.h.

- -
-
-

Member Function Documentation

- -

◆ isOutputEnabled()

- -
-
- - - - - -
- - - - - - - - -
bool aunit::Assertion::isOutputEnabled (bool ok) const
-
-protected
-
- -

Returns true if an assertion message should be printed.

- -

Definition at line 183 of file Assertion.cpp.

- -
-
-
The documentation for this class was generated from the following files:

The documentation for this class was generated from the following files:
diff --git a/docs/html/classaunit_1_1Assertion__coll__graph.map b/docs/html/classaunit_1_1Assertion__coll__graph.map index 27996bd..fcc9e69 100644 --- a/docs/html/classaunit_1_1Assertion__coll__graph.map +++ b/docs/html/classaunit_1_1Assertion__coll__graph.map @@ -1,3 +1,4 @@ - + + diff --git a/docs/html/classaunit_1_1Assertion__coll__graph.md5 b/docs/html/classaunit_1_1Assertion__coll__graph.md5 index 5321e44..7301817 100644 --- a/docs/html/classaunit_1_1Assertion__coll__graph.md5 +++ b/docs/html/classaunit_1_1Assertion__coll__graph.md5 @@ -1 +1 @@ -4781a5157937c95605da05c261c69420 \ No newline at end of file +9b2ee4fa3e14431640c59c4b6e95ac38 \ No newline at end of file diff --git a/docs/html/classaunit_1_1Assertion__coll__graph.png b/docs/html/classaunit_1_1Assertion__coll__graph.png index 64c1f6bc885722d9083da96270a2dd6c9e8a25a9..11634c23fb15b8e4e5635b3a7b0381069b1799ec 100644 GIT binary patch literal 3127 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 BF&F>< literal 2715 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 diff --git a/docs/html/classaunit_1_1Assertion__inherit__graph.map b/docs/html/classaunit_1_1Assertion__inherit__graph.map index e2155a9..3aed29a 100644 --- a/docs/html/classaunit_1_1Assertion__inherit__graph.map +++ b/docs/html/classaunit_1_1Assertion__inherit__graph.map @@ -1,6 +1,7 @@ - - - - + + + + + diff --git a/docs/html/classaunit_1_1Assertion__inherit__graph.md5 b/docs/html/classaunit_1_1Assertion__inherit__graph.md5 index 3ccdc55..9886a20 100644 --- a/docs/html/classaunit_1_1Assertion__inherit__graph.md5 +++ b/docs/html/classaunit_1_1Assertion__inherit__graph.md5 @@ -1 +1 @@ -c766b45d8de962a4955301094f19d41f \ No newline at end of file +240c2c210ce63de31026dfffdc14026f \ No newline at end of file diff --git a/docs/html/classaunit_1_1Assertion__inherit__graph.png b/docs/html/classaunit_1_1Assertion__inherit__graph.png index efa81863b46393789dced4727880fa7c9c341a6d..54fe7e1228b0fdffa45173965572b3f89b48bc84 100644 GIT binary patch literal 9959 zcmc(FbySpXyYDF7-3&;H(gP9>64D?7A_CHlbeE*kFbweWB8YTINOv~_N)J-fASECm z-TUVI&N*xEeZGD6`EM^5%QX+o^W4vU#V@WqQbSFV2%jDw0)Y@IE6Hg>Aa|hP2MZS) zT$$e$iUI#&n>|yMgWTNy%WTO{fI#j+l;xgkd8h8o`5I6j&ExD1Z}auPYS*HC!DmEX z(rg-;{ypCe#L%twwyoySOOEd{L?N=vO(_1&*S^?T09*6IFuUH zWSCeSq|X5e-;{i zh*AkB?d0Zy%HWo<%i!EoKRrLkhh`bl!ptx`J3B*=qopr4tH~oHBb_}wy zyw9KUq3?oJ@?X8Kw7|Q(yaaz{H9BvxCB3joD&sAmCyTp8l}OAIqN4>5AvJoj8K>9K z*vJZp>uu2H5@n-VYE+&-?@4{^_Nc2XjHs*Bu*v=HPL5)1yNf{@No4MR;G=O)9GkQP zccm&J80?O@>OnHxgX{hK_m8?%@-#OhVR6vXggw{ff7=wB&ux#Ub(b zu>ETSr*Id3=v~I%tlV5oh=BK=NwHB2{qNtu%d4y9+5)bem%H%>57h&kQ$!r-(P;GE zkoa!UidcPP<6Q_VE9*$UI`g1iI<)lJ>(_MDyn2{8I5@ic`d#30qE7SQ5ev;eLaC{# zCXSBC7dZ+`=)7k~YxlxJReGhNk6kelFs)awSROvaYx3Gv@bhanI*5pgk(ZOh{5{(c z{87l7RX~8W#?Z)Sq1E5n#pS80Dj}`;bID4twSkX)0|VXQFPyg~c*VrUyJlt>Y-{N0 z=;(AC-5(xrPX{kAo7vCSzo;@AObf;hR_Sez>@g#x6U5BQ$`W(mh%+iPtbRjg?JUrbyGj$#TS5h};>IQ8AEkjE`9#G;liaA3@M@OAqUEk;BafsMY1u=*^ zF8&(-A|NREUW+RfTvSz6UHtVcDuzMySB+7wM-CdM;o86`8%`V=8j2-`?8=sp&eV8t zm=Ycn6SHRh^5sj2w7k50)taBSr>6*{eP~GSpr=xo2NjG%5|@yG!O6+l-P>zEU1>=x zVoz%|oF3Dk#9#O3ekVT{6hlixBPb{c;&-|f-ZwlPu2-U9VUasQQ~mk#XFV)UUEQf% z%P6_Q18o;)=O86^nHMkOCz1vcFmE59JCNq)=D5^U#KHP-*W4TwWRQZ7k5ARwz0RzK z%sWK|1wncxVTp-Uxtb3(U%n)xqbn31T>o4-zW*-V}?cz6RK?es1m(_1n zC1!R5G+&R8kCPwSkXsF=gdz}xe0BAhxPyjpc-%!YsiAj{3vu3C*J0rBJ!SRz zGx3l=Fht0@^nYJZ`liBxWL6K?JhRwU;Gs6XxqkHSC7G-YxYeIIuePkpN)@4Et)lqU zRHW2RF{J<%j9m*Z$FHnxLmF9q(`@`IuQQTD2TMhckSLLObUGM^>h$_TDpRYdCY>fS z=<0$W|L-VTda!`197TS+(pQ&{5~G&FnXgGsc5fa^bD6y%csHgPYqZ2q z2-5`*;0z5V**_Q-&D0zZ_*tzt7?1hH ziOm?=)mu%GkjU`I`$ylhWZTT}d|#=6+er zamol8u6lucN?7aIf6nE9ypT;WHIHr(D1CfrPESqJk-c4k`;W{L{W`Pd?#Ps-#YGc# zPEJuxBYZ~rNVhh#=^?#*Q3(x?7RB4_V3!-q@GAfRJg9HP*PI9K@EQt z!U26;x7izZUo{ybDq5#ExilTC!@?TX)PkztspKq0IJ&E0Iy&wixLK6}we!4!EygGcz&cX3+MXY2~ z@^Vl1=jv()0Hu}Q*h%j7rLOR$tu2B`x%U8XSNh`FK<~nW0CcgRsU?b!kN3VlTX(rS z_eh0%;QL=3mv|W*ol6B=(tZ+gcn>m-VHeWR`@%^Hsj?%VVC!pOcGI@oiYfhxc1iBSiZXX z<>`KTO-&D|i2dEb8-~2Ryp6dg(a&mWQS&Xnlj3|*Qq1iMH)k0h>qF4PU*iN2@bDa+ zd2o-29y9l?iRTBYX=%_PPWj2gmz)sZwmGG)0(WoEn`?i+KVLa@n>=~Lh@toZytfzH zm=^+XTCC{J&CN@0$W&BRQmR!APpFGvDCfhC7u!E-2#AS^Q`X1OXi^G_oU;fa*PluV z#>eCcSn3lWasnDYIZaJ+L`=*U<7A1xs54_Y0RB!ix^jqcIAGT14buvZccGAAr=-^ zL{yY5S}?=+_hSo7%cpsoHtAn>qkn?(!3fe`g0yEo4US7p3@t9^F=+NC12xgt-yf`5 z7@}8#0@<3S{bdVk4Fc14wc`{K5fLPlB@M6~u+A`$f;mM+DrFwtDJ3Pm*u;zx&p(M| z)z{Mko-R$M;i#g3uyBbNtZG7Ugf1x(r@S?08l;H)1XeM8W_5c5B$Z@qMd`}rGF!--*x z?s9^o3s)C`%e~A(5J+UC`>I4X^DPbN3g@>AxL&v!?4D~P+4`75>HyHzDKe5KOIs(9 zYu)*0-|E|Z&Yw27AdiKWr}V6UG}W?1Tc~f922)L*5D$R-Gfgx{$(K`*v}dk-u5P<{ z$x;8H7&Hx+cfZ@#Ot_Ip;)WAnv1+jX6WtwWA9UB)oeA@q zCL5be%sL&0pb&xcj$SLIFd_@6CHOO?`kAb!z}2gk3mJsH~g>c*wm(m0x}kM({9p zcLVgd(bsFaPkVYS_YTG+3x)X0FlqR$Kqm`-BeBp>g_SWHaVNWKKskpIe#pHxI1@8d z#}P> z)ENQ0533k12icq6;;oStMZmYUJj?ay1FwXPP`H(P&^^w;VYXf+`fk!?-DrGZNsSWfpU@s zxCAlTTkOznc`H0SH)m>N6B%%IzSJE_0XW0_YR3Oll41t|`jTBxfV)1NfdlzFF_A@5 zk_of|;fX@fC!?u(-v5_OvRl$Esufh_o+K+{3%w4ZCFnx39M-Kkrs zMmfzl)2XSc35bgJ7QD!D-b8bxp~jQy-ZHe^Twi$a)J%?K$>KOO>TJQETmy?2q z4AdS`qvuXk-9i8ZAPr+FPX2A;*$iAziT_XKTaLOZhm<=lNY>Za-@AVw8v)Dx{P|Zi zVZ2fZ&?07lm_UN+>%|cC!uX*534cy|>~>#JNXTVvfNr+YgJ5WA2O)V7?g^ zE-w6MA9&tramgzw;kI6%+YQzO!Nz0QNa=gL{nW(;CgM0-;N$PVLjO(QVSOm=bh~O; zLsRoEDp_r2baxy>gj~(=ggC1YhSE->fDX3kC)T z4weHTeWt8DO1QqZCJ5QSzPdobP}oHD-I6z#ZiA=3C%<73)hrDG6fJ|KpV&;Rf0I>n zbTmP9WaKFKSiQ^26o9p1e0=<5Kz+FR_^dE+h%I_!nXSV~n61{<)`b78uCCgozbw=m zK%@UMY;cudCmePR2S_K$h5U6hJLp=c0B3)Kc z9!%6K>SWB$8Yr=oi^1Wx>0hq)r~XdW+aSrNa(s8LzItnWXa#QzS+MuD}kbh6+idg1qqOE}X>z4Fg&yRkdlkrEybTsTicu^UN@_lhbS>|dQdV@R#tSzuD59Ttz)dpGv<~2 zjNgmB%)5*G=2UNwtJ|fnD_Z40ywWaznV;88xps9PKfNzbf})jUC5DQpm|y#e zVqzoZ!in$m)*7IT`U>5D#B=Mo?jKD`EiQIEBaM~^Z*>RKZANDFwh#vi)kkOd>pb{v z-W}mwpcQDiq|QU#(Wiu<6H+h%w{qWgoXe(*SOhv4UX!x)y>OwzW(@E0Pd_g$U8Jz( zL3K#TnfKB7y8e@4bee`FYP#32sZKdyBtM*PyT#8qj~@O#<0m0tf0@7h6ap4wldI)A7dH0 zlFe&uR?ACWp9bRMMRr|XteOxK8Hqh%F}-8tU&F7y8MN9@aW5gQ%p>+oiX3a0W?|<@ z*6~!6D6O`(Rr4wvZxo-yD0M^QF^YhH3i!O^`eJ4kwES(`-FATUXUm(9j!1c^+e-%H-c6K_H$OU_X#D0o<7h!yJz zlkGMia5**LN`ZZPKtaLgcko;wjIg4t#+#j-ER4jfvoF5JSid2U_qAZ{kP9PDvF_5l zxVT9lRk>4{ys@y4$+TILnX?RDTN$9)}Qdos)5f8ja4y|2X1THkow5kc01HCXSQbv%z$>R#HZ zGY$>!m2STBd;~l&ng?_?%35%TIF&rqUmW{jhp1k>aO&z^x9qbZ7^$*WjObx~kZ5~( zkRiM~(Oy?-$P05@TL8ND9=S_0%p9|`t7X53W{i|pjNEPgcjxsLO(;@1g$@v#m%t^v zJgX4%I~6oDUpKitO@ctu#P#nz+>~(NvI>o7yI4-td5f2N7orLQe94xdCOR1x1j8mn(>qX~%tpA2=DhcIO4a`JEMfCz~;0!ohrM9R% z1F_T)Yr?>m)zq6hqeh}Tt~ z_aqG8ou2y83U(W9C=GIfoCelH@#_O#CP}}L@^Tj$Mb_uidFG1%wnFHHvYofIVSoKK zFMD(Ca3J^f>|hR%LPR1r#fuj&LQfV>DBi)OLa z6tuU;gETPv`q$|V6Zs;CJ3AT|7{b7QCcM6$+1oS4B4#qcRqP#-QC#l%Uf6XnK7x$C z5y#Rpc5m8Rk~H$i`Zx{|RU+~Z7mpuq;7v(EL4k~!8SeIuI36@o$Eo!(Ca?sXFMjiZ z7~4-RD)yL5Z-_xL62Kx7IGw^kQgj4o?UXtf#Xv9adj3w00p=zvJ9{ZgzC&qCKF?el zNFh)mWnf}~z`&6iE%}r<5|6q1d!E_%1bgM@*9Dlh8X=REHa;|RBM6K!4BCt$L>FcW z?d*iu*#{K!)u?3@ZK)KH+rcfq>&vqZTe$c?BEP9{rB5JLdLb4Tv+v4wbvC9C9`~&h zj8x<_jKu3D>KJW?hJ;|%yKhok4McQi1m52Ld$3A=;xly}lW%_qX6cmifkaMr9M=qg z8vIt~{-;>G$v^uO`o=lMh^YLUY_v^Jz||4;ONM`zNSD>awfrX44`Hd3e5QngG z=F_&e8iN^+!G=;UHDLN$w!er@&m4OC`Nd7whwddO)8awD-aFixp}IH;&n(|#xxB1h zo^O!~Marc=%^Sl{lk_JV%UA4}Ymv&%S$J0ggR14l8nrYo&N$Iz7Z;Py&+BVwXmGi+ z|Dohc(_XvXDBojZZ|~-iz$@(!*AW0hhb$jnRw}tfr6fP%$y+U2eHr^FMEM**B{liT?ow2CDt6H{;d>wCCnBmKpGO zUiVZ_MbMisj$hwm56t05+y0n39k{a&Fr~U_yA+wB-D`uKpi$ky#dW@YT}umg1+DKh zz-+m97o%>aJ8~fetXE@mFZW!et;zEWXQp;ABx9i;+~Wiw5-S_V;*JF6ZfjGtqxk>@ z7nDhBVa;ne-7O;OEkk;Ga0pWF`WX-Pr~|@Bf%B-kyoifRMrPUh*LUWK7=Idb)FB0& z+(+Ta0l`5|M$L}|pcvM6!!6TmTUFq$H!@atHrLX0JahTi1TaL4UklNJ)_#x2p7~op z_ofJnH$){r^wQ(g!l$G8wWMl3cZQV@AY6B=oesp?2Ito5N^)js>u#Oyp@FnyE{Fe}8@Z zdA|n_VPP_(cdjmIWO=NJ+A`A;`d5Y1iz@OHfREYTEf+vua|a54f_lbJRU6r<3`V*@ z#p$`zfnhO_5xk9v4;BuFku=6U*_}4PbStP*{B^08{~?UkfzjBPo8Jp#=C`p3nDOc1`=H6&6@|3*QYC1hT73)!*O3Nia+FU34_r9c908W zFC!E>&6(lX3G67V=37yTr4)?X`n@#DuS`^Euh9B%IJV8&pzJ+5PHX=7t^v}S^+06e_{h{DQm-&CyZ?E2ATV>N=n z*bPCT`N{6Eh|~N4q#SsHzp5oN=9wDpr3`^-Bf!ke++v(h0#Uu6u=zxyr7ry^ z@JR+nN8p1x662z-@?#jh(b(s;H;{4sLszxR-$2nktyKyst=6^#46mN5aR)7ZDkG z$D9!8l;__h!EeEPEd%2nC^l+fgfH#v5Y_0#{NE12>#}oKIeB^0uYYj>f`yBR*D+}v zSW=@3HWsM5C6Fm%u0L_X06s^!6*lv7a>x43M#~XGe15ozEhNeyL9b$cyXOZdCzFI*f67MJGXhKL0(a*n zu!9~_;-hp21E&oQ40OTtJ*QIQs_caa5?BC(-iazbV5B^q$gT6gWWP1gk%b;cHLJkq zHka@{wuohxvO>VLwY0h$y>^Gb_4m`6BP^|~Y5P*WfeY@eJ|Ti01T_`;7Iqzr3N z5^2^olP444v;nXQK7G>PIs|^p_L#bqgL4{ihQ30|2L=Y{58gbelGO84SL91F-x$d% zFE5Amy69HFiJxDe1U2<0Ktxy=3!T9ZfPymkXM|RmbTU}RiTT(Az`}5$%z9j zCJ?yZO3Qu$`ze8ebP0wee&bTFbaBsZX`o8MU>5QIn@88HDhIMQ%n zJUO#D{v~PR34N7B=v07T=E($wVWazVr{sU3eFdR=Yg!>N^59% z)Zh+m7E)lplSo~Xo}Hb6`~#Zv`#JgG_wQO;Ne2JtJi%2R@XA2U0NJc=CAC0w^lyEA zwfrv+6qGy$b_1A1xg7m^RpOJEoBKx63>axyz;gqpOvdYQ&6yd zE(8v%ba!`Wf`cpItVwqi6*m~f=m67KQ>_S_4QRvd4yMGH7KK? zfDHofveb#??dzKZCRz_4KGdzTr7AUULxS=t(Bc|ApZLHAybZ{$IbX7RYYg1_2kPpI z8It}2w_QIhY#Gcn`@Vha{FcZqJoc+nVus+Y(^X>dikSU$B^I!6dQ*h$ZpT-^fnwp~ zBi?N}VVV!T@fQ;ldsH6)l4tMmuzP#D3XD7hGpnm9Z@&@Grbs_9Ymj09MJIl)jR6h#J+oc?BP38b!#?#Xie7hKCWDHJ)^zN_pn%dgp>r8&0BYE;)cn#(Q z$*}U;+OY6&9JuFpL|>m0J3D)OXJ_^VBOvU+nkc9sEY!mH^70zY7zX|V7-)?&c{!=3 zioJ02tkdEexA{k`&_heBtD%4YO_?g;OO1g|C=J>SI3yAYWR6;*p}qSx>o&lykK^L@_u4)4Qvq z;|@3|0?di^Pd1Snw`oiySd@rOp-kITaCzQbipZ{^F>OWc`9s%*GadGX|#Atlb zs{t|1=}8(xpG>fJemU_nn4Hc!e3L;UIV6~`c;WM%H48=dHG~xX-gaI)nN&uP{67s4 bj&5Fb-(Q%BV literal 9632 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 diff --git a/docs/html/classaunit_1_1MetaAssertion-members.html b/docs/html/classaunit_1_1MetaAssertion-members.html index 919fa5a..1720110 100644 --- a/docs/html/classaunit_1_1MetaAssertion-members.html +++ b/docs/html/classaunit_1_1MetaAssertion-members.html @@ -1,9 +1,9 @@ - + - + AUnit: Member List @@ -22,7 +22,7 @@
AUnit -  1.3.2 +  1.3.3
Unit testing framework for Arduino platforms inspired by ArduinoUnit and Google Test.
@@ -31,18 +31,21 @@
- + +/* @license-end */ - + +/* @license-end */
-

Class that extends the Assertion class to support the checkTestXxx() and assertTestXxx() macros that look at the status of the named test. +

Class that extends the Assertion class to support the checkTestXxx() and assertTestXxx() macros that look at the status of the named test. More...

#include <MetaAssertion.h>

@@ -82,10 +85,11 @@
Inheritance graph
- - - - + + + + +
[legend]
@@ -93,32 +97,38 @@
Collaboration graph
- - + + +
[legend]
- - + + - - + + - - + + - - + + - - + + @@ -277,11 +287,13 @@ - - + + - - + +

Protected Member Functions

 MetaAssertion ()
 Empty constructor. More...
MetaAssertion ()
 Empty constructor.
 
bool assertionTestStatus (const char *file, uint16_t line, const char *testName, const __FlashStringHelper *statusMessage, bool ok)
 Set the status of the current test using the 'ok' status from another test, and print the assertion message if requested.
 
bool isOutputEnabledForStatus (uint8_t status) const
 Return true if setting of status should print a message. More...
+bool isOutputEnabledForStatus (uint8_t status) const
 Return true if setting of status should print a message.
 
void setStatusNow (const char *file, uint16_t line, uint8_t status, const __FlashStringHelper *statusString)
 Set the status of the current test to 'status' and print a message. More...
+void setStatusNow (const char *file, uint16_t line, uint8_t status, const __FlashStringHelper *statusString)
 Set the status of the current test to 'status' and print a message.
 
- Protected Member Functions inherited from aunit::Assertion
 Assertion ()
 Empty constructor. More...
Assertion ()
 Empty constructor.
 
bool isOutputEnabled (bool ok) const
 Returns true if an assertion message should be printed. More...
+bool isOutputEnabled (bool ok) const
 Returns true if an assertion message should be printed.
 
bool assertionBool (const char *file, uint16_t line, bool arg, bool value)
void init (const __FlashStringHelper *name)
 
bool isVerbosity (uint8_t verbosity) const
 Determine if any of the given verbosity is enabled. More...
+bool isVerbosity (uint8_t verbosity) const
 Determine if any of the given verbosity is enabled.
 
uint8_t getVerbosity () const
 Get the verbosity. More...
+uint8_t getVerbosity () const
 Get the verbosity.
 
- - + + - - + + - - + + - - + + - - + + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + @@ -392,175 +418,70 @@ - - + + - - + + - - + + - + - + - + - - + + - - + + - - + + - - + + - - + +

@@ -332,59 +344,73 @@

virtual void loop ()=0
 The user-provided test case function. More...
 
void resolve ()
 Print out the summary of the current test. More...
+void resolve ()
 Print out the summary of the current test.
 
const internal::FCStringgetName () const
 Get the name of the test. More...
+const internal::FCStringgetName () const
 Get the name of the test.
 
uint8_t getLifeCycle () const
 Get the life cycle state of the test. More...
+uint8_t getLifeCycle () const
 Get the life cycle state of the test.
 
void setLifeCycle (uint8_t state)
 
uint8_t getStatus () const
 Get the status of the test. More...
+uint8_t getStatus () const
 Get the status of the test.
 
void setStatus (uint8_t status)
 Set the status of the test. More...
 
void setPassOrFail (bool ok)
 Set the status to Passed or Failed depending on ok. More...
+void setPassOrFail (bool ok)
 Set the status to Passed or Failed depending on ok.
 
Test ** getNext ()
 Return the next pointer as a pointer to the pointer, similar to getRoot(). More...
 Return the next pointer as a pointer to the pointer, similar to getRoot(). More...
 
bool isDone () const
 Return true if test has been asserted. More...
 
bool isNotDone () const
 Return true if test is not has been asserted. More...
+bool isNotDone () const
 Return true if test is not has been asserted.
 
bool isPassed () const
 Return true if test is passed. More...
+bool isPassed () const
 Return true if test is passed.
 
bool isNotPassed () const
 Return true if test is not passed. More...
+bool isNotPassed () const
 Return true if test is not passed.
 
bool isFailed () const
 Return true if test is failed. More...
+bool isFailed () const
 Return true if test is failed.
 
bool isNotFailed () const
 Return true if test is not failed. More...
+bool isNotFailed () const
 Return true if test is not failed.
 
bool isSkipped () const
 Return true if test is skipped. More...
+bool isSkipped () const
 Return true if test is skipped.
 
bool isNotSkipped () const
 Return true if test is not skipped. More...
+bool isNotSkipped () const
 Return true if test is not skipped.
 
bool isExpired () const
 Return true if test is expired. More...
+bool isExpired () const
 Return true if test is expired.
 
bool isNotExpired () const
 Return true if test is not expired. More...
+bool isNotExpired () const
 Return true if test is not expired.
 
void skip ()
 Mark the test as skipped. More...
void expire ()
 Mark the test as expired (i.e. More...
 
void enableVerbosity (uint8_t verbosity)
 Enable the given verbosity of the current test. More...
+void enableVerbosity (uint8_t verbosity)
 Enable the given verbosity of the current test.
 
void disableVerbosity (uint8_t verbosity)
 Disable the given verbosity of the current test. More...
+void disableVerbosity (uint8_t verbosity)
 Disable the given verbosity of the current test.
 
- Static Public Member Functions inherited from aunit::Test
static Test ** getRoot ()
 Get the pointer to the root pointer. More...
 
- Static Public Attributes inherited from aunit::Test
static const uint8_t kLifeCycleNew = 0
 Test is new, needs to be setup. More...
+static const uint8_t kLifeCycleNew = 0
 Test is new, needs to be setup.
 
static const uint8_t kLifeCycleExcluded = 1
 Test is Excluded by an exclude() method. More...
 Test is Excluded by an exclude() method. More...
 
static const uint8_t kLifeCycleSetup = 2
 Test has been set up by calling setup() and ready to execute the test code. More...
 Test has been set up by calling setup() and ready to execute the test code. More...
 
static const uint8_t kLifeCycleAsserted = 3
 Test is asserted (using pass(), fail(), expired() or skipped()) and the getStatus() has been determined. More...
 Test is asserted (using pass(), fail(), expired() or skipped()) and the getStatus() has been determined. More...
 
static const uint8_t kLifeCycleFinished = 4
 The test has completed its life cycle. More...
 
static const uint8_t kStatusUnknown = 0
 Test status is unknown. More...
+static const uint8_t kStatusUnknown = 0
 Test status is unknown.
 
static const uint8_t kStatusPassed = 1
 Test has passed, or pass() was called. More...
+static const uint8_t kStatusPassed = 1
 Test has passed, or pass() was called.
 
static const uint8_t kStatusFailed = 2
 Test has failed, or fail() was called. More...
+static const uint8_t kStatusFailed = 2
 Test has failed, or fail() was called.
 
static const uint8_t kStatusSkipped = 3
 Test is skipped through the exclude() method or skip() was called. More...
+static const uint8_t kStatusSkipped = 3
 Test is skipped through the exclude() method or skip() was called.
 
static const uint8_t kStatusExpired = 4
 Test has timed out, or expire() called. More...
+static const uint8_t kStatusExpired = 4
 Test has timed out, or expire() called.
 

Detailed Description

-

Class that extends the Assertion class to support the checkTestXxx() and assertTestXxx() macros that look at the status of the named test.

+

Class that extends the Assertion class to support the checkTestXxx() and assertTestXxx() macros that look at the status of the named test.

Definition at line 42 of file MetaAssertion.h.

-

Constructor & Destructor Documentation

- -

◆ MetaAssertion()

- -
-
- - - - - -
- - - - - - - -
aunit::MetaAssertion::MetaAssertion ()
-
-inlineprotected
-
- -

Empty constructor.

- -

Definition at line 59 of file MetaAssertion.h.

- -
-
-

Member Function Documentation

- -

◆ isOutputEnabledForStatus()

- -
-
- - - - - -
- - - - - - - - -
bool aunit::MetaAssertion::isOutputEnabledForStatus (uint8_t status) const
-
-protected
-
- -

Return true if setting of status should print a message.

- -

Definition at line 103 of file MetaAssertion.cpp.

- -
-
- -

◆ setStatusNow()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void aunit::MetaAssertion::setStatusNow (const char * file,
uint16_t line,
uint8_t status,
const __FlashStringHelper * statusString 
)
-
-protected
-
- -

Set the status of the current test to 'status' and print a message.

- -

Definition at line 110 of file MetaAssertion.cpp.

- -
-
-
The documentation for this class was generated from the following files:

The documentation for this class was generated from the following files:
diff --git a/docs/html/classaunit_1_1MetaAssertion__coll__graph.map b/docs/html/classaunit_1_1MetaAssertion__coll__graph.map index 02a01d5..5dc028f 100644 --- a/docs/html/classaunit_1_1MetaAssertion__coll__graph.map +++ b/docs/html/classaunit_1_1MetaAssertion__coll__graph.map @@ -1,4 +1,5 @@ - - + + + diff --git a/docs/html/classaunit_1_1MetaAssertion__coll__graph.md5 b/docs/html/classaunit_1_1MetaAssertion__coll__graph.md5 index 644fe72..ad14115 100644 --- a/docs/html/classaunit_1_1MetaAssertion__coll__graph.md5 +++ b/docs/html/classaunit_1_1MetaAssertion__coll__graph.md5 @@ -1 +1 @@ -70537cc6cbbab74071e356a6ec65161c \ No newline at end of file +76881b3a6aedd9c62849b5102e76b9c4 \ No newline at end of file diff --git a/docs/html/classaunit_1_1MetaAssertion__coll__graph.png b/docs/html/classaunit_1_1MetaAssertion__coll__graph.png index 0b19bfe962cefa5cfb123b356a66c320240c89cb..2c18fa48bfaac28e1b5d4fbf0db9066b8f2c2e3d 100644 GIT binary patch literal 5336 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 HhY|k;Y~YMC literal 5216 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 diff --git a/docs/html/classaunit_1_1MetaAssertion__inherit__graph.map b/docs/html/classaunit_1_1MetaAssertion__inherit__graph.map index 0c663f1..42e67e6 100644 --- a/docs/html/classaunit_1_1MetaAssertion__inherit__graph.map +++ b/docs/html/classaunit_1_1MetaAssertion__inherit__graph.map @@ -1,6 +1,7 @@ - - - - + + + + + diff --git a/docs/html/classaunit_1_1MetaAssertion__inherit__graph.md5 b/docs/html/classaunit_1_1MetaAssertion__inherit__graph.md5 index f5775ab..939ec67 100644 --- a/docs/html/classaunit_1_1MetaAssertion__inherit__graph.md5 +++ b/docs/html/classaunit_1_1MetaAssertion__inherit__graph.md5 @@ -1 +1 @@ -9dbef0c77c8bb8ed7bdae152753c161c \ No newline at end of file +079fc3ace8859f6f151e215143f07dcd \ No newline at end of file diff --git a/docs/html/classaunit_1_1MetaAssertion__inherit__graph.png b/docs/html/classaunit_1_1MetaAssertion__inherit__graph.png index 1a1e2f8865c559aa2fec54d0222138b2968cd2c1..038d630d6c7ea1693be27882975463d3cd4e7b5a 100644 GIT binary patch literal 9952 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 ZN9{8tkHK>laAghhNa?X+nY?A_e*i;M4<-Nr literal 9624 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 + - + AUnit: Member List @@ -22,7 +22,7 @@
AUnit -  1.3.2 +  1.3.3
Unit testing framework for Arduino platforms inspired by ArduinoUnit and Google Test.
@@ -31,18 +31,21 @@
- + +/* @license-end */ - + +/* @license-end */

Static Public Member Functions

static Print * getPrinter () - Get the output printer used by the various assertion() methods and the TestRunner. More...
+ Get the output printer used by the various assertion() methods and the TestRunner. More...
  -static void setPrinter (Print *printer) - Set the printer. More...
+ +static void setPrinter (Print *printer) + Set the printer.
 

Detailed Description

Utility class that provides a level of indirection to the Print class where test results can be sent.

-

By default, the Print object will be the Serial object. This can be changed using the setPrinter() method.

+

By default, the Print object will be the Serial object. This can be changed using the setPrinter() method.

This class assumes that it will be used after all static initializations have finished. Because static initialization ordering is undefined, if this utility is used during static initialization, the behaviour is undefined.

Definition at line 41 of file Printer.h.

@@ -116,53 +120,23 @@

-

Get the output printer used by the various assertion() methods and the TestRunner.

-

The default is the predefined Serial object. Can be changed using the setPrinter() method.

+

Get the output printer used by the various assertion() methods and the TestRunner.

+

The default is the predefined Serial object. Can be changed using the setPrinter() method.

Definition at line 48 of file Printer.h.

-

-
- -

◆ setPrinter()

- -
-
- - - - - -
- - - - - - - - -
static void aunit::Printer::setPrinter (Print * printer)
-
-inlinestatic
-
- -

Set the printer.

- -

Definition at line 51 of file Printer.h.

-

The documentation for this class was generated from the following files:
diff --git a/docs/html/classaunit_1_1Test-members.html b/docs/html/classaunit_1_1Test-members.html index 638a810..7f7e111 100644 --- a/docs/html/classaunit_1_1Test-members.html +++ b/docs/html/classaunit_1_1Test-members.html @@ -1,9 +1,9 @@ - + - + AUnit: Member List @@ -22,7 +22,7 @@
AUnit -  1.3.2 +  1.3.3
Unit testing framework for Arduino platforms inspired by ArduinoUnit and Google Test.
@@ -31,18 +31,21 @@
- + +/* @license-end */ - + +/* @license-end */
Inheritance graph
- - - - + + + + +
[legend]
- + - + - + - + - - + + - - + + - - + + - - + + - + - - + + - + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + - + - - + + - - + +

Public Member Functions

 Test ()
 Empty constructor. More...
 Empty constructor. More...
 
virtual void setup ()
 Optional method that performs any initialization. More...
 Optional method that performs any initialization. More...
 
virtual void teardown ()
 Optional method that performs any clean up after the test ends for any reasons, either passing or otherwise. More...
 Optional method that performs any clean up after the test ends for any reasons, either passing or otherwise. More...
 
virtual void loop ()=0
 The user-provided test case function. More...
 The user-provided test case function. More...
 
void resolve ()
 Print out the summary of the current test. More...
+void resolve ()
 Print out the summary of the current test.
 
const internal::FCStringgetName () const
 Get the name of the test. More...
+const internal::FCStringgetName () const
 Get the name of the test.
 
uint8_t getLifeCycle () const
 Get the life cycle state of the test. More...
+uint8_t getLifeCycle () const
 Get the life cycle state of the test.
 
void setLifeCycle (uint8_t state)
 
uint8_t getStatus () const
 Get the status of the test. More...
+uint8_t getStatus () const
 Get the status of the test.
 
void setStatus (uint8_t status)
 Set the status of the test. More...
 Set the status of the test. More...
 
void setPassOrFail (bool ok)
 Set the status to Passed or Failed depending on ok. More...
+void setPassOrFail (bool ok)
 Set the status to Passed or Failed depending on ok.
 
Test ** getNext ()
 Return the next pointer as a pointer to the pointer, similar to getRoot(). More...
 Return the next pointer as a pointer to the pointer, similar to getRoot(). More...
 
bool isDone () const
 Return true if test has been asserted. More...
 Return true if test has been asserted. More...
 
bool isNotDone () const
 Return true if test is not has been asserted. More...
+bool isNotDone () const
 Return true if test is not has been asserted.
 
bool isPassed () const
 Return true if test is passed. More...
+bool isPassed () const
 Return true if test is passed.
 
bool isNotPassed () const
 Return true if test is not passed. More...
+bool isNotPassed () const
 Return true if test is not passed.
 
bool isFailed () const
 Return true if test is failed. More...
+bool isFailed () const
 Return true if test is failed.
 
bool isNotFailed () const
 Return true if test is not failed. More...
+bool isNotFailed () const
 Return true if test is not failed.
 
bool isSkipped () const
 Return true if test is skipped. More...
+bool isSkipped () const
 Return true if test is skipped.
 
bool isNotSkipped () const
 Return true if test is not skipped. More...
+bool isNotSkipped () const
 Return true if test is not skipped.
 
bool isExpired () const
 Return true if test is expired. More...
+bool isExpired () const
 Return true if test is expired.
 
bool isNotExpired () const
 Return true if test is not expired. More...
+bool isNotExpired () const
 Return true if test is not expired.
 
void skip ()
 Mark the test as skipped. More...
 Mark the test as skipped. More...
 
void expire ()
 Mark the test as expired (i.e. More...
 Mark the test as expired (i.e. More...
 
void enableVerbosity (uint8_t verbosity)
 Enable the given verbosity of the current test. More...
+void enableVerbosity (uint8_t verbosity)
 Enable the given verbosity of the current test.
 
void disableVerbosity (uint8_t verbosity)
 Disable the given verbosity of the current test. More...
+void disableVerbosity (uint8_t verbosity)
 Disable the given verbosity of the current test.
 
- +

Static Public Member Functions

static Test ** getRoot ()
 Get the pointer to the root pointer. More...
 Get the pointer to the root pointer. More...
 
- - + + - + - + - + - + - - + + - - + + - - + + - - + + - - + +

Static Public Attributes

static const uint8_t kLifeCycleNew = 0
 Test is new, needs to be setup. More...
+static const uint8_t kLifeCycleNew = 0
 Test is new, needs to be setup.
 
static const uint8_t kLifeCycleExcluded = 1
 Test is Excluded by an exclude() method. More...
 Test is Excluded by an exclude() method. More...
 
static const uint8_t kLifeCycleSetup = 2
 Test has been set up by calling setup() and ready to execute the test code. More...
 Test has been set up by calling setup() and ready to execute the test code. More...
 
static const uint8_t kLifeCycleAsserted = 3
 Test is asserted (using pass(), fail(), expired() or skipped()) and the getStatus() has been determined. More...
 Test is asserted (using pass(), fail(), expired() or skipped()) and the getStatus() has been determined. More...
 
static const uint8_t kLifeCycleFinished = 4
 The test has completed its life cycle. More...
 The test has completed its life cycle. More...
 
static const uint8_t kStatusUnknown = 0
 Test status is unknown. More...
+static const uint8_t kStatusUnknown = 0
 Test status is unknown.
 
static const uint8_t kStatusPassed = 1
 Test has passed, or pass() was called. More...
+static const uint8_t kStatusPassed = 1
 Test has passed, or pass() was called.
 
static const uint8_t kStatusFailed = 2
 Test has failed, or fail() was called. More...
+static const uint8_t kStatusFailed = 2
 Test has failed, or fail() was called.
 
static const uint8_t kStatusSkipped = 3
 Test is skipped through the exclude() method or skip() was called. More...
+static const uint8_t kStatusSkipped = 3
 Test is skipped through the exclude() method or skip() was called.
 
static const uint8_t kStatusExpired = 4
 Test has timed out, or expire() called. More...
+static const uint8_t kStatusExpired = 4
 Test has timed out, or expire() called.
 
- + - + @@ -225,16 +251,18 @@ - - + + - - + +

Protected Member Functions

void fail ()
 Mark the test as failed. More...
 Mark the test as failed. More...
 
void pass ()
 Mark the test as passed. More...
 Mark the test as passed. More...
 
void init (const char *name)
void init (const __FlashStringHelper *name)
 
bool isVerbosity (uint8_t verbosity) const
 Determine if any of the given verbosity is enabled. More...
+bool isVerbosity (uint8_t verbosity) const
 Determine if any of the given verbosity is enabled.
 
uint8_t getVerbosity () const
 Get the verbosity. More...
+uint8_t getVerbosity () const
 Get the verbosity.
 

Detailed Description

Base class of all test cases.

-

The test() and testing() macros define subclasses of Test or TestOnce (respectively), and allow the code following the macros in '{}' to become the body of the loop() and once() methods of the two classes (respectively).

+

The test() and testing() macros define subclasses of Test or TestOnce (respectively), and allow the code following the macros in '{}' to become the body of the loop() and once() methods of the two classes (respectively).

Definition at line 43 of file Test.h.

Constructor & Destructor Documentation

@@ -261,66 +289,6 @@

Member Function Documentation

- -

◆ disableVerbosity()

- -
-
- - - - - -
- - - - - - - - -
void aunit::Test::disableVerbosity (uint8_t verbosity)
-
-inline
-
- -

Disable the given verbosity of the current test.

- -

Definition at line 241 of file Test.h.

- -
-
- -

◆ enableVerbosity()

- -
-
- - - - - -
- - - - - - - - -
void aunit::Test::enableVerbosity (uint8_t verbosity)
-
-inline
-
- -

Enable the given verbosity of the current test.

- -

Definition at line 238 of file Test.h.

- -
-

◆ expire()

@@ -345,7 +313,7 @@

Mark the test as expired (i.e.

-

timed out). Use the expireTestNow() macro in a unit test to print a diagnostic message and exit immediately.

+

timed out). Use the expireTestNow() macro in a unit test to print a diagnostic message and exit immediately.

Definition at line 235 of file Test.h.

@@ -375,68 +343,10 @@

Mark the test as failed.

-

Use the failTestNow() macro in a unit test to print a diagnostic message and exit immediately.

+

Use the failTestNow() macro in a unit test to print a diagnostic message and exit immediately.

Definition at line 248 of file Test.h.

- - - -

◆ getLifeCycle()

- -
-
- - - - - -
- - - - - - - -
uint8_t aunit::Test::getLifeCycle () const
-
-inline
-
- -

Get the life cycle state of the test.

- -

Definition at line 161 of file Test.h.

- -
-
- -

◆ getName()

- -
-
- - - - - -
- - - - - - - -
const internal::FCString& aunit::Test::getName () const
-
-inline
-
- -

Get the name of the test.

- -

Definition at line 158 of file Test.h.

-
@@ -462,7 +372,7 @@

-

Return the next pointer as a pointer to the pointer, similar to getRoot().

+

Return the next pointer as a pointer to the pointer, similar to getRoot().

This makes it much easier to manipulate a singly-linked list. Also makes setNext() method unnecessary.

Definition at line 188 of file Test.h.

@@ -497,64 +407,6 @@

Definition at line 36 of file Test.cpp.

- - - -

◆ getStatus()

- -
-
- - - - - -
- - - - - - - -
uint8_t aunit::Test::getStatus () const
-
-inline
-
- -

Get the status of the test.

- -

Definition at line 166 of file Test.h.

- -
-
- -

◆ getVerbosity()

- -
-
- - - - - -
- - - - - - - -
uint8_t aunit::Test::getVerbosity () const
-
-inlineprotected
-
- -

Get the verbosity.

- -

Definition at line 278 of file Test.h.

-
@@ -581,14 +433,14 @@

Return true if test has been asserted.

-

Note that this is different than the internal LifeCycleFinished state. The name isDone() is a carry-over from ArduinoUnit and might have been named isAsserted() if this library had been built from scratch.

+

Note that this is different than the internal LifeCycleFinished state. The name isDone() is a carry-over from ArduinoUnit and might have been named isAsserted() if this library had been built from scratch.

Definition at line 196 of file Test.h.

- -

◆ isExpired()

+ +

◆ loop()

- -

◆ isFailed()

+ +

◆ pass()

-

Return true if test is failed.

+

Mark the test as passed.

+

Often used to terminate a testing() looping test. The passTestNow() macro can be used in a unit test to print a diagnostic message and exit immediately. It is expected that pass() will be used more often.

-

Definition at line 208 of file Test.h.

+

Definition at line 256 of file Test.h.

- -

◆ isNotDone()

+ +

◆ setStatus()

- -

◆ isNotExpired()

+ +

◆ setup()

-

Return true if test is not expired.

+

Optional method that performs any initialization.

+

The assertXxx() macros, as well as pass(), fail() and skip() functions can be called in here. Subclasses that override this should call the parent's setup() method in the first line so that the setup() methods in the inheritance tree are properly chained.

-

Definition at line 223 of file Test.h.

+

Definition at line 136 of file Test.h.

- -

◆ isNotFailed()

+ +

◆ skip()

@@ -713,10 +570,10 @@

- + - +
bool aunit::Test::isNotFailed void aunit::Test::skip ( ) const
@@ -726,14 +583,15 @@

-

Return true if test is not failed.

+

Mark the test as skipped.

+

Use the skipTestNow() macro in a unit test to print a diagnostic message and exit immediately.

-

Definition at line 211 of file Test.h.

+

Definition at line 229 of file Test.h.

- -

◆ isNotPassed()

+ +

◆ teardown()

- -

◆ isNotSkipped()

+

Member Data Documentation

+ +

◆ kLifeCycleAsserted

-

Return true if test is not skipped.

+

Test is asserted (using pass(), fail(), expired() or skipped()) and the getStatus() has been determined.

+

The teardown() method should be called.

-

Definition at line 217 of file Test.h.

+

Definition at line 80 of file Test.h.

- -

◆ isPassed()

+ +

◆ kLifeCycleExcluded

-

Return true if test is passed.

+

Test is Excluded by an exclude() method.

+

The setup() and teardown() methods are bypassed and the test goes directly to kLifeCycleFinished. For reporting purposes, an excluded test is counted as a "skipped" test. The include() method puts the test back into the kLifeCycleNew state.

-

Definition at line 202 of file Test.h.

+

Definition at line 65 of file Test.h.

- -

◆ isSkipped()

+ +

◆ kLifeCycleFinished

-

Return true if test is skipped.

+

The test has completed its life cycle.

+

It should be resolved using resolve() and removed from the linked list. Note that this is different than isDone() (i.e. kStatusDone) which indicates that an assertion about the test has been made.

-

Definition at line 214 of file Test.h.

+

Definition at line 88 of file Test.h.

- -

◆ isVerbosity()

+ +

◆ kLifeCycleSetup

- -

◆ loop()

- -
-
- - - - - -
- - - - - - - -
virtual void aunit::Test::loop ()
-
-pure virtual
-
- -

The user-provided test case function.

-

Each call to Test::run() makes one call to this loop() method. The assertXxx() macros, as well as pass(), fail() and skip() functions can be called in here.

- -

Implemented in aunit::TestOnce, and aunit::TestAgain.

- -
-
- -

◆ pass()

- -
-
- - - - - -
- - - - - - - -
void aunit::Test::pass ()
-
-inlineprotected
-
- -

Mark the test as passed.

-

Often used to terminate a testing() looping test. The passTestNow() macro can be used in a unit test to print a diagnostic message and exit immediately. It is expected that pass() will be used more often.

- -

Definition at line 256 of file Test.h.

- -
-
- -

◆ resolve()

- -
-
- - - - - - - -
void aunit::Test::resolve ()
-
- -

Print out the summary of the current test.

- -

Definition at line 73 of file Test.cpp.

- -
-
- -

◆ setPassOrFail()

- -
-
- - - - - - - - -
void aunit::Test::setPassOrFail (bool ok)
-
- -

Set the status to Passed or Failed depending on ok.

- -

Definition at line 50 of file Test.cpp.

- -
-
- -

◆ setStatus()

- -
-
- - - - - -
- - - - - - - - -
void aunit::Test::setStatus (uint8_t status)
-
-inline
-
- -

Set the status of the test.

-

All changes to getStatus() should happen through this method because it also changes the getLifeCycle() of the test.

- -

Definition at line 173 of file Test.h.

- -
-
- -

◆ setup()

- -
-
- - - - - -
- - - - - - - -
virtual void aunit::Test::setup ()
-
-inlinevirtual
-
- -

Optional method that performs any initialization.

-

The assertXxx() macros, as well as pass(), fail() and skip() functions can be called in here. Subclasses that override this should call the parent's setup() method in the first line so that the setup() methods in the inheritance tree are properly chained.

- -

Definition at line 136 of file Test.h.

- -
-
- -

◆ skip()

- -
-
- - - - - -
- - - - - - - -
void aunit::Test::skip ()
-
-inline
-
- -

Mark the test as skipped.

-

Use the skipTestNow() macro in a unit test to print a diagnostic message and exit immediately.

- -

Definition at line 229 of file Test.h.

- -
-
- -

◆ teardown()

- -
-
- - - - - -
- - - - - - - -
virtual void aunit::Test::teardown ()
-
-inlinevirtual
-
- -

Optional method that performs any clean up after the test ends for any reasons, either passing or otherwise.

-

Subclasses that override this should call the parent's teardown() method in the last line before returning, so that the teardown() methods in the inheritance tree are properly chained.

- -

Definition at line 145 of file Test.h.

- -
-
-

Member Data Documentation

- -

◆ kLifeCycleAsserted

- -
-
- - - - - -
- - - - -
const uint8_t aunit::Test::kLifeCycleAsserted = 3
-
-static
-
- -

Test is asserted (using pass(), fail(), expired() or skipped()) and the getStatus() has been determined.

-

The teardown() method should be called.

- -

Definition at line 80 of file Test.h.

- -
-
- -

◆ kLifeCycleExcluded

- -
-
- - - - - -
- - - - -
const uint8_t aunit::Test::kLifeCycleExcluded = 1
-
-static
-
- -

Test is Excluded by an exclude() method.

-

The setup() and teardown() methods are bypassed and the test goes directly to kLifeCycleFinished. For reporting purposes, an excluded test is counted as a "skipped" test. The include() method puts the test back into the kLifeCycleNew state.

- -

Definition at line 65 of file Test.h.

- -
-
- -

◆ kLifeCycleFinished

- -
-
- - - - - -
- - - - -
const uint8_t aunit::Test::kLifeCycleFinished = 4
-
-static
-
- -

The test has completed its life cycle.

-

It should be resolved using resolve() and removed from the linked list. Note that this is different than isDone() (i.e. kStatusDone) which indicates that an assertion about the test has been made.

- -

Definition at line 88 of file Test.h.

- -
-
- -

◆ kLifeCycleNew

- -
-
- - - - - -
- - - - -
const uint8_t aunit::Test::kLifeCycleNew = 0
-
-static
-
- -

Test is new, needs to be setup.

- -

Definition at line 57 of file Test.h.

- -
-
- -

◆ kLifeCycleSetup

- -
-
- - - - - -
- - - - -
const uint8_t aunit::Test::kLifeCycleSetup = 2
-
-static
-
- -

Test has been set up by calling setup() and ready to execute the test code.

-

TestOnce tests (i.e. test() or testF()) should be in Setup state only for a single iteration. TestAgain tests (i.e. testing() or testingF()) will stay in Setup state until explicitly moved to a different state by the testing code (or the test times out).

+

Test has been set up by calling setup() and ready to execute the test code.

+

TestOnce tests (i.e. test() or testF()) should be in Setup state only for a single iteration. TestAgain tests (i.e. testing() or testingF()) will stay in Setup state until explicitly moved to a different state by the testing code (or the test times out).

Definition at line 74 of file Test.h.

-
-
- -

◆ kStatusExpired

- -
-
- - - - - -
- - - - -
const uint8_t aunit::Test::kStatusExpired = 4
-
-static
-
- -

Test has timed out, or expire() called.

- -

Definition at line 108 of file Test.h.

- -
-
- -

◆ kStatusFailed

- -
-
- - - - - -
- - - - -
const uint8_t aunit::Test::kStatusFailed = 2
-
-static
-
- -

Test has failed, or fail() was called.

- -

Definition at line 102 of file Test.h.

- -
-
- -

◆ kStatusPassed

- -
-
- - - - - -
- - - - -
const uint8_t aunit::Test::kStatusPassed = 1
-
-static
-
- -

Test has passed, or pass() was called.

- -

Definition at line 99 of file Test.h.

- -
-
- -

◆ kStatusSkipped

- -
-
- - - - - -
- - - - -
const uint8_t aunit::Test::kStatusSkipped = 3
-
-static
-
- -

Test is skipped through the exclude() method or skip() was called.

- -

Definition at line 105 of file Test.h.

- -
-
- -

◆ kStatusUnknown

- -
-
- - - - - -
- - - - -
const uint8_t aunit::Test::kStatusUnknown = 0
-
-static
-
- -

Test status is unknown.

- -

Definition at line 96 of file Test.h.

-

The documentation for this class was generated from the following files:
    -
  • /home/brian/dev/AUnit/src/aunit/Test.h
  • -
  • /home/brian/dev/AUnit/src/aunit/Test.cpp
  • +
  • /home/brian/src/AUnit/src/aunit/Test.h
  • +
  • /home/brian/src/AUnit/src/aunit/Test.cpp
diff --git a/docs/html/classaunit_1_1TestAgain-members.html b/docs/html/classaunit_1_1TestAgain-members.html index 21b7e8f..a96bb84 100644 --- a/docs/html/classaunit_1_1TestAgain-members.html +++ b/docs/html/classaunit_1_1TestAgain-members.html @@ -1,9 +1,9 @@ - + - + AUnit: Member List @@ -22,7 +22,7 @@
AUnit -  1.3.2 +  1.3.3
Unit testing framework for Arduino platforms inspired by ArduinoUnit and Google Test.
@@ -31,18 +31,21 @@ - + +/* @license-end */ - + +/* @license-end */
-

Similar to TestOnce but performs the user-defined test multiple times. +

Similar to TestOnce but performs the user-defined test multiple times. More...

#include <TestAgain.h>

@@ -81,9 +84,10 @@
Inheritance graph
- - - + + + +
[legend]
@@ -91,23 +95,26 @@
Collaboration graph
- - - + + + +
[legend]
- - + + - + - - + + @@ -119,59 +126,73 @@ - - + + - - + + - - + + - - + + - - + + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + @@ -179,11 +200,13 @@ - - + + - - + +

Public Member Functions

 TestAgain ()
 Constructor. More...
TestAgain ()
 Constructor.
 
void loop () override
 Calls the user-provided again() method multiple times until the user code explicitly resolves the test using pass(), fail(), skip() or expire().
 Calls the user-provided again() method multiple times until the user code explicitly resolves the test using pass(), fail(), skip() or expire().
 
virtual void again ()=0
 User-provided test case. More...
+virtual void again ()=0
 User-provided test case.
 
- Public Member Functions inherited from aunit::Test
 Test ()
virtual void teardown ()
 Optional method that performs any clean up after the test ends for any reasons, either passing or otherwise. More...
 
void resolve ()
 Print out the summary of the current test. More...
+void resolve ()
 Print out the summary of the current test.
 
const internal::FCStringgetName () const
 Get the name of the test. More...
+const internal::FCStringgetName () const
 Get the name of the test.
 
uint8_t getLifeCycle () const
 Get the life cycle state of the test. More...
+uint8_t getLifeCycle () const
 Get the life cycle state of the test.
 
void setLifeCycle (uint8_t state)
 
uint8_t getStatus () const
 Get the status of the test. More...
+uint8_t getStatus () const
 Get the status of the test.
 
void setStatus (uint8_t status)
 Set the status of the test. More...
 
void setPassOrFail (bool ok)
 Set the status to Passed or Failed depending on ok. More...
+void setPassOrFail (bool ok)
 Set the status to Passed or Failed depending on ok.
 
Test ** getNext ()
 Return the next pointer as a pointer to the pointer, similar to getRoot(). More...
 Return the next pointer as a pointer to the pointer, similar to getRoot(). More...
 
bool isDone () const
 Return true if test has been asserted. More...
 
bool isNotDone () const
 Return true if test is not has been asserted. More...
+bool isNotDone () const
 Return true if test is not has been asserted.
 
bool isPassed () const
 Return true if test is passed. More...
+bool isPassed () const
 Return true if test is passed.
 
bool isNotPassed () const
 Return true if test is not passed. More...
+bool isNotPassed () const
 Return true if test is not passed.
 
bool isFailed () const
 Return true if test is failed. More...
+bool isFailed () const
 Return true if test is failed.
 
bool isNotFailed () const
 Return true if test is not failed. More...
+bool isNotFailed () const
 Return true if test is not failed.
 
bool isSkipped () const
 Return true if test is skipped. More...
+bool isSkipped () const
 Return true if test is skipped.
 
bool isNotSkipped () const
 Return true if test is not skipped. More...
+bool isNotSkipped () const
 Return true if test is not skipped.
 
bool isExpired () const
 Return true if test is expired. More...
+bool isExpired () const
 Return true if test is expired.
 
bool isNotExpired () const
 Return true if test is not expired. More...
+bool isNotExpired () const
 Return true if test is not expired.
 
void skip ()
 Mark the test as skipped. More...
void expire ()
 Mark the test as expired (i.e. More...
 
void enableVerbosity (uint8_t verbosity)
 Enable the given verbosity of the current test. More...
+void enableVerbosity (uint8_t verbosity)
 Enable the given verbosity of the current test.
 
void disableVerbosity (uint8_t verbosity)
 Disable the given verbosity of the current test. More...
+void disableVerbosity (uint8_t verbosity)
 Disable the given verbosity of the current test.
 
- - + + - + - + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + @@ -401,11 +435,13 @@ - - + + - - + +

@@ -193,56 +216,67 @@

 Get the pointer to the root pointer. More...
 
- Static Public Attributes inherited from aunit::Test
static const uint8_t kLifeCycleNew = 0
 Test is new, needs to be setup. More...
+static const uint8_t kLifeCycleNew = 0
 Test is new, needs to be setup.
 
static const uint8_t kLifeCycleExcluded = 1
 Test is Excluded by an exclude() method. More...
 Test is Excluded by an exclude() method. More...
 
static const uint8_t kLifeCycleSetup = 2
 Test has been set up by calling setup() and ready to execute the test code. More...
 Test has been set up by calling setup() and ready to execute the test code. More...
 
static const uint8_t kLifeCycleAsserted = 3
 Test is asserted (using pass(), fail(), expired() or skipped()) and the getStatus() has been determined. More...
 Test is asserted (using pass(), fail(), expired() or skipped()) and the getStatus() has been determined. More...
 
static const uint8_t kLifeCycleFinished = 4
 The test has completed its life cycle. More...
 
static const uint8_t kStatusUnknown = 0
 Test status is unknown. More...
+static const uint8_t kStatusUnknown = 0
 Test status is unknown.
 
static const uint8_t kStatusPassed = 1
 Test has passed, or pass() was called. More...
+static const uint8_t kStatusPassed = 1
 Test has passed, or pass() was called.
 
static const uint8_t kStatusFailed = 2
 Test has failed, or fail() was called. More...
+static const uint8_t kStatusFailed = 2
 Test has failed, or fail() was called.
 
static const uint8_t kStatusSkipped = 3
 Test is skipped through the exclude() method or skip() was called. More...
+static const uint8_t kStatusSkipped = 3
 Test is skipped through the exclude() method or skip() was called.
 
static const uint8_t kStatusExpired = 4
 Test has timed out, or expire() called. More...
+static const uint8_t kStatusExpired = 4
 Test has timed out, or expire() called.
 
- Protected Member Functions inherited from aunit::MetaAssertion
 MetaAssertion ()
 Empty constructor. More...
MetaAssertion ()
 Empty constructor.
 
bool assertionTestStatus (const char *file, uint16_t line, const char *testName, const __FlashStringHelper *statusMessage, bool ok)
 Set the status of the current test using the 'ok' status from another test, and print the assertion message if requested.
 
bool isOutputEnabledForStatus (uint8_t status) const
 Return true if setting of status should print a message. More...
+bool isOutputEnabledForStatus (uint8_t status) const
 Return true if setting of status should print a message.
 
void setStatusNow (const char *file, uint16_t line, uint8_t status, const __FlashStringHelper *statusString)
 Set the status of the current test to 'status' and print a message. More...
+void setStatusNow (const char *file, uint16_t line, uint8_t status, const __FlashStringHelper *statusString)
 Set the status of the current test to 'status' and print a message.
 
- Protected Member Functions inherited from aunit::Assertion
 Assertion ()
 Empty constructor. More...
Assertion ()
 Empty constructor.
 
bool isOutputEnabled (bool ok) const
 Returns true if an assertion message should be printed. More...
+bool isOutputEnabled (bool ok) const
 Returns true if an assertion message should be printed.
 
bool assertionBool (const char *file, uint16_t line, bool arg, bool value)
void init (const __FlashStringHelper *name)
 
bool isVerbosity (uint8_t verbosity) const
 Determine if any of the given verbosity is enabled. More...
+bool isVerbosity (uint8_t verbosity) const
 Determine if any of the given verbosity is enabled.
 
uint8_t getVerbosity () const
 Get the verbosity. More...
+uint8_t getVerbosity () const
 Get the verbosity.
 
- Static Protected Attributes inherited from aunit::MetaAssertion
@@ -440,77 +476,19 @@
 

Detailed Description

-

Similar to TestOnce but performs the user-defined test multiple times.

+

Similar to TestOnce but performs the user-defined test multiple times.

Definition at line 37 of file TestAgain.h.

-

Constructor & Destructor Documentation

- -

◆ TestAgain()

- -
-
- - - - - -
- - - - - - - -
aunit::TestAgain::TestAgain ()
-
-inline
-
- -

Constructor.

- -

Definition at line 40 of file TestAgain.h.

- -
-
-

Member Function Documentation

- -

◆ again()

- -
-
- - - - - -
- - - - - - - -
virtual void aunit::TestAgain::again ()
-
-pure virtual
-
- -

User-provided test case.

- -
-
-
The documentation for this class was generated from the following files:

The documentation for this class was generated from the following files:
diff --git a/docs/html/classaunit_1_1TestAgain__coll__graph.map b/docs/html/classaunit_1_1TestAgain__coll__graph.map index b077eea..3f88a8d 100644 --- a/docs/html/classaunit_1_1TestAgain__coll__graph.map +++ b/docs/html/classaunit_1_1TestAgain__coll__graph.map @@ -1,5 +1,6 @@ - - - + + + + diff --git a/docs/html/classaunit_1_1TestAgain__coll__graph.md5 b/docs/html/classaunit_1_1TestAgain__coll__graph.md5 index 31ae5dc..dc0b0b0 100644 --- a/docs/html/classaunit_1_1TestAgain__coll__graph.md5 +++ b/docs/html/classaunit_1_1TestAgain__coll__graph.md5 @@ -1 +1 @@ -15e54b809e1ba3f69aaf28cd2375a997 \ No newline at end of file +ca409438b3b738231e84f5ab2b8f815b \ No newline at end of file diff --git a/docs/html/classaunit_1_1TestAgain__coll__graph.png b/docs/html/classaunit_1_1TestAgain__coll__graph.png index 3b74897053b84fb8226b3539dee6272c36a104e3..f4e55dec5a5208ab7ae65020250dbe969045383c 100644 GIT binary patch literal 6486 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 X$ef#+Iq`vilt9`V`s!7xc2WNUUM_GI literal 6377 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 b<&?T7JAH^FxZD%`cLBlgX(|^hnm+#@{n~)j diff --git a/docs/html/classaunit_1_1TestAgain__inherit__graph.map b/docs/html/classaunit_1_1TestAgain__inherit__graph.map index b077eea..3f88a8d 100644 --- a/docs/html/classaunit_1_1TestAgain__inherit__graph.map +++ b/docs/html/classaunit_1_1TestAgain__inherit__graph.map @@ -1,5 +1,6 @@ - - - + + + + diff --git a/docs/html/classaunit_1_1TestAgain__inherit__graph.md5 b/docs/html/classaunit_1_1TestAgain__inherit__graph.md5 index 647ee5a..dc0b0b0 100644 --- a/docs/html/classaunit_1_1TestAgain__inherit__graph.md5 +++ b/docs/html/classaunit_1_1TestAgain__inherit__graph.md5 @@ -1 +1 @@ -220ca1b6e68e6f9f719056b14f2c54dc \ No newline at end of file +ca409438b3b738231e84f5ab2b8f815b \ No newline at end of file diff --git a/docs/html/classaunit_1_1TestAgain__inherit__graph.png b/docs/html/classaunit_1_1TestAgain__inherit__graph.png index 3b74897053b84fb8226b3539dee6272c36a104e3..f4e55dec5a5208ab7ae65020250dbe969045383c 100644 GIT binary patch literal 6486 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 X$ef#+Iq`vilt9`V`s!7xc2WNUUM_GI literal 6377 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 b<&?T7JAH^FxZD%`cLBlgX(|^hnm+#@{n~)j diff --git a/docs/html/classaunit_1_1TestOnce-members.html b/docs/html/classaunit_1_1TestOnce-members.html index d8abc5f..a749207 100644 --- a/docs/html/classaunit_1_1TestOnce-members.html +++ b/docs/html/classaunit_1_1TestOnce-members.html @@ -1,9 +1,9 @@ - + - + AUnit: Member List @@ -22,7 +22,7 @@
AUnit -  1.3.2 +  1.3.3
Unit testing framework for Arduino platforms inspired by ArduinoUnit and Google Test.
@@ -31,18 +31,21 @@
- + +/* @license-end */ - + +/* @license-end */
-

Similar to TestAgain but performs user-defined test only once. +

Similar to TestAgain but performs user-defined test only once. More...

#include <TestOnce.h>

@@ -81,9 +84,10 @@
Inheritance graph
- - - + + + +
[legend]
@@ -91,22 +95,25 @@
Collaboration graph
- - - + + + +
[legend]
- - + + - + - - + + @@ -118,59 +125,73 @@ - - + + - - + + - - + + - - + + - - + + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + @@ -178,11 +199,13 @@ - - + + - - + +

Public Member Functions

 TestOnce ()
 Constructor. More...
TestOnce ()
 Constructor.
 
void loop () override
 Calls the user-provided once() method. More...
 Calls the user-provided once() method. More...
 
virtual void once ()=0
 User-provided test case. More...
+virtual void once ()=0
 User-provided test case.
 
- Public Member Functions inherited from aunit::Test
 Test ()
virtual void teardown ()
 Optional method that performs any clean up after the test ends for any reasons, either passing or otherwise. More...
 
void resolve ()
 Print out the summary of the current test. More...
+void resolve ()
 Print out the summary of the current test.
 
const internal::FCStringgetName () const
 Get the name of the test. More...
+const internal::FCStringgetName () const
 Get the name of the test.
 
uint8_t getLifeCycle () const
 Get the life cycle state of the test. More...
+uint8_t getLifeCycle () const
 Get the life cycle state of the test.
 
void setLifeCycle (uint8_t state)
 
uint8_t getStatus () const
 Get the status of the test. More...
+uint8_t getStatus () const
 Get the status of the test.
 
void setStatus (uint8_t status)
 Set the status of the test. More...
 
void setPassOrFail (bool ok)
 Set the status to Passed or Failed depending on ok. More...
+void setPassOrFail (bool ok)
 Set the status to Passed or Failed depending on ok.
 
Test ** getNext ()
 Return the next pointer as a pointer to the pointer, similar to getRoot(). More...
 Return the next pointer as a pointer to the pointer, similar to getRoot(). More...
 
bool isDone () const
 Return true if test has been asserted. More...
 
bool isNotDone () const
 Return true if test is not has been asserted. More...
+bool isNotDone () const
 Return true if test is not has been asserted.
 
bool isPassed () const
 Return true if test is passed. More...
+bool isPassed () const
 Return true if test is passed.
 
bool isNotPassed () const
 Return true if test is not passed. More...
+bool isNotPassed () const
 Return true if test is not passed.
 
bool isFailed () const
 Return true if test is failed. More...
+bool isFailed () const
 Return true if test is failed.
 
bool isNotFailed () const
 Return true if test is not failed. More...
+bool isNotFailed () const
 Return true if test is not failed.
 
bool isSkipped () const
 Return true if test is skipped. More...
+bool isSkipped () const
 Return true if test is skipped.
 
bool isNotSkipped () const
 Return true if test is not skipped. More...
+bool isNotSkipped () const
 Return true if test is not skipped.
 
bool isExpired () const
 Return true if test is expired. More...
+bool isExpired () const
 Return true if test is expired.
 
bool isNotExpired () const
 Return true if test is not expired. More...
+bool isNotExpired () const
 Return true if test is not expired.
 
void skip ()
 Mark the test as skipped. More...
void expire ()
 Mark the test as expired (i.e. More...
 
void enableVerbosity (uint8_t verbosity)
 Enable the given verbosity of the current test. More...
+void enableVerbosity (uint8_t verbosity)
 Enable the given verbosity of the current test.
 
void disableVerbosity (uint8_t verbosity)
 Disable the given verbosity of the current test. More...
+void disableVerbosity (uint8_t verbosity)
 Disable the given verbosity of the current test.
 
- - + + - + - + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + @@ -400,11 +434,13 @@ - - + + - - + +

@@ -192,56 +215,67 @@

 Get the pointer to the root pointer. More...
 
- Static Public Attributes inherited from aunit::Test
static const uint8_t kLifeCycleNew = 0
 Test is new, needs to be setup. More...
+static const uint8_t kLifeCycleNew = 0
 Test is new, needs to be setup.
 
static const uint8_t kLifeCycleExcluded = 1
 Test is Excluded by an exclude() method. More...
 Test is Excluded by an exclude() method. More...
 
static const uint8_t kLifeCycleSetup = 2
 Test has been set up by calling setup() and ready to execute the test code. More...
 Test has been set up by calling setup() and ready to execute the test code. More...
 
static const uint8_t kLifeCycleAsserted = 3
 Test is asserted (using pass(), fail(), expired() or skipped()) and the getStatus() has been determined. More...
 Test is asserted (using pass(), fail(), expired() or skipped()) and the getStatus() has been determined. More...
 
static const uint8_t kLifeCycleFinished = 4
 The test has completed its life cycle. More...
 
static const uint8_t kStatusUnknown = 0
 Test status is unknown. More...
+static const uint8_t kStatusUnknown = 0
 Test status is unknown.
 
static const uint8_t kStatusPassed = 1
 Test has passed, or pass() was called. More...
+static const uint8_t kStatusPassed = 1
 Test has passed, or pass() was called.
 
static const uint8_t kStatusFailed = 2
 Test has failed, or fail() was called. More...
+static const uint8_t kStatusFailed = 2
 Test has failed, or fail() was called.
 
static const uint8_t kStatusSkipped = 3
 Test is skipped through the exclude() method or skip() was called. More...
+static const uint8_t kStatusSkipped = 3
 Test is skipped through the exclude() method or skip() was called.
 
static const uint8_t kStatusExpired = 4
 Test has timed out, or expire() called. More...
+static const uint8_t kStatusExpired = 4
 Test has timed out, or expire() called.
 
- Protected Member Functions inherited from aunit::MetaAssertion
 MetaAssertion ()
 Empty constructor. More...
MetaAssertion ()
 Empty constructor.
 
bool assertionTestStatus (const char *file, uint16_t line, const char *testName, const __FlashStringHelper *statusMessage, bool ok)
 Set the status of the current test using the 'ok' status from another test, and print the assertion message if requested.
 
bool isOutputEnabledForStatus (uint8_t status) const
 Return true if setting of status should print a message. More...
+bool isOutputEnabledForStatus (uint8_t status) const
 Return true if setting of status should print a message.
 
void setStatusNow (const char *file, uint16_t line, uint8_t status, const __FlashStringHelper *statusString)
 Set the status of the current test to 'status' and print a message. More...
+void setStatusNow (const char *file, uint16_t line, uint8_t status, const __FlashStringHelper *statusString)
 Set the status of the current test to 'status' and print a message.
 
- Protected Member Functions inherited from aunit::Assertion
 Assertion ()
 Empty constructor. More...
Assertion ()
 Empty constructor.
 
bool isOutputEnabled (bool ok) const
 Returns true if an assertion message should be printed. More...
+bool isOutputEnabled (bool ok) const
 Returns true if an assertion message should be printed.
 
bool assertionBool (const char *file, uint16_t line, bool arg, bool value)
void init (const __FlashStringHelper *name)
 
bool isVerbosity (uint8_t verbosity) const
 Determine if any of the given verbosity is enabled. More...
+bool isVerbosity (uint8_t verbosity) const
 Determine if any of the given verbosity is enabled.
 
uint8_t getVerbosity () const
 Get the verbosity. More...
+uint8_t getVerbosity () const
 Get the verbosity.
 
- Static Protected Attributes inherited from aunit::MetaAssertion
@@ -439,40 +475,10 @@
 

Detailed Description

-

Similar to TestAgain but performs user-defined test only once.

+

Similar to TestAgain but performs user-defined test only once.

Definition at line 40 of file TestOnce.h.

-

Constructor & Destructor Documentation

- -

◆ TestOnce()

- -
-
- - - - - -
- - - - - - - -
aunit::TestOnce::TestOnce ()
-
-inline
-
- -

Constructor.

- -

Definition at line 43 of file TestOnce.h.

- -
-
-

Member Function Documentation

+

Member Function Documentation

◆ loop()

@@ -496,52 +502,25 @@

-

Calls the user-provided once() method.

-

If no other assertXxx() macros set the internal status, then this calls pass() to make sure that this test case will be called only once from Test::run().

+

Calls the user-provided once() method.

+

If no other assertXxx() macros set the internal status, then this calls pass() to make sure that this test case will be called only once from Test::run().

Implements aunit::Test.

Definition at line 29 of file TestOnce.cpp.

-

-
- -

◆ once()

- -
-
- - - - - -
- - - - - - - -
virtual void aunit::TestOnce::once ()
-
-pure virtual
-
- -

User-provided test case.

-

The documentation for this class was generated from the following files:
diff --git a/docs/html/classaunit_1_1TestOnce__coll__graph.map b/docs/html/classaunit_1_1TestOnce__coll__graph.map index ae66927..da79f7b 100644 --- a/docs/html/classaunit_1_1TestOnce__coll__graph.map +++ b/docs/html/classaunit_1_1TestOnce__coll__graph.map @@ -1,5 +1,6 @@ - - - + + + + diff --git a/docs/html/classaunit_1_1TestOnce__coll__graph.md5 b/docs/html/classaunit_1_1TestOnce__coll__graph.md5 index ea4fdd4..06432e2 100644 --- a/docs/html/classaunit_1_1TestOnce__coll__graph.md5 +++ b/docs/html/classaunit_1_1TestOnce__coll__graph.md5 @@ -1 +1 @@ -7ad05c6e349cde3e016517fe77dd608a \ No newline at end of file +3928bacff90106dd4a90f0c31f280d41 \ No newline at end of file diff --git a/docs/html/classaunit_1_1TestOnce__coll__graph.png b/docs/html/classaunit_1_1TestOnce__coll__graph.png index 095831851d65aab62bb859ec24ce26ed603285f4..e0936e7683a4495eab582c5bd7f440a169062447 100644 GIT binary patch literal 6455 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 X&h}QB>?Zh+1*CCXN3~GJ^3i_*xp{DW diff --git a/docs/html/classaunit_1_1TestOnce__inherit__graph.map b/docs/html/classaunit_1_1TestOnce__inherit__graph.map index ae66927..da79f7b 100644 --- a/docs/html/classaunit_1_1TestOnce__inherit__graph.map +++ b/docs/html/classaunit_1_1TestOnce__inherit__graph.map @@ -1,5 +1,6 @@ - - - + + + + diff --git a/docs/html/classaunit_1_1TestOnce__inherit__graph.md5 b/docs/html/classaunit_1_1TestOnce__inherit__graph.md5 index af27a0a..06432e2 100644 --- a/docs/html/classaunit_1_1TestOnce__inherit__graph.md5 +++ b/docs/html/classaunit_1_1TestOnce__inherit__graph.md5 @@ -1 +1 @@ -fee723305f4b5dfa587354949eaf8984 \ No newline at end of file +3928bacff90106dd4a90f0c31f280d41 \ No newline at end of file diff --git a/docs/html/classaunit_1_1TestOnce__inherit__graph.png b/docs/html/classaunit_1_1TestOnce__inherit__graph.png index 095831851d65aab62bb859ec24ce26ed603285f4..e0936e7683a4495eab582c5bd7f440a169062447 100644 GIT binary patch literal 6455 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 X&h}QB>?Zh+1*CCXN3~GJ^3i_*xp{DW diff --git a/docs/html/classaunit_1_1TestRunner-members.html b/docs/html/classaunit_1_1TestRunner-members.html index f2d8e7a..65a751f 100644 --- a/docs/html/classaunit_1_1TestRunner-members.html +++ b/docs/html/classaunit_1_1TestRunner-members.html @@ -1,9 +1,9 @@ - + - + AUnit: Member List @@ -22,7 +22,7 @@
AUnit -  1.3.2 +  1.3.3
Unit testing framework for Arduino platforms inspired by ArduinoUnit and Google Test.
@@ -31,18 +31,21 @@
- + +/* @license-end */
setPrinter(Print *printer)aunit::TestRunnerstatic setTimeout(TimeoutType seconds)aunit::TestRunnerinlinestatic setVerbosity(uint8_t verbosity)aunit::TestRunnerinlinestatic - TimeoutType typedefaunit::TestRunner + TimeoutType typedefaunit::TestRunner
diff --git a/docs/html/classaunit_1_1TestRunner.html b/docs/html/classaunit_1_1TestRunner.html index 0ca0524..4870ba6 100644 --- a/docs/html/classaunit_1_1TestRunner.html +++ b/docs/html/classaunit_1_1TestRunner.html @@ -1,9 +1,9 @@ - + - + AUnit: aunit::TestRunner Class Reference @@ -22,7 +22,7 @@
AUnit -  1.3.2 +  1.3.3
Unit testing framework for Arduino platforms inspired by ArduinoUnit and Google Test.
@@ -31,18 +31,21 @@ - + +/* @license-end */
-

The class that runs the various test cases defined by the test() and testing() macros. +

The class that runs the various test cases defined by the test() and testing() macros. More...

#include <TestRunner.h>

- - - + + +

Public Types

typedef uint8_t TimeoutType
 Integer type of the timeout parameter. More...
 
typedef uint16_t TimeoutType
 Integer type of the timeout parameter. More...
 
- - + + - + - + - + - + - + - - + + - - + + - - + + - - + +

Static Public Member Functions

static void run ()
 Run all tests using the current runner. More...
+static void run ()
 Run all tests using the current runner.
 
static void list ()
 Print out the known tests. More...
 Print out the known tests. More...
 
static void exclude (const char *pattern)
 Exclude the tests which match the pattern. More...
 Exclude the tests which match the pattern. More...
 
static void exclude (const char *testClass, const char *pattern)
 Exclude the tests which match the pattern given by (testClass + "_" + pattern), the same concatenation rule used by the testF() macro. More...
 Exclude the tests which match the pattern given by (testClass + "_" + pattern), the same concatenation rule used by the testF() macro. More...
 
static void include (const char *pattern)
 Include the tests which match the pattern. More...
 Include the tests which match the pattern. More...
 
static void include (const char *testClass, const char *pattern)
 Include the tests which match the pattern given by (testClass + "_" + pattern), the same concatenation rule used by the testF() macro. More...
 Include the tests which match the pattern given by (testClass + "_" + pattern), the same concatenation rule used by the testF() macro. More...
 
static void setVerbosity (uint8_t verbosity)
 Set the verbosity flag. More...
+static void setVerbosity (uint8_t verbosity)
 Set the verbosity flag.
 
static bool isVerbosity (uint8_t verbosity)
 Returns true if ANY of the bit flags of 'verbosity' is set. More...
+static bool isVerbosity (uint8_t verbosity)
 Returns true if ANY of the bit flags of 'verbosity' is set.
 
static void setPrinter (Print *printer)
 Set the output printer. More...
+static void setPrinter (Print *printer)
 Set the output printer.
 
static void setTimeout (TimeoutType seconds)
 Set test runner timeout across all tests, in seconds. More...
static void setTimeout (TimeoutType seconds)
 Set test runner timeout across all tests, in seconds. More...
 

Detailed Description

-

The class that runs the various test cases defined by the test() and testing() macros.

-

It prints the summary of each test as well as the final summary of the entire run at the end. In the future, it may be possible to allow a different TestRunner to be used.

+

The class that runs the various test cases defined by the test() and testing() macros.

+

It prints the summary of each test as well as the final summary of the entire run at the end. In the future, it may be possible to allow a different TestRunner to be used.

Definition at line 41 of file TestRunner.h.

Member Typedef Documentation

- -

◆ TimeoutType

+ +

◆ TimeoutType

Integer type of the timeout parameter.

-

Seconds.

+

Seconds. Default is kTimeoutDefault = 10

Definition at line 44 of file TestRunner.h.

@@ -208,7 +215,7 @@

-

Exclude the tests which match the pattern given by (testClass + "_" + pattern), the same concatenation rule used by the testF() macro.

+

Exclude the tests which match the pattern given by (testClass + "_" + pattern), the same concatenation rule used by the testF() macro.

Currently supports only a trailing '*'. For example, exclude("CustomTest", "flash*").

Definition at line 67 of file TestRunner.h.

@@ -280,41 +287,11 @@

-

Include the tests which match the pattern given by (testClass + "_" + pattern), the same concatenation rule used by the testF() macro.

+

Include the tests which match the pattern given by (testClass + "_" + pattern), the same concatenation rule used by the testF() macro.

Currently supports only a trailing '*'. For example, include("CustomTest", "flash*").

Definition at line 86 of file TestRunner.h.

-

-
- -

◆ isVerbosity()

- -
-
- - - - - -
- - - - - - - - -
static bool aunit::TestRunner::isVerbosity (uint8_t verbosity)
-
-inlinestatic
-
- -

Returns true if ANY of the bit flags of 'verbosity' is set.

- -

Definition at line 97 of file TestRunner.h.

-
@@ -345,65 +322,6 @@

Definition at line 50 of file TestRunner.h.

-

-
- -

◆ run()

- -
-
- - - - - -
- - - - - - - -
static void aunit::TestRunner::run ()
-
-inlinestatic
-
- -

Run all tests using the current runner.

- -

Definition at line 47 of file TestRunner.h.

- -
-
- -

◆ setPrinter()

- -
-
- - - - - -
- - - - - - - - -
void aunit::TestRunner::setPrinter (Print * printer)
-
-static
-
- -

Set the output printer.

- -

Definition at line 47 of file TestRunner.cpp.

-
@@ -418,7 +336,7 @@

static void aunit::TestRunner::setTimeout ( - TimeoutType  + TimeoutType  seconds) @@ -431,52 +349,22 @@

Set test runner timeout across all tests, in seconds.

-

Set to 0 for infinite timeout. Useful for preventing testing() test cases that never end. This is a timeout for the TestRunner itself, not for individual tests.

+

Set to 0 for infinite timeout. Useful for preventing testing() test cases that never end. This is a timeout for the TestRunner itself, not for individual tests. Upper limit is 65535 seconds (just over 18 hours).

Definition at line 110 of file TestRunner.h.

-

- - -

◆ setVerbosity()

- -
-
- - - - - -
- - - - - - - - -
static void aunit::TestRunner::setVerbosity (uint8_t verbosity)
-
-inlinestatic
-
- -

Set the verbosity flag.

- -

Definition at line 92 of file TestRunner.h.

-

The documentation for this class was generated from the following files: diff --git a/docs/html/classaunit_1_1Test__inherit__graph.map b/docs/html/classaunit_1_1Test__inherit__graph.map index 5b0de87..b096e15 100644 --- a/docs/html/classaunit_1_1Test__inherit__graph.map +++ b/docs/html/classaunit_1_1Test__inherit__graph.map @@ -1,6 +1,7 @@ - - - - + + + + + diff --git a/docs/html/classaunit_1_1Test__inherit__graph.md5 b/docs/html/classaunit_1_1Test__inherit__graph.md5 index 9cfd02e..5958a35 100644 --- a/docs/html/classaunit_1_1Test__inherit__graph.md5 +++ b/docs/html/classaunit_1_1Test__inherit__graph.md5 @@ -1 +1 @@ -eab3a793be72981df48a45ffec4412a9 \ No newline at end of file +b885875d0bdffd7223c458a3215f961e \ No newline at end of file diff --git a/docs/html/classaunit_1_1Test__inherit__graph.png b/docs/html/classaunit_1_1Test__inherit__graph.png index bb25d3978df1e401dff78683bd481b0c7084097a..683a5b17f84ab6f56c19d33eadcd73ff9aa2bd46 100644 GIT binary patch literal 9940 zcmch7WmJ_>xAj3%Bt?`uG|~cs#G$)Ex}-xo51rB>DIrn<0s_*~-6{wi4&5biq(w@J zZ}Z+U?)~0dU;Mbk;c)P<-OqmZT6?a!=G-yQ)#UMUDR3bW2)?3%j3xwv1_ggHaj?LX zr32o0@DG-Svb+rB=JwC~_L4Uc2rWcWMpD}+dvDSIg|=sp_~B^gD@hDA<)ctqA68Fg zRYzF?9y=qZ8mZ>!$ajV&3dY7?vU!(p8TA&>3zejE@x&&8%Y2){NbUjtjuHeC2250uT)zQzWqGjU56R_nFJw;-%}?%Y7w%ChzLlC;+x0j>jUv`Mg93B@hKw@4_&hb-Fo=0dTFY}E)S(Y z6c<}u{Q5yA;=^66nuP^9|5;weZ8J=U^q__YWv{JS1YG>cz`@6tm5_iuYIM#V zV1E3Vo`VBVI*OqGH94;B5f&OcR$(MCGdsIlKW!o%6ePC4&}?~hET2dn?=;^a>eWQw=(0SZE`Al> z?6Fl~-0Ee!)FxD{k{LQYtn#6#NU}n=cVGbPdzL_yT%lwlwJ5jsw^aLzN6#D=kTsf7 zgfs(srh%9_YEjEUfAJxQ!@Q%~4%APcJSkq@+uemgn3$M6AJyJ5Fff4ZKUykuUTTX$ zL&q{ZTI)aG62FNF4ZQ>3Um$0YPmtLf$=P}K=xbDwWyG&vzYY=dG^=5RViI{`fo3i) zi8;dFYo<4UGVCaXg@xtLFntZBL)-ucLJm0{{sMu3!+`6){p}oq7j)m71f`(2T z-qjt3&0{%$$N2bh&&WvSh?-eizZjJyLa!}AmONS%)h65 z(&pxL&WkM(+uPfQoX0WDxm}axdgk0@Dv6UDaaMYIdY35m;GSCRp`_&GS74$SZ9c?t zkGSLv49L~81z(-)Of&HElK8b#%M}tA6%}z)#3z22oQeRSG}qu1_w^0)dSRki4|`Qx zD44f*dV1RN9e7yy{yjueQc}O#3=NBbO26DXG9qGC{N{o%5|3PSr<39~ @Y-wL=; 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 V9;cV-gKKIKMOihON-49@{{_kjXk`EZ literal 9621 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 diff --git a/docs/html/classaunit_1_1Verbosity-members.html b/docs/html/classaunit_1_1Verbosity-members.html index 27a6fb8..8a22d5f 100644 --- a/docs/html/classaunit_1_1Verbosity-members.html +++ b/docs/html/classaunit_1_1Verbosity-members.html @@ -1,9 +1,9 @@ - + - + AUnit: Member List @@ -22,7 +22,7 @@
AUnit -  1.3.2 +  1.3.3
Unit testing framework for Arduino platforms inspired by ArduinoUnit and Google Test.
@@ -31,18 +31,21 @@ - + +/* @license-end */ - + +/* @license-end */
-

Utility class to hold the Verbosity constants. +

Utility class to hold the Verbosity constants. More...

#include <Verbosity.h>

- - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + - + - - + + - - + +

Static Public Attributes

static const uint8_t kAssertionPassed = 0x01
 Print assertXxx() passed message. More...
+static const uint8_t kAssertionPassed = 0x01
 Print assertXxx() passed message.
 
static const uint8_t kAssertionFailed = 0x02
 Print assertXxx() failed message. More...
+static const uint8_t kAssertionFailed = 0x02
 Print assertXxx() failed message.
 
static const uint8_t kTestPassed = 0x04
 Print test passed message. More...
+static const uint8_t kTestPassed = 0x04
 Print test passed message.
 
static const uint8_t kTestFailed = 0x08
 Print test failed message. More...
+static const uint8_t kTestFailed = 0x08
 Print test failed message.
 
static const uint8_t kTestSkipped = 0x10
 Print test skipped message. More...
+static const uint8_t kTestSkipped = 0x10
 Print test skipped message.
 
static const uint8_t kTestExpired = 0x20
 Print test timed out message. More...
+static const uint8_t kTestExpired = 0x20
 Print test timed out message.
 
static const uint8_t kTestRunSummary = 0x40
 Print TestRunner summary message. More...
+static const uint8_t kTestRunSummary = 0x40
 Print TestRunner summary message.
 
static const uint8_t kAssertionAll = (kAssertionPassed | kAssertionFailed)
 Print all assertXxx() messages. More...
+static const uint8_t kAssertionAll = (kAssertionPassed | kAssertionFailed)
 Print all assertXxx() messages.
 
static const uint8_t kTestAll
 Print all test status messages. More...
 Print all test status messages. More...
 
static const uint8_t kDefault
 The default verbosity. More...
 The default verbosity. More...
 
static const uint8_t kAll = 0xFF
 Print all messages. More...
+static const uint8_t kAll = 0xFF
 Print all messages.
 
static const uint8_t kNone = 0x00
 Print no messages. More...
+static const uint8_t kNone = 0x00
 Print no messages.
 

Detailed Description

-

Utility class to hold the Verbosity constants.

-

Current used only by TestRunner but potentially could be used by Test and TestOnce in the future, so it seemed better to pull these out into a separate file.

+

Utility class to hold the Verbosity constants.

+

Current used only by TestRunner but potentially could be used by Test and TestOnce in the future, so it seemed better to pull these out into a separate file.

Definition at line 37 of file Verbosity.h.

Member Data Documentation

- -

◆ kAll

- -
-
- - - - - -
- - - - -
const uint8_t aunit::Verbosity::kAll = 0xFF
-
-static
-
- -

Print all messages.

- -

Definition at line 73 of file Verbosity.h.

- -
-
- -

◆ kAssertionAll

- -
-
- - - - - -
- - - - -
const uint8_t aunit::Verbosity::kAssertionAll = (kAssertionPassed | kAssertionFailed)
-
-static
-
- -

Print all assertXxx() messages.

- -

Definition at line 62 of file Verbosity.h.

- -
-
- -

◆ kAssertionFailed

- -
-
- - - - - -
- - - - -
const uint8_t aunit::Verbosity::kAssertionFailed = 0x02
-
-static
-
- -

Print assertXxx() failed message.

- -

Definition at line 43 of file Verbosity.h.

- -
-
- -

◆ kAssertionPassed

- -
-
- - - - - -
- - - - -
const uint8_t aunit::Verbosity::kAssertionPassed = 0x01
-
-static
-
- -

Print assertXxx() passed message.

- -

Definition at line 40 of file Verbosity.h.

- -
-

◆ kDefault

@@ -245,37 +154,13 @@

-Initial value: +Initial value:

The default verbosity.

Definition at line 69 of file Verbosity.h.

-

-
- -

◆ kNone

- -
-
- - - - - -
- - - - -
const uint8_t aunit::Verbosity::kNone = 0x00
-
-static
-
- -

Print no messages.

- -

Definition at line 76 of file Verbosity.h.

-
@@ -297,152 +182,31 @@

-Initial value: +Initial value:

Print all test status messages.

Definition at line 65 of file Verbosity.h.

-

- - -

◆ kTestExpired

- -
-
- - - - - -
- - - - -
const uint8_t aunit::Verbosity::kTestExpired = 0x20
-
-static
-
- -

Print test timed out message.

- -

Definition at line 55 of file Verbosity.h.

- -
-
- -

◆ kTestFailed

- -
-
- - - - - -
- - - - -
const uint8_t aunit::Verbosity::kTestFailed = 0x08
-
-static
-
- -

Print test failed message.

- -

Definition at line 49 of file Verbosity.h.

- -
-
- -

◆ kTestPassed

- -
-
- - - - - -
- - - - -
const uint8_t aunit::Verbosity::kTestPassed = 0x04
-
-static
-
- -

Print test passed message.

- -

Definition at line 46 of file Verbosity.h.

- -
-
- -

◆ kTestRunSummary

- -
-
- - - - - -
- - - - -
const uint8_t aunit::Verbosity::kTestRunSummary = 0x40
-
-static
-
- -

Print TestRunner summary message.

- -

Definition at line 58 of file Verbosity.h.

- -
-
- -

◆ kTestSkipped

- -
-
- - - - - -
- - - - -
const uint8_t aunit::Verbosity::kTestSkipped = 0x10
-
-static
-
- -

Print test skipped message.

- -

Definition at line 52 of file Verbosity.h.

-

The documentation for this class was generated from the following file: +
static const uint8_t kTestSkipped
Print test skipped message.
Definition: Verbosity.h:52
+
static const uint8_t kTestFailed
Print test failed message.
Definition: Verbosity.h:49
+
static const uint8_t kTestPassed
Print test passed message.
Definition: Verbosity.h:46
+
static const uint8_t kTestRunSummary
Print TestRunner summary message.
Definition: Verbosity.h:58
+
static const uint8_t kAssertionFailed
Print assertXxx() failed message.
Definition: Verbosity.h:43
+
static const uint8_t kTestAll
Print all test status messages.
Definition: Verbosity.h:65
+
static const uint8_t kTestExpired
Print test timed out message.
Definition: Verbosity.h:55
diff --git a/docs/html/classaunit_1_1fake_1_1FakePrint-members.html b/docs/html/classaunit_1_1fake_1_1FakePrint-members.html index 51f9773..59dd450 100644 --- a/docs/html/classaunit_1_1fake_1_1FakePrint-members.html +++ b/docs/html/classaunit_1_1fake_1_1FakePrint-members.html @@ -1,9 +1,9 @@ - + - + AUnit: Member List @@ -22,7 +22,7 @@
AUnit -  1.3.2 +  1.3.3
Unit testing framework for Arduino platforms inspired by ArduinoUnit and Google Test.
@@ -31,18 +31,21 @@ - + +/* @license-end */ - + +/* @license-end */
Inheritance graph
+ + + +
[legend]
Collaboration diagram for aunit::fake::FakePrint:
Collaboration graph
+ + + +
[legend]
- +

@@ -100,18 +111,18 @@ void 

flush () override
 
const char * getBuffer () const
 Return the NUL terminated string buffer. More...
 Return the NUL terminated string buffer. More...
 
- +

Static Public Attributes

static const uint8_t kBufSize = 8 * sizeof(long long) + 2 + 1
 Size of the internal buffer. More...
 Size of the internal buffer. More...
 

Detailed Description

An implementation of Print that writes to an in-memory buffer.

-

The buffer can be retrieved using getBuffer() to verify that the expected string was written to the Print object.

+

The buffer can be retrieved using getBuffer() to verify that the expected string was written to the Print object.

Usage:

* {
 *   FakePrint fakePrint;
 *   object.printTo(fakePrint);
@@ -181,14 +192,14 @@ 

FakePrint.h +
  • /home/brian/src/AUnit/src/aunit/fake/FakePrint.h
  • diff --git a/docs/html/classaunit_1_1fake_1_1FakePrint__coll__graph.map b/docs/html/classaunit_1_1fake_1_1FakePrint__coll__graph.map index d4781a8..12eb023 100644 --- a/docs/html/classaunit_1_1fake_1_1FakePrint__coll__graph.map +++ b/docs/html/classaunit_1_1fake_1_1FakePrint__coll__graph.map @@ -1,2 +1,4 @@ + + diff --git a/docs/html/classaunit_1_1fake_1_1FakePrint__coll__graph.md5 b/docs/html/classaunit_1_1fake_1_1FakePrint__coll__graph.md5 index 599892d..401812f 100644 --- a/docs/html/classaunit_1_1fake_1_1FakePrint__coll__graph.md5 +++ b/docs/html/classaunit_1_1fake_1_1FakePrint__coll__graph.md5 @@ -1 +1 @@ -d1e1d0ed1153bbeacbcad7678499e5da \ No newline at end of file +7f9a4355611bf7383a6b06edd3548930 \ No newline at end of file diff --git a/docs/html/classaunit_1_1fake_1_1FakePrint__coll__graph.png b/docs/html/classaunit_1_1fake_1_1FakePrint__coll__graph.png index 0763d2198122618014f266e7cee75b547ba6e098..f8b5106d7ff24db8ebb7226141e4ac30a0534b8b 100644 GIT binary patch literal 2356 zcmcImi96KY9{*VqW7mXGqq1~y$C@w+V~lMKmq~c7LzY59cE)m%CPmRES*9V|Aj@Dd zdJ#qT7-_PFnJ`2QA@98Rz4v+U{R8ef&pF@coagy|p7Z^F&N-iNh8@~m7$gG%06^H% z0%6awWt?rS%kW3?J6o9045u*$dlB9|8bB(-L8ViF&@8e;svflDlURb$SSk zk2zb-FMvoX%-|i9M;7gvBqL3(1H!=;Lo)D6F$GE9=vRpa#>ZYi0bSxYu})PJw~Hvc zX#RFLw%Jt# zmU@Jlk!9(r{W%PYxX&z598W*Te}UVrk$zJv7%l)fm;<)>dGIBVkm$ zjyg-!#5(x+`H>qN?aMIf7YCGAmLpr>MH+f~QIlUf-5MwFChz@=$A9PlFH)21WA_ZG z4F=nhHj$yBBQ9ni$G4RfgHBuaL4OzsZ7(H6MbT6iUVW4~wf476B~hXM`IpS&Ht?lu8lw7)fB(v)48SiINRNcHn=KLDr8^CuOGVoy00GTh}Eqtq7!`!d|#DkK8| z(v$#ag{fy-K#UTuhPamwCvtqe%#x3Uvhwl{bqopy&4X#?1M#M&1uj8Rg636@k&#sK z45dOu@(~x7S#d^tJ1+A}JHhVu;vzK=B5=mP`9|Qrcl%VM74g~NT0@XrFKx2zx!K6{ zVKtdeUYfQfYD1xD@cRi7PNc^&lnf157rCPGT>}XPH{9alv=V;pmLBYxdLB*Uaq+%{ zgshx$tBDPN!x}z9F_-%PEu=F~MY298o$M)TY9W={F=`xWB9eGw^;GX>#6W@3jXkF) z#I(UB*?!HrFL%~TI@BQlgcrS$Yo-3@P_^1@E8^>yFBNokbrlu6yRcJy4F|c zzf~SVu>%4E*lW{d|6CG@^jO_vV|V}AvuBD{4Jaq$c_&c6U%8{Blz&Xdwcv|lPk$WLF?SK=cj#P@+*UrIx?9beEWP}Cna$OseX@Y z9WAx(dHXgZJe+ZV7bzPOOmKb={~2#-DF7H(IZ~rHOKNI{dV2iWEPBb6==B*BFRvmh z)u>>Q8ufjyEtbtcHzj+0V{_9SiA>Oo%gxEbU@)&R<^BDrum^F!_VtyOl{GZ7I%l&K zo)#1sX=^*UyR%rVgw4edobRu^T;)I-|9QRp%EYHnE*K0L3`RWgF*QwL^6AtKqiWW@ z4Id~>RD0moXWno~g+TkUwYq_{nYp>pnGUWD#0GOzd9)9rANsPfF@jaUYnhgoHZnST z_Uu`0EiH=&V0^dji;MbUi+9Q73zFSgcc0Ql$qw-{;K%0N*|05g#6|BQM{9*yY=cy?$9)jGvb~siLBS zN~%9#PCmJ^qecTg=uJ`Nrk)>a}v6rJX*6#GfJQ zN3xz%sW>Du4RPlC`Z}%F+dLqExxQWlFXC`+=I;JwWu@}zE$3PTRqT-eBW!J~y1Ke< zo|~(yoUH6`&d$x(C!q8zfx59+Y;rgDX7lHKSfmRk(B9tO)^_lPVQjyV&-rYGpoy5X zvvW~VQ7JlK0^jWlofsTchrwV_D2wxaG&MCP^P!)b48oj@3Gq@+hlm9hogyG0ke{DF zj!$=na;{3Ha~%@b^tx_&S6cOdb>uHmN0OM5U@+|>pYOX9a&mX?-W@C0%#Y<%3n^2g v(&?wQv_ki`SAT|OB}i$_%^du<93AoqTs=>F;l0ACf&jqM42>YcJ(K?cG|G@h literal 2259 zcmbtWXH=8f7X4%dgb@)9f>dJxBs7swlnfC=i+~uUDF#qL41`EWK#GyxiL{~l%m70% zK_Vidw?$RJNQo$+7-EPtrG+|iy{BvbzjN2U=f}Bat$ohk=f+!EnurKX2?GEiVrGg! z@q7Vq-ao*{TN4YJpLkB-_7xKZu=is;Z7d}Kz=1e3#HH)O`SS%>^P_aBNJhAl(97b? zCnL`U@CF){2{Doz(TJl-RLqmeeMh0)u^Z_*D!rok{T8Mk2(fFRlR^TQnRn=C5~Czf zfUgCOwxDtF?6{atEcXk)YVoHJX9hUv$_okGhAN5P}~Vfdk;Yxvfd0CBmv`1mR6eub>fFsS6gD{m?~Z|COc zf2Jnjs@}68fa&RsGf+JR1qA^?!8+2kw8|=6OJ`DD0a1cJPtg32ZVId+U^q(#klNlWoQ>g312b7eS($#cY zCLNp@jiD0a;!GbqfB%(_#+gWdzz|$0_7s1&Nptd=Tu~}_?411gNe!uF$LvY@xY0ea ze8_W6;Gu>n+l5&cwOOGT^m(oXoTis9v%)E(p*b+to1 z;%D5msCE&b#3n}8V(DJeQq|i_?P|^buR9#hay&gf4FLbZLz2nINS-cu@u>j!*`m7x z0zeCGYz6 z^iV7&#I1Im^=gmH8XFvx+*+*?a3|v?JYr)N^(Tg2VKOIKMdykV&V^#J^Q93-OYYQs zfd0v_C&gN1Z3aX*RnfmPBASyoDHWVIK@6kEu~+`iTK2&kf|pl@+(dCq{ekPnRC}9% z>B-hHT&!AzMp3Mt<}WsY(LRR1SoSMNJevI9fwPuUQpqtKU%og~kRpgQMNNRGXJi=K zv8T94?8s=hW|c?kTH4ywn&2g>=ct-C2E374SSVL}toq+I<7I%es2Fy4b>&sMy2kF? zf{U`UvREuOoc-pMnVFfNG;ED+b0MVmWV#1udUabXZLwx)a}{vD0B4_-N)b6#VY;luN?D|$w_DB zpNH?9<9On5ICuBiiN;XcyLUHk+yLMe!>Cf(%|H|i#R~-nu0{POI5#)d3ANQqk1Z3d>#sgmX(zWipr^|tJl)K4jQR#YcwKR0!0HsMpV@L z`nvqZz)A{*;8OYV5ChV%hSAJTNK7OWi5w1xLZLvEmEGOlC8z7DRPTv~-0W<-n>Vkd zHiWLL0a`jb^}A1y#au4edwfN5wqbpdvB=>-AP|D-Y2fLQ#~CdG%uN<;l|bI~>f)-ZG-Nt~K=GL|er{VI z_u|F@bf~y+^vui*lgV_a=xJ*DdPk1qaqVqw0Q|(#>U{pe2fP>SA8xH}Zf^EvtJmL9 zP*hBn(KFmgxL|lhE#YOs+8W(#b7qjO z-}`;kzV+mY9fiKl?30LsJHN2UczW(@an+1|{1||nn8fzDe#5{t^4^d{2t9~o*@t<0 zWKTOQt3hf2hgZyfy}gyT5a27FQd(Y)ETttUC4oR7D~Oh#@LtJxiT8&eM3167Z!hy8 zOiWC?T5zElRTj87@sRzlcyMr#pm^2R)^>Jwc7f3x0p3x{?9IuMoa>t?y;}4hv-%M` z+pq$Riney8%Kz4~JkupE+*#+xdRt^5FD90rmsg(#+O=R^^uGLA+zBSQ+e1*~b)l%& z+m{X~@qqEI%indf_kAe&Kau~pfW*gg;&@vsvo9^hx3;!+bRa_d?9iiRr=pCEHgB{2 w25C7tIcaHdoWrF>S;uQ>t3Nvh?-H*1OAljRf$$Ya-Y*3(GqOaG44ohS1EFeXC;$Ke diff --git a/docs/html/classaunit_1_1fake_1_1FakePrint__inherit__graph.map b/docs/html/classaunit_1_1fake_1_1FakePrint__inherit__graph.map index d4781a8..12eb023 100644 --- a/docs/html/classaunit_1_1fake_1_1FakePrint__inherit__graph.map +++ b/docs/html/classaunit_1_1fake_1_1FakePrint__inherit__graph.map @@ -1,2 +1,4 @@ + + diff --git a/docs/html/classaunit_1_1fake_1_1FakePrint__inherit__graph.md5 b/docs/html/classaunit_1_1fake_1_1FakePrint__inherit__graph.md5 index a61f57b..401812f 100644 --- a/docs/html/classaunit_1_1fake_1_1FakePrint__inherit__graph.md5 +++ b/docs/html/classaunit_1_1fake_1_1FakePrint__inherit__graph.md5 @@ -1 +1 @@ -7b09428fb32458c73955d9dd55f20c9f \ No newline at end of file +7f9a4355611bf7383a6b06edd3548930 \ No newline at end of file diff --git a/docs/html/classaunit_1_1fake_1_1FakePrint__inherit__graph.png b/docs/html/classaunit_1_1fake_1_1FakePrint__inherit__graph.png index 0763d2198122618014f266e7cee75b547ba6e098..f8b5106d7ff24db8ebb7226141e4ac30a0534b8b 100644 GIT binary patch literal 2356 zcmcImi96KY9{*VqW7mXGqq1~y$C@w+V~lMKmq~c7LzY59cE)m%CPmRES*9V|Aj@Dd zdJ#qT7-_PFnJ`2QA@98Rz4v+U{R8ef&pF@coagy|p7Z^F&N-iNh8@~m7$gG%06^H% z0%6awWt?rS%kW3?J6o9045u*$dlB9|8bB(-L8ViF&@8e;svflDlURb$SSk zk2zb-FMvoX%-|i9M;7gvBqL3(1H!=;Lo)D6F$GE9=vRpa#>ZYi0bSxYu})PJw~Hvc zX#RFLw%Jt# zmU@Jlk!9(r{W%PYxX&z598W*Te}UVrk$zJv7%l)fm;<)>dGIBVkm$ zjyg-!#5(x+`H>qN?aMIf7YCGAmLpr>MH+f~QIlUf-5MwFChz@=$A9PlFH)21WA_ZG z4F=nhHj$yBBQ9ni$G4RfgHBuaL4OzsZ7(H6MbT6iUVW4~wf476B~hXM`IpS&Ht?lu8lw7)fB(v)48SiINRNcHn=KLDr8^CuOGVoy00GTh}Eqtq7!`!d|#DkK8| z(v$#ag{fy-K#UTuhPamwCvtqe%#x3Uvhwl{bqopy&4X#?1M#M&1uj8Rg636@k&#sK z45dOu@(~x7S#d^tJ1+A}JHhVu;vzK=B5=mP`9|Qrcl%VM74g~NT0@XrFKx2zx!K6{ zVKtdeUYfQfYD1xD@cRi7PNc^&lnf157rCPGT>}XPH{9alv=V;pmLBYxdLB*Uaq+%{ zgshx$tBDPN!x}z9F_-%PEu=F~MY298o$M)TY9W={F=`xWB9eGw^;GX>#6W@3jXkF) z#I(UB*?!HrFL%~TI@BQlgcrS$Yo-3@P_^1@E8^>yFBNokbrlu6yRcJy4F|c zzf~SVu>%4E*lW{d|6CG@^jO_vV|V}AvuBD{4Jaq$c_&c6U%8{Blz&Xdwcv|lPk$WLF?SK=cj#P@+*UrIx?9beEWP}Cna$OseX@Y z9WAx(dHXgZJe+ZV7bzPOOmKb={~2#-DF7H(IZ~rHOKNI{dV2iWEPBb6==B*BFRvmh z)u>>Q8ufjyEtbtcHzj+0V{_9SiA>Oo%gxEbU@)&R<^BDrum^F!_VtyOl{GZ7I%l&K zo)#1sX=^*UyR%rVgw4edobRu^T;)I-|9QRp%EYHnE*K0L3`RWgF*QwL^6AtKqiWW@ z4Id~>RD0moXWno~g+TkUwYq_{nYp>pnGUWD#0GOzd9)9rANsPfF@jaUYnhgoHZnST z_Uu`0EiH=&V0^dji;MbUi+9Q73zFSgcc0Ql$qw-{;K%0N*|05g#6|BQM{9*yY=cy?$9)jGvb~siLBS zN~%9#PCmJ^qecTg=uJ`Nrk)>a}v6rJX*6#GfJQ zN3xz%sW>Du4RPlC`Z}%F+dLqExxQWlFXC`+=I;JwWu@}zE$3PTRqT-eBW!J~y1Ke< zo|~(yoUH6`&d$x(C!q8zfx59+Y;rgDX7lHKSfmRk(B9tO)^_lPVQjyV&-rYGpoy5X zvvW~VQ7JlK0^jWlofsTchrwV_D2wxaG&MCP^P!)b48oj@3Gq@+hlm9hogyG0ke{DF zj!$=na;{3Ha~%@b^tx_&S6cOdb>uHmN0OM5U@+|>pYOX9a&mX?-W@C0%#Y<%3n^2g v(&?wQv_ki`SAT|OB}i$_%^du<93AoqTs=>F;l0ACf&jqM42>YcJ(K?cG|G@h literal 2259 zcmbtWXH=8f7X4%dgb@)9f>dJxBs7swlnfC=i+~uUDF#qL41`EWK#GyxiL{~l%m70% zK_Vidw?$RJNQo$+7-EPtrG+|iy{BvbzjN2U=f}Bat$ohk=f+!EnurKX2?GEiVrGg! z@q7Vq-ao*{TN4YJpLkB-_7xKZu=is;Z7d}Kz=1e3#HH)O`SS%>^P_aBNJhAl(97b? zCnL`U@CF){2{Doz(TJl-RLqmeeMh0)u^Z_*D!rok{T8Mk2(fFRlR^TQnRn=C5~Czf zfUgCOwxDtF?6{atEcXk)YVoHJX9hUv$_okGhAN5P}~Vfdk;Yxvfd0CBmv`1mR6eub>fFsS6gD{m?~Z|COc zf2Jnjs@}68fa&RsGf+JR1qA^?!8+2kw8|=6OJ`DD0a1cJPtg32ZVId+U^q(#klNlWoQ>g312b7eS($#cY zCLNp@jiD0a;!GbqfB%(_#+gWdzz|$0_7s1&Nptd=Tu~}_?411gNe!uF$LvY@xY0ea ze8_W6;Gu>n+l5&cwOOGT^m(oXoTis9v%)E(p*b+to1 z;%D5msCE&b#3n}8V(DJeQq|i_?P|^buR9#hay&gf4FLbZLz2nINS-cu@u>j!*`m7x z0zeCGYz6 z^iV7&#I1Im^=gmH8XFvx+*+*?a3|v?JYr)N^(Tg2VKOIKMdykV&V^#J^Q93-OYYQs zfd0v_C&gN1Z3aX*RnfmPBASyoDHWVIK@6kEu~+`iTK2&kf|pl@+(dCq{ekPnRC}9% z>B-hHT&!AzMp3Mt<}WsY(LRR1SoSMNJevI9fwPuUQpqtKU%og~kRpgQMNNRGXJi=K zv8T94?8s=hW|c?kTH4ywn&2g>=ct-C2E374SSVL}toq+I<7I%es2Fy4b>&sMy2kF? zf{U`UvREuOoc-pMnVFfNG;ED+b0MVmWV#1udUabXZLwx)a}{vD0B4_-N)b6#VY;luN?D|$w_DB zpNH?9<9On5ICuBiiN;XcyLUHk+yLMe!>Cf(%|H|i#R~-nu0{POI5#)d3ANQqk1Z3d>#sgmX(zWipr^|tJl)K4jQR#YcwKR0!0HsMpV@L z`nvqZz)A{*;8OYV5ChV%hSAJTNK7OWi5w1xLZLvEmEGOlC8z7DRPTv~-0W<-n>Vkd zHiWLL0a`jb^}A1y#au4edwfN5wqbpdvB=>-AP|D-Y2fLQ#~CdG%uN<;l|bI~>f)-ZG-Nt~K=GL|er{VI z_u|F@bf~y+^vui*lgV_a=xJ*DdPk1qaqVqw0Q|(#>U{pe2fP>SA8xH}Zf^EvtJmL9 zP*hBn(KFmgxL|lhE#YOs+8W(#b7qjO z-}`;kzV+mY9fiKl?30LsJHN2UczW(@an+1|{1||nn8fzDe#5{t^4^d{2t9~o*@t<0 zWKTOQt3hf2hgZyfy}gyT5a27FQd(Y)ETttUC4oR7D~Oh#@LtJxiT8&eM3167Z!hy8 zOiWC?T5zElRTj87@sRzlcyMr#pm^2R)^>Jwc7f3x0p3x{?9IuMoa>t?y;}4hv-%M` z+pq$Riney8%Kz4~JkupE+*#+xdRt^5FD90rmsg(#+O=R^^uGLA+zBSQ+e1*~b)l%& z+m{X~@qqEI%indf_kAe&Kau~pfW*gg;&@vsvo9^hx3;!+bRa_d?9iiRr=pCEHgB{2 w25C7tIcaHdoWrF>S;uQ>t3Nvh?-H*1OAljRf$$Ya-Y*3(GqOaG44ohS1EFeXC;$Ke diff --git a/docs/html/classaunit_1_1internal_1_1FCString-members.html b/docs/html/classaunit_1_1internal_1_1FCString-members.html index c9033e6..cd7cf9c 100644 --- a/docs/html/classaunit_1_1internal_1_1FCString-members.html +++ b/docs/html/classaunit_1_1internal_1_1FCString-members.html @@ -1,9 +1,9 @@ - + - + AUnit: Member List @@ -22,7 +22,7 @@
    AUnit -  1.3.2 +  1.3.3
    Unit testing framework for Arduino platforms inspired by ArduinoUnit and Google Test.
    @@ -31,18 +31,21 @@
    - + +/* @license-end */ - + +/* @license-end */

    Public Member Functions

    FCString () - Default constructor initializes to a nullptr of kCStringType. More...
    +FCString () + Default constructor initializes to a nullptr of kCStringType.
      - FCString (const char *s) - Construct with a c-string. More...
    +FCString (const char *s) + Construct with a c-string.
      - FCString (const __FlashStringHelper *s) - Construct with a flash string. More...
    +FCString (const __FlashStringHelper *s) + Construct with a flash string.
      -uint8_t getType () const - Get the internal type of string. More...
    + +uint8_t getType () const + Get the internal type of string.
      -const char * getCString () const - Get the c-string pointer. More...
    + +const char * getCString () const + Get the c-string pointer.
      -const __FlashStringHelper * getFString () const - Get the flash string pointer. More...
    + +const __FlashStringHelper * getFString () const + Get the flash string pointer.
      -void print (Print *printer) const - Convenience method for printing an FCString. More...
    + +void print (Print *printer) const + Convenience method for printing an FCString.
      -void println (Print *printer) const - Convenience method for printing an FCString. More...
    + +void println (Print *printer) const + Convenience method for printing an FCString.
      -int compareTo (const FCString &that) const - Compare to another FCString. More...
    + +int compareTo (const FCString &that) const + Compare to another FCString.
      int compareToN (const char *that, size_t n) const - Compare to C-string using the first n characters. More...
    + Compare to C-string using the first n characters. More...
      int compareToN (const __FlashStringHelper *that, size_t n) const - Compare to a flash string using the first n characters. More...
    + Compare to a flash string using the first n characters. More...
     

    @@ -125,126 +137,14 @@

    Detailed Description

    A union of (const char*) and (const __FlashStringHelper*) with a discriminator.

    -

    This allows us to treat these 2 strings like a single object. The major reason this class is needed is because the F() cannot be used outside a function, it can only be used inside a function, so we are forced to use normal c-strings instead of F() strings when manually creating Test or TestOnce instances.

    +

    This allows us to treat these 2 strings like a single object. The major reason this class is needed is because the F() cannot be used outside a function, it can only be used inside a function, so we are forced to use normal c-strings instead of F() strings when manually creating Test or TestOnce instances.

    I deliberately decided not to inherit from Printable. While it is convenient to be able to call Print::print() with an instance of this class, the cost is 2 (AVR) or 4 (Teensy-ARM or ESP8266) extra bytes of static memory for the v-table pointer for each instance. But each instance is only 3 (AVR) or 5 (Teensy-ARM or ESP8266) bytes big, so the cost of 50-100 bytes of static memory for a large suite of 25 unit tests does not seem worth the minor convenience.

    -

    Instead, the print() and println() methods invert the dependency and accept a pointer to 'Print'.

    +

    Instead, the print() and println() methods invert the dependency and accept a pointer to 'Print'.

    Definition at line 55 of file FCString.h.

    -

    Constructor & Destructor Documentation

    - -

    ◆ FCString() [1/3]

    - -
    -
    - - - - - -
    - - - - - - - -
    aunit::internal::FCString::FCString ()
    -
    -inline
    -
    - -

    Default constructor initializes to a nullptr of kCStringType.

    - -

    Definition at line 61 of file FCString.h.

    - -
    -
    - -

    ◆ FCString() [2/3]

    - -
    -
    - - - - - -
    - - - - - - - - -
    aunit::internal::FCString::FCString (const char * s)
    -
    -inlineexplicit
    -
    - -

    Construct with a c-string.

    - -

    Definition at line 64 of file FCString.h.

    - -
    -
    - -

    ◆ FCString() [3/3]

    - -
    -
    - - - - - -
    - - - - - - - - -
    aunit::internal::FCString::FCString (const __FlashStringHelper * s)
    -
    -inlineexplicit
    -
    - -

    Construct with a flash string.

    - -

    Definition at line 70 of file FCString.h.

    - -
    -
    -

    Member Function Documentation

    - -

    ◆ compareTo()

    - -
    -
    - - - - - - - - -
    int aunit::internal::FCString::compareTo (const FCStringthat) const
    -
    - -

    Compare to another FCString.

    - -

    Definition at line 55 of file FCString.cpp.

    - -
    -
    - -

    ◆ compareToN() [1/2]

    +

    Member Function Documentation

    + +

    ◆ compareToN() [1/2]

    - -

    ◆ compareToN() [2/2]

    + +

    ◆ compareToN() [2/2]

    - -

    ◆ getCString()

    - -
    -
    - - - - - -
    - - - - - - - -
    const char* aunit::internal::FCString::getCString () const
    -
    -inline
    -
    - -

    Get the c-string pointer.

    - -

    Definition at line 79 of file FCString.h.

    - -
    -
    - -

    ◆ getFString()

    - -
    -
    - - - - - -
    - - - - - - - -
    const __FlashStringHelper* aunit::internal::FCString::getFString () const
    -
    -inline
    -
    - -

    Get the flash string pointer.

    - -

    Definition at line 82 of file FCString.h.

    - -
    -
    - -

    ◆ getType()

    - -
    -
    - - - - - -
    - - - - - - - -
    uint8_t aunit::internal::FCString::getType () const
    -
    -inline
    -
    - -

    Get the internal type of string.

    - -

    Definition at line 76 of file FCString.h.

    - -
    -
    - -

    ◆ print()

    - -
    -
    - - - - - - - - -
    void aunit::internal::FCString::print (Print * printer) const
    -
    - -

    Convenience method for printing an FCString.

    - -

    Definition at line 32 of file FCString.cpp.

    - -
    -
    - -

    ◆ println()

    - -
    -
    - - - - - - - - -
    void aunit::internal::FCString::println (Print * printer) const
    -
    - -

    Convenience method for printing an FCString.

    +

    Compare to C-string using the first n characters.

    +

    This is expected to be used only for TestRunner::exclude() and TestRunner::include().

    -

    Definition at line 42 of file FCString.cpp.

    +

    Definition at line 71 of file FCString.cpp.


    The documentation for this class was generated from the following files: diff --git a/docs/html/classes.html b/docs/html/classes.html index 29295d6..0258aa2 100644 --- a/docs/html/classes.html +++ b/docs/html/classes.html @@ -1,9 +1,9 @@ - + - + AUnit: Class Index @@ -22,7 +22,7 @@
    AUnit -  1.3.2 +  1.3.3
    Unit testing framework for Arduino platforms inspired by ArduinoUnit and Google Test.
    @@ -31,18 +31,21 @@ - + +/* @license-end */ @@ -67,18 +70,34 @@
    a | f | m | p | t | v
    + + + + + - + + + + + + + + + + + - - + + + + + + +
      a  
    -
    FCString (aunit::internal)   
      t  
    -
    TestRunner (aunit)   
    FCString (aunit::internal)   
      t  
    +
    TestRunner (aunit)   
      m  
    -
      v  
    -
    Assertion (aunit)   Test (aunit)   
      v  
    +
    Assertion (aunit)   Test (aunit)   
      f  
    -
    MetaAssertion (aunit)   TestAgain (aunit)   Verbosity (aunit)   
    MetaAssertion (aunit)   TestAgain (aunit)   Verbosity (aunit)   
      p  
    -
    TestOnce (aunit)   
    FakePrint (aunit::fake)   
    Printer (aunit)   
    TestOnce (aunit)   
    FakePrint (aunit::fake)   
    Printer (aunit)   
    a | f | m | p | t | v
    @@ -87,7 +106,7 @@ diff --git a/docs/html/dir_000000_000001.html b/docs/html/dir_000000_000001.html index b026f9e..1838905 100644 --- a/docs/html/dir_000000_000001.html +++ b/docs/html/dir_000000_000001.html @@ -1,11 +1,11 @@ - + - + -AUnit: /home/brian/dev/AUnit/src -> aunit Relation +AUnit: /home/brian/src/AUnit/src -> aunit Relation @@ -22,7 +22,7 @@
    AUnit -  1.3.2 +  1.3.3
    Unit testing framework for Arduino platforms inspired by ArduinoUnit and Google Test.
    @@ -31,18 +31,21 @@ - + +/* @license-end */
    src → aunit Relation

    @@ -31,18 +31,21 @@
    diff --git a/docs/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html b/docs/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html index f32cce0..adda4bb 100644 --- a/docs/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html +++ b/docs/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html @@ -1,11 +1,11 @@ - + - + -AUnit: /home/brian/dev/AUnit/src Directory Reference +AUnit: /home/brian/src/AUnit/src Directory Reference @@ -22,7 +22,7 @@
    AUnit -  1.3.2 +  1.3.3
    Unit testing framework for Arduino platforms inspired by ArduinoUnit and Google Test.
    - + +/* @license-end */
    Directory dependency graph for src:
    -
    /home/brian/dev/AUnit/src
    +
    /home/brian/src/AUnit/src
    - - - + + +
    @@ -85,10 +88,8 @@ - -

    Files

    file  AUnit.h [code]
     Same as AUnitVerbose.h except that the terse versions of the various assertXxx() macros are provided.
     
    file  AUnitVerbose.h [code]
     Same as AUnit.h except that the verbose versions of the various assertXxx() macros are provided.
     
    @@ -96,7 +97,7 @@ diff --git a/docs/html/dir_68267d1309a1af8e8297ef4c3efbcdba_dep.map b/docs/html/dir_68267d1309a1af8e8297ef4c3efbcdba_dep.map index 00b205e..0e58d45 100644 --- a/docs/html/dir_68267d1309a1af8e8297ef4c3efbcdba_dep.map +++ b/docs/html/dir_68267d1309a1af8e8297ef4c3efbcdba_dep.map @@ -1,5 +1,5 @@ - + - + diff --git a/docs/html/dir_68267d1309a1af8e8297ef4c3efbcdba_dep.md5 b/docs/html/dir_68267d1309a1af8e8297ef4c3efbcdba_dep.md5 index d4c727d..fa6af2f 100644 --- a/docs/html/dir_68267d1309a1af8e8297ef4c3efbcdba_dep.md5 +++ b/docs/html/dir_68267d1309a1af8e8297ef4c3efbcdba_dep.md5 @@ -1 +1 @@ -56537ff05fa01a9a1c71ea3176f8028d \ No newline at end of file +b58d27153930886270f345234e916105 \ No newline at end of file diff --git a/docs/html/dir_68267d1309a1af8e8297ef4c3efbcdba_dep.png b/docs/html/dir_68267d1309a1af8e8297ef4c3efbcdba_dep.png index 46e43a0a4c91f7ad69f1f45ff05ad75f3fc8d038..7acf34f4ccaec571e9b90d4879f04cddf85d109c 100644 GIT binary patch literal 2269 zcma)8eKgbiA6Kd?l3Pt4^3dZ|i5fD^@C%V>x*j%WxLK|qP{Vvpjmkr0rXs>NB(Wq( znz-i2t}WT9wkEMjt2~SilX=Lx``!P#-Ftrbe9q_dKIeVj=ly=4_xp8TuTSPNxVyHd zp{AOenzqMbS09xnsBVYGa@9L~{`6^;Srz8#?yC0nf2XviGFMGam5BOMfitL#_d*rihaZ=BAq6NI_R zAqKFAg zetx$O1*ef@-)8*VGXK)KB}IzEC0iM4ClcPAsSVd&Goxh=iQFd;D5H6IOJE9g04in|!v8(;A zK#-oFkD<{dc}G6xTbvzeu@{JvtZZldq*79Sg!k}=4`F5{CH&?qsa1aWUQC|j-q_(} zRro3*`Qs1;NTTFFp@MB~;>s)8@yahZQ&atkb&$b;1>tGM(RS%?iPX^In!G%O;kP2*j+U_Ut)mW$I@m z_G&G2#C>vM;rwj>nMQ*{xrqwv2<6Yd^8T}or_beII2?{*&|Vm=AQRq;ksm&MKp+rn z)+RZC!J=2wy*-Zh%L?O%?uZCW3)!fN>G$uE+UXhIP7SJ#Q`0QYC(xUk1pCi~Snho0 z0f#pxOgSS2-s(>Gc9N^)qq@4fPtimM()P+^i`CCNDwG#=5Z~bAUoFl6@IL&40_)4B zhFw1~ARKD!l3UJzvbKw*kKFzNcmF4^i%1w0v?&e>uN2?DZDNPzb2whA3G0OtUrCrp zJd?4Dvljf+oNY2`5FJ6x#=m{5w2f$ay|5@|_ve_(CSJUkyFYi(m*4B^*s0Kp^zWSXc27jKQoOd$c&1ruG zXMj7-Ga{*OF=N#0*Hz$Gl5{d zXnsZ9@Dc1rmwX`xQxZ(K%oW?w`zZy;RFeqsi9QPWSKER_7?s1xe)+O)Byb~>{q;r0 zi&s~^igY%N{(ThTHOL}~POnGr}$kapD!nXRN%nxP}cn~O%Oi{phbpqm?u3>?|^1smR_i$fF7V>yJiA3_! zmt$tv+&?iJ)&FF5*H5`L8f`VSd)tZ#U^Ew@7#Kj4#30SIwqL4hYCb2x+85^L=0u{9 zSxLryA+<3ZFtU866mSs=klf80+uvk3zkDRpAMYzX3y`P#DbU;_76(Q#jf9 zxR-}V;FCxLHdYnn;^Lwz5*PRQVJV{800Xb&wQgI;NNpNy!gYn!`5}=xL}H^by81QL z!NDTZr~0+1w7k6hb~K{w+6&ppj4rpzK{kuUa=XIBE-id+ zIj^|d)YsV9=viQiH+9auc1&^89BBfLdlpuA(xxc5IsW7D@Og+aEMc;nVxQRJ2!Q~z z3u$juyzlLugR05rOAMmBwJy&8$%Xf6G&$DZb;M2}GP%{0wGzbU%IBY{Wa6r3ebtTi zi3}(I?|1o6;`(Rgqzh1Ah($kKnk&lbNr|Z~6Vf3&jd`aegoHDWQYq7V{YnUw@tsQF z4sF%Z(ZK=090oKG1s-_M;9y~(jT;w^k8j>`?@nV+>xR%W@!v`MU-~0{RUgWsT$?#p T@k#YxQS&$icYWae%jG`+`E`(4 literal 2220 zcma)8c~sI{9=E1!Gq+62eM_xzNkJ<$Iu$OMx!{&d`bteDa(e|O3Tl>UPg~q_foHBy z4YQ1hA1e9G(D9|2DUo8nXM=!(qA3b0!<_kN-kF-2d(XY!bHC@@&-dQ@T|PJ0*V}#f zPMw`fN=m!o9x#MLrYlCz_RWfU8H+?Jg!08R?l2|!KYLY2L!pw=_6u;>$$;yXLQa@h zz%~P>Se^;aKqV``E-8Z=xi;SB*dcsd>&ITVZhfjTN^3n=hdAqKg$Suhru?pH+XmdK zRqyZg$mMt2yVV(gs#iNh4>S%7LmU{ZE6yTc3{^($w;6b)B0Jn?b>v{IQ}(ZmFea5mEAmi>=+z1bgOFHb+2TMim0HAWB1Zo8N-|u?Hkv>NsmhUccuCP;dy`m z;n7j;D!(Gp+Unx2&mp0b7cXASu*MYn0|i=Nq*Bqu%OM-S@q1v89}<}wRg;}KJ5@zv zhXzEKd{u`s{*3rdGykXZ_GTcmb9`-WkuiiUt*tc+CC_R4`S@VGewy#IAYW#+yu__X zHh2dLmc($lk2VOTx_dpFggN{eLH$Oi=)p2BGo!lh& zI?`-Nc^>{e^hvv9;sj#@Xa=NP(34vqq^-+Lex!wGsoO)L8?X2HIiqI>`oXR+D>166 z$*JSg+b2g*=luP|tdZuzT%M4s%a95f?{0uRMT3%GeyN*d;FlH$obX-9)1@h#0WvaGCNYNDJdQL)K0(TJx2 zi45V=WB%+~bv@S%836w>K_o0J*po*wG8w~gU+a!j9_P+|{6IDz9++a@#jVD~2D9+0 z`iI0gwP~xoA2)D z9Zaj86y?47Zz1=6Ow;RtGjX7{)}rH%YR**e{q;epZUc+SSmh>D$97jbw;)y+j?4(o&8!Mkea#|++ZEmQ@?)n#ZK>g z;6YyIR~&J6xkDsIJ`OL-){nnEIqMChqlL$>HKqLUYIIEYwhTO?SiAZ_&K_9^IrG@cu&p~X&Lh z(3=CA#>4k$G>(*mB0m0Pzy#$fUR?R~CXFkfH?|df-XisYaJWb-r%PNlhfU9ldGXc3 zx`G;A0cbi=FFr1XTfTPfxl+3!4SymgdPUwkd`n%wJtf8;?f6zIb};%4*ST!2!~xs) zexXkHxGe8i`PFoS^z{TD6D(LI5)76|ttOV&uewhC&lJ)?ap-h8{c9HA8yP zw11Qy-4@$X5pEM47sukwONbn?(WXi`C5AayoAT&689x&D>mDODj4irsvI@prD|V z;^MlxI-$adF*D@pMOQbs+o;IF?O^ZHMX*l3w}pcv3I9QL$ZoTPgZ04D#XFwrTpIM* zzvwFffgY4Fw|s{jzgMX?@e&*hjkb&#;ujZ}z^1#;ZXB;l^LqT5$E;bU(GBN3w8mG~ z{)2ZtaO)E+43);#A@~)|4Ev0kow$V9dGjQk0lst}e(0c3is9O(;l9n&e>#fz1j#aq VP?eHZtoVK?!Ck#!EvJ6S`Ui@6f$#tT diff --git a/docs/html/dir_81cd3825682eb05918933587e078c005.html b/docs/html/dir_81cd3825682eb05918933587e078c005.html index 60c9778..2ce5156 100644 --- a/docs/html/dir_81cd3825682eb05918933587e078c005.html +++ b/docs/html/dir_81cd3825682eb05918933587e078c005.html @@ -1,11 +1,11 @@ - + - + -AUnit: /home/brian/dev/AUnit/src/aunit Directory Reference +AUnit: /home/brian/src/AUnit/src/aunit Directory Reference @@ -22,7 +22,7 @@
    AUnit -  1.3.2 +  1.3.3
    Unit testing framework for Arduino platforms inspired by ArduinoUnit and Google Test.
    @@ -31,18 +31,21 @@ - + +/* @license-end */

    Files

    file  AssertMacros.h [code] - Various assertion macros (assertXxx()) are defined in this header.
      file  AssertVerboseMacros.h [code] - Verbose versions of the macros in AssertMacros.h.
      file  Compare.h [code] - This file provides overloaded compareXxx(a, b) functions which are used by the various assertXxx(a, b) macros.
      file  Flash.h [code] - Various macros to smooth over the differences among the various platforms with regards to their support for flash strings and the various macros used to create and access them.
      file  MetaAssertMacros.h [code] - Various assertTestXxx(), checkTestXxx(), assertTestXxxF() and checkTestXxxF() macros are defined in this header.
      file  print64.h [code] - Helper routines to print 'long long' and 'unsigned long long' because the Print::print() methods in Print.h do not suport 64-bit integers.
      file  TestMacros.h [code] - Various macros (test(), testF(), testing(), testingF(), externTest(), externTestF(), externTesting(), externTestingF()) are defined in this header.
     
    @@ -101,7 +97,7 @@ diff --git a/docs/html/dir_9268cfe6e304750d3a96b29cda140489.html b/docs/html/dir_9268cfe6e304750d3a96b29cda140489.html index 4b8a3ec..de0baf8 100644 --- a/docs/html/dir_9268cfe6e304750d3a96b29cda140489.html +++ b/docs/html/dir_9268cfe6e304750d3a96b29cda140489.html @@ -1,11 +1,11 @@ - + - + -AUnit: /home/brian/dev/AUnit/src/aunit/contrib Directory Reference +AUnit: /home/brian/src/AUnit/src/aunit/contrib Directory Reference @@ -22,7 +22,7 @@
    AUnit -  1.3.2 +  1.3.3
    Unit testing framework for Arduino platforms inspired by ArduinoUnit and Google Test.
    @@ -31,18 +31,21 @@ - + +/* @license-end */

    Files

    file  gtest.h [code] - A simple adapter which allows basic unit tests written using Google Test API (https://github.com/google/googletest) to run on Arduino platforms using AUnit.
     
    @@ -80,7 +82,7 @@ diff --git a/docs/html/dir_dc26540604d17911199600d9c2812a4e.html b/docs/html/dir_dc26540604d17911199600d9c2812a4e.html index 7e950be..e92ed3f 100644 --- a/docs/html/dir_dc26540604d17911199600d9c2812a4e.html +++ b/docs/html/dir_dc26540604d17911199600d9c2812a4e.html @@ -1,11 +1,11 @@ - + - + -AUnit: /home/brian/dev/AUnit/src/aunit/fake Directory Reference +AUnit: /home/brian/src/AUnit/src/aunit/fake Directory Reference @@ -22,7 +22,7 @@
    AUnit -  1.3.2 +  1.3.3
    Unit testing framework for Arduino platforms inspired by ArduinoUnit and Google Test.
    @@ -31,18 +31,21 @@ - + +/* @license-end */ - + +/* @license-end */ @@ -69,23 +72,23 @@   src   aunit   contrib - gtest.hA simple adapter which allows basic unit tests written using Google Test API (https://github.com/google/googletest) to run on Arduino platforms using AUnit + gtest.h   fake  FakePrint.h  Assertion.cpp  Assertion.h - AssertMacros.hVarious assertion macros (assertXxx()) are defined in this header - AssertVerboseMacros.hVerbose versions of the macros in AssertMacros.h + AssertMacros.h + AssertVerboseMacros.h  Compare.cpp - Compare.hThis file provides overloaded compareXxx(a, b) functions which are used by the various assertXxx(a, b) macros + Compare.h  FCString.cpp  FCString.h - Flash.hVarious macros to smooth over the differences among the various platforms with regards to their support for flash strings and the various macros used to create and access them + Flash.h  MetaAssertion.cpp  MetaAssertion.h - MetaAssertMacros.hVarious assertTestXxx(), checkTestXxx(), assertTestXxxF() and checkTestXxxF() macros are defined in this header + MetaAssertMacros.h  print64.cpp - print64.hHelper routines to print 'long long' and 'unsigned long long' because the Print::print() methods in Print.h do not suport 64-bit integers + print64.h  Printer.cpp  Printer.h  string_util.cpp @@ -94,14 +97,14 @@  Test.h  TestAgain.cpp  TestAgain.h - TestMacros.hVarious macros (test(), testF(), testing(), testingF(), externTest(), externTestF(), externTesting(), externTestingF()) are defined in this header + TestMacros.h  TestOnce.cpp  TestOnce.h  TestRunner.cpp  TestRunner.h  Verbosity.h - AUnit.hSame as AUnitVerbose.h except that the terse versions of the various assertXxx() macros are provided - AUnitVerbose.hSame as AUnit.h except that the verbose versions of the various assertXxx() macros are provided + AUnit.h + AUnitVerbose.h @@ -109,7 +112,7 @@ diff --git a/docs/html/functions.html b/docs/html/functions.html index b9ba4c3..c2f8528 100644 --- a/docs/html/functions.html +++ b/docs/html/functions.html @@ -1,9 +1,9 @@ - + - + AUnit: Class Members @@ -22,7 +22,7 @@
    AUnit -  1.3.2 +  1.3.3
    Unit testing framework for Arduino platforms inspired by ArduinoUnit and Google Test.
    @@ -31,18 +31,21 @@ - + +/* @license-end */ @@ -364,7 +367,7 @@

    - t -

    @@ -372,7 +375,7 @@

    - t -

      diff --git a/docs/html/functions_func.html b/docs/html/functions_func.html index 0d27c30..264f22e 100644 --- a/docs/html/functions_func.html +++ b/docs/html/functions_func.html @@ -1,9 +1,9 @@ - + - + AUnit: Class Members - Functions @@ -22,7 +22,7 @@
      AUnit -  1.3.2 +  1.3.3
      Unit testing framework for Arduino platforms inspired by ArduinoUnit and Google Test.
      @@ -31,18 +31,21 @@ - + +/* @license-end */ @@ -296,7 +299,7 @@

      - t -

        diff --git a/docs/html/functions_type.html b/docs/html/functions_type.html index 21faff5..1b98b57 100644 --- a/docs/html/functions_type.html +++ b/docs/html/functions_type.html @@ -1,9 +1,9 @@ - + - + AUnit: Class Members - Typedefs @@ -22,7 +22,7 @@
        AUnit -  1.3.2 +  1.3.3
        Unit testing framework for Arduino platforms inspired by ArduinoUnit and Google Test.
        @@ -31,18 +31,21 @@ - + +/* @license-end */ @@ -62,7 +65,7 @@
         
        @@ -70,7 +73,7 @@ diff --git a/docs/html/functions_vars.html b/docs/html/functions_vars.html index ae04974..686bb00 100644 --- a/docs/html/functions_vars.html +++ b/docs/html/functions_vars.html @@ -1,9 +1,9 @@ - + - + AUnit: Class Members - Variables @@ -22,7 +22,7 @@
        AUnit -  1.3.2 +  1.3.3
        Unit testing framework for Arduino platforms inspired by ArduinoUnit and Google Test.
        @@ -31,18 +31,21 @@ - + +/* @license-end */ @@ -136,7 +139,7 @@ diff --git a/docs/html/globals.html b/docs/html/globals.html index b111bd2..7dd0702 100644 --- a/docs/html/globals.html +++ b/docs/html/globals.html @@ -1,9 +1,9 @@ - + - + AUnit: File Members @@ -22,7 +22,7 @@
        AUnit -  1.3.2 +  1.3.3
        Unit testing framework for Arduino platforms inspired by ArduinoUnit and Google Test.
        @@ -31,18 +31,21 @@ - + +/* @license-end */ @@ -318,7 +321,7 @@

        - t -

          diff --git a/docs/html/globals_defs.html b/docs/html/globals_defs.html index a58ed7e..722217e 100644 --- a/docs/html/globals_defs.html +++ b/docs/html/globals_defs.html @@ -1,9 +1,9 @@ - + - + AUnit: File Members @@ -22,7 +22,7 @@
          AUnit -  1.3.2 +  1.3.3
          Unit testing framework for Arduino platforms inspired by ArduinoUnit and Google Test.
          @@ -31,18 +31,21 @@ - + +/* @license-end */ @@ -318,7 +321,7 @@

          - t -

            diff --git a/docs/html/graph_legend.html b/docs/html/graph_legend.html index 4cdc3ad..32ed912 100644 --- a/docs/html/graph_legend.html +++ b/docs/html/graph_legend.html @@ -1,9 +1,9 @@ - + - + AUnit: Graph Legend @@ -22,7 +22,7 @@
            AUnit -  1.3.2 +  1.3.3
            Unit testing framework for Arduino platforms inspired by ArduinoUnit and Google Test.
            @@ -31,18 +31,21 @@ - + +/* @license-end */ @@ -65,11 +68,42 @@

            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:

            +

            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:

            - + +/* @license-end */
            -

            A simple adapter which allows basic unit tests written using Google Test API (https://github.com/google/googletest) to run on Arduino platforms using AUnit. -More...

            -

            Go to the source code of this file.

            @@ -122,18 +122,25 @@

             

            Detailed Description

            -

            A simple adapter which allows basic unit tests written using Google Test API (https://github.com/google/googletest) to run on Arduino platforms using AUnit.

            +

            A simple adapter which allows basic unit tests written using Google Test API (https://github.com/google/googletest) to run on Arduino platforms using AUnit.

            This is not a comprehensive mapping layer. Only the TEST() macro is supported, TEST_F() is not supported. Many of the ASSERT_Xxx() macros are missing. Over time, more mapping macros may be added.

            Usage:

            -
            #include <AUnit.h>

            or

            - +
            #include <AUnit.h>
            + +

            or

            +
            #include <AUnitVerbose.h>
            + +

            Definition in file gtest.h.

            + + + diff --git a/docs/html/gtest_8h_source.html b/docs/html/gtest_8h_source.html index c4dc700..a1e8fa2 100644 --- a/docs/html/gtest_8h_source.html +++ b/docs/html/gtest_8h_source.html @@ -1,11 +1,11 @@ - + - + -AUnit: /home/brian/dev/AUnit/src/aunit/contrib/gtest.h Source File +AUnit: /home/brian/src/AUnit/src/aunit/contrib/gtest.h Source File @@ -22,7 +22,7 @@
            AUnit -  1.3.2 +  1.3.3
            Unit testing framework for Arduino platforms inspired by ArduinoUnit and Google Test.
            @@ -31,18 +31,21 @@
            - + +/* @license-end */
            gtest.h
            -Go to the documentation of this file.
            1 /*
            2 MIT License
            3 
            4 Copyright (c) 2018 Chris Johnson
            5 
            6 Permission is hereby granted, free of charge, to any person obtaining a copy
            7 of this software and associated documentation files (the "Software"), to deal
            8 in the Software without restriction, including without limitation the rights
            9 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
            10 copies of the Software, and to permit persons to whom the Software is
            11 furnished to do so, subject to the following conditions:
            12 
            13 The above copyright notice and this permission notice shall be included in all
            14 copies or substantial portions of the Software.
            15 
            16 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
            17 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
            18 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
            19 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
            20 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
            21 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
            22 SOFTWARE.
            23 */
            24 
            51 #ifndef AUNIT_CONTRIB_GTEST_H
            52 #define AUNIT_CONTRIB_GTEST_H
            53 
            54 #define TEST(category, name) test(category##_##name)
            55 
            56 #define ASSERT_EQ(e, a) assertEqual(static_cast<decltype(a)>(e), a)
            57 #define ASSERT_NE(e, a) assertNotEqual(static_cast<decltype(a)>(e), a)
            58 #define ASSERT_LT(e, a) assertLess(static_cast<decltype(a)>(e), a)
            59 #define ASSERT_GT(e, a) assertMore(static_cast<decltype(a)>(e), a)
            60 #define ASSERT_LE(e, a) assertLessOrEqual(static_cast<decltype(a)>(e), a)
            61 #define ASSERT_GE(e, a) assertMoreOrEqual(static_cast<decltype(a)>(e), a)
            62 
            63 #define ASSERT_STREQ(e, a) assertEqual(static_cast<decltype(a)>(e), a)
            64 #define ASSERT_STRNE(e, a) assertNotEqual(static_cast<decltype(a)>(e), a)
            65 #define ASSERT_STRCASEEQ(e, a) \
            66  assertStringCaseEqual(static_cast<decltype(a)>(e), a)
            67 #define ASSERT_STRCASENE(e, a) \
            68  assertStringCaseNotEqual(static_cast<decltype(a)>(e), a)
            69 
            70 #define ASSERT_TRUE(x) assertTrue(x)
            71 #define ASSERT_FALSE(x) assertFalse(x)
            72 
            73 #define ASSERT_NEAR(e, a, error) assertNear(static_cast<decltype(a)>(e), a, static_cast<decltype(a)>(error))
            74 
            75 #endif
            +Go to the documentation of this file.
            1 /*
            +
            2 MIT License
            +
            3 
            +
            4 Copyright (c) 2018 Chris Johnson
            +
            5 
            +
            6 Permission is hereby granted, free of charge, to any person obtaining a copy
            +
            7 of this software and associated documentation files (the "Software"), to deal
            +
            8 in the Software without restriction, including without limitation the rights
            +
            9 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
            +
            10 copies of the Software, and to permit persons to whom the Software is
            +
            11 furnished to do so, subject to the following conditions:
            +
            12 
            +
            13 The above copyright notice and this permission notice shall be included in all
            +
            14 copies or substantial portions of the Software.
            +
            15 
            +
            16 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
            +
            17 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
            +
            18 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
            +
            19 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
            +
            20 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
            +
            21 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
            +
            22 SOFTWARE.
            +
            23 */
            +
            24 
            +
            51 #ifndef AUNIT_CONTRIB_GTEST_H
            +
            52 #define AUNIT_CONTRIB_GTEST_H
            +
            53 
            +
            54 #define TEST(category, name) test(category##_##name)
            +
            55 
            +
            56 #define ASSERT_EQ(e, a) assertEqual(static_cast<decltype(a)>(e), a)
            +
            57 #define ASSERT_NE(e, a) assertNotEqual(static_cast<decltype(a)>(e), a)
            +
            58 #define ASSERT_LT(e, a) assertLess(static_cast<decltype(a)>(e), a)
            +
            59 #define ASSERT_GT(e, a) assertMore(static_cast<decltype(a)>(e), a)
            +
            60 #define ASSERT_LE(e, a) assertLessOrEqual(static_cast<decltype(a)>(e), a)
            +
            61 #define ASSERT_GE(e, a) assertMoreOrEqual(static_cast<decltype(a)>(e), a)
            +
            62 
            +
            63 #define ASSERT_STREQ(e, a) assertEqual(static_cast<decltype(a)>(e), a)
            +
            64 #define ASSERT_STRNE(e, a) assertNotEqual(static_cast<decltype(a)>(e), a)
            +
            65 #define ASSERT_STRCASEEQ(e, a) \
            +
            66  assertStringCaseEqual(static_cast<decltype(a)>(e), a)
            +
            67 #define ASSERT_STRCASENE(e, a) \
            +
            68  assertStringCaseNotEqual(static_cast<decltype(a)>(e), a)
            +
            69 
            +
            70 #define ASSERT_TRUE(x) assertTrue(x)
            +
            71 #define ASSERT_FALSE(x) assertFalse(x)
            +
            72 
            +
            73 #define ASSERT_NEAR(e, a, error) assertNear(static_cast<decltype(a)>(e), a, static_cast<decltype(a)>(error))
            +
            74 
            +
            75 #endif
            +
            diff --git a/docs/html/hierarchy.html b/docs/html/hierarchy.html index abc41b5..039524f 100644 --- a/docs/html/hierarchy.html +++ b/docs/html/hierarchy.html @@ -1,9 +1,9 @@ - + - + AUnit: Class Hierarchy @@ -22,7 +22,7 @@
            AUnit -  1.3.2 +  1.3.3
            Unit testing framework for Arduino platforms inspired by ArduinoUnit and Google Test.
            @@ -31,18 +31,21 @@ - + +/* @license-end */ @@ -73,12 +76,12 @@  Caunit::fake::FakePrintAn implementation of Print that writes to an in-memory buffer  Caunit::PrinterUtility class that provides a level of indirection to the Print class where test results can be sent  Caunit::TestBase class of all test cases - Caunit::AssertionAn Assertion class is a subclass of Test and provides various overloaded assertion() functions - Caunit::MetaAssertionClass that extends the Assertion class to support the checkTestXxx() and assertTestXxx() macros that look at the status of the named test - Caunit::TestAgainSimilar to TestOnce but performs the user-defined test multiple times - Caunit::TestOnceSimilar to TestAgain but performs user-defined test only once - Caunit::TestRunnerThe class that runs the various test cases defined by the test() and testing() macros - Caunit::VerbosityUtility class to hold the Verbosity constants + Caunit::AssertionAn Assertion class is a subclass of Test and provides various overloaded assertion() functions + Caunit::MetaAssertionClass that extends the Assertion class to support the checkTestXxx() and assertTestXxx() macros that look at the status of the named test + Caunit::TestAgainSimilar to TestOnce but performs the user-defined test multiple times + Caunit::TestOnceSimilar to TestAgain but performs user-defined test only once + Caunit::TestRunnerThe class that runs the various test cases defined by the test() and testing() macros + Caunit::VerbosityUtility class to hold the Verbosity constants @@ -86,7 +89,7 @@ diff --git a/docs/html/index.html b/docs/html/index.html index a4b1ab8..7bb842a 100644 --- a/docs/html/index.html +++ b/docs/html/index.html @@ -1,9 +1,9 @@ - + - + AUnit: AUnit Library @@ -22,7 +22,7 @@
            AUnit -  1.3.2 +  1.3.3
            Unit testing framework for Arduino platforms inspired by ArduinoUnit and Google Test.
            @@ -31,18 +31,21 @@ - + +/* @license-end */ @@ -59,18 +62,19 @@ -
            +
            AUnit Library

            This is the Doxygen documentation for the AUnit Library.

            -
            +
            + diff --git a/docs/html/inherit_graph_0.map b/docs/html/inherit_graph_0.map index 3853877..de0d347 100644 --- a/docs/html/inherit_graph_0.map +++ b/docs/html/inherit_graph_0.map @@ -1,3 +1,4 @@ - + + diff --git a/docs/html/inherit_graph_0.md5 b/docs/html/inherit_graph_0.md5 index eea42fe..107f88f 100644 --- a/docs/html/inherit_graph_0.md5 +++ b/docs/html/inherit_graph_0.md5 @@ -1 +1 @@ -0c93a68ed43ee67149b68c0781e64da7 \ No newline at end of file +28ad49f9caf1729a0f9ce2d7e63d1d1c \ No newline at end of file diff --git a/docs/html/inherit_graph_0.png b/docs/html/inherit_graph_0.png index 30fb278791a68b42d1389d3de019d80bfa6d45d9..341e7963af26a39862635b48637bb2de3cd83cbb 100644 GIT binary patch literal 1889 zcmV-n2cGzeP)200006VoOIv0RI60 z0RN!9r;`8x2Np?0K~#90?c9Gz6MY;9@bBIH!PL#HSeQ$bgaj2ATG_-jqfnZQQc?fV zEP_EMBZ*3MJs_e}$Qno%4lPLz3P6xw$*CxUf#*;^L%I zsq5PRUvXkE@7}%J-`}s%XkNT{;i6Qlgd1j>Gj)=Zl7b)zf*=eAgUjXi_VzBhn@XiR zdGe(Freb4bZ``=yM200{7&b64R$AJ2_3CeAwYf@I4<^Au8ypM5fbnsiRQfnIwI(^a z`r5UgPoH!E0531vN?sJXcsw40ASjB4hK81xms{>)V6)i|A3iiMYcv`JL3BDDSZ1Jr z)v3keK@*F`VPRqB-7L#I9lt)Vi+cq$zoz+8XFri3{$C8#Cy@{X5{kz^z_=DJIl(-+MhjB0{~`c=l|KhitecC z=;**OY;JC@t*!0m&6~Gx-^P8);(@Z>N^sCRIywpp3IqZHhGFI9<+w>ECMFUS6E|<( z+}_^q>+74Bm-pt)o1UJY4<9~+hld|Ia>QgZk@&(_-kp19n#GFh#9%NK7Z>~a`B`f8 z^y$-FE|*4I;vHQm6z8_dnEkBSnVIdi+O?+*;a z=I0ky@)F#GMx*W6v7@lCu)VzcWK!qobpXmx(7C9vgwvZZ{H3L4cYHYB9U0GPZSCTDcxDPd8RG4#P3#!kVqsFiNx2} zH!?C(p-^nvw8^|aI5>E@r?6No^8%et2LKq2M&jLl`!+2Sb#!$N&CQtrKyZ&3b#;&G z>K+kq-#G|^e}X5M%PT7@M@B}br>6k`@$vDvPg%)8IhUlNp<(03jRge-=7;azy#oLQ z1qE3@eQazjDk{oO`$D1c%9SgmcjxArwj3wx#AZ+|5Cn0k9TX*WKnn=)EiOJ79PIV- z<;>&9uQ3cUnJ_zdEFU}=k)9swP!dNemCDLWoO6TEpFij1adq6h%!YlgVUTFx$4V z($Y9COAP=3M&k(XVa;eXnoK5te}6A8FO^Dl`SRt!z(DgR4u{j&*qD%zpx5iqpFi(V z*EWMD7K^1)sreMhdYNDn0Dy;wM{{$tKp@z+Z(nzJcW`hppU=SXh{!pYPDDb#r$_I5B9}5bLuS^KaLa zl9EVEM;<%bMn|;@#Z$SwU#LiG=m*eW^|atu+*1pO7m$dP{Wl7LkZQISIdyhsd-Rjwd!y z6k)L#RHuN}lr>l<5JWmyClG`W)(HgRgLMKy_?Gy*i}IUEmSiv(sE)9NmX;Q(BS7TS zXf$j#+j`9sb+QWoP1dTFm6b(x1jr>aGBT_mBJdk!2*L%gPap^%tP=>r2kQia@WDEP bAbfuTnc*d|$8Al*00000NkvXXu0mjf%08yr literal 1956 zcmV;V2V3}wP)x}?}NM%pAL zHGlfsi!FW9{A=3W{M$VrI4{n6%dlPTFU7-^2lWI|6*PsnpYcYYt`<>he`ln8V> zU9u&_j8dsYU0q$WWiZm1?(S|JJ9aGOIrhxYUI0*>SOXqpixVjZJ%=gvVUlf}KANCeJH{}eAx>Es38?)-gy zeVCY-!0Xqqq0{N$@p#bC&=4|KDwU$OwRO=tU%h&T+}vEgBrejH1vhU#hEn;zgtV9H z_>a+2$H8i~qP@Kx0|Nu`k{30;c^Q}z(PpZ9A?#0mOC>iq7kPPk0D%1bd~|elps1(_ zcDo(f+1U$X*REX)l}fc}opW<@c=P5BUlM~bo2T*c;jifF`57->m;i9twoM+l_RdebLUO~KtVwPZ@O$YCp4OVG&KANAAE2bpMU-cLqp?#olW1b zn;$%QfQpI=tX#Pg8#Zh}dwV;8;ALfCK3w1X$Aub)NcDz_52r7X3l}b+va%9Zs};bX z^QWz?4RX00Yu2nmb8|CXE>~37w%k68MN=qJ)eE2i%w{ubwc5bL5dlDYy`CHn2ifg* z8W|a(nwlEgv111j5g7~y0zlQ()udLdNw3$Ff71Y{uC9)zrlzQ~vy%Xj)oPtDw;Z%u zEt$<`A|jfdb<>k4FQ}>ME)^GlMny$RDlYzv3JT5zrRwUN%W98r0FYX(jw;q>vr$Gy z1~oP|()jo|-Me>>0MOgFZ-e?UFdt3dhZ=|J>1pch>h{)}B696(83^AGihaaBNqenkcbMt@c{r4|WVPSZ~ zr@Q%GE*HIg`I2U4W{8OB`Sa&t`*1mZztnLEjE_d&#fujS01XchFQ{wt=FK!QF)^Qi z`t&I&6pE;H1kOue>h0}~o2FFrLL~F^_RMcE7*JML7BObamMvk=6&4l(03?#wB)Q#Q zeD&26bad$8aJay6fbYMGyxzr^^`oN}6c#FD(!d8fIR~PS&B(~W*w`4Fo15WqI3jM% zrVxMJ#8=)eO64cW%(UaT-yC@MY#2_b8xn~KZnt;Q@_BjL_~MJ?@29V+`6TLC zm&=7CM~lVUzW3fg@ad=9_>#VC-0sP!V`pY&;B-16kx1Zl zI&t~(WdMNPZbxx(F#w>es|&TYwYYWb*0MGEkAux-gGQr4V`F2;e6;#}Z@*WpSb+8|d(t;Z|Zouhu;`Hg$P$(3*ef##3G$cw>yjiLjB9YQN z{7Oqpv1`|^nBH(^Wl8Yy$L09?>wiJ7zk)BnJb{ls`X|I<5kw*mB2oHpHj>F?xO(*} zjvqgc^73+&m6f5sz8(h;9>ltJ>u~APB`B3jY~Q{eO-)Tpu0PZ`SS*$Wbp__5)fb5G zH}7lLt^okr+S*W3Qi9#PcVo|N9XwqWY9}jYKvvKOwhd6cWL;U``72kaG3pAR3h{Y+r7-BGZL$K!er=(;p z&YnGhvu6*$Y@SZG90nsHu-jY!d3ia>mcU>n1ZI8)L!dD8GZ+GenV-QBD9ro}hCm7X zwtsRm`W - + diff --git a/docs/html/inherit_graph_1.md5 b/docs/html/inherit_graph_1.md5 index f29c801..9faa51e 100644 --- a/docs/html/inherit_graph_1.md5 +++ b/docs/html/inherit_graph_1.md5 @@ -1 +1 @@ -43f405a8da6b72d437c1596f2981b525 \ No newline at end of file +e7bec55e99eefe42113d98bb469039a3 \ No newline at end of file diff --git a/docs/html/inherit_graph_1.png b/docs/html/inherit_graph_1.png index 15699cb25b0bf7fb2ace27e309d49c5f36ff6cc8..6dcc15537d58590a7037ae2d8c25a4b2c8010ebf 100644 GIT binary patch literal 1783 zcmV+kOa2R!Hbo#)N359g>Hj)({h#{VBr(cjL1!I&+W*ck-_6FZ||U}9$!4D*u@^!4@O z^y$-oBNqlEZ+JYO3CAW(_QAnH+_-ULRuW<`@=Z7#POIMull?cTJ{b(gT*vKp!)!LE zw6SY;M!~?u&L|j|*ck-_6Z;%TtJUJ-#fyJCjsFGzgxK@(hBML3K69<-|Ag3mJ|A}N z+9m9-S+fRLu3VXxk8DgO##}(B(}Cl-giWW@C9HY+^eMJ%*#enNhDD1OVa19Sa5x+o zA0Gz*3=9mwWHLc6m!q__6necLj~+b|&Yx^=a_#v{^G}GKksCIf4MZetJv}{wt*564 zYuBztd3iaWJb8j>G>YrjuVZv{6nF020RU{;v-1_K3y!33WN4<4j->(-H2ET+!R&aAa%>s@l*+3KvVttFey zmhydy$K#|_DrwK2Jt^%(L_0+jfVYOP}_xs`XdJzhRP*G6uwQJY%Q1u_=@X44oXU?1zkZQKBBB2Ne!=JQ6bfbZ5e|o`v9XcVYBeobuz;$otLf&=n}R)6 z|5MeTOV9m&|AZ;t+uJ+$CcDSu!RpnkAr_0laU5(m8^YmmPCn#vx$s&f5&?j4!!%Rm z67%ibw*Ua1=Y<=;dGqGs^XJb927|&ng+h^2oP6{yndEEsty{MO0G2FS0sx3aA{o!; zc^>D^orB-+M>HD6jvYHtUtbTe*PHRYRJA9Qt{0I=1Y)rmGMP-UFI%=OtG`^Bw%9*> z_yCK=f+I(c;Qjmeh{xk-Yiq;LpFf2)B9SOTL?1tXoL0=DqM5(1PL5GlR)(UYB1EIn z1R)U-j7Fodj^nsV$Cym-@=0Z7C6r2KPL~G~i3E*}jZi9;c>MS=fb{*(rS@cap2yd( zUlEN)g=2w0V9NedF>Te1kB=iBk3%YzqPVyiKA#V5ZEXo_R;^kEr_+g8EQWXQ-l3(X zWm++pE?tWL{{93}*zI<>eMM%EEY&4 z5;QkAW81cE32Ph<2cpp^c%DaHUEKtGuI$^l5BKifgGeNTR;!(suUukubabGiq5^uo z9&))HO-)T`XlTH~g$t(?V=}$VH#(gT4g})oLM=$zZWqAeBmCG#bJ4Ja+Hi z4Tr-4l}ZJLLV@=7b~v3*)YQ}fn7RJDTrR|7F{o537z_r~*Vh98ii?Z$6Cj5Rdf zJSZzGLtR}RHf-2{*4Ea%`Dc@zF=tr3crm)Vx@OEjo9v8&fr*__Ffg$*3I-;2M!}Hw z2G#9$&t@JBMqcRa>q~1(EB18H-e55PRX8H{e0D}bz@E>}C>)sB83h9qJELG=VrLW# Z{{cBasOZ=(j~@U4002ovPDHLkV1obGTh{;p literal 1757 zcmV<31|s>1P)eiR4RU*_$a9_^l82p@d!_Qszrg zA48JLB?&1C?NbqhAWDg%7qup%q!)~eidI(0T3H_^qEj%cHFY|5%j@~@;Bec0uT5Px zp7VnnJm)_5b^hnSYsYhrZgC_Df#C1w_CE_9fj|&0!mNUrL6}t#GYGQ^Vutv@3bWaa zbLY-2L@WY9W}QaL*#bedX=!OeVPT=< zJ+WpL#0vkGE{ztXJT-Q9?bi~HlxMw>`ui;Ihsy{7s4^()HC%8-$f z0i{xjEnBw0Xf*oijE;`t~p+IJ4CTePGFg`vWmAIqDUuo8)q$E^TRRI8c zdU~*I*|J$Z8;VGE7Yei4jKRUdpbG$;PA775aXhdIM9~v7Qarf?BR9033_CxFMb_bm$O&{`@Ja6PSy@@m{@pHLRSH)N4DiN{8w5ay!x7etap1rKI-O27G&B$ZfBg6n(tIR2G&ID9h6c&< zZ2Fi+uh(<`{{6Ju?X+60%+1Z^i4!M$ZFlb6$>!!}x?C<<-AM8gY8=zCTPzm3TrR)M z>-BPIXovu04LB3C+05+hY$_BA?%K7B=g*&Ke}BL1>k>F#i^URFPOn_K!jzO0K6>bkn9yym|AcU%$6*-I_PE&Uu5CkdT1h-d^n4vj=&3d1!2G zlx<6i4<#fgCj$WD<7NNyJ7>b}!)~`jqtWq866#k+wDet zd_3H4H)?8X001K+BT%VS0Dx=Pu3=~IkI-L$Z zJw52^>Ow(5LBuhK%10n`9mkn7XYk_13zU|Y!fZCfYPF)St_}u+0rmCu0D#2AM3k16 zqOhL#1os*^?5v&-ML&95aKZl$olb|bu`%r3yBFWSeM4GW8j6dHaqQT!dC?bU70erp7A-=3 zeZ6mUH{Xb5fFNcNW);K?!mNUrL6}t#GsteRT3TBEWE=tkfdBs4Tn<^Y%6)cQAXq5k zNb&uwf|x*jKdT^i5M~v`48p8}m_e9T5HtJ>cNfj~F6lox00000NkvXXu0mjf0W)tM diff --git a/docs/html/inherit_graph_2.map b/docs/html/inherit_graph_2.map index 212ac1c..bb3c429 100644 --- a/docs/html/inherit_graph_2.map +++ b/docs/html/inherit_graph_2.map @@ -1,3 +1,3 @@ - + diff --git a/docs/html/inherit_graph_2.md5 b/docs/html/inherit_graph_2.md5 index cf3abe4..f25bdd7 100644 --- a/docs/html/inherit_graph_2.md5 +++ b/docs/html/inherit_graph_2.md5 @@ -1 +1 @@ -74f50b49df31ad0675dc58b139f5a320 \ No newline at end of file +f8fa4685a5e6d538c3c7f3b36401e641 \ No newline at end of file diff --git a/docs/html/inherit_graph_2.png b/docs/html/inherit_graph_2.png index 61f759e03bf193b102c22f5201ccea63df5027d6..449e820b0a9b63e0f37678de4fb3230779d79864 100644 GIT binary patch delta 1042 zcmV+t1nv8e2$u*UiBL{Q4GJ0x0000DNk~Le0001W0000b2m$~A0Q2ZE9FZXvf6Pfl zK~!jg?U_$VGEW%CXY{2obn9f4q6tABEhEfRcq%Z#DAYq@&?%Ay5B(wP6rmoH?vmvt z(WrGS!x?qB!s&CSi~>gtb|R5?%- zl}sl2kv|^?B@&6Bs;ANz7#MgL!Rs$tu)k=*{-Oo@i1m6_LJ&kt zOUusA4m*bX7dxHKqobptp&Meh{a<3_2Ehd;ou9c>uf+JfwY9}C%-cYS@W*X!+ed$Cv)%q)ob^+76?wzjrL7FhnAeY&M%pf2GF9$4g4v(9m#ve9Zk+ zg8SR|;VWu18k^1L@pw*8PoJNk4-XIRcKgfA%lB1E_P432DHsg8TrPqjd_G@aUmtfV z5C~*48I?+9wOaY{uP`qOq6Pbl7VIxtu)k=*{-Oo@iueyW}dq`$wP--Y;X4Jmm2MGN*9E!bbQV1Lo_AJAm6f<`uE>Hq)$ M07*qoM6N<$g1n>?CjbBd delta 1034 zcmV+l1oiuu2#*LMiBL{Q4GJ0x0000DNk~Le0001M0000b2nGNE07dN=5RoAjf5b^d zK~!jg?VCSHI&U1u-}g-$BJd0%6QUxhASiH%THB%_qA0MTq1C}5B4{XRaBC=9!WN-H zi`rTma;a+-AsWs^OmZnqPYk>Ge3xIMp6Bn>%gu(yT}%0znY!ZZ8Nz$z`=#F+V?# zSS;3*c)!IzX_hF8*xK3x07Rovba!{x+=nDdNG6kbd3ixF7=)^-SY2KHf8Ti3s8`F6 zL1p;;eyWh&GGtks=l z5_EccN&x8X?M-thmZt&G^71mJQYrF!y##<>Utde=Rl1ws-`~mW_3EYpP$(24MNue| z$xtK`p~b~Tnw*?0>2r2=mi&G{g+ig4b$#RUcxY*9iQ@4%g~MTTe>fbpv9Y0vp(u)> z@vJtp8a6AR&(q`MBW1H$A|krGyDKb1M$8HZgG5C1`T1F~UA@a-@zvhmPBSwz^z`&p z(q}jvu3OhP!^6XrOePEI>+5Tpn3&MSFiJJEbRRbv#cVbs7K_2 zNs@4Mbfl^C_4Ne+NF)+k0e@O|AgyMEQC)Vs9kMKgh(JV0rBb-Rzc&=4RvI3uY&MHr zE(epzgj_C%ot+&3Kqixc#bN;f_V6Z2h7dQHS|5JQp1|5i^t<3Q50!#aFC9VkICtDQcq705fSa~?vlk~p^=dh zy1Kg3>1pch>@3tXvKN*g-HWNU{dc;OmXD7Qa=YDRv)RaMwbI(! z8YzlW_c6bzUp(fRB#3&;S4c07*qoM6N<$ Ef@Ev% - - - - - + + + + + diff --git a/docs/html/inherit_graph_3.md5 b/docs/html/inherit_graph_3.md5 index d81eb67..f4b69a9 100644 --- a/docs/html/inherit_graph_3.md5 +++ b/docs/html/inherit_graph_3.md5 @@ -1 +1 @@ -a7d251270d8f3205951981d1451fa604 \ No newline at end of file +acc51aa2e98814db97ac181fa5e6460c \ No newline at end of file diff --git a/docs/html/inherit_graph_3.png b/docs/html/inherit_graph_3.png index 85e23a544fa2246a7e5db8ebe90269e201c14a07..612b8722f71b5071a2fe4062becefa643fe4dae8 100644 GIT binary patch literal 6393 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 vXVs~L8~FUJL7TwNgcL)s_UhkeShW4B!0+^ZIx5 literal 6426 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 diff --git a/docs/html/inherit_graph_4.map b/docs/html/inherit_graph_4.map index 8b6c389..1c0b834 100644 --- a/docs/html/inherit_graph_4.map +++ b/docs/html/inherit_graph_4.map @@ -1,3 +1,3 @@ - + diff --git a/docs/html/inherit_graph_4.md5 b/docs/html/inherit_graph_4.md5 index 6d947af..bbbd1db 100644 --- a/docs/html/inherit_graph_4.md5 +++ b/docs/html/inherit_graph_4.md5 @@ -1 +1 @@ -f9f005a0aba5364bf2a878bdb1e2270c \ No newline at end of file +ee9deb13a820262a1147c3807fdcf4ef \ No newline at end of file diff --git a/docs/html/inherit_graph_4.png b/docs/html/inherit_graph_4.png index abe49a3edec1d0079db379d0812395946a51b6c6..89e3cc96e0474dcf9471c9d20c16b02c99295ca7 100644 GIT binary patch delta 1292 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 Y7kbX^ - + diff --git a/docs/html/inherit_graph_5.md5 b/docs/html/inherit_graph_5.md5 index cf9efaa..e708ade 100644 --- a/docs/html/inherit_graph_5.md5 +++ b/docs/html/inherit_graph_5.md5 @@ -1 +1 @@ -f0d2e2b29c188ef3c14e47ec58e78038 \ No newline at end of file +ab1e63245655f4917e281e8f2d96f6fb \ No newline at end of file diff --git a/docs/html/inherit_graph_5.png b/docs/html/inherit_graph_5.png index 22384567e6db8bb38765bdbfa6aea4be6c8278fd..67067cde690281268cb8cfd915e21e1e971fe115 100644 GIT binary patch literal 1841 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 diff --git a/docs/html/inherits.html b/docs/html/inherits.html index 43a4541..642c583 100644 --- a/docs/html/inherits.html +++ b/docs/html/inherits.html @@ -1,9 +1,9 @@ - + - + AUnit: Class Hierarchy @@ -22,7 +22,7 @@
            AUnit -  1.3.2 +  1.3.3
            Unit testing framework for Arduino platforms inspired by ArduinoUnit and Google Test.
            @@ -31,18 +31,21 @@ - + +/* @license-end */ @@ -67,38 +70,39 @@ - - - - - -
            +
            - + +
            +
            - +
            +
            - +
            +
            - - - - - + + + + +
            +
            - +
            +
            - +
            @@ -107,7 +111,7 @@ diff --git a/docs/html/jquery.js b/docs/html/jquery.js index f5343ed..103c32d 100644 --- a/docs/html/jquery.js +++ b/docs/html/jquery.js @@ -1,71 +1,26 @@ +/*! jQuery v3.4.1 | (c) JS 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=[],E=C.document,r=Object.getPrototypeOf,s=t.slice,g=t.concat,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},x=function(e){return null!=e&&e===e.window},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.4.1",k=function(e,t){return new k.fn.init(e,t)},p=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;function d(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($),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+$),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-f]{1,6}"+M+"?|("+M+")|.)","ig"),ne=function(e,t,n){var r="0x"+t-65536;return r!=r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":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(m.childNodes),m.childNodes),t[m.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&&((e?e.ownerDocument||e:m)!==C&&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&&!A[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&U.test(t)){(s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=k),o=(l=h(t)).length;while(o--)l[o]="#"+s+" "+xe(l[o]);c=l.join(","),f=ee.test(t)&&ye(e.parentNode)||e}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){A(t,!0)}finally{s===k&&e.removeAttribute("id")}}}return g(t.replace(B,"$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[k]=!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.namespaceURI,n=(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:m;return r!==C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),m!==C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),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=k,!C.getElementsByName||!C.getElementsByName(k).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){a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+k+"-]").length||v.push("~="),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+k+"+*").length||v.push(".#.+[+~]")}),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("!=",$)}),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},D=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===m&&y(m,e)?-1:t===C||t.ownerDocument===m&&y(m,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]===m?-1:s[r]===m?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if((e.ownerDocument||e)!==C&&T(e),d.matchesSelector&&E&&!A[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){A(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=p[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&p(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)?k.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?k.grep(e,function(e){return e===n!==r}):"string"!=typeof n?k.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(k.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||q,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:L.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 k?t[0]:t,k.merge(this,k.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),D.test(r[1])&&k.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(k):k.makeArray(e,this)}).prototype=k.fn,q=k(E);var H=/^(?:parents|prev(?:Until|All))/,O={children:!0,contents:!0,next:!0,prev:!0};function P(e,t){while((e=e[t])&&1!==e.nodeType);return e}k.fn.extend({has:function(e){var t=k(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,ge={option:[1,""],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)?k.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;nx",y.noCloneChecked=!!me.cloneNode(!0).lastChild.defaultValue;var Te=/^key/,Ce=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ee=/^([^.]*)(?:\.(.+)|)/;function ke(){return!0}function Se(){return!1}function Ne(e,t){return e===function(){try{return E.activeElement}catch(e){}}()==("focus"===t)}function Ae(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)Ae(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Se;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return k().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=k.guid++)),e.each(function(){k.event.add(this,t,i,r,n)})}function De(e,i,o){o?(Q.set(e,i,!1),k.event.add(e,i,{namespace:!1,handler:function(e){var t,n,r=Q.get(this,i);if(1&e.isTrigger&&this[i]){if(r.length)(k.event.special[i]||{}).delegateType&&e.stopPropagation();else if(r=s.call(arguments),Q.set(this,i,r),t=o(this,i),this[i](),r!==(n=Q.get(this,i))||t?Q.set(this,i,!1):n={},r!==n)return e.stopImmediatePropagation(),e.preventDefault(),n.value}else r.length&&(Q.set(this,i,{value:k.event.trigger(k.extend(r[0],k.Event.prototype),r.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===Q.get(e,i)&&k.event.add(e,i,ke)}k.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.get(t);if(v){n.handler&&(n=(o=n).handler,i=o.selector),i&&k.find.matchesSelector(ie,i),n.guid||(n.guid=k.guid++),(u=v.events)||(u=v.events={}),(a=v.handle)||(a=v.handle=function(e){return"undefined"!=typeof k&&k.event.triggered!==e.type?k.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(R)||[""]).length;while(l--)d=g=(s=Ee.exec(e[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=k.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=k.event.special[d]||{},c=k.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&k.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),k.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.hasData(e)&&Q.get(e);if(v&&(u=v.events)){l=(t=(t||"").match(R)||[""]).length;while(l--)if(d=g=(s=Ee.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d){f=k.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,v.handle)||k.removeEvent(e,d,v.handle),delete u[d])}else for(d in u)k.event.remove(e,d+t[l],n,r,!0);k.isEmptyObject(u)&&Q.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=k.event.fix(e),u=new Array(arguments.length),l=(Q.get(this,"events")||{})[s.type]||[],c=k.event.special[s.type]||{};for(u[0]=s,t=1;t\x20\t\r\n\f]*)[^>]*)\/>/gi,qe=/\s*$/g;function Oe(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&k(e).children("tbody")[0]||e}function Pe(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function Re(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Me(e,t){var n,r,i,o,a,s,u,l;if(1===t.nodeType){if(Q.hasData(e)&&(o=Q.access(e),a=Q.set(t,o),l=o.events))for(i in delete a.handle,a.events={},l)for(n=0,r=l[i].length;n")},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=oe(e);if(!(y.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||k.isXMLDoc(e)))for(a=ve(c),r=0,i=(o=ve(e)).length;r").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 Vt,Gt=[],Yt=/(=)\?(?=&|$)|\?\?/;k.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Gt.pop()||k.expando+"_"+kt++;return this[e]=!0,e}}),k.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Yt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Yt.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(Yt,"$1"+r):!1!==e.jsonp&&(e.url+=(St.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||k.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?k(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Gt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((Vt=E.implementation.createHTMLDocument("").body).innerHTML="
            ",2===Vt.childNodes.length),k.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=D.exec(e))?[t.createElement(i[1])]:(i=we([e],t,o),o&&o.length&&k(o).remove(),k.merge([],i.childNodes)));var r,i,o},k.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(k.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},k.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){k.fn[t]=function(e){return this.on(t,e)}}),k.expr.pseudos.animated=function(t){return k.grep(k.timers,function(e){return t===e.elem}).length},k.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=k.css(e,"position"),c=k(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=k.css(e,"top"),u=k.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,k.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)}},k.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){k.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"===k.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"===k.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=k(e).offset()).top+=k.css(e,"borderTopWidth",!0),i.left+=k.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-k.css(r,"marginTop",!0),left:t.left-i.left-k.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===k.css(e,"position"))e=e.offsetParent;return e||ie})}}),k.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;k.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)}}),k.each(["top","left"],function(e,n){k.cssHooks[n]=ze(y.pixelPosition,function(e,t){if(t)return t=_e(e,n),$e.test(t)?k(e).position()[n]+"px":t})}),k.each({Height:"height",Width:"width"},function(a,s){k.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){k.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?k.css(e,t,i):k.style(e,t,n,i)},s,n?e:void 0,n)}})}),k.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){k.fn[n]=function(e,t){return 0a;a++)for(i in o[a])n=o[a][i],o[a].hasOwnProperty(i)&&void 0!==n&&(e[i]=t.isPlainObject(n)?t.isPlainObject(e[i])?t.widget.extend({},e[i],n):t.widget.extend({},n):n);return e},t.widget.bridge=function(e,i){var n=i.prototype.widgetFullName||e;t.fn[e]=function(o){var a="string"==typeof o,r=s.call(arguments,1),h=this;return a?this.length||"instance"!==o?this.each(function(){var i,s=t.data(this,n);return"instance"===o?(h=s,!1):s?t.isFunction(s[o])&&"_"!==o.charAt(0)?(i=s[o].apply(s,r),i!==s&&void 0!==i?(h=i&&i.jquery?h.pushStack(i.get()):i,!1):void 0):t.error("no such method '"+o+"' for "+e+" widget instance"):t.error("cannot call methods on "+e+" prior to initialization; "+"attempted to call method '"+o+"'")}):h=void 0:(r.length&&(o=t.widget.extend.apply(null,[o].concat(r))),this.each(function(){var e=t.data(this,n);e?(e.option(o||{}),e._init&&e._init()):t.data(this,n,new i(o,this))})),h}},t.Widget=function(){},t.Widget._childConstructors=[],t.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"
            ",options:{classes:{},disabled:!1,create:null},_createWidget:function(e,s){s=t(s||this.defaultElement||this)[0],this.element=t(s),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=t(),this.hoverable=t(),this.focusable=t(),this.classesElementLookup={},s!==this&&(t.data(s,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===s&&this.destroy()}}),this.document=t(s.style?s.ownerDocument:s.document||s),this.window=t(this.document[0].defaultView||this.document[0].parentWindow)),this.options=t.widget.extend({},this.options,this._getCreateOptions(),e),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:t.noop,_create:t.noop,_init:t.noop,destroy:function(){var e=this;this._destroy(),t.each(this.classesElementLookup,function(t,i){e._removeClass(i,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:t.noop,widget:function(){return this.element},option:function(e,i){var s,n,o,a=e;if(0===arguments.length)return t.widget.extend({},this.options);if("string"==typeof e)if(a={},s=e.split("."),e=s.shift(),s.length){for(n=a[e]=t.widget.extend({},this.options[e]),o=0;s.length-1>o;o++)n[s[o]]=n[s[o]]||{},n=n[s[o]];if(e=s.pop(),1===arguments.length)return void 0===n[e]?null:n[e];n[e]=i}else{if(1===arguments.length)return void 0===this.options[e]?null:this.options[e];a[e]=i}return this._setOptions(a),this},_setOptions:function(t){var e;for(e in t)this._setOption(e,t[e]);return this},_setOption:function(t,e){return"classes"===t&&this._setOptionClasses(e),this.options[t]=e,"disabled"===t&&this._setOptionDisabled(e),this},_setOptionClasses:function(e){var i,s,n;for(i in e)n=this.classesElementLookup[i],e[i]!==this.options.classes[i]&&n&&n.length&&(s=t(n.get()),this._removeClass(n,i),s.addClass(this._classes({element:s,keys:i,classes:e,add:!0})))},_setOptionDisabled:function(t){this._toggleClass(this.widget(),this.widgetFullName+"-disabled",null,!!t),t&&(this._removeClass(this.hoverable,null,"ui-state-hover"),this._removeClass(this.focusable,null,"ui-state-focus"))},enable:function(){return this._setOptions({disabled:!1})},disable:function(){return this._setOptions({disabled:!0})},_classes:function(e){function i(i,o){var a,r;for(r=0;i.length>r;r++)a=n.classesElementLookup[i[r]]||t(),a=e.add?t(t.unique(a.get().concat(e.element.get()))):t(a.not(e.element).get()),n.classesElementLookup[i[r]]=a,s.push(i[r]),o&&e.classes[i[r]]&&s.push(e.classes[i[r]])}var s=[],n=this;return e=t.extend({element:this.element,classes:this.options.classes||{}},e),this._on(e.element,{remove:"_untrackClassesElement"}),e.keys&&i(e.keys.match(/\S+/g)||[],!0),e.extra&&i(e.extra.match(/\S+/g)||[]),s.join(" ")},_untrackClassesElement:function(e){var i=this;t.each(i.classesElementLookup,function(s,n){-1!==t.inArray(e.target,n)&&(i.classesElementLookup[s]=t(n.not(e.target).get()))})},_removeClass:function(t,e,i){return this._toggleClass(t,e,i,!1)},_addClass:function(t,e,i){return this._toggleClass(t,e,i,!0)},_toggleClass:function(t,e,i,s){s="boolean"==typeof s?s:i;var n="string"==typeof t||null===t,o={extra:n?e:i,keys:n?t:e,element:n?this.element:t,add:s};return o.element.toggleClass(this._classes(o),s),this},_on:function(e,i,s){var n,o=this;"boolean"!=typeof e&&(s=i,i=e,e=!1),s?(i=n=t(i),this.bindings=this.bindings.add(i)):(s=i,i=this.element,n=this.widget()),t.each(s,function(s,a){function r(){return e||o.options.disabled!==!0&&!t(this).hasClass("ui-state-disabled")?("string"==typeof a?o[a]:a).apply(o,arguments):void 0}"string"!=typeof a&&(r.guid=a.guid=a.guid||r.guid||t.guid++);var h=s.match(/^([\w:-]*)\s*(.*)$/),l=h[1]+o.eventNamespace,c=h[2];c?n.on(l,c,r):i.on(l,r)})},_off:function(e,i){i=(i||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,e.off(i).off(i),this.bindings=t(this.bindings.not(e).get()),this.focusable=t(this.focusable.not(e).get()),this.hoverable=t(this.hoverable.not(e).get())},_delay:function(t,e){function i(){return("string"==typeof t?s[t]:t).apply(s,arguments)}var s=this;return setTimeout(i,e||0)},_hoverable:function(e){this.hoverable=this.hoverable.add(e),this._on(e,{mouseenter:function(e){this._addClass(t(e.currentTarget),null,"ui-state-hover")},mouseleave:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-hover")}})},_focusable:function(e){this.focusable=this.focusable.add(e),this._on(e,{focusin:function(e){this._addClass(t(e.currentTarget),null,"ui-state-focus")},focusout:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-focus")}})},_trigger:function(e,i,s){var n,o,a=this.options[e];if(s=s||{},i=t.Event(i),i.type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase(),i.target=this.element[0],o=i.originalEvent)for(n in o)n in i||(i[n]=o[n]);return this.element.trigger(i,s),!(t.isFunction(a)&&a.apply(this.element[0],[i].concat(s))===!1||i.isDefaultPrevented())}},t.each({show:"fadeIn",hide:"fadeOut"},function(e,i){t.Widget.prototype["_"+e]=function(s,n,o){"string"==typeof n&&(n={effect:n});var a,r=n?n===!0||"number"==typeof n?i:n.effect||i:e;n=n||{},"number"==typeof n&&(n={duration:n}),a=!t.isEmptyObject(n),n.complete=o,n.delay&&s.delay(n.delay),a&&t.effects&&t.effects.effect[r]?s[e](n):r!==e&&s[r]?s[r](n.duration,n.easing,o):s.queue(function(i){t(this)[e](),o&&o.call(s[0]),i()})}}),t.widget,function(){function e(t,e,i){return[parseFloat(t[0])*(u.test(t[0])?e/100:1),parseFloat(t[1])*(u.test(t[1])?i/100:1)]}function i(e,i){return parseInt(t.css(e,i),10)||0}function s(e){var i=e[0];return 9===i.nodeType?{width:e.width(),height:e.height(),offset:{top:0,left:0}}:t.isWindow(i)?{width:e.width(),height:e.height(),offset:{top:e.scrollTop(),left:e.scrollLeft()}}:i.preventDefault?{width:0,height:0,offset:{top:i.pageY,left:i.pageX}}:{width:e.outerWidth(),height:e.outerHeight(),offset:e.offset()}}var n,o=Math.max,a=Math.abs,r=/left|center|right/,h=/top|center|bottom/,l=/[\+\-]\d+(\.[\d]+)?%?/,c=/^\w+/,u=/%$/,d=t.fn.position;t.position={scrollbarWidth:function(){if(void 0!==n)return n;var e,i,s=t("
            "),o=s.children()[0];return t("body").append(s),e=o.offsetWidth,s.css("overflow","scroll"),i=o.offsetWidth,e===i&&(i=s[0].clientWidth),s.remove(),n=e-i},getScrollInfo:function(e){var i=e.isWindow||e.isDocument?"":e.element.css("overflow-x"),s=e.isWindow||e.isDocument?"":e.element.css("overflow-y"),n="scroll"===i||"auto"===i&&e.widthi?"left":e>0?"right":"center",vertical:0>r?"top":s>0?"bottom":"middle"};l>p&&p>a(e+i)&&(u.horizontal="center"),c>f&&f>a(s+r)&&(u.vertical="middle"),u.important=o(a(e),a(i))>o(a(s),a(r))?"horizontal":"vertical",n.using.call(this,t,u)}),h.offset(t.extend(D,{using:r}))})},t.ui.position={fit:{left:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollLeft:s.offset.left,a=s.width,r=t.left-e.collisionPosition.marginLeft,h=n-r,l=r+e.collisionWidth-a-n;e.collisionWidth>a?h>0&&0>=l?(i=t.left+h+e.collisionWidth-a-n,t.left+=h-i):t.left=l>0&&0>=h?n:h>l?n+a-e.collisionWidth:n:h>0?t.left+=h:l>0?t.left-=l:t.left=o(t.left-r,t.left)},top:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollTop:s.offset.top,a=e.within.height,r=t.top-e.collisionPosition.marginTop,h=n-r,l=r+e.collisionHeight-a-n;e.collisionHeight>a?h>0&&0>=l?(i=t.top+h+e.collisionHeight-a-n,t.top+=h-i):t.top=l>0&&0>=h?n:h>l?n+a-e.collisionHeight:n:h>0?t.top+=h:l>0?t.top-=l:t.top=o(t.top-r,t.top)}},flip:{left:function(t,e){var i,s,n=e.within,o=n.offset.left+n.scrollLeft,r=n.width,h=n.isWindow?n.scrollLeft:n.offset.left,l=t.left-e.collisionPosition.marginLeft,c=l-h,u=l+e.collisionWidth-r-h,d="left"===e.my[0]?-e.elemWidth:"right"===e.my[0]?e.elemWidth:0,p="left"===e.at[0]?e.targetWidth:"right"===e.at[0]?-e.targetWidth:0,f=-2*e.offset[0];0>c?(i=t.left+d+p+f+e.collisionWidth-r-o,(0>i||a(c)>i)&&(t.left+=d+p+f)):u>0&&(s=t.left-e.collisionPosition.marginLeft+d+p+f-h,(s>0||u>a(s))&&(t.left+=d+p+f))},top:function(t,e){var i,s,n=e.within,o=n.offset.top+n.scrollTop,r=n.height,h=n.isWindow?n.scrollTop:n.offset.top,l=t.top-e.collisionPosition.marginTop,c=l-h,u=l+e.collisionHeight-r-h,d="top"===e.my[1],p=d?-e.elemHeight:"bottom"===e.my[1]?e.elemHeight:0,f="top"===e.at[1]?e.targetHeight:"bottom"===e.at[1]?-e.targetHeight:0,m=-2*e.offset[1];0>c?(s=t.top+p+f+m+e.collisionHeight-r-o,(0>s||a(c)>s)&&(t.top+=p+f+m)):u>0&&(i=t.top-e.collisionPosition.marginTop+p+f+m-h,(i>0||u>a(i))&&(t.top+=p+f+m))}},flipfit:{left:function(){t.ui.position.flip.left.apply(this,arguments),t.ui.position.fit.left.apply(this,arguments)},top:function(){t.ui.position.flip.top.apply(this,arguments),t.ui.position.fit.top.apply(this,arguments)}}}}(),t.ui.position,t.extend(t.expr[":"],{data:t.expr.createPseudo?t.expr.createPseudo(function(e){return function(i){return!!t.data(i,e)}}):function(e,i,s){return!!t.data(e,s[3])}}),t.fn.extend({disableSelection:function(){var t="onselectstart"in document.createElement("div")?"selectstart":"mousedown";return function(){return this.on(t+".ui-disableSelection",function(t){t.preventDefault()})}}(),enableSelection:function(){return this.off(".ui-disableSelection")}}),t.ui.focusable=function(i,s){var n,o,a,r,h,l=i.nodeName.toLowerCase();return"area"===l?(n=i.parentNode,o=n.name,i.href&&o&&"map"===n.nodeName.toLowerCase()?(a=t("img[usemap='#"+o+"']"),a.length>0&&a.is(":visible")):!1):(/^(input|select|textarea|button|object)$/.test(l)?(r=!i.disabled,r&&(h=t(i).closest("fieldset")[0],h&&(r=!h.disabled))):r="a"===l?i.href||s:s,r&&t(i).is(":visible")&&e(t(i)))},t.extend(t.expr[":"],{focusable:function(e){return t.ui.focusable(e,null!=t.attr(e,"tabindex"))}}),t.ui.focusable,t.fn.form=function(){return"string"==typeof this[0].form?this.closest("form"):t(this[0].form)},t.ui.formResetMixin={_formResetHandler:function(){var e=t(this);setTimeout(function(){var i=e.data("ui-form-reset-instances");t.each(i,function(){this.refresh()})})},_bindFormResetHandler:function(){if(this.form=this.element.form(),this.form.length){var t=this.form.data("ui-form-reset-instances")||[];t.length||this.form.on("reset.ui-form-reset",this._formResetHandler),t.push(this),this.form.data("ui-form-reset-instances",t)}},_unbindFormResetHandler:function(){if(this.form.length){var e=this.form.data("ui-form-reset-instances");e.splice(t.inArray(this,e),1),e.length?this.form.data("ui-form-reset-instances",e):this.form.removeData("ui-form-reset-instances").off("reset.ui-form-reset")}}},"1.7"===t.fn.jquery.substring(0,3)&&(t.each(["Width","Height"],function(e,i){function s(e,i,s,o){return t.each(n,function(){i-=parseFloat(t.css(e,"padding"+this))||0,s&&(i-=parseFloat(t.css(e,"border"+this+"Width"))||0),o&&(i-=parseFloat(t.css(e,"margin"+this))||0)}),i}var n="Width"===i?["Left","Right"]:["Top","Bottom"],o=i.toLowerCase(),a={innerWidth:t.fn.innerWidth,innerHeight:t.fn.innerHeight,outerWidth:t.fn.outerWidth,outerHeight:t.fn.outerHeight};t.fn["inner"+i]=function(e){return void 0===e?a["inner"+i].call(this):this.each(function(){t(this).css(o,s(this,e)+"px")})},t.fn["outer"+i]=function(e,n){return"number"!=typeof e?a["outer"+i].call(this,e):this.each(function(){t(this).css(o,s(this,e,!0,n)+"px")})}}),t.fn.addBack=function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}),t.ui.keyCode={BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38},t.ui.escapeSelector=function(){var t=/([!"#$%&'()*+,./:;<=>?@[\]^`{|}~])/g;return function(e){return e.replace(t,"\\$1")}}(),t.fn.labels=function(){var e,i,s,n,o;return this[0].labels&&this[0].labels.length?this.pushStack(this[0].labels):(n=this.eq(0).parents("label"),s=this.attr("id"),s&&(e=this.eq(0).parents().last(),o=e.add(e.length?e.siblings():this.siblings()),i="label[for='"+t.ui.escapeSelector(s)+"']",n=n.add(o.find(i).addBack(i))),this.pushStack(n))},t.fn.scrollParent=function(e){var i=this.css("position"),s="absolute"===i,n=e?/(auto|scroll|hidden)/:/(auto|scroll)/,o=this.parents().filter(function(){var e=t(this);return s&&"static"===e.css("position")?!1:n.test(e.css("overflow")+e.css("overflow-y")+e.css("overflow-x"))}).eq(0);return"fixed"!==i&&o.length?o:t(this[0].ownerDocument||document)},t.extend(t.expr[":"],{tabbable:function(e){var i=t.attr(e,"tabindex"),s=null!=i;return(!s||i>=0)&&t.ui.focusable(e,s)}}),t.fn.extend({uniqueId:function(){var t=0;return function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++t)})}}(),removeUniqueId:function(){return this.each(function(){/^ui-id-\d+$/.test(this.id)&&t(this).removeAttr("id")})}}),t.ui.ie=!!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase());var n=!1;t(document).on("mouseup",function(){n=!1}),t.widget("ui.mouse",{version:"1.12.1",options:{cancel:"input, textarea, button, select, option",distance:1,delay:0},_mouseInit:function(){var e=this;this.element.on("mousedown."+this.widgetName,function(t){return e._mouseDown(t)}).on("click."+this.widgetName,function(i){return!0===t.data(i.target,e.widgetName+".preventClickEvent")?(t.removeData(i.target,e.widgetName+".preventClickEvent"),i.stopImmediatePropagation(),!1):void 0}),this.started=!1},_mouseDestroy:function(){this.element.off("."+this.widgetName),this._mouseMoveDelegate&&this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(e){if(!n){this._mouseMoved=!1,this._mouseStarted&&this._mouseUp(e),this._mouseDownEvent=e;var i=this,s=1===e.which,o="string"==typeof this.options.cancel&&e.target.nodeName?t(e.target).closest(this.options.cancel).length:!1;return s&&!o&&this._mouseCapture(e)?(this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){i.mouseDelayMet=!0},this.options.delay)),this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(e)!==!1,!this._mouseStarted)?(e.preventDefault(),!0):(!0===t.data(e.target,this.widgetName+".preventClickEvent")&&t.removeData(e.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(t){return i._mouseMove(t)},this._mouseUpDelegate=function(t){return i._mouseUp(t)},this.document.on("mousemove."+this.widgetName,this._mouseMoveDelegate).on("mouseup."+this.widgetName,this._mouseUpDelegate),e.preventDefault(),n=!0,!0)):!0}},_mouseMove:function(e){if(this._mouseMoved){if(t.ui.ie&&(!document.documentMode||9>document.documentMode)&&!e.button)return this._mouseUp(e);if(!e.which)if(e.originalEvent.altKey||e.originalEvent.ctrlKey||e.originalEvent.metaKey||e.originalEvent.shiftKey)this.ignoreMissingWhich=!0;else if(!this.ignoreMissingWhich)return this._mouseUp(e)}return(e.which||e.button)&&(this._mouseMoved=!0),this._mouseStarted?(this._mouseDrag(e),e.preventDefault()):(this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,e)!==!1,this._mouseStarted?this._mouseDrag(e):this._mouseUp(e)),!this._mouseStarted)},_mouseUp:function(e){this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,e.target===this._mouseDownEvent.target&&t.data(e.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(e)),this._mouseDelayTimer&&(clearTimeout(this._mouseDelayTimer),delete this._mouseDelayTimer),this.ignoreMissingWhich=!1,n=!1,e.preventDefault()},_mouseDistanceMet:function(t){return Math.max(Math.abs(this._mouseDownEvent.pageX-t.pageX),Math.abs(this._mouseDownEvent.pageY-t.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),t.ui.plugin={add:function(e,i,s){var n,o=t.ui[e].prototype;for(n in s)o.plugins[n]=o.plugins[n]||[],o.plugins[n].push([i,s[n]])},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;o.length>n;n++)t.options[o[n][0]]&&o[n][1].apply(t.element,i)}},t.widget("ui.resizable",t.ui.mouse,{version:"1.12.1",widgetEventPrefix:"resize",options:{alsoResize:!1,animate:!1,animateDuration:"slow",animateEasing:"swing",aspectRatio:!1,autoHide:!1,classes:{"ui-resizable-se":"ui-icon ui-icon-gripsmall-diagonal-se"},containment:!1,ghost:!1,grid:!1,handles:"e,s,se",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:90,resize:null,start:null,stop:null},_num:function(t){return parseFloat(t)||0},_isNumber:function(t){return!isNaN(parseFloat(t))},_hasScroll:function(e,i){if("hidden"===t(e).css("overflow"))return!1;var s=i&&"left"===i?"scrollLeft":"scrollTop",n=!1;return e[s]>0?!0:(e[s]=1,n=e[s]>0,e[s]=0,n)},_create:function(){var e,i=this.options,s=this;this._addClass("ui-resizable"),t.extend(this,{_aspectRatio:!!i.aspectRatio,aspectRatio:i.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:i.helper||i.ghost||i.animate?i.helper||"ui-resizable-helper":null}),this.element[0].nodeName.match(/^(canvas|textarea|input|select|button|img)$/i)&&(this.element.wrap(t("
            ").css({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,e={marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom"),marginLeft:this.originalElement.css("marginLeft")},this.element.css(e),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(e),this._proportionallyResize()),this._setupHandles(),i.autoHide&&t(this.element).on("mouseenter",function(){i.disabled||(s._removeClass("ui-resizable-autohide"),s._handles.show())}).on("mouseleave",function(){i.disabled||s.resizing||(s._addClass("ui-resizable-autohide"),s._handles.hide())}),this._mouseInit()},_destroy:function(){this._mouseDestroy();var e,i=function(e){t(e).removeData("resizable").removeData("ui-resizable").off(".resizable").find(".ui-resizable-handle").remove()};return this.elementIsWrapper&&(i(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),i(this.originalElement),this},_setOption:function(t,e){switch(this._super(t,e),t){case"handles":this._removeHandles(),this._setupHandles();break;default:}},_setupHandles:function(){var e,i,s,n,o,a=this.options,r=this;if(this.handles=a.handles||(t(".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=t(),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),s=this.handles.split(","),this.handles={},i=0;s.length>i;i++)e=t.trim(s[i]),n="ui-resizable-"+e,o=t("
            "),this._addClass(o,"ui-resizable-handle "+n),o.css({zIndex:a.zIndex}),this.handles[e]=".ui-resizable-"+e,this.element.append(o);this._renderAxis=function(e){var i,s,n,o;e=e||this.element;for(i in this.handles)this.handles[i].constructor===String?this.handles[i]=this.element.children(this.handles[i]).first().show():(this.handles[i].jquery||this.handles[i].nodeType)&&(this.handles[i]=t(this.handles[i]),this._on(this.handles[i],{mousedown:r._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(s=t(this.handles[i],this.element),o=/sw|ne|nw|se|n|s/.test(i)?s.outerHeight():s.outerWidth(),n=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join(""),e.css(n,o),this._proportionallyResize()),this._handles=this._handles.add(this.handles[i])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(".ui-resizable-handle")),this._handles.disableSelection(),this._handles.on("mouseover",function(){r.resizing||(this.className&&(o=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),r.axis=o&&o[1]?o[1]:"se")}),a.autoHide&&(this._handles.hide(),this._addClass("ui-resizable-autohide"))},_removeHandles:function(){this._handles.remove()},_mouseCapture:function(e){var i,s,n=!1;for(i in this.handles)s=t(this.handles[i])[0],(s===e.target||t.contains(s,e.target))&&(n=!0);return!this.options.disabled&&n},_mouseStart:function(e){var i,s,n,o=this.options,a=this.element;return this.resizing=!0,this._renderProxy(),i=this._num(this.helper.css("left")),s=this._num(this.helper.css("top")),o.containment&&(i+=t(o.containment).scrollLeft()||0,s+=t(o.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:i,top:s},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{width:a.width(),height:a.height()},this.originalSize=this._helper?{width:a.outerWidth(),height:a.outerHeight()}:{width:a.width(),height:a.height()},this.sizeDiff={width:a.outerWidth()-a.width(),height:a.outerHeight()-a.height()},this.originalPosition={left:i,top:s},this.originalMousePosition={left:e.pageX,top:e.pageY},this.aspectRatio="number"==typeof o.aspectRatio?o.aspectRatio:this.originalSize.width/this.originalSize.height||1,n=t(".ui-resizable-"+this.axis).css("cursor"),t("body").css("cursor","auto"===n?this.axis+"-resize":n),this._addClass("ui-resizable-resizing"),this._propagate("start",e),!0},_mouseDrag:function(e){var i,s,n=this.originalMousePosition,o=this.axis,a=e.pageX-n.left||0,r=e.pageY-n.top||0,h=this._change[o];return this._updatePrevProperties(),h?(i=h.apply(this,[e,a,r]),this._updateVirtualBoundaries(e.shiftKey),(this._aspectRatio||e.shiftKey)&&(i=this._updateRatio(i,e)),i=this._respectSize(i,e),this._updateCache(i),this._propagate("resize",e),s=this._applyChanges(),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),t.isEmptyObject(s)||(this._updatePrevProperties(),this._trigger("resize",e,this.ui()),this._applyChanges()),!1):!1},_mouseStop:function(e){this.resizing=!1;var i,s,n,o,a,r,h,l=this.options,c=this;return this._helper&&(i=this._proportionallyResizeElements,s=i.length&&/textarea/i.test(i[0].nodeName),n=s&&this._hasScroll(i[0],"left")?0:c.sizeDiff.height,o=s?0:c.sizeDiff.width,a={width:c.helper.width()-o,height:c.helper.height()-n},r=parseFloat(c.element.css("left"))+(c.position.left-c.originalPosition.left)||null,h=parseFloat(c.element.css("top"))+(c.position.top-c.originalPosition.top)||null,l.animate||this.element.css(t.extend(a,{top:h,left:r})),c.helper.height(c.size.height),c.helper.width(c.size.width),this._helper&&!l.animate&&this._proportionallyResize()),t("body").css("cursor","auto"),this._removeClass("ui-resizable-resizing"),this._propagate("stop",e),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,n,o,a=this.options;o={minWidth:this._isNumber(a.minWidth)?a.minWidth:0,maxWidth:this._isNumber(a.maxWidth)?a.maxWidth:1/0,minHeight:this._isNumber(a.minHeight)?a.minHeight:0,maxHeight:this._isNumber(a.maxHeight)?a.maxHeight:1/0},(this._aspectRatio||t)&&(e=o.minHeight*this.aspectRatio,s=o.minWidth/this.aspectRatio,i=o.maxHeight*this.aspectRatio,n=o.maxWidth/this.aspectRatio,e>o.minWidth&&(o.minWidth=e),s>o.minHeight&&(o.minHeight=s),o.maxWidth>i&&(o.maxWidth=i),o.maxHeight>n&&(o.maxHeight=n)),this._vBoundaries=o},_updateCache:function(t){this.offset=this.helper.offset(),this._isNumber(t.left)&&(this.position.left=t.left),this._isNumber(t.top)&&(this.position.top=t.top),this._isNumber(t.height)&&(this.size.height=t.height),this._isNumber(t.width)&&(this.size.width=t.width)},_updateRatio:function(t){var e=this.position,i=this.size,s=this.axis;return this._isNumber(t.height)?t.width=t.height*this.aspectRatio:this._isNumber(t.width)&&(t.height=t.width/this.aspectRatio),"sw"===s&&(t.left=e.left+(i.width-t.width),t.top=null),"nw"===s&&(t.top=e.top+(i.height-t.height),t.left=e.left+(i.width-t.width)),t},_respectSize:function(t){var e=this._vBoundaries,i=this.axis,s=this._isNumber(t.width)&&e.maxWidth&&e.maxWidtht.width,a=this._isNumber(t.height)&&e.minHeight&&e.minHeight>t.height,r=this.originalPosition.left+this.originalSize.width,h=this.originalPosition.top+this.originalSize.height,l=/sw|nw|w/.test(i),c=/nw|ne|n/.test(i);return o&&(t.width=e.minWidth),a&&(t.height=e.minHeight),s&&(t.width=e.maxWidth),n&&(t.height=e.maxHeight),o&&l&&(t.left=r-e.minWidth),s&&l&&(t.left=r-e.maxWidth),a&&c&&(t.top=h-e.minHeight),n&&c&&(t.top=h-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")];4>e;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;this._proportionallyResizeElements.length>e;e++)t=this._proportionallyResizeElements[e],this.outerDimensions||(this.outerDimensions=this._getPaddingPlusBorderDimensions(t)),t.css({height:i.height()-this.outerDimensions.height||0,width:i.width()-this.outerDimensions.width||0})},_renderProxy:function(){var e=this.element,i=this.options;this.elementOffset=e.offset(),this._helper?(this.helper=this.helper||t("
            "),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:++i.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,s=this.originalPosition;return{left:s.left+e,width:i.width-e}},n:function(t,e,i){var s=this.originalSize,n=this.originalPosition;return{top:n.top+i,height:s.height-i}},s:function(t,e,i){return{height:this.originalSize.height+i}},se:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},sw:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[e,i,s]))},ne:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},nw:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[e,i,s]))}},_propagate:function(e,i){t.ui.plugin.call(this,e,[i,this.ui()]),"resize"!==e&&this._trigger(e,i,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}}}),t.ui.plugin.add("resizable","animate",{stop:function(e){var i=t(this).resizable("instance"),s=i.options,n=i._proportionallyResizeElements,o=n.length&&/textarea/i.test(n[0].nodeName),a=o&&i._hasScroll(n[0],"left")?0:i.sizeDiff.height,r=o?0:i.sizeDiff.width,h={width:i.size.width-r,height:i.size.height-a},l=parseFloat(i.element.css("left"))+(i.position.left-i.originalPosition.left)||null,c=parseFloat(i.element.css("top"))+(i.position.top-i.originalPosition.top)||null;i.element.animate(t.extend(h,c&&l?{top:c,left:l}:{}),{duration:s.animateDuration,easing:s.animateEasing,step:function(){var s={width:parseFloat(i.element.css("width")),height:parseFloat(i.element.css("height")),top:parseFloat(i.element.css("top")),left:parseFloat(i.element.css("left"))};n&&n.length&&t(n[0]).css({width:s.width,height:s.height}),i._updateCache(s),i._propagate("resize",e)}})}}),t.ui.plugin.add("resizable","containment",{start:function(){var e,i,s,n,o,a,r,h=t(this).resizable("instance"),l=h.options,c=h.element,u=l.containment,d=u instanceof t?u.get(0):/parent/.test(u)?c.parent().get(0):u;d&&(h.containerElement=t(d),/document/.test(u)||u===document?(h.containerOffset={left:0,top:0},h.containerPosition={left:0,top:0},h.parentData={element:t(document),left:0,top:0,width:t(document).width(),height:t(document).height()||document.body.parentNode.scrollHeight}):(e=t(d),i=[],t(["Top","Right","Left","Bottom"]).each(function(t,s){i[t]=h._num(e.css("padding"+s))}),h.containerOffset=e.offset(),h.containerPosition=e.position(),h.containerSize={height:e.innerHeight()-i[3],width:e.innerWidth()-i[1]},s=h.containerOffset,n=h.containerSize.height,o=h.containerSize.width,a=h._hasScroll(d,"left")?d.scrollWidth:o,r=h._hasScroll(d)?d.scrollHeight:n,h.parentData={element:d,left:s.left,top:s.top,width:a,height:r}))},resize:function(e){var i,s,n,o,a=t(this).resizable("instance"),r=a.options,h=a.containerOffset,l=a.position,c=a._aspectRatio||e.shiftKey,u={top:0,left:0},d=a.containerElement,p=!0;d[0]!==document&&/static/.test(d.css("position"))&&(u=h),l.left<(a._helper?h.left:0)&&(a.size.width=a.size.width+(a._helper?a.position.left-h.left:a.position.left-u.left),c&&(a.size.height=a.size.width/a.aspectRatio,p=!1),a.position.left=r.helper?h.left:0),l.top<(a._helper?h.top:0)&&(a.size.height=a.size.height+(a._helper?a.position.top-h.top:a.position.top),c&&(a.size.width=a.size.height*a.aspectRatio,p=!1),a.position.top=a._helper?h.top:0),n=a.containerElement.get(0)===a.element.parent().get(0),o=/relative|absolute/.test(a.containerElement.css("position")),n&&o?(a.offset.left=a.parentData.left+a.position.left,a.offset.top=a.parentData.top+a.position.top):(a.offset.left=a.element.offset().left,a.offset.top=a.element.offset().top),i=Math.abs(a.sizeDiff.width+(a._helper?a.offset.left-u.left:a.offset.left-h.left)),s=Math.abs(a.sizeDiff.height+(a._helper?a.offset.top-u.top:a.offset.top-h.top)),i+a.size.width>=a.parentData.width&&(a.size.width=a.parentData.width-i,c&&(a.size.height=a.size.width/a.aspectRatio,p=!1)),s+a.size.height>=a.parentData.height&&(a.size.height=a.parentData.height-s,c&&(a.size.width=a.size.height*a.aspectRatio,p=!1)),p||(a.position.left=a.prevPosition.left,a.position.top=a.prevPosition.top,a.size.width=a.prevSize.width,a.size.height=a.prevSize.height)},stop:function(){var e=t(this).resizable("instance"),i=e.options,s=e.containerOffset,n=e.containerPosition,o=e.containerElement,a=t(e.helper),r=a.offset(),h=a.outerWidth()-e.sizeDiff.width,l=a.outerHeight()-e.sizeDiff.height;e._helper&&!i.animate&&/relative/.test(o.css("position"))&&t(this).css({left:r.left-n.left-s.left,width:h,height:l}),e._helper&&!i.animate&&/static/.test(o.css("position"))&&t(this).css({left:r.left-n.left-s.left,width:h,height:l})}}),t.ui.plugin.add("resizable","alsoResize",{start:function(){var e=t(this).resizable("instance"),i=e.options;t(i.alsoResize).each(function(){var e=t(this);e.data("ui-resizable-alsoresize",{width:parseFloat(e.width()),height:parseFloat(e.height()),left:parseFloat(e.css("left")),top:parseFloat(e.css("top"))})})},resize:function(e,i){var s=t(this).resizable("instance"),n=s.options,o=s.originalSize,a=s.originalPosition,r={height:s.size.height-o.height||0,width:s.size.width-o.width||0,top:s.position.top-a.top||0,left:s.position.left-a.left||0};t(n.alsoResize).each(function(){var e=t(this),s=t(this).data("ui-resizable-alsoresize"),n={},o=e.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];t.each(o,function(t,e){var i=(s[e]||0)+(r[e]||0);i&&i>=0&&(n[e]=i||null)}),e.css(n)})},stop:function(){t(this).removeData("ui-resizable-alsoresize")}}),t.ui.plugin.add("resizable","ghost",{start:function(){var e=t(this).resizable("instance"),i=e.size;e.ghost=e.originalElement.clone(),e.ghost.css({opacity:.25,display:"block",position:"relative",height:i.height,width:i.width,margin:0,left:0,top:0}),e._addClass(e.ghost,"ui-resizable-ghost"),t.uiBackCompat!==!1&&"string"==typeof e.options.ghost&&e.ghost.addClass(this.options.ghost),e.ghost.appendTo(e.helper)},resize:function(){var e=t(this).resizable("instance");e.ghost&&e.ghost.css({position:"relative",height:e.size.height,width:e.size.width})},stop:function(){var e=t(this).resizable("instance");e.ghost&&e.helper&&e.helper.get(0).removeChild(e.ghost.get(0))}}),t.ui.plugin.add("resizable","grid",{resize:function(){var e,i=t(this).resizable("instance"),s=i.options,n=i.size,o=i.originalSize,a=i.originalPosition,r=i.axis,h="number"==typeof s.grid?[s.grid,s.grid]:s.grid,l=h[0]||1,c=h[1]||1,u=Math.round((n.width-o.width)/l)*l,d=Math.round((n.height-o.height)/c)*c,p=o.width+u,f=o.height+d,m=s.maxWidth&&p>s.maxWidth,g=s.maxHeight&&f>s.maxHeight,_=s.minWidth&&s.minWidth>p,v=s.minHeight&&s.minHeight>f;s.grid=h,_&&(p+=l),v&&(f+=c),m&&(p-=l),g&&(f-=c),/^(se|s|e)$/.test(r)?(i.size.width=p,i.size.height=f):/^(ne)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.top=a.top-d):/^(sw)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.left=a.left-u):((0>=f-c||0>=p-l)&&(e=i._getPaddingPlusBorderDimensions(this)),f-c>0?(i.size.height=f,i.position.top=a.top-d):(f=c-e.height,i.size.height=f,i.position.top=a.top+o.height-f),p-l>0?(i.size.width=p,i.position.left=a.left-u):(p=l-e.width,i.size.width=p,i.position.left=a.left+o.width-p))}}),t.ui.resizable});/** + * Copyright (c) 2007 Ariel Flesler - aflesler ○ gmail • com | https://github.com/flesler + * Licensed under MIT + * @author Ariel Flesler + * @version 2.1.2 + */ +;(function(f){"use strict";"function"===typeof define&&define.amd?define(["jquery"],f):"undefined"!==typeof module&&module.exports?module.exports=f(require("jquery")):f(jQuery)})(function($){"use strict";function n(a){return!a.nodeName||-1!==$.inArray(a.nodeName.toLowerCase(),["iframe","#document","html","body"])}function h(a){return $.isFunction(a)||$.isPlainObject(a)?a:{top:a,left:a}}var p=$.scrollTo=function(a,d,b){return $(window).scrollTo(a,d,b)};p.defaults={axis:"xy",duration:0,limit:!0};$.fn.scrollTo=function(a,d,b){"object"=== typeof d&&(b=d,d=0);"function"===typeof b&&(b={onAfter:b});"max"===a&&(a=9E9);b=$.extend({},p.defaults,b);d=d||b.duration;var u=b.queue&&1=f[g]?0:Math.min(f[g],n));!a&&1)[^>]*$|#([\w\-]*)$)/,bM=/\S/,bI=/^\s+/,bE=/\s+$/,bA=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,bN=/^[\],:{}\s]*$/,bW=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,bP=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,bJ=/(?:^|:|,)(?:\s*\[)+/g,by=/(webkit)[ \/]([\w.]+)/,bR=/(opera)(?:.*version)?[ \/]([\w.]+)/,bQ=/(msie) ([\w.]+)/,bS=/(mozilla)(?:.*? rv:([\w.]+))?/,bB=/-([a-z]|[0-9])/ig,bZ=/^-ms-/,bT=function(b0,b1){return(b1+"").toUpperCase()},bX=bu.userAgent,bV,bC,e,bL=Object.prototype.toString,bG=Object.prototype.hasOwnProperty,bz=Array.prototype.push,bK=Array.prototype.slice,bO=String.prototype.trim,bv=Array.prototype.indexOf,bx={};bF.fn=bF.prototype={constructor:bF,init:function(b0,b4,b3){var b2,b5,b1,b6;if(!b0){return this}if(b0.nodeType){this.context=this[0]=b0;this.length=1;return this}if(b0==="body"&&!b4&&av.body){this.context=av;this[0]=av.body;this.selector=b0;this.length=1;return this}if(typeof b0==="string"){if(b0.charAt(0)==="<"&&b0.charAt(b0.length-1)===">"&&b0.length>=3){b2=[null,b0,null]}else{b2=bY.exec(b0)}if(b2&&(b2[1]||!b4)){if(b2[1]){b4=b4 instanceof bF?b4[0]:b4;b6=(b4?b4.ownerDocument||b4:av);b1=bA.exec(b0);if(b1){if(bF.isPlainObject(b4)){b0=[av.createElement(b1[1])];bF.fn.attr.call(b0,b4,true)}else{b0=[b6.createElement(b1[1])]}}else{b1=bF.buildFragment([b2[1]],[b6]);b0=(b1.cacheable?bF.clone(b1.fragment):b1.fragment).childNodes}return bF.merge(this,b0)}else{b5=av.getElementById(b2[2]);if(b5&&b5.parentNode){if(b5.id!==b2[2]){return b3.find(b0)}this.length=1;this[0]=b5}this.context=av;this.selector=b0;return this}}else{if(!b4||b4.jquery){return(b4||b3).find(b0)}else{return this.constructor(b4).find(b0)}}}else{if(bF.isFunction(b0)){return b3.ready(b0)}}if(b0.selector!==L){this.selector=b0.selector;this.context=b0.context}return bF.makeArray(b0,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return bK.call(this,0)},get:function(b0){return b0==null?this.toArray():(b0<0?this[this.length+b0]:this[b0])},pushStack:function(b1,b3,b0){var b2=this.constructor();if(bF.isArray(b1)){bz.apply(b2,b1)}else{bF.merge(b2,b1)}b2.prevObject=this;b2.context=this.context;if(b3==="find"){b2.selector=this.selector+(this.selector?" ":"")+b0}else{if(b3){b2.selector=this.selector+"."+b3+"("+b0+")"}}return b2},each:function(b1,b0){return bF.each(this,b1,b0)},ready:function(b0){bF.bindReady();bC.add(b0);return this},eq:function(b0){b0=+b0;return b0===-1?this.slice(b0):this.slice(b0,b0+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(bK.apply(this,arguments),"slice",bK.call(arguments).join(","))},map:function(b0){return this.pushStack(bF.map(this,function(b2,b1){return b0.call(b2,b1,b2)}))},end:function(){return this.prevObject||this.constructor(null)},push:bz,sort:[].sort,splice:[].splice};bF.fn.init.prototype=bF.fn;bF.extend=bF.fn.extend=function(){var b9,b2,b0,b1,b6,b7,b5=arguments[0]||{},b4=1,b3=arguments.length,b8=false;if(typeof b5==="boolean"){b8=b5;b5=arguments[1]||{};b4=2}if(typeof b5!=="object"&&!bF.isFunction(b5)){b5={}}if(b3===b4){b5=this;--b4}for(;b40){return}bC.fireWith(av,[bF]);if(bF.fn.trigger){bF(av).trigger("ready").off("ready")}}},bindReady:function(){if(bC){return}bC=bF.Callbacks("once memory");if(av.readyState==="complete"){return setTimeout(bF.ready,1)}if(av.addEventListener){av.addEventListener("DOMContentLoaded",e,false);bb.addEventListener("load",bF.ready,false)}else{if(av.attachEvent){av.attachEvent("onreadystatechange",e);bb.attachEvent("onload",bF.ready);var b0=false;try{b0=bb.frameElement==null}catch(b1){}if(av.documentElement.doScroll&&b0){bw()}}}},isFunction:function(b0){return bF.type(b0)==="function"},isArray:Array.isArray||function(b0){return bF.type(b0)==="array"},isWindow:function(b0){return b0&&typeof b0==="object"&&"setInterval" in b0},isNumeric:function(b0){return !isNaN(parseFloat(b0))&&isFinite(b0)},type:function(b0){return b0==null?String(b0):bx[bL.call(b0)]||"object"},isPlainObject:function(b2){if(!b2||bF.type(b2)!=="object"||b2.nodeType||bF.isWindow(b2)){return false}try{if(b2.constructor&&!bG.call(b2,"constructor")&&!bG.call(b2.constructor.prototype,"isPrototypeOf")){return false}}catch(b1){return false}var b0;for(b0 in b2){}return b0===L||bG.call(b2,b0)},isEmptyObject:function(b1){for(var b0 in b1){return false}return true},error:function(b0){throw new Error(b0)},parseJSON:function(b0){if(typeof b0!=="string"||!b0){return null}b0=bF.trim(b0);if(bb.JSON&&bb.JSON.parse){return bb.JSON.parse(b0)}if(bN.test(b0.replace(bW,"@").replace(bP,"]").replace(bJ,""))){return(new Function("return "+b0))()}bF.error("Invalid JSON: "+b0)},parseXML:function(b2){var b0,b1;try{if(bb.DOMParser){b1=new DOMParser();b0=b1.parseFromString(b2,"text/xml")}else{b0=new ActiveXObject("Microsoft.XMLDOM");b0.async="false";b0.loadXML(b2)}}catch(b3){b0=L}if(!b0||!b0.documentElement||b0.getElementsByTagName("parsererror").length){bF.error("Invalid XML: "+b2)}return b0},noop:function(){},globalEval:function(b0){if(b0&&bM.test(b0)){(bb.execScript||function(b1){bb["eval"].call(bb,b1)})(b0)}},camelCase:function(b0){return b0.replace(bZ,"ms-").replace(bB,bT)},nodeName:function(b1,b0){return b1.nodeName&&b1.nodeName.toUpperCase()===b0.toUpperCase()},each:function(b3,b6,b2){var b1,b4=0,b5=b3.length,b0=b5===L||bF.isFunction(b3);if(b2){if(b0){for(b1 in b3){if(b6.apply(b3[b1],b2)===false){break}}}else{for(;b40&&b0[0]&&b0[b1-1])||b1===0||bF.isArray(b0));if(b3){for(;b21?aJ.call(arguments,0):bG;if(!(--bw)){bC.resolveWith(bC,bx)}}}function bz(bF){return function(bG){bB[bF]=arguments.length>1?aJ.call(arguments,0):bG;bC.notifyWith(bE,bB)}}if(e>1){for(;bv
            a";bI=bv.getElementsByTagName("*");bF=bv.getElementsByTagName("a")[0];if(!bI||!bI.length||!bF){return{}}bG=av.createElement("select");bx=bG.appendChild(av.createElement("option"));bE=bv.getElementsByTagName("input")[0];bJ={leadingWhitespace:(bv.firstChild.nodeType===3),tbody:!bv.getElementsByTagName("tbody").length,htmlSerialize:!!bv.getElementsByTagName("link").length,style:/top/.test(bF.getAttribute("style")),hrefNormalized:(bF.getAttribute("href")==="/a"),opacity:/^0.55/.test(bF.style.opacity),cssFloat:!!bF.style.cssFloat,checkOn:(bE.value==="on"),optSelected:bx.selected,getSetAttribute:bv.className!=="t",enctype:!!av.createElement("form").enctype,html5Clone:av.createElement("nav").cloneNode(true).outerHTML!=="<:nav>",submitBubbles:true,changeBubbles:true,focusinBubbles:false,deleteExpando:true,noCloneEvent:true,inlineBlockNeedsLayout:false,shrinkWrapBlocks:false,reliableMarginRight:true};bE.checked=true;bJ.noCloneChecked=bE.cloneNode(true).checked;bG.disabled=true;bJ.optDisabled=!bx.disabled;try{delete bv.test}catch(bC){bJ.deleteExpando=false}if(!bv.addEventListener&&bv.attachEvent&&bv.fireEvent){bv.attachEvent("onclick",function(){bJ.noCloneEvent=false});bv.cloneNode(true).fireEvent("onclick")}bE=av.createElement("input");bE.value="t";bE.setAttribute("type","radio");bJ.radioValue=bE.value==="t";bE.setAttribute("checked","checked");bv.appendChild(bE);bD=av.createDocumentFragment();bD.appendChild(bv.lastChild);bJ.checkClone=bD.cloneNode(true).cloneNode(true).lastChild.checked;bJ.appendChecked=bE.checked;bD.removeChild(bE);bD.appendChild(bv);bv.innerHTML="";if(bb.getComputedStyle){bA=av.createElement("div");bA.style.width="0";bA.style.marginRight="0";bv.style.width="2px";bv.appendChild(bA);bJ.reliableMarginRight=(parseInt((bb.getComputedStyle(bA,null)||{marginRight:0}).marginRight,10)||0)===0}if(bv.attachEvent){for(by in {submit:1,change:1,focusin:1}){bB="on"+by;bw=(bB in bv);if(!bw){bv.setAttribute(bB,"return;");bw=(typeof bv[bB]==="function")}bJ[by+"Bubbles"]=bw}}bD.removeChild(bv);bD=bG=bx=bA=bv=bE=null;b(function(){var bM,bU,bV,bT,bN,bO,bL,bS,bR,e,bP,bQ=av.getElementsByTagName("body")[0];if(!bQ){return}bL=1;bS="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;";bR="visibility:hidden;border:0;";e="style='"+bS+"border:5px solid #000;padding:0;'";bP="
            ";bM=av.createElement("div");bM.style.cssText=bR+"width:0;height:0;position:static;top:0;margin-top:"+bL+"px";bQ.insertBefore(bM,bQ.firstChild);bv=av.createElement("div");bM.appendChild(bv);bv.innerHTML="
            t
            ";bz=bv.getElementsByTagName("td");bw=(bz[0].offsetHeight===0);bz[0].style.display="";bz[1].style.display="none";bJ.reliableHiddenOffsets=bw&&(bz[0].offsetHeight===0);bv.innerHTML="";bv.style.width=bv.style.paddingLeft="1px";b.boxModel=bJ.boxModel=bv.offsetWidth===2;if(typeof bv.style.zoom!=="undefined"){bv.style.display="inline";bv.style.zoom=1;bJ.inlineBlockNeedsLayout=(bv.offsetWidth===2);bv.style.display="";bv.innerHTML="
            ";bJ.shrinkWrapBlocks=(bv.offsetWidth!==2)}bv.style.cssText=bS+bR;bv.innerHTML=bP;bU=bv.firstChild;bV=bU.firstChild;bN=bU.nextSibling.firstChild.firstChild;bO={doesNotAddBorder:(bV.offsetTop!==5),doesAddBorderForTableAndCells:(bN.offsetTop===5)};bV.style.position="fixed";bV.style.top="20px";bO.fixedPosition=(bV.offsetTop===20||bV.offsetTop===15);bV.style.position=bV.style.top="";bU.style.overflow="hidden";bU.style.position="relative";bO.subtractsBorderForOverflowNotVisible=(bV.offsetTop===-5);bO.doesNotIncludeMarginInBodyOffset=(bQ.offsetTop!==bL);bQ.removeChild(bM);bv=bM=null;b.extend(bJ,bO)});return bJ})();var aS=/^(?:\{.*\}|\[.*\])$/,aA=/([A-Z])/g;b.extend({cache:{},uuid:0,expando:"jQuery"+(b.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:true,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:true},hasData:function(e){e=e.nodeType?b.cache[e[b.expando]]:e[b.expando];return !!e&&!S(e)},data:function(bx,bv,bz,by){if(!b.acceptData(bx)){return}var bG,bA,bD,bE=b.expando,bC=typeof bv==="string",bF=bx.nodeType,e=bF?b.cache:bx,bw=bF?bx[bE]:bx[bE]&&bE,bB=bv==="events";if((!bw||!e[bw]||(!bB&&!by&&!e[bw].data))&&bC&&bz===L){return}if(!bw){if(bF){bx[bE]=bw=++b.uuid}else{bw=bE}}if(!e[bw]){e[bw]={};if(!bF){e[bw].toJSON=b.noop}}if(typeof bv==="object"||typeof bv==="function"){if(by){e[bw]=b.extend(e[bw],bv)}else{e[bw].data=b.extend(e[bw].data,bv)}}bG=bA=e[bw];if(!by){if(!bA.data){bA.data={}}bA=bA.data}if(bz!==L){bA[b.camelCase(bv)]=bz}if(bB&&!bA[bv]){return bG.events}if(bC){bD=bA[bv];if(bD==null){bD=bA[b.camelCase(bv)]}}else{bD=bA}return bD},removeData:function(bx,bv,by){if(!b.acceptData(bx)){return}var bB,bA,bz,bC=b.expando,bD=bx.nodeType,e=bD?b.cache:bx,bw=bD?bx[bC]:bC;if(!e[bw]){return}if(bv){bB=by?e[bw]:e[bw].data;if(bB){if(!b.isArray(bv)){if(bv in bB){bv=[bv]}else{bv=b.camelCase(bv);if(bv in bB){bv=[bv]}else{bv=bv.split(" ")}}}for(bA=0,bz=bv.length;bA-1){return true}}return false},val:function(bx){var e,bv,by,bw=this[0];if(!arguments.length){if(bw){e=b.valHooks[bw.nodeName.toLowerCase()]||b.valHooks[bw.type];if(e&&"get" in e&&(bv=e.get(bw,"value"))!==L){return bv}bv=bw.value;return typeof bv==="string"?bv.replace(aU,""):bv==null?"":bv}return}by=b.isFunction(bx);return this.each(function(bA){var bz=b(this),bB;if(this.nodeType!==1){return}if(by){bB=bx.call(this,bA,bz.val())}else{bB=bx}if(bB==null){bB=""}else{if(typeof bB==="number"){bB+=""}else{if(b.isArray(bB)){bB=b.map(bB,function(bC){return bC==null?"":bC+""})}}}e=b.valHooks[this.nodeName.toLowerCase()]||b.valHooks[this.type];if(!e||!("set" in e)||e.set(this,bB,"value")===L){this.value=bB}})}});b.extend({valHooks:{option:{get:function(e){var bv=e.attributes.value;return !bv||bv.specified?e.value:e.text}},select:{get:function(e){var bA,bv,bz,bx,by=e.selectedIndex,bB=[],bC=e.options,bw=e.type==="select-one";if(by<0){return null}bv=bw?by:0;bz=bw?by+1:bC.length;for(;bv=0});if(!e.length){bv.selectedIndex=-1}return e}}},attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(bA,bx,bB,bz){var bw,e,by,bv=bA.nodeType;if(!bA||bv===3||bv===8||bv===2){return}if(bz&&bx in b.attrFn){return b(bA)[bx](bB)}if(typeof bA.getAttribute==="undefined"){return b.prop(bA,bx,bB)}by=bv!==1||!b.isXMLDoc(bA);if(by){bx=bx.toLowerCase();e=b.attrHooks[bx]||(ao.test(bx)?aY:be)}if(bB!==L){if(bB===null){b.removeAttr(bA,bx);return}else{if(e&&"set" in e&&by&&(bw=e.set(bA,bB,bx))!==L){return bw}else{bA.setAttribute(bx,""+bB);return bB}}}else{if(e&&"get" in e&&by&&(bw=e.get(bA,bx))!==null){return bw}else{bw=bA.getAttribute(bx);return bw===null?L:bw}}},removeAttr:function(bx,bz){var by,bA,bv,e,bw=0;if(bz&&bx.nodeType===1){bA=bz.toLowerCase().split(af);e=bA.length;for(;bw=0)}}})});var bd=/^(?:textarea|input|select)$/i,n=/^([^\.]*)?(?:\.(.+))?$/,J=/\bhover(\.\S+)?\b/,aO=/^key/,bf=/^(?:mouse|contextmenu)|click/,T=/^(?:focusinfocus|focusoutblur)$/,U=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,Y=function(e){var bv=U.exec(e);if(bv){bv[1]=(bv[1]||"").toLowerCase();bv[3]=bv[3]&&new RegExp("(?:^|\\s)"+bv[3]+"(?:\\s|$)")}return bv},j=function(bw,e){var bv=bw.attributes||{};return((!e[1]||bw.nodeName.toLowerCase()===e[1])&&(!e[2]||(bv.id||{}).value===e[2])&&(!e[3]||e[3].test((bv["class"]||{}).value)))},bt=function(e){return b.event.special.hover?e:e.replace(J,"mouseenter$1 mouseleave$1")};b.event={add:function(bx,bC,bJ,bA,by){var bD,bB,bK,bI,bH,bF,e,bG,bv,bz,bw,bE;if(bx.nodeType===3||bx.nodeType===8||!bC||!bJ||!(bD=b._data(bx))){return}if(bJ.handler){bv=bJ;bJ=bv.handler}if(!bJ.guid){bJ.guid=b.guid++}bK=bD.events;if(!bK){bD.events=bK={}}bB=bD.handle;if(!bB){bD.handle=bB=function(bL){return typeof b!=="undefined"&&(!bL||b.event.triggered!==bL.type)?b.event.dispatch.apply(bB.elem,arguments):L};bB.elem=bx}bC=b.trim(bt(bC)).split(" ");for(bI=0;bI=0){bG=bG.slice(0,-1);bw=true}if(bG.indexOf(".")>=0){bx=bG.split(".");bG=bx.shift();bx.sort()}if((!bA||b.event.customEvent[bG])&&!b.event.global[bG]){return}bv=typeof bv==="object"?bv[b.expando]?bv:new b.Event(bG,bv):new b.Event(bG);bv.type=bG;bv.isTrigger=true;bv.exclusive=bw;bv.namespace=bx.join(".");bv.namespace_re=bv.namespace?new RegExp("(^|\\.)"+bx.join("\\.(?:.*\\.)?")+"(\\.|$)"):null;by=bG.indexOf(":")<0?"on"+bG:"";if(!bA){e=b.cache;for(bC in e){if(e[bC].events&&e[bC].events[bG]){b.event.trigger(bv,bD,e[bC].handle.elem,true)}}return}bv.result=L;if(!bv.target){bv.target=bA}bD=bD!=null?b.makeArray(bD):[];bD.unshift(bv);bF=b.event.special[bG]||{};if(bF.trigger&&bF.trigger.apply(bA,bD)===false){return}bB=[[bA,bF.bindType||bG]];if(!bJ&&!bF.noBubble&&!b.isWindow(bA)){bI=bF.delegateType||bG;bH=T.test(bI+bG)?bA:bA.parentNode;bz=null;for(;bH;bH=bH.parentNode){bB.push([bH,bI]);bz=bH}if(bz&&bz===bA.ownerDocument){bB.push([bz.defaultView||bz.parentWindow||bb,bI])}}for(bC=0;bCbA){bH.push({elem:this,matches:bz.slice(bA)})}for(bC=0;bC0?this.on(e,null,bx,bw):this.trigger(e)};if(b.attrFn){b.attrFn[e]=true}if(aO.test(e)){b.event.fixHooks[e]=b.event.keyHooks}if(bf.test(e)){b.event.fixHooks[e]=b.event.mouseHooks}}); -/*! - * Sizzle CSS Selector Engine - * Copyright 2011, The Dojo Foundation - * Released under the MIT, BSD, and GPL Licenses. - * More information: http://sizzlejs.com/ - */ -(function(){var bH=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,bC="sizcache"+(Math.random()+"").replace(".",""),bI=0,bL=Object.prototype.toString,bB=false,bA=true,bK=/\\/g,bO=/\r\n/g,bQ=/\W/;[0,0].sort(function(){bA=false;return 0});var by=function(bV,e,bY,bZ){bY=bY||[];e=e||av;var b1=e;if(e.nodeType!==1&&e.nodeType!==9){return[]}if(!bV||typeof bV!=="string"){return bY}var bS,b3,b6,bR,b2,b5,b4,bX,bU=true,bT=by.isXML(e),bW=[],b0=bV;do{bH.exec("");bS=bH.exec(b0);if(bS){b0=bS[3];bW.push(bS[1]);if(bS[2]){bR=bS[3];break}}}while(bS);if(bW.length>1&&bD.exec(bV)){if(bW.length===2&&bE.relative[bW[0]]){b3=bM(bW[0]+bW[1],e,bZ)}else{b3=bE.relative[bW[0]]?[e]:by(bW.shift(),e);while(bW.length){bV=bW.shift();if(bE.relative[bV]){bV+=bW.shift()}b3=bM(bV,b3,bZ)}}}else{if(!bZ&&bW.length>1&&e.nodeType===9&&!bT&&bE.match.ID.test(bW[0])&&!bE.match.ID.test(bW[bW.length-1])){b2=by.find(bW.shift(),e,bT);e=b2.expr?by.filter(b2.expr,b2.set)[0]:b2.set[0]}if(e){b2=bZ?{expr:bW.pop(),set:bF(bZ)}:by.find(bW.pop(),bW.length===1&&(bW[0]==="~"||bW[0]==="+")&&e.parentNode?e.parentNode:e,bT);b3=b2.expr?by.filter(b2.expr,b2.set):b2.set;if(bW.length>0){b6=bF(b3)}else{bU=false}while(bW.length){b5=bW.pop();b4=b5;if(!bE.relative[b5]){b5=""}else{b4=bW.pop()}if(b4==null){b4=e}bE.relative[b5](b6,b4,bT)}}else{b6=bW=[]}}if(!b6){b6=b3}if(!b6){by.error(b5||bV)}if(bL.call(b6)==="[object Array]"){if(!bU){bY.push.apply(bY,b6)}else{if(e&&e.nodeType===1){for(bX=0;b6[bX]!=null;bX++){if(b6[bX]&&(b6[bX]===true||b6[bX].nodeType===1&&by.contains(e,b6[bX]))){bY.push(b3[bX])}}}else{for(bX=0;b6[bX]!=null;bX++){if(b6[bX]&&b6[bX].nodeType===1){bY.push(b3[bX])}}}}}else{bF(b6,bY)}if(bR){by(bR,b1,bY,bZ);by.uniqueSort(bY)}return bY};by.uniqueSort=function(bR){if(bJ){bB=bA;bR.sort(bJ);if(bB){for(var e=1;e0};by.find=function(bX,e,bY){var bW,bS,bU,bT,bV,bR;if(!bX){return[]}for(bS=0,bU=bE.order.length;bS":function(bW,bR){var bV,bU=typeof bR==="string",bS=0,e=bW.length;if(bU&&!bQ.test(bR)){bR=bR.toLowerCase();for(;bS=0)){if(!bS){e.push(bV)}}else{if(bS){bR[bU]=false}}}}return false},ID:function(e){return e[1].replace(bK,"")},TAG:function(bR,e){return bR[1].replace(bK,"").toLowerCase()},CHILD:function(e){if(e[1]==="nth"){if(!e[2]){by.error(e[0])}e[2]=e[2].replace(/^\+|\s*/g,"");var bR=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(e[2]==="even"&&"2n"||e[2]==="odd"&&"2n+1"||!/\D/.test(e[2])&&"0n+"+e[2]||e[2]);e[2]=(bR[1]+(bR[2]||1))-0;e[3]=bR[3]-0}else{if(e[2]){by.error(e[0])}}e[0]=bI++;return e},ATTR:function(bU,bR,bS,e,bV,bW){var bT=bU[1]=bU[1].replace(bK,"");if(!bW&&bE.attrMap[bT]){bU[1]=bE.attrMap[bT]}bU[4]=(bU[4]||bU[5]||"").replace(bK,"");if(bU[2]==="~="){bU[4]=" "+bU[4]+" "}return bU},PSEUDO:function(bU,bR,bS,e,bV){if(bU[1]==="not"){if((bH.exec(bU[3])||"").length>1||/^\w/.test(bU[3])){bU[3]=by(bU[3],null,null,bR)}else{var bT=by.filter(bU[3],bR,bS,true^bV);if(!bS){e.push.apply(e,bT)}return false}}else{if(bE.match.POS.test(bU[0])||bE.match.CHILD.test(bU[0])){return true}}return bU},POS:function(e){e.unshift(true);return e}},filters:{enabled:function(e){return e.disabled===false&&e.type!=="hidden"},disabled:function(e){return e.disabled===true},checked:function(e){return e.checked===true},selected:function(e){if(e.parentNode){e.parentNode.selectedIndex}return e.selected===true},parent:function(e){return !!e.firstChild},empty:function(e){return !e.firstChild},has:function(bS,bR,e){return !!by(e[3],bS).length},header:function(e){return(/h\d/i).test(e.nodeName)},text:function(bS){var e=bS.getAttribute("type"),bR=bS.type;return bS.nodeName.toLowerCase()==="input"&&"text"===bR&&(e===bR||e===null)},radio:function(e){return e.nodeName.toLowerCase()==="input"&&"radio"===e.type},checkbox:function(e){return e.nodeName.toLowerCase()==="input"&&"checkbox"===e.type},file:function(e){return e.nodeName.toLowerCase()==="input"&&"file"===e.type},password:function(e){return e.nodeName.toLowerCase()==="input"&&"password"===e.type},submit:function(bR){var e=bR.nodeName.toLowerCase();return(e==="input"||e==="button")&&"submit"===bR.type},image:function(e){return e.nodeName.toLowerCase()==="input"&&"image"===e.type},reset:function(bR){var e=bR.nodeName.toLowerCase();return(e==="input"||e==="button")&&"reset"===bR.type},button:function(bR){var e=bR.nodeName.toLowerCase();return e==="input"&&"button"===bR.type||e==="button"},input:function(e){return(/input|select|textarea|button/i).test(e.nodeName)},focus:function(e){return e===e.ownerDocument.activeElement}},setFilters:{first:function(bR,e){return e===0},last:function(bS,bR,e,bT){return bR===bT.length-1},even:function(bR,e){return e%2===0},odd:function(bR,e){return e%2===1},lt:function(bS,bR,e){return bRe[3]-0},nth:function(bS,bR,e){return e[3]-0===bR},eq:function(bS,bR,e){return e[3]-0===bR}},filter:{PSEUDO:function(bS,bX,bW,bY){var e=bX[1],bR=bE.filters[e];if(bR){return bR(bS,bW,bX,bY)}else{if(e==="contains"){return(bS.textContent||bS.innerText||bw([bS])||"").indexOf(bX[3])>=0}else{if(e==="not"){var bT=bX[3];for(var bV=0,bU=bT.length;bV=0)}}},ID:function(bR,e){return bR.nodeType===1&&bR.getAttribute("id")===e},TAG:function(bR,e){return(e==="*"&&bR.nodeType===1)||!!bR.nodeName&&bR.nodeName.toLowerCase()===e},CLASS:function(bR,e){return(" "+(bR.className||bR.getAttribute("class"))+" ").indexOf(e)>-1},ATTR:function(bV,bT){var bS=bT[1],e=by.attr?by.attr(bV,bS):bE.attrHandle[bS]?bE.attrHandle[bS](bV):bV[bS]!=null?bV[bS]:bV.getAttribute(bS),bW=e+"",bU=bT[2],bR=bT[4];return e==null?bU==="!=":!bU&&by.attr?e!=null:bU==="="?bW===bR:bU==="*="?bW.indexOf(bR)>=0:bU==="~="?(" "+bW+" ").indexOf(bR)>=0:!bR?bW&&e!==false:bU==="!="?bW!==bR:bU==="^="?bW.indexOf(bR)===0:bU==="$="?bW.substr(bW.length-bR.length)===bR:bU==="|="?bW===bR||bW.substr(0,bR.length+1)===bR+"-":false},POS:function(bU,bR,bS,bV){var e=bR[2],bT=bE.setFilters[e];if(bT){return bT(bU,bS,bR,bV)}}}};var bD=bE.match.POS,bx=function(bR,e){return"\\"+(e-0+1)};for(var bz in bE.match){bE.match[bz]=new RegExp(bE.match[bz].source+(/(?![^\[]*\])(?![^\(]*\))/.source));bE.leftMatch[bz]=new RegExp(/(^(?:.|\r|\n)*?)/.source+bE.match[bz].source.replace(/\\(\d+)/g,bx))}var bF=function(bR,e){bR=Array.prototype.slice.call(bR,0);if(e){e.push.apply(e,bR);return e}return bR};try{Array.prototype.slice.call(av.documentElement.childNodes,0)[0].nodeType}catch(bP){bF=function(bU,bT){var bS=0,bR=bT||[];if(bL.call(bU)==="[object Array]"){Array.prototype.push.apply(bR,bU)}else{if(typeof bU.length==="number"){for(var e=bU.length;bS";e.insertBefore(bR,e.firstChild);if(av.getElementById(bS)){bE.find.ID=function(bU,bV,bW){if(typeof bV.getElementById!=="undefined"&&!bW){var bT=bV.getElementById(bU[1]);return bT?bT.id===bU[1]||typeof bT.getAttributeNode!=="undefined"&&bT.getAttributeNode("id").nodeValue===bU[1]?[bT]:L:[]}};bE.filter.ID=function(bV,bT){var bU=typeof bV.getAttributeNode!=="undefined"&&bV.getAttributeNode("id");return bV.nodeType===1&&bU&&bU.nodeValue===bT}}e.removeChild(bR);e=bR=null})();(function(){var e=av.createElement("div");e.appendChild(av.createComment(""));if(e.getElementsByTagName("*").length>0){bE.find.TAG=function(bR,bV){var bU=bV.getElementsByTagName(bR[1]);if(bR[1]==="*"){var bT=[];for(var bS=0;bU[bS];bS++){if(bU[bS].nodeType===1){bT.push(bU[bS])}}bU=bT}return bU}}e.innerHTML="";if(e.firstChild&&typeof e.firstChild.getAttribute!=="undefined"&&e.firstChild.getAttribute("href")!=="#"){bE.attrHandle.href=function(bR){return bR.getAttribute("href",2)}}e=null})();if(av.querySelectorAll){(function(){var e=by,bT=av.createElement("div"),bS="__sizzle__";bT.innerHTML="

            ";if(bT.querySelectorAll&&bT.querySelectorAll(".TEST").length===0){return}by=function(b4,bV,bZ,b3){bV=bV||av;if(!b3&&!by.isXML(bV)){var b2=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b4);if(b2&&(bV.nodeType===1||bV.nodeType===9)){if(b2[1]){return bF(bV.getElementsByTagName(b4),bZ)}else{if(b2[2]&&bE.find.CLASS&&bV.getElementsByClassName){return bF(bV.getElementsByClassName(b2[2]),bZ)}}}if(bV.nodeType===9){if(b4==="body"&&bV.body){return bF([bV.body],bZ)}else{if(b2&&b2[3]){var bY=bV.getElementById(b2[3]);if(bY&&bY.parentNode){if(bY.id===b2[3]){return bF([bY],bZ)}}else{return bF([],bZ)}}}try{return bF(bV.querySelectorAll(b4),bZ)}catch(b0){}}else{if(bV.nodeType===1&&bV.nodeName.toLowerCase()!=="object"){var bW=bV,bX=bV.getAttribute("id"),bU=bX||bS,b6=bV.parentNode,b5=/^\s*[+~]/.test(b4);if(!bX){bV.setAttribute("id",bU)}else{bU=bU.replace(/'/g,"\\$&")}if(b5&&b6){bV=bV.parentNode}try{if(!b5||b6){return bF(bV.querySelectorAll("[id='"+bU+"'] "+b4),bZ)}}catch(b1){}finally{if(!bX){bW.removeAttribute("id")}}}}}return e(b4,bV,bZ,b3)};for(var bR in e){by[bR]=e[bR]}bT=null})()}(function(){var e=av.documentElement,bS=e.matchesSelector||e.mozMatchesSelector||e.webkitMatchesSelector||e.msMatchesSelector;if(bS){var bU=!bS.call(av.createElement("div"),"div"),bR=false;try{bS.call(av.documentElement,"[test!='']:sizzle")}catch(bT){bR=true}by.matchesSelector=function(bW,bY){bY=bY.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!by.isXML(bW)){try{if(bR||!bE.match.PSEUDO.test(bY)&&!/!=/.test(bY)){var bV=bS.call(bW,bY);if(bV||!bU||bW.document&&bW.document.nodeType!==11){return bV}}}catch(bX){}}return by(bY,null,null,[bW]).length>0}}})();(function(){var e=av.createElement("div");e.innerHTML="
            ";if(!e.getElementsByClassName||e.getElementsByClassName("e").length===0){return}e.lastChild.className="e";if(e.getElementsByClassName("e").length===1){return}bE.order.splice(1,0,"CLASS");bE.find.CLASS=function(bR,bS,bT){if(typeof bS.getElementsByClassName!=="undefined"&&!bT){return bS.getElementsByClassName(bR[1])}};e=null})();function bv(bR,bW,bV,bZ,bX,bY){for(var bT=0,bS=bZ.length;bT0){bU=e;break}}}e=e[bR]}bZ[bT]=bU}}}if(av.documentElement.contains){by.contains=function(bR,e){return bR!==e&&(bR.contains?bR.contains(e):true)}}else{if(av.documentElement.compareDocumentPosition){by.contains=function(bR,e){return !!(bR.compareDocumentPosition(e)&16)}}else{by.contains=function(){return false}}}by.isXML=function(e){var bR=(e?e.ownerDocument||e:0).documentElement;return bR?bR.nodeName!=="HTML":false};var bM=function(bS,e,bW){var bV,bX=[],bU="",bY=e.nodeType?[e]:e;while((bV=bE.match.PSEUDO.exec(bS))){bU+=bV[0];bS=bS.replace(bE.match.PSEUDO,"")}bS=bE.relative[bS]?bS+"*":bS;for(var bT=0,bR=bY.length;bT0){for(bB=bA;bB=0:b.filter(e,this).length>0:this.filter(e).length>0)},closest:function(by,bx){var bv=[],bw,e,bz=this[0];if(b.isArray(by)){var bB=1;while(bz&&bz.ownerDocument&&bz!==bx){for(bw=0;bw-1:b.find.matchesSelector(bz,by)){bv.push(bz);break}else{bz=bz.parentNode;if(!bz||!bz.ownerDocument||bz===bx||bz.nodeType===11){break}}}}bv=bv.length>1?b.unique(bv):bv;return this.pushStack(bv,"closest",by)},index:function(e){if(!e){return(this[0]&&this[0].parentNode)?this.prevAll().length:-1}if(typeof e==="string"){return b.inArray(this[0],b(e))}return b.inArray(e.jquery?e[0]:e,this)},add:function(e,bv){var bx=typeof e==="string"?b(e,bv):b.makeArray(e&&e.nodeType?[e]:e),bw=b.merge(this.get(),bx);return this.pushStack(C(bx[0])||C(bw[0])?bw:b.unique(bw))},andSelf:function(){return this.add(this.prevObject)}});function C(e){return !e||!e.parentNode||e.parentNode.nodeType===11}b.each({parent:function(bv){var e=bv.parentNode;return e&&e.nodeType!==11?e:null},parents:function(e){return b.dir(e,"parentNode")},parentsUntil:function(bv,e,bw){return b.dir(bv,"parentNode",bw)},next:function(e){return b.nth(e,2,"nextSibling")},prev:function(e){return b.nth(e,2,"previousSibling")},nextAll:function(e){return b.dir(e,"nextSibling")},prevAll:function(e){return b.dir(e,"previousSibling")},nextUntil:function(bv,e,bw){return b.dir(bv,"nextSibling",bw)},prevUntil:function(bv,e,bw){return b.dir(bv,"previousSibling",bw)},siblings:function(e){return b.sibling(e.parentNode.firstChild,e)},children:function(e){return b.sibling(e.firstChild)},contents:function(e){return b.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:b.makeArray(e.childNodes)}},function(e,bv){b.fn[e]=function(by,bw){var bx=b.map(this,bv,by);if(!ab.test(e)){bw=by}if(bw&&typeof bw==="string"){bx=b.filter(bw,bx)}bx=this.length>1&&!ay[e]?b.unique(bx):bx;if((this.length>1||a9.test(bw))&&aq.test(e)){bx=bx.reverse()}return this.pushStack(bx,e,P.call(arguments).join(","))}});b.extend({filter:function(bw,e,bv){if(bv){bw=":not("+bw+")"}return e.length===1?b.find.matchesSelector(e[0],bw)?[e[0]]:[]:b.find.matches(bw,e)},dir:function(bw,bv,by){var e=[],bx=bw[bv];while(bx&&bx.nodeType!==9&&(by===L||bx.nodeType!==1||!b(bx).is(by))){if(bx.nodeType===1){e.push(bx)}bx=bx[bv]}return e},nth:function(by,e,bw,bx){e=e||1;var bv=0;for(;by;by=by[bw]){if(by.nodeType===1&&++bv===e){break}}return by},sibling:function(bw,bv){var e=[];for(;bw;bw=bw.nextSibling){if(bw.nodeType===1&&bw!==bv){e.push(bw)}}return e}});function aG(bx,bw,e){bw=bw||0;if(b.isFunction(bw)){return b.grep(bx,function(bz,by){var bA=!!bw.call(bz,by,bz);return bA===e})}else{if(bw.nodeType){return b.grep(bx,function(bz,by){return(bz===bw)===e})}else{if(typeof bw==="string"){var bv=b.grep(bx,function(by){return by.nodeType===1});if(bp.test(bw)){return b.filter(bw,bv,!e)}else{bw=b.filter(bw,bv)}}}}return b.grep(bx,function(bz,by){return(b.inArray(bz,bw)>=0)===e})}function a(e){var bw=aR.split("|"),bv=e.createDocumentFragment();if(bv.createElement){while(bw.length){bv.createElement(bw.pop())}}return bv}var aR="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",ag=/ jQuery\d+="(?:\d+|null)"/g,ar=/^\s+/,R=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,d=/<([\w:]+)/,w=/",""],legend:[1,"
            ","
            "],thead:[1,"","
            "],tr:[2,"","
            "],td:[3,"","
            "],col:[2,"","
            "],area:[1,"",""],_default:[0,"",""]},ac=a(av);ax.optgroup=ax.option;ax.tbody=ax.tfoot=ax.colgroup=ax.caption=ax.thead;ax.th=ax.td;if(!b.support.htmlSerialize){ax._default=[1,"div
            ","
            "]}b.fn.extend({text:function(e){if(b.isFunction(e)){return this.each(function(bw){var bv=b(this);bv.text(e.call(this,bw,bv.text()))})}if(typeof e!=="object"&&e!==L){return this.empty().append((this[0]&&this[0].ownerDocument||av).createTextNode(e))}return b.text(this)},wrapAll:function(e){if(b.isFunction(e)){return this.each(function(bw){b(this).wrapAll(e.call(this,bw))})}if(this[0]){var bv=b(e,this[0].ownerDocument).eq(0).clone(true);if(this[0].parentNode){bv.insertBefore(this[0])}bv.map(function(){var bw=this;while(bw.firstChild&&bw.firstChild.nodeType===1){bw=bw.firstChild}return bw}).append(this)}return this},wrapInner:function(e){if(b.isFunction(e)){return this.each(function(bv){b(this).wrapInner(e.call(this,bv))})}return this.each(function(){var bv=b(this),bw=bv.contents();if(bw.length){bw.wrapAll(e)}else{bv.append(e)}})},wrap:function(e){var bv=b.isFunction(e);return this.each(function(bw){b(this).wrapAll(bv?e.call(this,bw):e)})},unwrap:function(){return this.parent().each(function(){if(!b.nodeName(this,"body")){b(this).replaceWith(this.childNodes)}}).end()},append:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1){this.appendChild(e)}})},prepend:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1){this.insertBefore(e,this.firstChild)}})},before:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(bv){this.parentNode.insertBefore(bv,this)})}else{if(arguments.length){var e=b.clean(arguments);e.push.apply(e,this.toArray());return this.pushStack(e,"before",arguments)}}},after:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(bv){this.parentNode.insertBefore(bv,this.nextSibling)})}else{if(arguments.length){var e=this.pushStack(this,"after",arguments);e.push.apply(e,b.clean(arguments));return e}}},remove:function(e,bx){for(var bv=0,bw;(bw=this[bv])!=null;bv++){if(!e||b.filter(e,[bw]).length){if(!bx&&bw.nodeType===1){b.cleanData(bw.getElementsByTagName("*"));b.cleanData([bw])}if(bw.parentNode){bw.parentNode.removeChild(bw)}}}return this},empty:function(){for(var e=0,bv;(bv=this[e])!=null;e++){if(bv.nodeType===1){b.cleanData(bv.getElementsByTagName("*"))}while(bv.firstChild){bv.removeChild(bv.firstChild)}}return this},clone:function(bv,e){bv=bv==null?false:bv;e=e==null?bv:e;return this.map(function(){return b.clone(this,bv,e)})},html:function(bx){if(bx===L){return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(ag,""):null}else{if(typeof bx==="string"&&!ae.test(bx)&&(b.support.leadingWhitespace||!ar.test(bx))&&!ax[(d.exec(bx)||["",""])[1].toLowerCase()]){bx=bx.replace(R,"<$1>");try{for(var bw=0,bv=this.length;bw1&&bw0?this.clone(true):this).get();b(bC[bA])[bv](by);bz=bz.concat(by)}return this.pushStack(bz,e,bC.selector)}}});function bg(e){if(typeof e.getElementsByTagName!=="undefined"){return e.getElementsByTagName("*")}else{if(typeof e.querySelectorAll!=="undefined"){return e.querySelectorAll("*")}else{return[]}}}function az(e){if(e.type==="checkbox"||e.type==="radio"){e.defaultChecked=e.checked}}function E(e){var bv=(e.nodeName||"").toLowerCase();if(bv==="input"){az(e)}else{if(bv!=="script"&&typeof e.getElementsByTagName!=="undefined"){b.grep(e.getElementsByTagName("input"),az)}}}function al(e){var bv=av.createElement("div");ac.appendChild(bv);bv.innerHTML=e.outerHTML;return bv.firstChild}b.extend({clone:function(by,bA,bw){var e,bv,bx,bz=b.support.html5Clone||!ah.test("<"+by.nodeName)?by.cloneNode(true):al(by);if((!b.support.noCloneEvent||!b.support.noCloneChecked)&&(by.nodeType===1||by.nodeType===11)&&!b.isXMLDoc(by)){ai(by,bz);e=bg(by);bv=bg(bz);for(bx=0;e[bx];++bx){if(bv[bx]){ai(e[bx],bv[bx])}}}if(bA){t(by,bz);if(bw){e=bg(by);bv=bg(bz);for(bx=0;e[bx];++bx){t(e[bx],bv[bx])}}}e=bv=null;return bz},clean:function(bw,by,bH,bA){var bF;by=by||av;if(typeof by.createElement==="undefined"){by=by.ownerDocument||by[0]&&by[0].ownerDocument||av}var bI=[],bB;for(var bE=0,bz;(bz=bw[bE])!=null;bE++){if(typeof bz==="number"){bz+=""}if(!bz){continue}if(typeof bz==="string"){if(!W.test(bz)){bz=by.createTextNode(bz)}else{bz=bz.replace(R,"<$1>");var bK=(d.exec(bz)||["",""])[1].toLowerCase(),bx=ax[bK]||ax._default,bD=bx[0],bv=by.createElement("div");if(by===av){ac.appendChild(bv)}else{a(by).appendChild(bv)}bv.innerHTML=bx[1]+bz+bx[2];while(bD--){bv=bv.lastChild}if(!b.support.tbody){var e=w.test(bz),bC=bK==="table"&&!e?bv.firstChild&&bv.firstChild.childNodes:bx[1]===""&&!e?bv.childNodes:[];for(bB=bC.length-1;bB>=0;--bB){if(b.nodeName(bC[bB],"tbody")&&!bC[bB].childNodes.length){bC[bB].parentNode.removeChild(bC[bB])}}}if(!b.support.leadingWhitespace&&ar.test(bz)){bv.insertBefore(by.createTextNode(ar.exec(bz)[0]),bv.firstChild)}bz=bv.childNodes}}var bG;if(!b.support.appendChecked){if(bz[0]&&typeof(bG=bz.length)==="number"){for(bB=0;bB=0){return bx+"px"}}else{return bx}}}});if(!b.support.opacity){b.cssHooks.opacity={get:function(bv,e){return au.test((e&&bv.currentStyle?bv.currentStyle.filter:bv.style.filter)||"")?(parseFloat(RegExp.$1)/100)+"":e?"1":""},set:function(by,bz){var bx=by.style,bv=by.currentStyle,e=b.isNumeric(bz)?"alpha(opacity="+bz*100+")":"",bw=bv&&bv.filter||bx.filter||"";bx.zoom=1;if(bz>=1&&b.trim(bw.replace(ak,""))===""){bx.removeAttribute("filter");if(bv&&!bv.filter){return}}bx.filter=ak.test(bw)?bw.replace(ak,e):bw+" "+e}}}b(function(){if(!b.support.reliableMarginRight){b.cssHooks.marginRight={get:function(bw,bv){var e;b.swap(bw,{display:"inline-block"},function(){if(bv){e=Z(bw,"margin-right","marginRight")}else{e=bw.style.marginRight}});return e}}}});if(av.defaultView&&av.defaultView.getComputedStyle){aI=function(by,bw){var bv,bx,e;bw=bw.replace(z,"-$1").toLowerCase();if((bx=by.ownerDocument.defaultView)&&(e=bx.getComputedStyle(by,null))){bv=e.getPropertyValue(bw);if(bv===""&&!b.contains(by.ownerDocument.documentElement,by)){bv=b.style(by,bw)}}return bv}}if(av.documentElement.currentStyle){aX=function(bz,bw){var bA,e,by,bv=bz.currentStyle&&bz.currentStyle[bw],bx=bz.style;if(bv===null&&bx&&(by=bx[bw])){bv=by}if(!bc.test(bv)&&bn.test(bv)){bA=bx.left;e=bz.runtimeStyle&&bz.runtimeStyle.left;if(e){bz.runtimeStyle.left=bz.currentStyle.left}bx.left=bw==="fontSize"?"1em":(bv||0);bv=bx.pixelLeft+"px";bx.left=bA;if(e){bz.runtimeStyle.left=e}}return bv===""?"auto":bv}}Z=aI||aX;function p(by,bw,bv){var bA=bw==="width"?by.offsetWidth:by.offsetHeight,bz=bw==="width"?an:a1,bx=0,e=bz.length;if(bA>0){if(bv!=="border"){for(;bx)<[^<]*)*<\/script>/gi,q=/^(?:select|textarea)/i,h=/\s+/,br=/([?&])_=[^&]*/,K=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,A=b.fn.load,aa={},r={},aE,s,aV=["*/"]+["*"];try{aE=bl.href}catch(aw){aE=av.createElement("a");aE.href="";aE=aE.href}s=K.exec(aE.toLowerCase())||[];function f(e){return function(by,bA){if(typeof by!=="string"){bA=by;by="*"}if(b.isFunction(bA)){var bx=by.toLowerCase().split(h),bw=0,bz=bx.length,bv,bB,bC;for(;bw=0){var e=bw.slice(by,bw.length);bw=bw.slice(0,by)}var bx="GET";if(bz){if(b.isFunction(bz)){bA=bz;bz=L}else{if(typeof bz==="object"){bz=b.param(bz,b.ajaxSettings.traditional);bx="POST"}}}var bv=this;b.ajax({url:bw,type:bx,dataType:"html",data:bz,complete:function(bC,bB,bD){bD=bC.responseText;if(bC.isResolved()){bC.done(function(bE){bD=bE});bv.html(e?b("
            ").append(bD.replace(a6,"")).find(e):bD)}if(bA){bv.each(bA,[bD,bB,bC])}}});return this},serialize:function(){return b.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?b.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||q.test(this.nodeName)||aZ.test(this.type))}).map(function(e,bv){var bw=b(this).val();return bw==null?null:b.isArray(bw)?b.map(bw,function(by,bx){return{name:bv.name,value:by.replace(bs,"\r\n")}}):{name:bv.name,value:bw.replace(bs,"\r\n")}}).get()}});b.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(e,bv){b.fn[bv]=function(bw){return this.on(bv,bw)}});b.each(["get","post"],function(e,bv){b[bv]=function(bw,by,bz,bx){if(b.isFunction(by)){bx=bx||bz;bz=by;by=L}return b.ajax({type:bv,url:bw,data:by,success:bz,dataType:bx})}});b.extend({getScript:function(e,bv){return b.get(e,L,bv,"script")},getJSON:function(e,bv,bw){return b.get(e,bv,bw,"json")},ajaxSetup:function(bv,e){if(e){am(bv,b.ajaxSettings)}else{e=bv;bv=b.ajaxSettings}am(bv,e);return bv},ajaxSettings:{url:aE,isLocal:aM.test(s[1]),global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":aV},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":bb.String,"text html":true,"text json":b.parseJSON,"text xml":b.parseXML},flatOptions:{context:true,url:true}},ajaxPrefilter:f(aa),ajaxTransport:f(r),ajax:function(bz,bx){if(typeof bz==="object"){bx=bz;bz=L}bx=bx||{};var bD=b.ajaxSetup({},bx),bS=bD.context||bD,bG=bS!==bD&&(bS.nodeType||bS instanceof b)?b(bS):b.event,bR=b.Deferred(),bN=b.Callbacks("once memory"),bB=bD.statusCode||{},bC,bH={},bO={},bQ,by,bL,bE,bI,bA=0,bw,bK,bJ={readyState:0,setRequestHeader:function(bT,bU){if(!bA){var e=bT.toLowerCase();bT=bO[e]=bO[e]||bT;bH[bT]=bU}return this},getAllResponseHeaders:function(){return bA===2?bQ:null},getResponseHeader:function(bT){var e;if(bA===2){if(!by){by={};while((e=aD.exec(bQ))){by[e[1].toLowerCase()]=e[2]}}e=by[bT.toLowerCase()]}return e===L?null:e},overrideMimeType:function(e){if(!bA){bD.mimeType=e}return this},abort:function(e){e=e||"abort";if(bL){bL.abort(e)}bF(0,e);return this}};function bF(bZ,bU,b0,bW){if(bA===2){return}bA=2;if(bE){clearTimeout(bE)}bL=L;bQ=bW||"";bJ.readyState=bZ>0?4:0;var bT,b4,b3,bX=bU,bY=b0?bj(bD,bJ,b0):L,bV,b2;if(bZ>=200&&bZ<300||bZ===304){if(bD.ifModified){if((bV=bJ.getResponseHeader("Last-Modified"))){b.lastModified[bC]=bV}if((b2=bJ.getResponseHeader("Etag"))){b.etag[bC]=b2}}if(bZ===304){bX="notmodified";bT=true}else{try{b4=G(bD,bY);bX="success";bT=true}catch(b1){bX="parsererror";b3=b1}}}else{b3=bX;if(!bX||bZ){bX="error";if(bZ<0){bZ=0}}}bJ.status=bZ;bJ.statusText=""+(bU||bX);if(bT){bR.resolveWith(bS,[b4,bX,bJ])}else{bR.rejectWith(bS,[bJ,bX,b3])}bJ.statusCode(bB);bB=L;if(bw){bG.trigger("ajax"+(bT?"Success":"Error"),[bJ,bD,bT?b4:b3])}bN.fireWith(bS,[bJ,bX]);if(bw){bG.trigger("ajaxComplete",[bJ,bD]);if(!(--b.active)){b.event.trigger("ajaxStop")}}}bR.promise(bJ);bJ.success=bJ.done;bJ.error=bJ.fail;bJ.complete=bN.add;bJ.statusCode=function(bT){if(bT){var e;if(bA<2){for(e in bT){bB[e]=[bB[e],bT[e]]}}else{e=bT[bJ.status];bJ.then(e,e)}}return this};bD.url=((bz||bD.url)+"").replace(bq,"").replace(c,s[1]+"//");bD.dataTypes=b.trim(bD.dataType||"*").toLowerCase().split(h);if(bD.crossDomain==null){bI=K.exec(bD.url.toLowerCase());bD.crossDomain=!!(bI&&(bI[1]!=s[1]||bI[2]!=s[2]||(bI[3]||(bI[1]==="http:"?80:443))!=(s[3]||(s[1]==="http:"?80:443))))}if(bD.data&&bD.processData&&typeof bD.data!=="string"){bD.data=b.param(bD.data,bD.traditional)}aW(aa,bD,bx,bJ);if(bA===2){return false}bw=bD.global;bD.type=bD.type.toUpperCase();bD.hasContent=!aQ.test(bD.type);if(bw&&b.active++===0){b.event.trigger("ajaxStart")}if(!bD.hasContent){if(bD.data){bD.url+=(M.test(bD.url)?"&":"?")+bD.data;delete bD.data}bC=bD.url;if(bD.cache===false){var bv=b.now(),bP=bD.url.replace(br,"$1_="+bv);bD.url=bP+((bP===bD.url)?(M.test(bD.url)?"&":"?")+"_="+bv:"")}}if(bD.data&&bD.hasContent&&bD.contentType!==false||bx.contentType){bJ.setRequestHeader("Content-Type",bD.contentType)}if(bD.ifModified){bC=bC||bD.url;if(b.lastModified[bC]){bJ.setRequestHeader("If-Modified-Since",b.lastModified[bC])}if(b.etag[bC]){bJ.setRequestHeader("If-None-Match",b.etag[bC])}}bJ.setRequestHeader("Accept",bD.dataTypes[0]&&bD.accepts[bD.dataTypes[0]]?bD.accepts[bD.dataTypes[0]]+(bD.dataTypes[0]!=="*"?", "+aV+"; q=0.01":""):bD.accepts["*"]);for(bK in bD.headers){bJ.setRequestHeader(bK,bD.headers[bK])}if(bD.beforeSend&&(bD.beforeSend.call(bS,bJ,bD)===false||bA===2)){bJ.abort();return false}for(bK in {success:1,error:1,complete:1}){bJ[bK](bD[bK])}bL=aW(r,bD,bx,bJ);if(!bL){bF(-1,"No Transport")}else{bJ.readyState=1;if(bw){bG.trigger("ajaxSend",[bJ,bD])}if(bD.async&&bD.timeout>0){bE=setTimeout(function(){bJ.abort("timeout")},bD.timeout)}try{bA=1;bL.send(bH,bF)}catch(bM){if(bA<2){bF(-1,bM)}else{throw bM}}}return bJ},param:function(e,bw){var bv=[],by=function(bz,bA){bA=b.isFunction(bA)?bA():bA;bv[bv.length]=encodeURIComponent(bz)+"="+encodeURIComponent(bA)};if(bw===L){bw=b.ajaxSettings.traditional}if(b.isArray(e)||(e.jquery&&!b.isPlainObject(e))){b.each(e,function(){by(this.name,this.value)})}else{for(var bx in e){v(bx,e[bx],bw,by)}}return bv.join("&").replace(k,"+")}});function v(bw,by,bv,bx){if(b.isArray(by)){b.each(by,function(bA,bz){if(bv||ap.test(bw)){bx(bw,bz)}else{v(bw+"["+(typeof bz==="object"||b.isArray(bz)?bA:"")+"]",bz,bv,bx)}})}else{if(!bv&&by!=null&&typeof by==="object"){for(var e in by){v(bw+"["+e+"]",by[e],bv,bx)}}else{bx(bw,by)}}}b.extend({active:0,lastModified:{},etag:{}});function bj(bD,bC,bz){var bv=bD.contents,bB=bD.dataTypes,bw=bD.responseFields,by,bA,bx,e;for(bA in bw){if(bA in bz){bC[bw[bA]]=bz[bA]}}while(bB[0]==="*"){bB.shift();if(by===L){by=bD.mimeType||bC.getResponseHeader("content-type")}}if(by){for(bA in bv){if(bv[bA]&&bv[bA].test(by)){bB.unshift(bA);break}}}if(bB[0] in bz){bx=bB[0]}else{for(bA in bz){if(!bB[0]||bD.converters[bA+" "+bB[0]]){bx=bA;break}if(!e){e=bA}}bx=bx||e}if(bx){if(bx!==bB[0]){bB.unshift(bx)}return bz[bx]}}function G(bH,bz){if(bH.dataFilter){bz=bH.dataFilter(bz,bH.dataType)}var bD=bH.dataTypes,bG={},bA,bE,bw=bD.length,bB,bC=bD[0],bx,by,bF,bv,e;for(bA=1;bA=bw.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();bw.animatedProperties[this.prop]=true;for(bA in bw.animatedProperties){if(bw.animatedProperties[bA]!==true){e=false}}if(e){if(bw.overflow!=null&&!b.support.shrinkWrapBlocks){b.each(["","X","Y"],function(bC,bD){bz.style["overflow"+bD]=bw.overflow[bC]})}if(bw.hide){b(bz).hide()}if(bw.hide||bw.show){for(bA in bw.animatedProperties){b.style(bz,bA,bw.orig[bA]);b.removeData(bz,"fxshow"+bA,true);b.removeData(bz,"toggle"+bA,true)}}bv=bw.complete;if(bv){bw.complete=false;bv.call(bz)}}return false}else{if(bw.duration==Infinity){this.now=bx}else{bB=bx-this.startTime;this.state=bB/bw.duration;this.pos=b.easing[bw.animatedProperties[this.prop]](this.state,bB,0,1,bw.duration);this.now=this.start+((this.end-this.start)*this.pos)}this.update()}return true}};b.extend(b.fx,{tick:function(){var bw,bv=b.timers,e=0;for(;e").appendTo(e),bw=bv.css("display");bv.remove();if(bw==="none"||bw===""){if(!a8){a8=av.createElement("iframe");a8.frameBorder=a8.width=a8.height=0}e.appendChild(a8);if(!m||!a8.createElement){m=(a8.contentWindow||a8.contentDocument).document;m.write((av.compatMode==="CSS1Compat"?"":"")+"");m.close()}bv=m.createElement(bx);m.body.appendChild(bv);bw=b.css(bv,"display");e.removeChild(a8)}Q[bx]=bw}return Q[bx]}var V=/^t(?:able|d|h)$/i,ad=/^(?:body|html)$/i;if("getBoundingClientRect" in av.documentElement){b.fn.offset=function(bI){var by=this[0],bB;if(bI){return this.each(function(e){b.offset.setOffset(this,bI,e)})}if(!by||!by.ownerDocument){return null}if(by===by.ownerDocument.body){return b.offset.bodyOffset(by)}try{bB=by.getBoundingClientRect()}catch(bF){}var bH=by.ownerDocument,bw=bH.documentElement;if(!bB||!b.contains(bw,by)){return bB?{top:bB.top,left:bB.left}:{top:0,left:0}}var bC=bH.body,bD=aK(bH),bA=bw.clientTop||bC.clientTop||0,bE=bw.clientLeft||bC.clientLeft||0,bv=bD.pageYOffset||b.support.boxModel&&bw.scrollTop||bC.scrollTop,bz=bD.pageXOffset||b.support.boxModel&&bw.scrollLeft||bC.scrollLeft,bG=bB.top+bv-bA,bx=bB.left+bz-bE;return{top:bG,left:bx}}}else{b.fn.offset=function(bF){var bz=this[0];if(bF){return this.each(function(bG){b.offset.setOffset(this,bF,bG)})}if(!bz||!bz.ownerDocument){return null}if(bz===bz.ownerDocument.body){return b.offset.bodyOffset(bz)}var bC,bw=bz.offsetParent,bv=bz,bE=bz.ownerDocument,bx=bE.documentElement,bA=bE.body,bB=bE.defaultView,e=bB?bB.getComputedStyle(bz,null):bz.currentStyle,bD=bz.offsetTop,by=bz.offsetLeft;while((bz=bz.parentNode)&&bz!==bA&&bz!==bx){if(b.support.fixedPosition&&e.position==="fixed"){break}bC=bB?bB.getComputedStyle(bz,null):bz.currentStyle;bD-=bz.scrollTop;by-=bz.scrollLeft;if(bz===bw){bD+=bz.offsetTop;by+=bz.offsetLeft;if(b.support.doesNotAddBorder&&!(b.support.doesAddBorderForTableAndCells&&V.test(bz.nodeName))){bD+=parseFloat(bC.borderTopWidth)||0;by+=parseFloat(bC.borderLeftWidth)||0}bv=bw;bw=bz.offsetParent}if(b.support.subtractsBorderForOverflowNotVisible&&bC.overflow!=="visible"){bD+=parseFloat(bC.borderTopWidth)||0;by+=parseFloat(bC.borderLeftWidth)||0}e=bC}if(e.position==="relative"||e.position==="static"){bD+=bA.offsetTop;by+=bA.offsetLeft}if(b.support.fixedPosition&&e.position==="fixed"){bD+=Math.max(bx.scrollTop,bA.scrollTop);by+=Math.max(bx.scrollLeft,bA.scrollLeft)}return{top:bD,left:by}}}b.offset={bodyOffset:function(e){var bw=e.offsetTop,bv=e.offsetLeft;if(b.support.doesNotIncludeMarginInBodyOffset){bw+=parseFloat(b.css(e,"marginTop"))||0;bv+=parseFloat(b.css(e,"marginLeft"))||0}return{top:bw,left:bv}},setOffset:function(bx,bG,bA){var bB=b.css(bx,"position");if(bB==="static"){bx.style.position="relative"}var bz=b(bx),bv=bz.offset(),e=b.css(bx,"top"),bE=b.css(bx,"left"),bF=(bB==="absolute"||bB==="fixed")&&b.inArray("auto",[e,bE])>-1,bD={},bC={},bw,by;if(bF){bC=bz.position();bw=bC.top;by=bC.left}else{bw=parseFloat(e)||0;by=parseFloat(bE)||0}if(b.isFunction(bG)){bG=bG.call(bx,bA,bv)}if(bG.top!=null){bD.top=(bG.top-bv.top)+bw}if(bG.left!=null){bD.left=(bG.left-bv.left)+by}if("using" in bG){bG.using.call(bx,bD)}else{bz.css(bD)}}};b.fn.extend({position:function(){if(!this[0]){return null}var bw=this[0],bv=this.offsetParent(),bx=this.offset(),e=ad.test(bv[0].nodeName)?{top:0,left:0}:bv.offset();bx.top-=parseFloat(b.css(bw,"marginTop"))||0;bx.left-=parseFloat(b.css(bw,"marginLeft"))||0;e.top+=parseFloat(b.css(bv[0],"borderTopWidth"))||0;e.left+=parseFloat(b.css(bv[0],"borderLeftWidth"))||0;return{top:bx.top-e.top,left:bx.left-e.left}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||av.body;while(e&&(!ad.test(e.nodeName)&&b.css(e,"position")==="static")){e=e.offsetParent}return e})}});b.each(["Left","Top"],function(bv,e){var bw="scroll"+e;b.fn[bw]=function(bz){var bx,by;if(bz===L){bx=this[0];if(!bx){return null}by=aK(bx);return by?("pageXOffset" in by)?by[bv?"pageYOffset":"pageXOffset"]:b.support.boxModel&&by.document.documentElement[bw]||by.document.body[bw]:bx[bw]}return this.each(function(){by=aK(this);if(by){by.scrollTo(!bv?bz:b(by).scrollLeft(),bv?bz:b(by).scrollTop())}else{this[bw]=bz}})}});function aK(e){return b.isWindow(e)?e:e.nodeType===9?e.defaultView||e.parentWindow:false}b.each(["Height","Width"],function(bv,e){var bw=e.toLowerCase();b.fn["inner"+e]=function(){var bx=this[0];return bx?bx.style?parseFloat(b.css(bx,bw,"padding")):this[bw]():null};b.fn["outer"+e]=function(by){var bx=this[0];return bx?bx.style?parseFloat(b.css(bx,bw,by?"margin":"border")):this[bw]():null};b.fn[bw]=function(bz){var bA=this[0];if(!bA){return bz==null?null:this}if(b.isFunction(bz)){return this.each(function(bE){var bD=b(this);bD[bw](bz.call(this,bE,bD[bw]()))})}if(b.isWindow(bA)){var bB=bA.document.documentElement["client"+e],bx=bA.document.body;return bA.document.compatMode==="CSS1Compat"&&bB||bx&&bx["client"+e]||bB}else{if(bA.nodeType===9){return Math.max(bA.documentElement["client"+e],bA.body["scroll"+e],bA.documentElement["scroll"+e],bA.body["offset"+e],bA.documentElement["offset"+e])}else{if(bz===L){var bC=b.css(bA,bw),by=parseFloat(bC);return b.isNumeric(by)?by:bC}else{return this.css(bw,typeof bz==="string"?bz:bz+"px")}}}}});bb.jQuery=bb.$=b;if(typeof define==="function"&&define.amd&&define.amd.jQuery){define("jquery",[],function(){return b})}})(window);/*! - * jQuery UI 1.8.18 - * - * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI - */ -(function(a,d){a.ui=a.ui||{};if(a.ui.version){return}a.extend(a.ui,{version:"1.8.18",keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}});a.fn.extend({propAttr:a.fn.prop||a.fn.attr,_focus:a.fn.focus,focus:function(e,f){return typeof e==="number"?this.each(function(){var g=this;setTimeout(function(){a(g).focus();if(f){f.call(g)}},e)}):this._focus.apply(this,arguments)},scrollParent:function(){var e;if((a.browser.msie&&(/(static|relative)/).test(this.css("position")))||(/absolute/).test(this.css("position"))){e=this.parents().filter(function(){return(/(relative|absolute|fixed)/).test(a.curCSS(this,"position",1))&&(/(auto|scroll)/).test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0)}else{e=this.parents().filter(function(){return(/(auto|scroll)/).test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0)}return(/fixed/).test(this.css("position"))||!e.length?a(document):e},zIndex:function(h){if(h!==d){return this.css("zIndex",h)}if(this.length){var f=a(this[0]),e,g;while(f.length&&f[0]!==document){e=f.css("position");if(e==="absolute"||e==="relative"||e==="fixed"){g=parseInt(f.css("zIndex"),10);if(!isNaN(g)&&g!==0){return g}}f=f.parent()}}return 0},disableSelection:function(){return this.bind((a.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection",function(e){e.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}});a.each(["Width","Height"],function(g,e){var f=e==="Width"?["Left","Right"]:["Top","Bottom"],h=e.toLowerCase(),k={innerWidth:a.fn.innerWidth,innerHeight:a.fn.innerHeight,outerWidth:a.fn.outerWidth,outerHeight:a.fn.outerHeight};function j(m,l,i,n){a.each(f,function(){l-=parseFloat(a.curCSS(m,"padding"+this,true))||0;if(i){l-=parseFloat(a.curCSS(m,"border"+this+"Width",true))||0}if(n){l-=parseFloat(a.curCSS(m,"margin"+this,true))||0}});return l}a.fn["inner"+e]=function(i){if(i===d){return k["inner"+e].call(this)}return this.each(function(){a(this).css(h,j(this,i)+"px")})};a.fn["outer"+e]=function(i,l){if(typeof i!=="number"){return k["outer"+e].call(this,i)}return this.each(function(){a(this).css(h,j(this,i,true,l)+"px")})}});function c(g,e){var j=g.nodeName.toLowerCase();if("area"===j){var i=g.parentNode,h=i.name,f;if(!g.href||!h||i.nodeName.toLowerCase()!=="map"){return false}f=a("img[usemap=#"+h+"]")[0];return !!f&&b(f)}return(/input|select|textarea|button|object/.test(j)?!g.disabled:"a"==j?g.href||e:e)&&b(g)}function b(e){return !a(e).parents().andSelf().filter(function(){return a.curCSS(this,"visibility")==="hidden"||a.expr.filters.hidden(this)}).length}a.extend(a.expr[":"],{data:function(g,f,e){return !!a.data(g,e[3])},focusable:function(e){return c(e,!isNaN(a.attr(e,"tabindex")))},tabbable:function(g){var e=a.attr(g,"tabindex"),f=isNaN(e);return(f||e>=0)&&c(g,!f)}});a(function(){var e=document.body,f=e.appendChild(f=document.createElement("div"));f.offsetHeight;a.extend(f.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0});a.support.minHeight=f.offsetHeight===100;a.support.selectstart="onselectstart" in f;e.removeChild(f).style.display="none"});a.extend(a.ui,{plugin:{add:function(f,g,j){var h=a.ui[f].prototype;for(var e in j){h.plugins[e]=h.plugins[e]||[];h.plugins[e].push([g,j[e]])}},call:function(e,g,f){var j=e.plugins[g];if(!j||!e.element[0].parentNode){return}for(var h=0;h0){return true}h[e]=1;g=(h[e]>0);h[e]=0;return g},isOverAxis:function(f,e,g){return(f>e)&&(f<(e+g))},isOver:function(j,f,i,h,e,g){return a.ui.isOverAxis(j,i,e)&&a.ui.isOverAxis(f,h,g)}})})(jQuery);/*! - * jQuery UI Widget 1.8.18 - * - * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Widget - */ -(function(b,d){if(b.cleanData){var c=b.cleanData;b.cleanData=function(f){for(var g=0,h;(h=f[g])!=null;g++){try{b(h).triggerHandler("remove")}catch(j){}}c(f)}}else{var a=b.fn.remove;b.fn.remove=function(e,f){return this.each(function(){if(!f){if(!e||b.filter(e,[this]).length){b("*",this).add([this]).each(function(){try{b(this).triggerHandler("remove")}catch(g){}})}}return a.call(b(this),e,f)})}}b.widget=function(f,h,e){var g=f.split(".")[0],j;f=f.split(".")[1];j=g+"-"+f;if(!e){e=h;h=b.Widget}b.expr[":"][j]=function(k){return !!b.data(k,f)};b[g]=b[g]||{};b[g][f]=function(k,l){if(arguments.length){this._createWidget(k,l)}};var i=new h();i.options=b.extend(true,{},i.options);b[g][f].prototype=b.extend(true,i,{namespace:g,widgetName:f,widgetEventPrefix:b[g][f].prototype.widgetEventPrefix||f,widgetBaseClass:j},e);b.widget.bridge(f,b[g][f])};b.widget.bridge=function(f,e){b.fn[f]=function(i){var g=typeof i==="string",h=Array.prototype.slice.call(arguments,1),j=this;i=!g&&h.length?b.extend.apply(null,[true,i].concat(h)):i;if(g&&i.charAt(0)==="_"){return j}if(g){this.each(function(){var k=b.data(this,f),l=k&&b.isFunction(k[i])?k[i].apply(k,h):k;if(l!==k&&l!==d){j=l;return false}})}else{this.each(function(){var k=b.data(this,f);if(k){k.option(i||{})._init()}else{b.data(this,f,new e(i,this))}})}return j}};b.Widget=function(e,f){if(arguments.length){this._createWidget(e,f)}};b.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",options:{disabled:false},_createWidget:function(f,g){b.data(g,this.widgetName,this);this.element=b(g);this.options=b.extend(true,{},this.options,this._getCreateOptions(),f);var e=this;this.element.bind("remove."+this.widgetName,function(){e.destroy()});this._create();this._trigger("create");this._init()},_getCreateOptions:function(){return b.metadata&&b.metadata.get(this.element[0])[this.widgetName]},_create:function(){},_init:function(){},destroy:function(){this.element.unbind("."+this.widgetName).removeData(this.widgetName);this.widget().unbind("."+this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass+"-disabled ui-state-disabled")},widget:function(){return this.element},option:function(f,g){var e=f;if(arguments.length===0){return b.extend({},this.options)}if(typeof f==="string"){if(g===d){return this.options[f]}e={};e[f]=g}this._setOptions(e);return this},_setOptions:function(f){var e=this;b.each(f,function(g,h){e._setOption(g,h)});return this},_setOption:function(e,f){this.options[e]=f;if(e==="disabled"){this.widget()[f?"addClass":"removeClass"](this.widgetBaseClass+"-disabled ui-state-disabled").attr("aria-disabled",f)}return this},enable:function(){return this._setOption("disabled",false)},disable:function(){return this._setOption("disabled",true)},_trigger:function(e,f,g){var j,i,h=this.options[e];g=g||{};f=b.Event(f);f.type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase();f.target=this.element[0];i=f.originalEvent;if(i){for(j in i){if(!(j in f)){f[j]=i[j]}}}this.element.trigger(f,g);return !(b.isFunction(h)&&h.call(this.element[0],f,g)===false||f.isDefaultPrevented())}}})(jQuery);/*! - * jQuery UI Mouse 1.8.18 - * - * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Mouse - * - * Depends: - * jquery.ui.widget.js - */ -(function(b,c){var a=false;b(document).mouseup(function(d){a=false});b.widget("ui.mouse",{options:{cancel:":input,option",distance:1,delay:0},_mouseInit:function(){var d=this;this.element.bind("mousedown."+this.widgetName,function(e){return d._mouseDown(e)}).bind("click."+this.widgetName,function(e){if(true===b.data(e.target,d.widgetName+".preventClickEvent")){b.removeData(e.target,d.widgetName+".preventClickEvent");e.stopImmediatePropagation();return false}});this.started=false},_mouseDestroy:function(){this.element.unbind("."+this.widgetName)},_mouseDown:function(f){if(a){return}(this._mouseStarted&&this._mouseUp(f));this._mouseDownEvent=f;var e=this,g=(f.which==1),d=(typeof this.options.cancel=="string"&&f.target.nodeName?b(f.target).closest(this.options.cancel).length:false);if(!g||d||!this._mouseCapture(f)){return true}this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet){this._mouseDelayTimer=setTimeout(function(){e.mouseDelayMet=true},this.options.delay)}if(this._mouseDistanceMet(f)&&this._mouseDelayMet(f)){this._mouseStarted=(this._mouseStart(f)!==false);if(!this._mouseStarted){f.preventDefault();return true}}if(true===b.data(f.target,this.widgetName+".preventClickEvent")){b.removeData(f.target,this.widgetName+".preventClickEvent")}this._mouseMoveDelegate=function(h){return e._mouseMove(h)};this._mouseUpDelegate=function(h){return e._mouseUp(h)};b(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);f.preventDefault();a=true;return true},_mouseMove:function(d){if(b.browser.msie&&!(document.documentMode>=9)&&!d.button){return this._mouseUp(d)}if(this._mouseStarted){this._mouseDrag(d);return d.preventDefault()}if(this._mouseDistanceMet(d)&&this._mouseDelayMet(d)){this._mouseStarted=(this._mouseStart(this._mouseDownEvent,d)!==false);(this._mouseStarted?this._mouseDrag(d):this._mouseUp(d))}return !this._mouseStarted},_mouseUp:function(d){b(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=false;if(d.target==this._mouseDownEvent.target){b.data(d.target,this.widgetName+".preventClickEvent",true)}this._mouseStop(d)}return false},_mouseDistanceMet:function(d){return(Math.max(Math.abs(this._mouseDownEvent.pageX-d.pageX),Math.abs(this._mouseDownEvent.pageY-d.pageY))>=this.options.distance)},_mouseDelayMet:function(d){return this.mouseDelayMet},_mouseStart:function(d){},_mouseDrag:function(d){},_mouseStop:function(d){},_mouseCapture:function(d){return true}})})(jQuery);(function(c,d){c.widget("ui.resizable",c.ui.mouse,{widgetEventPrefix:"resize",options:{alsoResize:false,animate:false,animateDuration:"slow",animateEasing:"swing",aspectRatio:false,autoHide:false,containment:false,ghost:false,grid:false,handles:"e,s,se",helper:false,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1000},_create:function(){var f=this,k=this.options;this.element.addClass("ui-resizable");c.extend(this,{_aspectRatio:!!(k.aspectRatio),aspectRatio:k.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:k.helper||k.ghost||k.animate?k.helper||"ui-resizable-helper":null});if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)){this.element.wrap(c('
            ').css({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("resizable",this.element.data("resizable"));this.elementIsWrapper=true;this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")});this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom: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({margin:this.originalElement.css("margin")});this._proportionallyResize()}this.handles=k.handles||(!c(".ui-resizable-handle",this.element).length?"e,s,se":{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"});if(this.handles.constructor==String){if(this.handles=="all"){this.handles="n,e,s,w,se,sw,ne,nw"}var l=this.handles.split(",");this.handles={};for(var g=0;g
            ');if(/sw|se|ne|nw/.test(j)){h.css({zIndex:++k.zIndex})}if("se"==j){h.addClass("ui-icon ui-icon-gripsmall-diagonal-se")}this.handles[j]=".ui-resizable-"+j;this.element.append(h)}}this._renderAxis=function(q){q=q||this.element;for(var n in this.handles){if(this.handles[n].constructor==String){this.handles[n]=c(this.handles[n],this.element).show()}if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var o=c(this.handles[n],this.element),p=0;p=/sw|ne|nw|se|n|s/.test(n)?o.outerHeight():o.outerWidth();var m=["padding",/ne|nw|n/.test(n)?"Top":/se|sw|s/.test(n)?"Bottom":/^e$/.test(n)?"Right":"Left"].join("");q.css(m,p);this._proportionallyResize()}if(!c(this.handles[n]).length){continue}}};this._renderAxis(this.element);this._handles=c(".ui-resizable-handle",this.element).disableSelection();this._handles.mouseover(function(){if(!f.resizing){if(this.className){var i=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)}f.axis=i&&i[1]?i[1]:"se"}});if(k.autoHide){this._handles.hide();c(this.element).addClass("ui-resizable-autohide").hover(function(){if(k.disabled){return}c(this).removeClass("ui-resizable-autohide");f._handles.show()},function(){if(k.disabled){return}if(!f.resizing){c(this).addClass("ui-resizable-autohide");f._handles.hide()}})}this._mouseInit()},destroy:function(){this._mouseDestroy();var e=function(g){c(g).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};if(this.elementIsWrapper){e(this.element);var f=this.element;f.after(this.originalElement.css({position:f.css("position"),width:f.outerWidth(),height:f.outerHeight(),top:f.css("top"),left:f.css("left")})).remove()}this.originalElement.css("resize",this.originalResizeStyle);e(this.originalElement);return this},_mouseCapture:function(f){var g=false;for(var e in this.handles){if(c(this.handles[e])[0]==f.target){g=true}}return !this.options.disabled&&g},_mouseStart:function(g){var j=this.options,f=this.element.position(),e=this.element;this.resizing=true;this.documentScroll={top:c(document).scrollTop(),left:c(document).scrollLeft()};if(e.is(".ui-draggable")||(/absolute/).test(e.css("position"))){e.css({position:"absolute",top:f.top,left:f.left})}this._renderProxy();var k=b(this.helper.css("left")),h=b(this.helper.css("top"));if(j.containment){k+=c(j.containment).scrollLeft()||0;h+=c(j.containment).scrollTop()||0}this.offset=this.helper.offset();this.position={left:k,top:h};this.size=this._helper?{width:e.outerWidth(),height:e.outerHeight()}:{width:e.width(),height:e.height()};this.originalSize=this._helper?{width:e.outerWidth(),height:e.outerHeight()}:{width:e.width(),height:e.height()};this.originalPosition={left:k,top:h};this.sizeDiff={width:e.outerWidth()-e.width(),height:e.outerHeight()-e.height()};this.originalMousePosition={left:g.pageX,top:g.pageY};this.aspectRatio=(typeof j.aspectRatio=="number")?j.aspectRatio:((this.originalSize.width/this.originalSize.height)||1);var i=c(".ui-resizable-"+this.axis).css("cursor");c("body").css("cursor",i=="auto"?this.axis+"-resize":i);e.addClass("ui-resizable-resizing");this._propagate("start",g);return true},_mouseDrag:function(e){var h=this.helper,g=this.options,m={},q=this,j=this.originalMousePosition,n=this.axis;var r=(e.pageX-j.left)||0,p=(e.pageY-j.top)||0;var i=this._change[n];if(!i){return false}var l=i.apply(this,[e,r,p]),k=c.browser.msie&&c.browser.version<7,f=this.sizeDiff;this._updateVirtualBoundaries(e.shiftKey);if(this._aspectRatio||e.shiftKey){l=this._updateRatio(l,e)}l=this._respectSize(l,e);this._propagate("resize",e);h.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"});if(!this._helper&&this._proportionallyResizeElements.length){this._proportionallyResize()}this._updateCache(l);this._trigger("resize",e,this.ui());return false},_mouseStop:function(h){this.resizing=false;var i=this.options,m=this;if(this._helper){var g=this._proportionallyResizeElements,e=g.length&&(/textarea/i).test(g[0].nodeName),f=e&&c.ui.hasScroll(g[0],"left")?0:m.sizeDiff.height,k=e?0:m.sizeDiff.width;var n={width:(m.helper.width()-k),height:(m.helper.height()-f)},j=(parseInt(m.element.css("left"),10)+(m.position.left-m.originalPosition.left))||null,l=(parseInt(m.element.css("top"),10)+(m.position.top-m.originalPosition.top))||null;if(!i.animate){this.element.css(c.extend(n,{top:l,left:j}))}m.helper.height(m.size.height);m.helper.width(m.size.width);if(this._helper&&!i.animate){this._proportionallyResize()}}c("body").css("cursor","auto");this.element.removeClass("ui-resizable-resizing");this._propagate("stop",h);if(this._helper){this.helper.remove()}return false},_updateVirtualBoundaries:function(g){var j=this.options,i,h,f,k,e;e={minWidth:a(j.minWidth)?j.minWidth:0,maxWidth:a(j.maxWidth)?j.maxWidth:Infinity,minHeight:a(j.minHeight)?j.minHeight:0,maxHeight:a(j.maxHeight)?j.maxHeight:Infinity};if(this._aspectRatio||g){i=e.minHeight*this.aspectRatio;f=e.minWidth/this.aspectRatio;h=e.maxHeight*this.aspectRatio;k=e.maxWidth/this.aspectRatio;if(i>e.minWidth){e.minWidth=i}if(f>e.minHeight){e.minHeight=f}if(hl.width),s=a(l.height)&&i.minHeight&&(i.minHeight>l.height);if(h){l.width=i.minWidth}if(s){l.height=i.minHeight}if(t){l.width=i.maxWidth}if(m){l.height=i.maxHeight}var f=this.originalPosition.left+this.originalSize.width,p=this.position.top+this.size.height;var k=/sw|nw|w/.test(q),e=/nw|ne|n/.test(q);if(h&&k){l.left=f-i.minWidth}if(t&&k){l.left=f-i.maxWidth}if(s&&e){l.top=p-i.minHeight}if(m&&e){l.top=p-i.maxHeight}var n=!l.width&&!l.height;if(n&&!l.left&&l.top){l.top=null}else{if(n&&!l.top&&l.left){l.left=null}}return l},_proportionallyResize:function(){var k=this.options;if(!this._proportionallyResizeElements.length){return}var g=this.helper||this.element;for(var f=0;f');var e=c.browser.msie&&c.browser.version<7,g=(e?1:0),h=(e?2:-1);this.helper.addClass(this._helper).css({width:this.element.outerWidth()+h,height:this.element.outerHeight()+h,position:"absolute",left:this.elementOffset.left-g+"px",top:this.elementOffset.top-g+"px",zIndex:++i.zIndex});this.helper.appendTo("body").disableSelection()}else{this.helper=this.element}},_change:{e:function(g,f,e){return{width:this.originalSize.width+f}},w:function(h,f,e){var j=this.options,g=this.originalSize,i=this.originalPosition;return{left:i.left+f,width:g.width-f}},n:function(h,f,e){var j=this.options,g=this.originalSize,i=this.originalPosition;return{top:i.top+e,height:g.height-e}},s:function(g,f,e){return{height:this.originalSize.height+e}},se:function(g,f,e){return c.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[g,f,e]))},sw:function(g,f,e){return c.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[g,f,e]))},ne:function(g,f,e){return c.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[g,f,e]))},nw:function(g,f,e){return c.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[g,f,e]))}},_propagate:function(f,e){c.ui.plugin.call(this,f,[e,this.ui()]);(f!="resize"&&this._trigger(f,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}}});c.extend(c.ui.resizable,{version:"1.8.18"});c.ui.plugin.add("resizable","alsoResize",{start:function(f,g){var e=c(this).data("resizable"),i=e.options;var h=function(j){c(j).each(function(){var k=c(this);k.data("resizable-alsoresize",{width:parseInt(k.width(),10),height:parseInt(k.height(),10),left:parseInt(k.css("left"),10),top:parseInt(k.css("top"),10)})})};if(typeof(i.alsoResize)=="object"&&!i.alsoResize.parentNode){if(i.alsoResize.length){i.alsoResize=i.alsoResize[0];h(i.alsoResize)}else{c.each(i.alsoResize,function(j){h(j)})}}else{h(i.alsoResize)}},resize:function(g,i){var f=c(this).data("resizable"),j=f.options,h=f.originalSize,l=f.originalPosition;var k={height:(f.size.height-h.height)||0,width:(f.size.width-h.width)||0,top:(f.position.top-l.top)||0,left:(f.position.left-l.left)||0},e=function(m,n){c(m).each(function(){var q=c(this),r=c(this).data("resizable-alsoresize"),p={},o=n&&n.length?n:q.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];c.each(o,function(s,u){var t=(r[u]||0)+(k[u]||0);if(t&&t>=0){p[u]=t||null}});q.css(p)})};if(typeof(j.alsoResize)=="object"&&!j.alsoResize.nodeType){c.each(j.alsoResize,function(m,n){e(m,n)})}else{e(j.alsoResize)}},stop:function(e,f){c(this).removeData("resizable-alsoresize")}});c.ui.plugin.add("resizable","animate",{stop:function(i,n){var p=c(this).data("resizable"),j=p.options;var h=p._proportionallyResizeElements,e=h.length&&(/textarea/i).test(h[0].nodeName),f=e&&c.ui.hasScroll(h[0],"left")?0:p.sizeDiff.height,l=e?0:p.sizeDiff.width;var g={width:(p.size.width-l),height:(p.size.height-f)},k=(parseInt(p.element.css("left"),10)+(p.position.left-p.originalPosition.left))||null,m=(parseInt(p.element.css("top"),10)+(p.position.top-p.originalPosition.top))||null;p.element.animate(c.extend(g,m&&k?{top:m,left:k}:{}),{duration:j.animateDuration,easing:j.animateEasing,step:function(){var o={width:parseInt(p.element.css("width"),10),height:parseInt(p.element.css("height"),10),top:parseInt(p.element.css("top"),10),left:parseInt(p.element.css("left"),10)};if(h&&h.length){c(h[0]).css({width:o.width,height:o.height})}p._updateCache(o);p._propagate("resize",i)}})}});c.ui.plugin.add("resizable","containment",{start:function(f,r){var t=c(this).data("resizable"),j=t.options,l=t.element;var g=j.containment,k=(g instanceof c)?g.get(0):(/parent/.test(g))?l.parent().get(0):g;if(!k){return}t.containerElement=c(k);if(/document/.test(g)||g==document){t.containerOffset={left:0,top:0};t.containerPosition={left:0,top:0};t.parentData={element:c(document),left:0,top:0,width:c(document).width(),height:c(document).height()||document.body.parentNode.scrollHeight}}else{var n=c(k),i=[];c(["Top","Right","Left","Bottom"]).each(function(p,o){i[p]=b(n.css("padding"+o))});t.containerOffset=n.offset();t.containerPosition=n.position();t.containerSize={height:(n.innerHeight()-i[3]),width:(n.innerWidth()-i[1])};var q=t.containerOffset,e=t.containerSize.height,m=t.containerSize.width,h=(c.ui.hasScroll(k,"left")?k.scrollWidth:m),s=(c.ui.hasScroll(k)?k.scrollHeight:e);t.parentData={element:k,left:q.left,top:q.top,width:h,height:s}}},resize:function(g,q){var t=c(this).data("resizable"),i=t.options,f=t.containerSize,p=t.containerOffset,m=t.size,n=t.position,r=t._aspectRatio||g.shiftKey,e={top:0,left:0},h=t.containerElement;if(h[0]!=document&&(/static/).test(h.css("position"))){e=p}if(n.left<(t._helper?p.left:0)){t.size.width=t.size.width+(t._helper?(t.position.left-p.left):(t.position.left-e.left));if(r){t.size.height=t.size.width/i.aspectRatio}t.position.left=i.helper?p.left:0}if(n.top<(t._helper?p.top:0)){t.size.height=t.size.height+(t._helper?(t.position.top-p.top):t.position.top);if(r){t.size.width=t.size.height*i.aspectRatio}t.position.top=t._helper?p.top:0}t.offset.left=t.parentData.left+t.position.left;t.offset.top=t.parentData.top+t.position.top;var l=Math.abs((t._helper?t.offset.left-e.left:(t.offset.left-e.left))+t.sizeDiff.width),s=Math.abs((t._helper?t.offset.top-e.top:(t.offset.top-p.top))+t.sizeDiff.height);var k=t.containerElement.get(0)==t.element.parent().get(0),j=/relative|absolute/.test(t.containerElement.css("position"));if(k&&j){l-=t.parentData.left}if(l+t.size.width>=t.parentData.width){t.size.width=t.parentData.width-l;if(r){t.size.height=t.size.width/t.aspectRatio}}if(s+t.size.height>=t.parentData.height){t.size.height=t.parentData.height-s;if(r){t.size.width=t.size.height*t.aspectRatio}}},stop:function(f,n){var q=c(this).data("resizable"),g=q.options,l=q.position,m=q.containerOffset,e=q.containerPosition,i=q.containerElement;var j=c(q.helper),r=j.offset(),p=j.outerWidth()-q.sizeDiff.width,k=j.outerHeight()-q.sizeDiff.height;if(q._helper&&!g.animate&&(/relative/).test(i.css("position"))){c(this).css({left:r.left-e.left-m.left,width:p,height:k})}if(q._helper&&!g.animate&&(/static/).test(i.css("position"))){c(this).css({left:r.left-e.left-m.left,width:p,height:k})}}});c.ui.plugin.add("resizable","ghost",{start:function(g,h){var e=c(this).data("resizable"),i=e.options,f=e.size;e.ghost=e.originalElement.clone();e.ghost.css({opacity:0.25,display:"block",position:"relative",height:f.height,width:f.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof i.ghost=="string"?i.ghost:"");e.ghost.appendTo(e.helper)},resize:function(f,g){var e=c(this).data("resizable"),h=e.options;if(e.ghost){e.ghost.css({position:"relative",height:e.size.height,width:e.size.width})}},stop:function(f,g){var e=c(this).data("resizable"),h=e.options;if(e.ghost&&e.helper){e.helper.get(0).removeChild(e.ghost.get(0))}}});c.ui.plugin.add("resizable","grid",{resize:function(e,m){var p=c(this).data("resizable"),h=p.options,k=p.size,i=p.originalSize,j=p.originalPosition,n=p.axis,l=h._aspectRatio||e.shiftKey;h.grid=typeof h.grid=="number"?[h.grid,h.grid]:h.grid;var g=Math.round((k.width-i.width)/(h.grid[0]||1))*(h.grid[0]||1),f=Math.round((k.height-i.height)/(h.grid[1]||1))*(h.grid[1]||1);if(/^(se|s|e)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f}else{if(/^(ne)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f;p.position.top=j.top-f}else{if(/^(sw)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f;p.position.left=j.left-g}else{p.size.width=i.width+g;p.size.height=i.height+f;p.position.top=j.top-f;p.position.left=j.left-g}}}}});var b=function(e){return parseInt(e,10)||0};var a=function(e){return !isNaN(parseInt(e,10))}})(jQuery);/*! - * jQuery hashchange event - v1.3 - 7/21/2010 - * http://benalman.com/projects/jquery-hashchange-plugin/ - * - * Copyright (c) 2010 "Cowboy" Ben Alman - * Dual licensed under the MIT and GPL licenses. - * http://benalman.com/about/license/ - */ -(function($,e,b){var c="hashchange",h=document,f,g=$.event.special,i=h.documentMode,d="on"+c in e&&(i===b||i>7);function a(j){j=j||location.href;return"#"+j.replace(/^[^#]*#?(.*)$/,"$1")}$.fn[c]=function(j){return j?this.bind(c,j):this.trigger(c)};$.fn[c].delay=50;g[c]=$.extend(g[c],{setup:function(){if(d){return false}$(f.start)},teardown:function(){if(d){return false}$(f.stop)}});f=(function(){var j={},p,m=a(),k=function(q){return q},l=k,o=k;j.start=function(){p||n()};j.stop=function(){p&&clearTimeout(p);p=b};function n(){var r=a(),q=o(m);if(r!==m){l(m=r,q);$(e).trigger(c)}else{if(q!==m){location.href=location.href.replace(/#.*/,"")+q}}p=setTimeout(n,$.fn[c].delay)}$.browser.msie&&!d&&(function(){var q,r;j.start=function(){if(!q){r=$.fn[c].src;r=r&&r+a();q=$('