summaryrefslogtreecommitdiff
path: root/project2/basics/tests/validDateCheck.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'project2/basics/tests/validDateCheck.cpp')
-rw-r--r--project2/basics/tests/validDateCheck.cpp66
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);
+