summaryrefslogtreecommitdiff
path: root/ext/date/tests/examine_diff.inc
diff options
context:
space:
mode:
authorLorry Tar Creator <lorry-tar-importer@baserock.org>2013-03-14 05:42:27 +0000
committer <>2013-04-03 16:25:08 +0000
commitc4dd7a1a684490673e25aaf4fabec5df138854c4 (patch)
tree4d57c44caae4480efff02b90b9be86f44bf25409 /ext/date/tests/examine_diff.inc
downloadphp2-master.tar.gz
Imported from /home/lorry/working-area/delta_php2/php-5.4.13.tar.bz2.HEADphp-5.4.13master
Diffstat (limited to 'ext/date/tests/examine_diff.inc')
-rw-r--r--ext/date/tests/examine_diff.inc79
1 files changed, 79 insertions, 0 deletions
diff --git a/ext/date/tests/examine_diff.inc b/ext/date/tests/examine_diff.inc
new file mode 100644
index 0000000..c3dcba9
--- /dev/null
+++ b/ext/date/tests/examine_diff.inc
@@ -0,0 +1,79 @@
+<?php
+
+/**
+ * Helper for the DateTime diff/days/math tests
+ *
+ * @author Daniel Convissor <danielc@analysisandsolutions.com>
+ */
+
+/**#@+
+ * Which test segments should be displayed?
+ */
+define('PHPT_DATETIME_SHOW_DIFF', 1);
+define('PHPT_DATETIME_SHOW_DAYS', 2);
+define('PHPT_DATETIME_SHOW_ADD', 3);
+define('PHPT_DATETIME_SHOW_SUB', 4);
+/**#@-*/
+
+/**
+ * Provides a consistent interface for executing date diff/add/sub tests
+ *
+ * @param string|DateTime $end_date the end date in YYYY-MM-DD format
+ * (can include time HH:MM:SS) or a DateTime object
+ * @param string|DateTime $start_date the start date in YYYY-MM-DD format
+ * (can include time HH:MM:SS) or a DateTime object
+ * @param string $expect_spec the expected result of the tests, in the
+ * special interval specification used for this test suite.
+ * This spec includes a "+" or "-" after the "P" in order to
+ * indicate which direction to go.
+ * @param int $expect_days the number of days to compare with the
+ * interval's "days" property
+ * @param bool $absolute should the result always be a positive number?
+ *
+ * @return void
+ */
+function examine_diff($end_date, $start_date, $expect_spec, $expect_days, $absolute = false) {
+ if (is_string($start_date)) {
+ $start = new DateTime($start_date);
+ } else {
+ $start = $start_date;
+ }
+ $start_date = $start->format('Y-m-d H:i:s T');
+
+ if (is_string($end_date)) {
+ $end = new DateTime($end_date);
+ } else {
+ $end = $end_date;
+ }
+ $end_date = $end->format('Y-m-d H:i:s T');
+
+ $expect_interval = new DateInterval('P' . substr($expect_spec, 2));
+ if (substr($expect_spec, 1, 1) == '-') {
+ $expect_interval->invert = true;
+ }
+
+ if (PHPT_DATETIME_SHOW == PHPT_DATETIME_SHOW_DIFF) {
+ $result_interval = $start->diff($end, $absolute);
+ $result_spec = $result_interval->format('P%R%yY%mM%dDT%hH%iM%sS');
+ echo "DIFF: $end_date - $start_date = **$result_spec**\n";
+ // echo "DIFF: $end_date - $start_date = **$expect_spec**\n";
+ }
+ if (PHPT_DATETIME_SHOW == PHPT_DATETIME_SHOW_DAYS) {
+ $result_interval = $start->diff($end, $absolute);
+ $result_days = $result_interval->format('%a');
+ echo "DAYS: **$result_days**\n";
+ // echo "DAYS: **$expect_days**\n";
+ }
+ if (PHPT_DATETIME_SHOW == PHPT_DATETIME_SHOW_ADD) {
+ $start->add($expect_interval);
+ $result_end_date = $start->format('Y-m-d H:i:s T');
+ echo "ADD: $start_date + $expect_spec = **$result_end_date**\n";
+ // echo "ADD: $start_date + $expect_spec = **$end_date**\n";
+ }
+ if (PHPT_DATETIME_SHOW == PHPT_DATETIME_SHOW_SUB) {
+ $end->sub($expect_interval);
+ $result_start_date = $end->format('Y-m-d H:i:s T');
+ echo "SUB: $end_date - $expect_spec = **$result_start_date**\n";
+ // echo "SUB: $end_date - $expect_spec = **$start_date**\n";
+ }
+}