diff options
Diffstat (limited to 'project2/basics/tests/validDateCheck.cpp')
-rw-r--r-- | project2/basics/tests/validDateCheck.cpp | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/project2/basics/tests/validDateCheck.cpp b/project2/basics/tests/validDateCheck.cpp new file mode 100644 index 0000000..8dffd9d --- /dev/null +++ b/project2/basics/tests/validDateCheck.cpp @@ -0,0 +1,66 @@ +#include <pch.hpp> +#include <logger.h> +#include <scriptLoader.h> +#include <commonObjects.h> +#include <test.h> +#include <variables.h> +#include <scripts.h> + +class ValidDateTest : public Test { + public: + ValidDateTest(ScriptNodePtr p) : + SourceObject(p), + Test(p), + applyTo(p, "apply-to"), + format(p, "format"), + warnLev(p->value("warn", true).as<bool>() ? LOG_WARNING : LOG_INFO) + { + } + + ~ValidDateTest() + { + } + + bool + passes() const + { + struct tm tm, ftm; + memset(&tm, 0, sizeof(struct tm)); + mktime(&tm); + const char * at = applyTo(); + const char * f = format(); + const char * s = strptime(at, f, &tm); + if (!s || *s) { + Logger()->messagef(warnLev, "%s: check failed (parse) for '%s' against '%s'", + __PRETTY_FUNCTION__, at, f); + return false; + } + ftm = tm; + if (mktime(&ftm) == -1) { + Logger()->messagef(warnLev, "%s: check failed (normalise) for '%s' against '%s'", + __PRETTY_FUNCTION__, at, f); + return false; + } + if (tm.tm_year != ftm.tm_year || + tm.tm_mon != ftm.tm_mon || + tm.tm_mday != ftm.tm_mday || + tm.tm_hour != (ftm.tm_hour - ftm.tm_isdst) || + tm.tm_min != ftm.tm_min || + tm.tm_sec != ftm.tm_sec) { + Logger()->messagef(LOG_INFO, "tm: %d %d %d %d %d %d", + tm.tm_year, tm.tm_mon, tm.tm_mday, tm.tm_hour, tm.tm_min, tm.tm_sec); + Logger()->messagef(LOG_INFO, "ftm: %d %d %d %d %d %d", + ftm.tm_year, ftm.tm_mon, ftm.tm_mday, ftm.tm_hour, ftm.tm_min, ftm.tm_sec); + Logger()->messagef(warnLev, "%s: check failed (verify) for '%s' against '%s'", + __PRETTY_FUNCTION__, at, f); + return false; + } + return true; + } + Variable applyTo; + Variable format; + int warnLev; +}; + +DECLARE_LOADER("validdatetest", ValidDateTest); + |